Apache Commons CLI লাইব্রেরি ব্যবহার করে আপনি Multiple Sub-commands হ্যান্ডল করতে পারেন, যার মাধ্যমে একটি কমান্ড-লাইন অ্যাপ্লিকেশন একাধিক সাব-কমান্ড গ্রহণ করতে সক্ষম হয়। প্রতিটি সাব-কমান্ড আলাদা ফাংশনালিটি বা অপশন কনফিগারেশন সরবরাহ করতে পারে। যেমন একটি অ্যাপ্লিকেশন start, stop, বা status নামক সাব-কমান্ডের মাধ্যমে বিভিন্ন কাজ করতে পারে।
এখানে, আমরা দেখব কিভাবে Multiple Sub-commands হ্যান্ডল করা যায় Apache Commons CLI এর মাধ্যমে।
১. Maven Dependency:
প্রথমে, pom.xml ফাইলে Apache Commons CLI ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
২. Multiple Sub-commands উদাহরণ:
ধরা যাক, আমরা একটি কমান্ড-লাইন অ্যাপ্লিকেশন তৈরি করছি যেখানে start, stop, এবং status নামক তিনটি সাব-কমান্ড রয়েছে। প্রতিটি সাব-কমান্ডের জন্য আলাদা অপশন এবং কাজ নির্ধারণ করা হবে।
উদাহরণ:
import org.apache.commons.cli.*;
public class MultipleSubCommandsExample {
public static void main(String[] args) {
// অপশন কনফিগারেশন
Options globalOptions = new Options();
// Sub-commands তৈরি করা
Options startOptions = new Options();
startOptions.addOption("h", "help", false, "Show help for start");
Options stopOptions = new Options();
stopOptions.addOption("f", "force", false, "Force stop");
Options statusOptions = new Options();
statusOptions.addOption("v", "verbose", false, "Show detailed status");
// Sub-command parser
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 "start":
// "start" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(startOptions, args);
if (cmd.hasOption("h")) {
System.out.println("Help for start command");
} else {
System.out.println("Starting the service...");
}
break;
case "stop":
// "stop" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(stopOptions, args);
if (cmd.hasOption("f")) {
System.out.println("Forcing stop...");
} else {
System.out.println("Stopping the service...");
}
break;
case "status":
// "status" সাব-কমান্ডের জন্য অপশন পার্সিং
cmd = parser.parse(statusOptions, args);
if (cmd.hasOption("v")) {
System.out.println("Showing verbose status...");
} else {
System.out.println("Showing basic status...");
}
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("MultipleSubCommandsExample", globalOptions);
}
}
}
ব্যাখ্যা:
- Multiple Sub-commands: এখানে
start,stop, এবংstatusসাব-কমান্ডের জন্য আলাদা আলাদা Options তৈরি করা হয়েছে। প্রতিটি সাব-কমান্ডের জন্য নির্দিষ্ট অপশন (যেমনhelp,force,verbose) নির্ধারণ করা হয়েছে। - Sub-command Parsing: প্রথমে কমান্ডের প্রথম আর্গুমেন্ট হিসেবে একটি সাব-কমান্ড চেক করা হয় (যেমন
start,stop,status) এবং তারপরে সংশ্লিষ্ট অপশনগুলোর পার্সিং করা হয়। HelpFormatter: যদি কোন ত্রুটি ঘটে বা ইউজার যদি কোনো ভুল সাব-কমান্ড দেয়, তবেHelpFormatterএর মাধ্যমে সাহায্য মেসেজ প্রদর্শিত হয়।- Switch Statement:
switchস্টেটমেন্ট ব্যবহার করে বিভিন্ন সাব-কমান্ডের জন্য আলাদা আলাদা কোড চালানো হয়।
আউটপুট:
- যদি আপনি
startসাব-কমান্ড ব্যবহার করেন:
java MultipleSubCommandsExample start
আউটপুট:
Starting the service...
- যদি আপনি
stopসাব-কমান্ড ব্যবহার করেন এবং-fঅপশন প্রদান করেন:
java MultipleSubCommandsExample stop -f
আউটপুট:
Forcing stop...
- যদি আপনি
statusসাব-কমান্ড ব্যবহার করেন এবং-vঅপশন প্রদান করেন:
java MultipleSubCommandsExample status -v
আউটপুট:
Showing verbose status...
- যদি আপনি ভুল সাব-কমান্ড প্রদান করেন:
java MultipleSubCommandsExample wrongCommand
আউটপুট:
Invalid sub-command: wrongCommand
৩. Sub-command এর জন্য Help এবং Validation
আপনি চাইলে Help এবং Validation এর জন্য অতিরিক্ত কাস্টমাইজেশনও করতে পারেন। উদাহরণস্বরূপ, যদি ইউজার start সাব-কমান্ডের জন্য সাহায্য চায়, তাহলে আপনাকে HelpFormatter ব্যবহার করতে হবে। পাশাপাশি, আপনি সাব-কমান্ডগুলির জন্য প্রয়োজনীয় validation প্রয়োগ করতে পারেন যাতে ইউজার ভুল আর্গুমেন্ট প্রদান না করে।
উদাহরণ:
Option helpOption = new Option("h", "help", false, "Show help for start");
startOptions.addOption(helpOption);
if (cmd.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("start", startOptions);
return;
}
Apache Commons CLI এর মাধ্যমে Multiple Sub-commands হ্যান্ডল করা অত্যন্ত সহজ। আপনি আলাদা আলাদা সাব-কমান্ড এবং সেগুলির জন্য নির্দিষ্ট অপশন গঠন করতে পারেন এবং ইউজারের ইনপুট অনুযায়ী সেগুলিকে প্রোসেস করতে পারেন। এর মাধ্যমে আপনি শক্তিশালী এবং নমনীয় কমান্ড-লাইন অ্যাপ্লিকেশন তৈরি করতে পারবেন যেখানে বিভিন্ন কার্যক্রমের জন্য আলাদা সাব-কমান্ড ব্যবহৃত হবে।
- OptionGroup ব্যবহার করে আপনি সাব-কমান্ডের মধ্যে অপশন গ্রুপ করতে পারেন।
- HelpFormatter ব্যবহার করে ব্যবহারকারীদের সাহায্য মেসেজ প্রদান করতে পারেন।
- CommandLineParser এবং Options ব্যবহার করে বিভিন্ন সাব-কমান্ডের জন্য আর্গুমেন্ট এবং অপশন পার্সিং করতে পারেন।
Read more