Multi-level Sub-command Structure তৈরি করা

Complex Command Line Application ডিজাইন - অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) - Java Technologies

238

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);
        }
    }
}

ব্যাখ্যা:

  1. Multiple Sub-commands: এখানে তিনটি সাব-কমান্ড (server, user, এবং database) তৈরি করা হয়েছে। প্রতিটি সাব-কমান্ডের জন্য পৃথক অপশন এবং আর্গুমেন্ট আছে।
    • server কমান্ডের জন্য একটি port অপশন।
    • user কমান্ডের জন্য একটি name অপশন।
    • database কমান্ডের জন্য একটি host অপশন।
  2. Option Handling: প্রতিটি সাব-কমান্ডের জন্য আলাদা Options অবজেক্ট ব্যবহার করা হয়েছে। এটি প্রতিটি সাব-কমান্ডের জন্য প্রয়োজনীয় অপশনগুলিকে সংজ্ঞায়িত করে।
  3. Sub-command Parsing: প্রথমে কমান্ড-লাইনের প্রথম আর্গুমেন্ট হিসাবে সাব-কমান্ড (যেমন server, user, database) চেক করা হয়। তারপর সেই সাব-কমান্ডের জন্য নির্দিষ্ট অপশনগুলি পার্স করা হয়।
  4. 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 তৈরি করতে পারেন, যেখানে একাধিক সাব-কমান্ড থাকে এবং প্রতিটি সাব-কমান্ডের নিজস্ব অপশন এবং আর্গুমেন্ট থাকে। এটি জটিল কমান্ড-লাইন অ্যাপ্লিকেশনগুলিতে কার্যকারিতা বাড়ানোর জন্য অত্যন্ত উপকারী। আপনি সাব-কমান্ডগুলির মধ্যে সম্পর্ক তৈরি করতে পারেন এবং প্রয়োজন অনুযায়ী অপশন এবং আর্গুমেন্ট প্রোসেসিং কাস্টমাইজ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...