Apache Commons CLI লাইব্রেরি দিয়ে আপনি multi-level sub-command structures তৈরি করতে পারেন, যেখানে একাধিক সাব-কমান্ডের মধ্যে সম্পর্ক থাকে এবং প্রতিটি সাব-কমান্ডের নিজস্ব অপশন বা আর্গুমেন্ট থাকতে পারে। এই ধরণের কাঠামো ব্যবহার করে আপনি কমপ্লেক্স কমান্ড-লাইন অ্যাপ্লিকেশন তৈরি করতে পারেন, যেখানে বিভিন্ন স্তরের সাব-কমান্ড থাকে।
ধরা যাক, আমরা একটি অ্যাপ্লিকেশন তৈরি করতে চাই যা server, user, এবং database এর মতো সাব-কমান্ডে বিভক্ত, যেখানে প্রতিটি সাব-কমান্ডের নিজস্ব অপশন থাকতে পারে। এটি একটি multi-level sub-command structure তৈরি করার একটি উদাহরণ।
১. Maven Dependency:
প্রথমে, আপনার pom.xml ফাইলে Apache Commons CLI ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
২. Multi-level Sub-command Structure Example
এই উদাহরণে, আমরা একটি অ্যাপ্লিকেশন তৈরি করবো যেখানে ৩টি সাব-কমান্ড রয়েছে:
- server: সার্ভার সম্পর্কিত কমান্ডগুলির জন্য।
- user: ইউজার সম্পর্কিত কমান্ডগুলির জন্য।
- database: ডাটাবেস সম্পর্কিত কমান্ডগুলির জন্য।
এখন, প্রতিটি সাব-কমান্ডের জন্য আলাদা অপশন থাকবে।
উদাহরণ কোড:
import org.apache.commons.cli.*;
public class MultiLevelSubCommandExample {
public static void main(String[] args) {
// গ্লোবাল অপশন কনফিগারেশন
Options globalOptions = new Options();
// server সাব-কমান্ডের অপশন
Options serverOptions = new Options();
Option serverPort = new Option("p", "port", true, "Server port");
serverPort.setRequired(true);
serverOptions.addOption(serverPort);
// user সাব-কমান্ডের অপশন
Options userOptions = new Options();
Option userName = new Option("n", "name", true, "User name");
userName.setRequired(true);
userOptions.addOption(userName);
// database সাব-কমান্ডের অপশন
Options dbOptions = new Options();
Option dbHost = new Option("h", "host", true, "Database host");
dbHost.setRequired(true);
dbOptions.addOption(dbHost);
// কমান্ড-লাইন পার্সার এবং কমান্ড ইনপুট
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
if (args.length == 0) {
throw new ParseException("No sub-command provided");
}
// প্রথম আর্গুমেন্ট হিসাবে সাব-কমান্ড চেক করা
String subCommand = args[0];
switch (subCommand) {
case "server":
// "server" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(serverOptions, args);
System.out.println("Starting server on port: " + cmd.getOptionValue("port"));
break;
case "user":
// "user" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(userOptions, args);
System.out.println("User name: " + cmd.getOptionValue("name"));
break;
case "database":
// "database" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(dbOptions, args);
System.out.println("Connecting to database host: " + cmd.getOptionValue("host"));
break;
default:
System.out.println("Invalid sub-command: " + subCommand);
break;
}
} catch (ParseException e) {
// ত্রুটি হলে সাহায্য মেসেজ প্রদর্শন
System.err.println("Error: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("MultiLevelSubCommandExample", globalOptions);
}
}
}
ব্যাখ্যা:
- Multiple Sub-commands: এখানে তিনটি সাব-কমান্ড (
server,user, এবংdatabase) তৈরি করা হয়েছে। প্রতিটি সাব-কমান্ডের জন্য পৃথক অপশন এবং আর্গুমেন্ট আছে।serverকমান্ডের জন্য একটিportঅপশন।userকমান্ডের জন্য একটিnameঅপশন।databaseকমান্ডের জন্য একটিhostঅপশন।
- Option Handling: প্রতিটি সাব-কমান্ডের জন্য আলাদা
Optionsঅবজেক্ট ব্যবহার করা হয়েছে। এটি প্রতিটি সাব-কমান্ডের জন্য প্রয়োজনীয় অপশনগুলিকে সংজ্ঞায়িত করে। - Sub-command Parsing: প্রথমে কমান্ড-লাইনের প্রথম আর্গুমেন্ট হিসাবে সাব-কমান্ড (যেমন
server,user,database) চেক করা হয়। তারপর সেই সাব-কমান্ডের জন্য নির্দিষ্ট অপশনগুলি পার্স করা হয়। - HelpFormatter: যদি কোনও ত্রুটি ঘটে বা ইউজার ভুল সাব-কমান্ড প্রদান করেন, তবে সাহায্য মেসেজ দেখানোর জন্য
HelpFormatterব্যবহার করা হয়েছে।
৩. আউটপুট উদাহরণ:
- server সাব-কমান্ড:
java MultiLevelSubCommandExample server -p 8080
আউটপুট:
Starting server on port: 8080
- user সাব-কমান্ড:
java MultiLevelSubCommandExample user -n John
আউটপুট:
User name: John
- database সাব-কমান্ড:
java MultiLevelSubCommandExample database -h localhost
আউটপুট:
Connecting to database host: localhost
- ভুল সাব-কমান্ড:
java MultiLevelSubCommandExample wrongCommand
আউটপুট:
Invalid sub-command: wrongCommand
৪. Multiple Levels of Sub-commands
আপনি multi-level sub-commands তৈরি করতে পারেন, যেখানে একটি সাব-কমান্ড অন্য একটি সাব-কমান্ডের মধ্যে অন্তর্ভুক্ত থাকতে পারে। উদাহরণস্বরূপ, server সাব-কমান্ডের মধ্যে start, stop বা restart সাব-কমান্ড থাকতে পারে।
উদাহরণ:
Options startOptions = new Options();
Option start = new Option("s", "start", false, "Start the server");
startOptions.addOption(start);
Options stopOptions = new Options();
Option stop = new Option("p", "stop", false, "Stop the server");
stopOptions.addOption(stop);
if (subCommand.equals("server")) {
String subSubCommand = args[1];
switch (subSubCommand) {
case "start":
cmd = parser.parse(startOptions, args);
System.out.println("Starting the server...");
break;
case "stop":
cmd = parser.parse(stopOptions, args);
System.out.println("Stopping the server...");
break;
default:
System.out.println("Invalid server sub-command");
break;
}
}
এখানে server সাব-কমান্ডের মধ্যে start এবং stop নামে দুটি সাব-কমান্ড রয়েছে। সেক্ষেত্রে ইউজার server start অথবা server stop ব্যবহার করতে পারবেন।
সারাংশ
Apache Commons CLI ব্যবহার করে আপনি সহজেই multi-level sub-command structures তৈরি করতে পারেন, যেখানে একাধিক সাব-কমান্ড থাকে এবং প্রতিটি সাব-কমান্ডের নিজস্ব অপশন এবং আর্গুমেন্ট থাকে। এটি জটিল কমান্ড-লাইন অ্যাপ্লিকেশনগুলিতে কার্যকারিতা বাড়ানোর জন্য অত্যন্ত উপকারী। আপনি সাব-কমান্ডগুলির মধ্যে সম্পর্ক তৈরি করতে পারেন এবং প্রয়োজন অনুযায়ী অপশন এবং আর্গুমেন্ট প্রোসেসিং কাস্টমাইজ করতে পারেন।
Read more