Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য একটি শক্তিশালী টুল। এর মাধ্যমে আপনি সহজভাবে কমান্ড লাইন আর্গুমেন্ট তৈরি, প্রক্রিয়া, এবং যাচাই করতে পারেন। কখনও কখনও, আপনার অ্যাপ্লিকেশনটির মধ্যে nested (সাব-কমান্ড) এবং complex sub-command structure থাকতে পারে, যেখানে বিভিন্ন কমান্ড একে অপরের মধ্যে অর্ন্তভুক্ত থাকে এবং প্রতিটি সাব-কমান্ডের জন্য আলাদা আলাদা অপশন থাকতে পারে।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Apache Commons CLI ব্যবহার করে nested এবং complex sub-command structure তৈরি করা যায়।
Nested এবং Complex Sub-command Structure এর ধারণা
- Nested Commands:
- Nested Commands হল যখন এক কমান্ডের ভিতরে আরেকটি কমান্ড থাকে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনটি যদি ডাটাবেস অ্যাপ্লিকেশন হয়, তবে আপনার কমান্ড হতে পারে
database backupবাdatabase restore, যেখানেdatabaseহল মূল কমান্ড এবংbackup,restoreহল সাব-কমান্ড।
- Nested Commands হল যখন এক কমান্ডের ভিতরে আরেকটি কমান্ড থাকে। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনটি যদি ডাটাবেস অ্যাপ্লিকেশন হয়, তবে আপনার কমান্ড হতে পারে
- Complex Sub-command Structure:
- Complex sub-command structure হল এমন একটি কমান্ড যেখানে একাধিক স্তরের কমান্ড এবং তাদের নিজস্ব অপশন থাকে। উদাহরণস্বরূপ,
user addবাuser removeএর মধ্যে আরো সাব-অপশন থাকতে পারে (যেমনuser add --role admin), যেখানেuserহল মূল কমান্ড এবংadd,removeহল সাব-কমান্ড।
- Complex sub-command structure হল এমন একটি কমান্ড যেখানে একাধিক স্তরের কমান্ড এবং তাদের নিজস্ব অপশন থাকে। উদাহরণস্বরূপ,
Apache Commons CLI তে Nested এবং Complex Sub-command Structure তৈরি
Apache Commons CLI লাইব্রেরি আপনাকে sub-command তৈরি করতে সহায়তা করে, যেখানে প্রতিটি সাব-কমান্ডের জন্য আলাদা আলাদা অপশন নির্ধারণ করা যায়। এটি কমান্ড লাইন আর্গুমেন্টের উপর ভিত্তি করে বিভিন্ন লজিক্যাল ইউনিট (sub-commands) তৈরিতে কার্যকরী।
উদাহরণ: Nested এবং Complex Sub-command Structure
ধরি, আমাদের একটি অ্যাপ্লিকেশন আছে যেখানে user এবং database নামক দুটি প্রধান কমান্ড আছে। এবং প্রতিটি কমান্ডের সাথে কিছু সাব-কমান্ড (যেমন add, remove, backup, restore) এবং কিছু অপশন (যেমন --role, --file) থাকবে।
কোড উদাহরণ:
import org.apache.commons.cli.*;
public class ComplexSubCommandExample {
public static void main(String[] args) {
// অপশন তৈরি
Options globalOptions = new Options();
// 'user' সাব-কমান্ড অপশন
Options userOptions = new Options();
userOptions.addOption("add", false, "Add a new user");
userOptions.addOption("remove", false, "Remove an existing user");
userOptions.addOption("role", true, "Set user role");
// 'database' সাব-কমান্ড অপশন
Options dbOptions = new Options();
dbOptions.addOption("backup", false, "Backup database");
dbOptions.addOption("restore", false, "Restore database");
// পার্সার তৈরি
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
// প্রথমে কমান্ড লাইন আর্গুমেন্ট পার্স করা
CommandLine line = parser.parse(globalOptions, args);
// 'user' কমান্ড চেক করা
if (args.length > 0 && args[0].equals("user")) {
CommandLine userLine = parser.parse(userOptions, args, true);
if (userLine.hasOption("add")) {
System.out.println("Adding a new user...");
if (userLine.hasOption("role")) {
System.out.println("Role: " + userLine.getOptionValue("role"));
}
} else if (userLine.hasOption("remove")) {
System.out.println("Removing user...");
}
}
// 'database' কমান্ড চেক করা
else if (args.length > 0 && args[0].equals("database")) {
CommandLine dbLine = parser.parse(dbOptions, args, true);
if (dbLine.hasOption("backup")) {
System.out.println("Backing up the database...");
} else if (dbLine.hasOption("restore")) {
System.out.println("Restoring the database...");
}
} else {
formatter.printHelp("ComplexSubCommandExample", globalOptions);
}
} catch (ParseException exp) {
System.out.println("Error parsing the command line: " + exp.getMessage());
formatter.printHelp("ComplexSubCommandExample", globalOptions);
}
}
}
কোডের ব্যাখ্যা:
- Global Options: এখানে কোনো গ্লোবাল অপশন সংজ্ঞায়িত করা হয়নি, তবে
userএবংdatabaseসাব-কমান্ড এর জন্য আলাদা আলাদা অপশন তৈরি করা হয়েছে। userসাব-কমান্ড:userসাব-কমান্ডের জন্য দুটি অপশনaddএবংremoveতৈরি করা হয়েছে।addঅপশনটি একটি নতুন ব্যবহারকারী যোগ করার জন্য এবংremoveঅপশনটি একটি ব্যবহারকারী মুছে ফেলার জন্য।roleঅপশনটি ব্যবহারকারীর রোল সেট করার জন্য।
databaseসাব-কমান্ড:databaseসাব-কমান্ডের জন্য দুটি অপশনbackupএবংrestoreতৈরি করা হয়েছে, যা ডাটাবেস ব্যাকআপ বা রিস্টোর করতে ব্যবহৃত হবে।
- Parse এবং Handle: প্রথমে কোডটি চেক করবে কোন মূল কমান্ড (যেমন
userবাdatabase) ইনপুট হয়েছে, এবং তারপর সেই সাব-কমান্ডের অপশনগুলো পার্স করবে।
আউটপুট:
user addকমান্ড:java ComplexSubCommandExample user add --role admin Adding a new user... Role: adminuser removeকমান্ড:java ComplexSubCommandExample user remove Removing user...database backupকমান্ড:java ComplexSubCommandExample database backup Backing up the database...database restoreকমান্ড:java ComplexSubCommandExample database restore Restoring the database...
Nested এবং Complex Sub-command Structure এর সুবিধা
- লজিক্যাল কমান্ড স্ট্রাকচার: Nested এবং complex sub-commands ব্যবহার করার মাধ্যমে আপনি একটি অ্যাপ্লিকেশনকে লজিক্যালভাবে বিভাগে ভাগ করতে পারেন, যা অ্যাপ্লিকেশনটির ব্যবহারকে আরও সহজ এবং সুসংগঠিত করে তোলে।
- বিকাশের সুবিধা: যখন আপনার অ্যাপ্লিকেশন অনেক ধরনের কমান্ড সমর্থন করে, তখন সেগুলিকে সাব-কমান্ডের মাধ্যমে সাজানো খুবই সুবিধাজনক এবং কোডের রক্ষণাবেক্ষণ সহজ হয়।
- পরিষ্কার হেল্প আউটপুট: সাব-কমান্ড এবং তাদের অপশনগুলির জন্য HelpFormatter ব্যবহার করলে একটি পরিষ্কার এবং সুশৃঙ্খল হেল্প আউটপুট পাওয়া যায়, যা ব্যবহারকারীর জন্য উপকারী।
সারাংশ
Apache Commons CLI লাইব্রেরির মাধ্যমে আপনি nested এবং complex sub-command structure তৈরি করতে পারেন, যেখানে একটি কমান্ডের অধীনে একাধিক সাব-কমান্ড এবং তাদের অপশন থাকতে পারে। এটি আপনাকে আরও উন্নত এবং পরিষ্কার কমান্ড লাইন অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। সাব-কমান্ডের মাধ্যমে অ্যাপ্লিকেশনের ফিচারগুলোকে একত্রিত এবং সুসংগঠিত করা যায়, যা ব্যবহারকারী-বান্ধব এবং ডেভেলপমেন্টে সহজে মেনটেইনযোগ্য হয়।
Read more