Custom Command Line Parsing

অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) - Java Technologies

244

Apache Commons CLI লাইব্রেরি ব্যবহার করে আপনি আপনার Java অ্যাপ্লিকেশনের জন্য কাস্টম কমান্ড লাইন প্যার্সিং তৈরি করতে পারেন। এতে আপনাকে বিভিন্ন অপশন এবং আর্গুমেন্ট গ্রহণ করার জন্য একটি কাস্টম প্রক্রিয়া তৈরি করতে হবে, যা আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী নির্ধারিত হবে। Apache Commons CLI আপনাকে এসব অপশনগুলিকে হ্যান্ডল করার জন্য বিভিন্ন ধরনের ক্লাস এবং মেথড সরবরাহ করে।

এখানে, আমরা কাস্টম কমান্ড লাইন প্যার্সিং তৈরি করার একটি উদাহরণ দেখব যা আপনার অ্যাপ্লিকেশন থেকে নির্দিষ্ট আর্গুমেন্ট এবং অপশন গ্রহণ করবে এবং সেগুলিকে প্রক্রিয়া করবে।


1. কাস্টম কমান্ড লাইন অপশন তৈরির পদ্ধতি

এখানে আমরা একটি কাস্টম কমান্ড লাইন প্যার্সিং উদাহরণ তৈরি করব যা নির্দিষ্ট অপশনগুলির মান এবং উপস্থিতি যাচাই করবে এবং সেগুলিকে প্রক্রিয়া করবে। এই উদাহরণে, আমরা --username, --password, এবং --verbose অপশন তৈরি করব।

উদাহরণ: কাস্টম কমান্ড লাইন প্যার্সিং

import org.apache.commons.cli.*;

public class CustomCommandLineExample {

    public static void main(String[] args) {

        // Command Line Options তৈরি করা
        Options options = new Options();

        // "username" অপশন যোগ করা
        Option usernameOption = new Option("u", "username", true, "Username for login");
        usernameOption.setRequired(true);  // এই অপশনটি অবশ্যই প্রদান করতে হবে
        options.addOption(usernameOption);

        // "password" অপশন যোগ করা
        Option passwordOption = new Option("p", "password", true, "Password for login");
        passwordOption.setRequired(true);  // এই অপশনটি অবশ্যই প্রদান করতে হবে
        options.addOption(passwordOption);

        // "verbose" অপশন (একটি ফ্ল্যাগ অপশন)
        Option verboseOption = new Option("v", "verbose", false, "Enable verbose output");
        options.addOption(verboseOption);

        // CommandLineParser তৈরি করা
        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();

        try {
            // আর্গুমেন্ট পার্স করা
            CommandLine cmd = parser.parse(options, args);

            // "username" এবং "password" আর্গুমেন্ট রিড করা
            String username = cmd.getOptionValue("username");
            String password = cmd.getOptionValue("password");

            // "verbose" আর্গুমেন্ট চেক করা
            boolean verbose = cmd.hasOption("verbose");

            // কাস্টম লজিক: পাসওয়ার্ডের মাপ চেক করা
            if (password.length() < 8) {
                System.out.println("Error: Password must be at least 8 characters long.");
                return;
            }

            // আউটপুট
            System.out.println("Username: " + username);
            System.out.println("Password: " + password);
            System.out.println("Verbose mode: " + (verbose ? "Enabled" : "Disabled"));

        } catch (ParseException e) {
            // যদি কোনো সমস্যা ঘটে, সাহায্য দেখান
            System.out.println("Parsing failed. Reason: " + e.getMessage());
            formatter.printHelp("CustomCommandLineExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Options অবজেক্ট তৈরি: Options অবজেক্টে সমস্ত অপশন (যেমন username, password, এবং verbose) সংরক্ষিত হয়।
  2. Option তৈরি: Option ক্লাসের মাধ্যমে:
    • -u বা --username: ব্যবহারকারীর নামের জন্য একটি আর্গুমেন্ট।
    • -p বা --password: পাসওয়ার্ডের জন্য একটি আর্গুমেন্ট।
    • -v বা --verbose: একটি ফ্ল্যাগ অপশন (যেটি ভ্যালু গ্রহণ করে না, শুধু উপস্থিতি চেক করা হয়)।
  3. CommandLineParser: DefaultParser ব্যবহার করে আর্গুমেন্ট পার্স করা হচ্ছে।
  4. কাস্টম লজিক:
    • এখানে পাসওয়ার্ডের দৈর্ঘ্য যাচাই করা হয়েছে। যদি পাসওয়ার্ড ৮টি ক্যারেক্টারের কম হয়, তাহলে একটি ত্রুটি বার্তা দেখানো হবে।
  5. HelpFormatter: যদি কোনো সমস্যা হয় (যেমন আর্গুমেন্ট ভুলভাবে দেওয়া হয়), তাহলে ব্যবহারকারীকে সাহায্য বার্তা দেখানো হবে।

2. কাস্টম প্যার্সিং এবং আউটপুট

এখন যদি আপনি এই প্রোগ্রামটি চালান, তাহলে এটি আর্গুমেন্ট অনুসারে আউটপুট প্রদান করবে। উদাহরণস্বরূপ:

java CustomCommandLineExample -u john_doe -p secretpassword -v

আউটপুট হবে:

Username: john_doe
Password: secretpassword
Verbose mode: Enabled

অথবা, যদি আপনি -v অপশন বাদ দেন:

java CustomCommandLineExample -u john_doe -p secretpassword

তাহলে আউটপুট হবে:

Username: john_doe
Password: secretpassword
Verbose mode: Disabled

এছাড়া, যদি আপনি পাসওয়ার্ড ৮ ক্যারেক্টারের কম প্রদান করেন:

java CustomCommandLineExample -u john_doe -p short

তাহলে আউটপুট হবে:

Error: Password must be at least 8 characters long.

3. কাস্টম আর্গুমেন্ট ভ্যালিডেশন

আপনার CLI অ্যাপ্লিকেশনে কাস্টম ভ্যালিডেশন যুক্ত করা খুবই গুরুত্বপূর্ণ। আপনি ParseException এর মাধ্যমে কমান্ড লাইন আর্গুমেন্টে ভুল বা অনুপস্থিত মান চেক করতে পারেন। উদাহরণস্বরূপ:

  • আপনি চেক করতে পারেন যে নির্দিষ্ট আর্গুমেন্টগুলি প্রদত্ত কিনা (-u, -p অবশ্যই থাকা দরকার)।
  • আপনি যাচাই করতে পারেন যে আর্গুমেন্টগুলির মান সঠিক ফরম্যাটে আছে কিনা (যেমন পাসওয়ার্ডের দৈর্ঘ্য বা ইমেইল ফরম্যাট)।

4. এপাচি কমন্স সিআলআই (Apache Commons CLI) এর অন্যান্য সুবিধা

  • ফ্ল্যাগ অপশন: একটি অপশনকে ফ্ল্যাগ (যেমন -v বা --verbose) বানানো যেতে পারে, যা কেবল উপস্থিতি চেক করে এবং কোনো ভ্যালু নেয় না।
  • অপশন গোষ্ঠী: আপনি অপশনগুলোকে গ্রুপ করতে পারেন (যেমন -d বা --debug একত্রিত করে একটি গ্রুপ বানানো)।
  • ডকুমেন্টেশন সহজীকরণ: HelpFormatter ব্যবহার করে সহজেই CLI অপশনগুলির সহায়তা বার্তা তৈরি করা যায়।

Apache Commons CLI লাইব্রেরি ব্যবহার করে কাস্টম কমান্ড লাইন প্যার্সিং খুবই শক্তিশালী এবং কার্যকরী। এটি আপনাকে কমান্ড-লাইন আর্গুমেন্ট হ্যান্ডল করতে এবং সেই অনুযায়ী আপনার অ্যাপ্লিকেশনকে কাস্টমাইজ করতে সাহায্য করে। আপনি আর্গুমেন্টের জন্য শর্ত, ভ্যালিডেশন, এবং অপশন তৈরি করতে পারেন এবং সহজে ত্রুটি বার্তা এবং সাহায্য বার্তা প্রদর্শন করতে পারেন। এই লাইব্রেরি ব্যবহার করে, আপনি আরও উন্নত এবং কাস্টম CLI অ্যাপ্লিকেশন তৈরি করতে সক্ষম হবেন।

Content added By

Custom CommandLineParser কি?

Custom CommandLineParser হল এমন একটি কাস্টম ক্লাস বা পদ্ধতি যা Apache Commons CLI লাইব্রেরির মাধ্যমে আপনার প্রোগ্রামে কমান্ড-লাইন আর্গুমেন্ট হ্যান্ডলিং এবং পার্সিং প্রক্রিয়াকে কাস্টমাইজ করে। সাধারণত, Apache Commons CLI তে DefaultParser ক্লাস ব্যবহার করা হয়, যা সরল কমান্ড লাইন আর্গুমেন্ট পার্সিং প্রক্রিয়া সম্পাদন করে। তবে, কিছু পরিস্থিতিতে আপনি যদি আর্গুমেন্ট পার্সিং প্রক্রিয়াকে আপনার বিশেষ প্রয়োজন অনুযায়ী কাস্টমাইজ করতে চান, তবে আপনি একটি Custom CommandLineParser তৈরি করতে পারেন।

এই পদ্ধতির মাধ্যমে আপনি কমান্ড-লাইন আর্গুমেন্টগুলি যেমন কাস্টম ফরম্যাট, ভ্যালিডেশন, কাস্টম হ্যান্ডলিং ইত্যাদি করতে পারবেন।


Custom CommandLineParser তৈরি করার ধাপ

1. CommandLineParser ইন্টারফেস বুঝে নেয়া

Apache Commons CLI লাইব্রেরি CommandLineParser ইন্টারফেস প্রদান করে, যার মাধ্যমে আপনি কাস্টম পার্সিং মেথডগুলি তৈরি করতে পারেন। DefaultParser ক্লাস এই ইন্টারফেসের একটি সাধারণ বাস্তবায়ন, তবে আপনি চাইলে এর কাস্টম সংস্করণ তৈরি করতে পারেন।

CommandLineParser ইন্টারফেসের মেথডগুলি হল:

  • parse(): এই মেথডটি আর্গুমেন্টের তালিকা গ্রহণ করে এবং সেই অনুযায়ী অপশন এবং আর্গুমেন্টগুলিকে পার্স করে।
  • hasOption(): এটি চেক করে যে একটি নির্দিষ্ট অপশন আছে কিনা।
  • getOptionValue(): অপশনের মান ফেরত দেয়।

2. Custom CommandLineParser তৈরি করা

এখন আমরা একটি কাস্টম CommandLineParser তৈরি করব যা আর্গুমেন্টগুলি ভিন্নভাবে পার্স করবে। আমাদের উদাহরণে, আমরা একটি কাস্টম অপশন হ্যান্ডলিং প্রক্রিয়া তৈরি করব, যা আর্গুমেন্টে একটি নির্দিষ্ট ফ্ল্যাগ এবং তার মান থাকতে হবে।

উদাহরণ: Custom CommandLineParser তৈরি করা

import org.apache.commons.cli.*;
import java.util.List;

public class CustomCommandLineParser implements CommandLineParser {

    @Override
    public CommandLine parse(Options options, String[] args) throws ParseException {
        CommandLine commandLine = new DefaultParser().parse(options, args);
        
        // কাস্টম অপশন হ্যান্ডলিং: "file" অপশনে কিছু শর্ত যোগ করা
        if (commandLine.hasOption("f")) {
            String filePath = commandLine.getOptionValue("f");
            if (filePath == null || filePath.isEmpty()) {
                throw new ParseException("File path must be specified with -f option");
            }
        }

        // অন্য কাস্টম চেকিং, যেমন কিছু অপশন বাধ্যতামূলক করা ইত্যাদি
        if (!commandLine.hasOption("v") && !commandLine.hasOption("h")) {
            throw new ParseException("At least one of the options -v or -h should be provided.");
        }

        return commandLine;
    }

    @Override
    public void setStrict() {
        // কোনো কাস্টম আচরণ এখানে যুক্ত করতে পারবেন
    }

    @Override
    public void setLocale(java.util.Locale locale) {
        // লোকাল সেটিংস যদি কাস্টমাইজ করতে চান
    }
}

এখানে, CustomCommandLineParser ক্লাসটি CommandLineParser ইন্টারফেস ইমপ্লিমেন্ট করেছে। আমরা parse() মেথডের মধ্যে কাস্টম আর্গুমেন্ট পার্সিং যুক্ত করেছি, যেখানে:

  1. -f অপশনের জন্য একটি ফাইল পাথ থাকতে হবে, অন্যথায় ত্রুটি নিক্ষেপ করা হবে।
  2. -v বা -h অপশন বাধ্যতামূলক রাখা হয়েছে, যেহেতু দুটি অপশনেই আর্গুমেন্ট থাকা আবশ্যক।

3. Custom CommandLineParser ব্যবহার করা

একবার আপনি কাস্টম CommandLineParser তৈরি করলে, আপনি সেটি ব্যবহার করে কমান্ড লাইন আর্গুমেন্ট পার্স করতে পারেন। এখানে একটি উদাহরণ দেওয়া হলো যেখানে আমরা আমাদের কাস্টম পার্সার ব্যবহার করে অপশনগুলির মান যাচাই করব।

উদাহরণ: Custom CommandLineParser ব্যবহার করা

import org.apache.commons.cli.*;

public class CommandLineApp {
    public static void main(String[] args) {
        // অপশন তৈরি করা
        Options options = new Options();
        options.addOption("f", "file", true, "Specify the file path");
        options.addOption("v", "verbose", false, "Enable verbose output");
        options.addOption("h", "help", false, "Show help");

        // কাস্টম CommandLineParser ব্যবহার করা
        CommandLineParser parser = new CustomCommandLineParser();
        HelpFormatter formatter = new HelpFormatter();

        try {
            // কমান্ড লাইন আর্গুমেন্ট পার্স করা
            CommandLine cmd = parser.parse(options, args);

            // --file অপশন চেক করা
            if (cmd.hasOption("f")) {
                String filePath = cmd.getOptionValue("f");
                System.out.println("File to process: " + filePath);
            }

            // --verbose অপশন চেক করা
            if (cmd.hasOption("v")) {
                System.out.println("Verbose output enabled");
            }

            // --help অপশন চেক করা
            if (cmd.hasOption("h")) {
                formatter.printHelp("CommandLineApp", options);
            }

        } catch (ParseException e) {
            // যদি কোনো ত্রুটি হয়, হেল্প বার্তা প্রদর্শন করা
            System.out.println("Parsing failed. Reason: " + e.getMessage());
            formatter.printHelp("CommandLineApp", options);
        }
    }
}

এখানে, আমরা আমাদের CustomCommandLineParser ক্লাস ব্যবহার করে আর্গুমেন্ট পার্স করছি এবং কিছু কাস্টম শর্ত (যেমন -f অপশনের জন্য ফাইল পাথ প্রয়োজনীয়তা) যাচাই করছি। যদি আর্গুমেন্ট ভুল থাকে, তাহলে একটি ত্রুটি বার্তা দেখানো হবে।

কমান্ড চালানোর উদাহরণ:

java CommandLineApp -f input.txt -v

এটি আউটপুট করবে:

File to process: input.txt
Verbose output enabled

এবং যদি আপনি -f অপশনটি না দেন বা ভুলভাবে কমান্ড চালান, তাহলে ত্রুটি হবে:

java CommandLineApp -f
Parsing failed. Reason: File path must be specified with -f option
CommandLineApp [options]

Options:
  -f, --file <arg>     Specify the file path
  -v, --verbose        Enable verbose output
  -h, --help           Show help

সারাংশ

Custom CommandLineParser তৈরি করার মাধ্যমে আপনি Apache Commons CLI এর আর্গুমেন্ট পার্সিং প্রক্রিয়াটি কাস্টমাইজ করতে পারেন। এটি আপনাকে বিশেষ শর্ত, কাস্টম ভ্যালিডেশন এবং আর্গুমেন্ট হ্যান্ডলিংয়ের জন্য আরও নিয়ন্ত্রণ প্রদান করে। কাস্টম পার্সারের মাধ্যমে আপনি আর্গুমেন্ট চেক করতে, অপশন বাধ্যতামূলক করতে এবং ব্যবহারকারীর ইনপুট যাচাই করতে সক্ষম হবেন, যা আপনার প্রোগ্রামটির কার্যকারিতা এবং নিরাপত্তা বৃদ্ধি করে।

Content added By

Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট প্রসেসিং সহজ করার জন্য ডিজাইন করা হয়েছে। তবে যখন অ্যাপ্লিকেশনটি আরো জটিল হয় এবং আরো সুনির্দিষ্ট আর্গুমেন্ট ম্যানেজমেন্টের প্রয়োজন হয়, তখন Advanced Option Parsing টেকনিকগুলো ব্যবহার করা দরকার। এই গাইডে, আমরা Apache Commons CLI ব্যবহার করে কিভাবে উন্নত অপশন পার্সিং (Advanced Option Parsing) করা যায় তা দেখবো।


Advanced Option Parsing Techniques

  1. Option with Multiple Values: একাধিক মানের সাথে একটি অপশন ব্যবহার করা।
  2. Option with Default Value: একটি অপশন সেট না করলে ডিফল্ট মান দেয়া।
  3. Option with Long and Short Forms: অপশনের জন্য সংক্ষিপ্ত এবং দীর্ঘ দুটি ফর্ম ব্যবহার।
  4. Required and Optional Option Handling: বিভিন্ন অপশনের মধ্যে কীভাবে Required এবং Optional অপশন ব্যবস্থাপনা করা যায়।
  5. Argument Validation: আর্গুমেন্টের মানের যাচাই করা।
  6. Positional Arguments: কমান্ড লাইনে positional আর্গুমেন্ট ব্যবহার করা।

1. Option with Multiple Values

Multiple values সহ একটি অপশন ব্যবহার করার জন্য, আপনি Option এর setArgs(int) মেথড ব্যবহার করতে পারেন। এটি আপনাকে একাধিক আর্গুমেন্ট ধারণ করতে সক্ষম করে।

উদাহরণ: Multiple values সহ অপশন

import org.apache.commons.cli.*;

public class MultipleValuesOptionExample {

    public static void main(String[] args) {
        Options options = new Options();

        // 'files' অপশন তৈরি করা যা একাধিক মান গ্রহণ করবে
        Option files = new Option("f", "files", true, "Input files");
        files.setArgs(Option.UNLIMITED_VALUES);  // একাধিক মান গ্রহণ করার জন্য সেট করা
        options.addOption(files);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // 'files' অপশন থেকে একাধিক মান বের করা
            if (cmd.hasOption("files")) {
                String[] filesList = cmd.getOptionValues("files");
                for (String file : filesList) {
                    System.out.println("File: " + file);
                }
            }
        } catch (ParseException e) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("MultipleValuesOptionExample", options);
        }
    }
}

উদাহরণ চালানো:

java MultipleValuesOptionExample -f file1.txt file2.txt file3.txt

আউটপুট:

File: file1.txt
File: file2.txt
File: file3.txt

এখানে, -f অপশনটি একাধিক ফাইল নাম গ্রহণ করছে।


2. Option with Default Value

কিছু অপশনের জন্য আপনি ডিফল্ট মান নির্ধারণ করতে পারেন যদি ব্যবহারকারী সেই অপশনটি প্রদান না করে। এটি করার জন্য Option এর setRequired(false) এবং setValueSeparator মেথড ব্যবহার করা যেতে পারে।

উদাহরণ: Default value সহ অপশন

import org.apache.commons.cli.*;

public class DefaultValueOptionExample {

    public static void main(String[] args) {
        Options options = new Options();

        // 'logLevel' অপশন তৈরি করা যা একটি ডিফল্ট মান গ্রহণ করবে
        Option logLevel = new Option("l", "logLevel", true, "Set log level");
        logLevel.setRequired(false);  // এটি Optional অপশন
        logLevel.setArgs(1);
        logLevel.setArgName("level");
        options.addOption(logLevel);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // 'logLevel' অপশন না দিলে ডিফল্ট মান হবে "INFO"
            String logLevelValue = cmd.getOptionValue("logLevel", "INFO");
            System.out.println("Log Level: " + logLevelValue);
        } catch (ParseException e) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("DefaultValueOptionExample", options);
        }
    }
}

উদাহরণ চালানো:

java DefaultValueOptionExample -l DEBUG

আউটপুট:

Log Level: DEBUG

যদি আপনি -l অপশনটি না দেন, তাহলে ডিফল্ট মান হিসেবে INFO থাকবে।


3. Option with Long and Short Forms

অপশনগুলোকে সংক্ষিপ্ত (Short) এবং দীর্ঘ (Long) ফর্মে ব্যবহার করা যায়। যেমন -f (short) এবং --file (long)।

উদাহরণ: Long এবং Short Forms সহ অপশন

import org.apache.commons.cli.*;

public class LongShortFormsExample {

    public static void main(String[] args) {
        Options options = new Options();

        // 'input' অপশন তৈরি করা যা Short এবং Long দুটি ফর্মেই থাকবে
        Option input = new Option("i", "input", true, "Input file");
        input.setRequired(true);
        options.addOption(input);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // 'input' অপশন থেকে ফাইল নাম বের করা
            System.out.println("Input file: " + cmd.getOptionValue("input"));
        } catch (ParseException e) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("LongShortFormsExample", options);
        }
    }
}

উদাহরণ চালানো:

java LongShortFormsExample -i input.txt

অথবা

java LongShortFormsExample --input input.txt

এখানে, আপনি -i বা --input যেকোনো ফর্ম ব্যবহার করতে পারবেন।


4. Required and Optional Option Handling

যখন আপনি Required এবং Optional অপশন ম্যানেজ করতে চান, তখন আপনি setRequired(true) এবং setRequired(false) ব্যবহার করতে পারেন।

উদাহরণ: Required এবং Optional অপশন

import org.apache.commons.cli.*;

public class RequiredOptionalOptionsExample {

    public static void main(String[] args) {
        Options options = new Options();

        // 'input' অপশন যা Required
        Option input = new Option("i", "input", true, "Input file");
        input.setRequired(true);  // এটি Required অপশন
        options.addOption(input);

        // 'output' অপশন যা Optional
        Option output = new Option("o", "output", true, "Output file");
        output.setRequired(false);  // এটি Optional অপশন
        options.addOption(output);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // 'input' অপশন চেক করা
            if (cmd.hasOption("input")) {
                System.out.println("Input file: " + cmd.getOptionValue("input"));
            }

            // 'output' অপশন চেক করা
            if (cmd.hasOption("output")) {
                System.out.println("Output file: " + cmd.getOptionValue("output"));
            }
        } catch (ParseException e) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("RequiredOptionalOptionsExample", options);
        }
    }
}

উদাহরণ চালানো:

java RequiredOptionalOptionsExample -i input.txt -o output.txt

এখানে, input অপশনটি required, এবং output অপশনটি optional


5. Argument Validation

আপনি কমান্ড লাইন আর্গুমেন্টের মান যাচাই করার জন্য Validator ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি চেক করতে পারেন যে একটি ইমেইল ফরম্যাট সঠিক কি না।

উদাহরণ: Argument Validation

import org.apache.commons.cli.*;

public class ArgumentValidationExample {

    public static void main(String[] args) {
        Options options = new Options();

        // 'email' অপশন তৈরি করা
        Option email = new Option("e", "email", true, "User email");
        email.setRequired(true);
        options.addOption(email);

        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            cmd = parser.parse(options, args);

            String emailValue = cmd.getOptionValue("email");

            // ইমেইল যাচাই করা
            if (!emailValue.contains("@")) {
                System.out.println("Invalid email format!");
            } else {
                System.out.println("Valid email: " + emailValue);
            }

        } catch (ParseException e) {
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("ArgumentValidationExample", options);
        }
    }
}

উদাহরণ চালানো:

java ArgumentValidationExample -e invalidEmail.com

এখানে, ইমেইল যাচাই করার জন্য একটি কাস্টম লজিক প্রয়োগ করা হয়েছে।


সারাংশ

Apache Commons CLI দিয়ে Advanced Option Parsing টেকনিক ব্যবহার করা আপনাকে আরও শক্তিশালী এবং নমনীয় কমান্ড লাইন আর্গুমেন্ট পার্সিং করতে সহায়তা করে। আপনি একাধিক মানের অপশন, ডিফল্ট মান, সংক্ষিপ্ত এবং দীর্ঘ ফর্ম, required এবং optional অপশন, আর্গুমেন্ট ভ্যালিডেশন এবং positional আর্গুমেন্ট ব্যবস্থাপনা করতে পারবেন। এগুলি আপনার অ্যাপ্লিকেশনকে আরো শক্তিশালী এবং ব্যবহারকারী বান্ধব করে তুলবে।


Content added By

Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য একটি শক্তিশালী এবং নমনীয় টুল। এটি ব্যবহারকারীদের কমপ্লেক্স কমান্ড লাইন সিনট্যাক্স (যেমন অপশনাল আর্গুমেন্ট, ফ্ল্যাগস, এবং একাধিক আর্গুমেন্ট) সহজে হ্যান্ডল করার সুযোগ দেয়। আপনি যখন অনেক অপশন এবং আর্গুমেন্ট পরিচালনা করেন, তখন কমপ্লেক্স সিনট্যাক্স ব্যবহার করতে পারেন, যেখানে আর্গুমেন্টগুলির মধ্যে সম্পর্ক এবং নির্দিষ্ট ফরম্যাট থাকতে পারে।

এখানে Apache Commons CLI লাইব্রেরির মাধ্যমে কীভাবে কমপ্লেক্স কমান্ড লাইন সিনট্যাক্স হ্যান্ডল করা যায়, তার উদাহরণ দেখানো হবে।


1. কমপ্লেক্স কমান্ড লাইন সিনট্যাক্স উদাহরণ

ধরা যাক, আমরা একটি কমান্ড লাইন অ্যাপ্লিকেশন তৈরি করছি যা ব্যবহারকারীদের নাম, বয়স, ফ্ল্যাগ এবং একাধিক আর্গুমেন্ট গ্রহণ করবে।

উদাহরণ:

  • -n John: নাম গ্রহণ করতে
  • -a 30: বয়স গ্রহণ করতে
  • -f: একটি ফ্ল্যাগ (যেমন প্রমোট করা)
  • --options=opt1,opt2: একাধিক আর্গুমেন্টের জন্য

2. Complex Command Line Syntax হ্যান্ডলিং এর জন্য কোড উদাহরণ

import org.apache.commons.cli.*;
import java.util.Arrays;

public class CommandLineExample {

    public static void main(String[] args) {
        // Option অবজেক্ট তৈরি করা
        Options options = new Options();

        // --name অপশন (আর্গুমেন্টের সাথে)
        options.addOption("n", "name", true, "Your name");

        // --age অপশন (আর্গুমেন্টের সাথে)
        options.addOption("a", "age", true, "Your age");

        // --flag অপশন (ফ্ল্যাগ, আর্গুমেন্ট ছাড়াই)
        options.addOption("f", "flag", false, "Activate flag");

        // --options অপশন (কমা দ্বারা পৃথক একাধিক আর্গুমেন্ট)
        options.addOption("o", "options", true, "Comma separated list of options");

        // CommandLineParser ব্যবহার করা
        CommandLineParser parser = new DefaultParser();
        CommandLine cmd = null;

        try {
            // কমান্ড লাইন আর্গুমেন্ট পার্স করা
            cmd = parser.parse(options, args);

            // --name অপশন চেক করা
            if (cmd.hasOption("n")) {
                String name = cmd.getOptionValue("n");
                System.out.println("Name: " + name);
            }

            // --age অপশন চেক করা
            if (cmd.hasOption("a")) {
                String age = cmd.getOptionValue("a");
                System.out.println("Age: " + age);
            }

            // --flag অপশন চেক করা
            if (cmd.hasOption("f")) {
                System.out.println("Flag is activated!");
            }

            // --options অপশন চেক করা
            if (cmd.hasOption("o")) {
                String optionsValue = cmd.getOptionValue("o");
                String[] optionsArray = optionsValue.split(",");
                System.out.println("Options: " + Arrays.toString(optionsArray));
            }

        } catch (ParseException e) {
            System.out.println("Parsing failed. Reason: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("CommandLineExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Options Object:
    • এখানে আমরা চারটি অপশন তৈরি করেছি: name (নাম), age (বয়স), flag (ফ্ল্যাগ), এবং options (কমা দ্বারা পৃথক একাধিক অপশন)।
  2. Option Argument Type:
    • hasArg(true): এই অপশনটি আর্গুমেন্ট গ্রহণ করবে, যেমন -n (নাম) বা -a (বয়স)।
    • hasArg(false): ফ্ল্যাগ অপশন, আর্গুমেন্ট ছাড়াই ব্যবহৃত হবে (যেমন -f)।
  3. Multiple Arguments Handling:
    • -o অপশনটি একাধিক আর্গুমেন্ট গ্রহণ করবে, যা কমা দ্বারা পৃথক করা হবে (যেমন --options=opt1,opt2), এবং সেই আর্গুমেন্টগুলিকে split(",") দিয়ে পৃথক করা হবে।
  4. CommandLineParser:
    • DefaultParser ব্যবহার করা হয়েছে, যা সাধারন কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য উপযুক্ত।

3. কমান্ড লাইন আর্গুমেন্ট ব্যবহার

এই প্রোগ্রামটি চালানোর সময় আপনি বিভিন্ন কমান্ড লাইন আর্গুমেন্ট ব্যবহার করতে পারেন। নিচে কিছু উদাহরণ দেওয়া হয়েছে:

উদাহরণ 1: সকল আর্গুমেন্ট সহ

java CommandLineExample -n John -a 30 -f --options=opt1,opt2,opt3

আউটপুট:

Name: John
Age: 30
Flag is activated!
Options: [opt1, opt2, opt3]

উদাহরণ 2: শুধুমাত্র --name এবং --age সহ

java CommandLineExample -n Alice -a 25

আউটপুট:

Name: Alice
Age: 25

উদাহরণ 3: শুধুমাত্র --flag সহ

java CommandLineExample -f

আউটপুট:

Flag is activated!

উদাহরণ 4: --options অপশন ব্যবহার করা

java CommandLineExample --options=opt1,opt2

আউটপুট:

Options: [opt1, opt2]

4. Error Handling

যদি কোনো ভুল আর্গুমেন্ট বা অপশন দেওয়া হয়, তাহলে আপনি HelpFormatter ব্যবহার করে ইউজারকে সাহায্য প্রদর্শন করতে পারেন:

HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineExample", options);

এটি কমান্ড লাইন ব্যবহারকারীর জন্য সাহায্য বার্তা প্রদর্শন করবে, যেমন অপশনগুলো কীভাবে ব্যবহার করতে হবে তা।


সারাংশ

Apache Commons CLI লাইব্রেরি ব্যবহার করে কমপ্লেক্স কমান্ড লাইন সিনট্যাক্স হ্যান্ডল করা খুবই সহজ। আপনি একাধিক আর্গুমেন্ট, অপশনাল আর্গুমেন্ট, এবং ফ্ল্যাগস ব্যবহার করে জটিল কমান্ড লাইন অ্যাপ্লিকেশন তৈরি করতে পারেন। Options অবজেক্টে অপশন এবং আর্গুমেন্টের স্টাইল কনফিগার করা হয় এবং CommandLineParser ব্যবহার করে সেগুলো পার্স করা হয়। HelpFormatter ব্যবহার করে ব্যবহারকারীদের সাহায্য প্রদর্শন করা হয়।

Content added By

Apache Commons CLI লাইব্রেরি ব্যবহার করে Command Line Parsing করার সময় কিছু Best Practices অনুসরণ করা গুরুত্বপূর্ণ। সঠিকভাবে কমান্ড লাইন আর্গুমেন্টস প্রক্রিয়া করা অ্যাপ্লিকেশনের সঠিক কার্যকারিতা এবং ব্যবহারকারীর জন্য সহজতর ইন্টারফেস নিশ্চিত করতে সহায়তা করে। নিচে Apache Commons CLI ব্যবহার করার জন্য কিছু গুরুত্বপূর্ণ Best Practices দেওয়া হলো।


1. স্পষ্ট এবং বোধগম্য অপশন নাম ব্যবহার করুন

আপনার কমান্ড লাইন অপশনগুলির নাম এমনভাবে নির্বাচন করুন যাতে সেগুলি পরিষ্কার এবং ব্যবহারকারী-friendly হয়। অপশনগুলির নাম স্বতঃস্ফূর্তভাবে তাদের কাজ ব্যাখ্যা করতে সক্ষম হওয়া উচিত।

  • Short Options: একক অক্ষরের অপশনগুলি সাধারণত স্বীকৃত এবং ছোট আকারে থাকে, তবে সেগুলি খুব বেশি সীমাবদ্ধ হতে পারে।
  • Long Options: পূর্ণ বর্ণনা ব্যবহারকারীকে পরিষ্কার ধারণা দেয়। যেমন --file এর পরিবর্তে --input-file বা --verbose এর পরিবর্তে --enable-verbose ব্যবহার করা যেতে পারে।

উদাহরণ:

options.addOption("h", "help", false, "Show help");
options.addOption("f", "file", true, "Input file");
options.addOption("v", "verbose", false, "Enable verbose output");

এখানে, -h এবং --help অপশনটি ব্যবহারকারীকে সাহায্য প্রদর্শনের জন্য এবং -f এবং --file অপশনটি ইনপুট ফাইল গ্রহণ করার জন্য ব্যবহার করা হয়েছে।


2. Default Option Values সেট করুন

কিছু ক্ষেত্রে, ব্যবহারকারী যদি একটি নির্দিষ্ট অপশন সরবরাহ না করেন, তবে একটি default value প্রদান করা উচিত। এটি ত্রুটি থেকে রক্ষা করবে এবং অ্যাপ্লিকেশনকে আরও ব্যবহারকারী-বান্ধব করে তুলবে।

উদাহরণ:

options.addOption("f", "file", true, "Input file");

এছাড়া, কোডে আপনি ডিফল্ট মান সেট করতে পারেন যদি ব্যবহারকারী ফাইলের আর্গুমেন্ট না প্রদান করেন:

String file = cmd.hasOption("f") ? cmd.getOptionValue("f") : "default.txt";

3. Error Handling এবং Help Message প্রদান করা

অপশন পার্স করার সময় ParseException এরর হ্যান্ডলিং করা অপরিহার্য। যদি ব্যবহারকারী ভুল আর্গুমেন্ট প্রদান করেন, তবে HelpFormatter ব্যবহার করে একটি পরিষ্কার এবং সহায়ক বার্তা প্রদর্শন করুন। এতে ব্যবহারকারীকে সমস্যা সমাধানে সাহায্য করবে এবং অপশনগুলি বুঝতে সহজ হবে।

উদাহরণ:

try {
    CommandLine cmd = parser.parse(options, args);
} catch (ParseException e) {
    System.err.println("Error: " + e.getMessage());
    HelpFormatter formatter = new HelpFormatter();
    formatter.printHelp("MyApp", options);
}

এখানে HelpFormatter ব্যবহার করা হয়েছে যাতে অপশনগুলির বর্ণনা এবং সঠিক আর্গুমেন্ট সম্পর্কে তথ্য প্রদান করা যায়।


4. ভ্যালিডেশন এবং আর্গুমেন্ট চেক করা

অপশন পার্সিংয়ের সময় ব্যবহারকারী যদি ভুল আর্গুমেন্ট প্রদান করেন (যেমন, আর্গুমেন্টের টাইপ সঠিক না হলে বা প্রয়োজনীয় আর্গুমেন্ট না দেওয়া হলে), তবে আপনাকে সেগুলির জন্য ভ্যালিডেশন করতে হবে। এতে অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করবে এবং ব্যবহারকারীকে নির্দিষ্ট ত্রুটি বার্তা দেওয়া হবে।

উদাহরণ:

if (cmd.hasOption("f")) {
    String file = cmd.getOptionValue("f");
    if (!new File(file).exists()) {
        System.err.println("The specified file does not exist.");
    }
}

এখানে, -f অপশন দেওয়া হলে, ফাইলটি সঠিকভাবে রয়েছে কিনা তা চেক করা হচ্ছে।


5. Optional Options Handling

যেকোনো অতিরিক্ত অপশন বা আর্গুমেন্ট থাকা উচিত এবং তাদের গুরুত্ব অনুযায়ী প্রক্রিয়া করা উচিত। কিছু অপশন বা আর্গুমেন্ট অপশনাল হতে পারে, এবং সেগুলি দিয়ে অ্যাপ্লিকেশনকে আরও কাস্টমাইজ করা যেতে পারে।

উদাহরণ:

options.addOption("v", "verbose", false, "Enable verbose logging");

এটি একটি বুলিয়ান (boolean) অপশন যা ব্যবহারকারী কর্তৃক প্রদান না হলে ডিফল্ট False থাকে।


6. Command Line Arguments কে গ্রুপ করে সাজানো

যদি অনেক অপশন থাকে, তবে সেগুলি একটি নির্দিষ্ট গ্রুপে সাজান এবং সেগুলির মধ্যে সম্পর্ক তৈরি করুন। এটি কোডকে আরও পরিষ্কার এবং ব্যবস্থাপনা সহজ করে তোলে।

উদাহরণ:

OptionGroup group = new OptionGroup();
group.addOption(new Option("f", "file", true, "Input file"));
group.addOption(new Option("d", "directory", true, "Directory path"));
options.addOptionGroup(group);

এখানে, -f এবং -d অপশন দুটি একত্রিত করা হয়েছে, এবং OptionGroup ব্যবহার করে একত্রিত করা হয়েছে। এই ধরনের গ্রুপিং অপশনগুলির মধ্যে সম্পর্ক নির্ধারণে সহায়তা করে।


7. Verbose Mode এবং Debugging

Verbose Mode এবং Debugging সক্রিয় করার জন্য একটি -v অথবা --verbose অপশন যোগ করতে পারেন। এটি অ্যাপ্লিকেশনটি ডিবাগ করতে এবং সমস্যাগুলি দ্রুত সনাক্ত করতে সহায়ক।

উদাহরণ:

if (cmd.hasOption("v")) {
    System.out.println("Verbose mode enabled.");
    // Additional debug info can be printed here
}

এটি উন্নয়ন বা ডিবাগিং প্রক্রিয়ার জন্য কার্যকরী হতে পারে।


8. Command Line Arguments এর মাধ্যমে ফাইল এবং ডিরেক্টরি পাথ পরিচালনা

যেহেতু ফাইল এবং ডিরেক্টরি পাথ কমান্ড লাইন থেকে আর্গুমেন্ট হিসেবে আনা হয়, তাই এগুলির সঠিকতা যাচাই করা উচিত এবং পাথের বৈধতা যাচাই করা উচিত।

উদাহরণ:

options.addOption("f", "file", true, "Input file path");
String filePath = cmd.getOptionValue("f");
File file = new File(filePath);
if (!file.exists()) {
    System.err.println("File not found: " + filePath);
}

এখানে, ফাইলের অস্তিত্ব যাচাই করা হচ্ছে এবং যদি ফাইলটি না থাকে, তাহলে একটি ত্রুটি বার্তা প্রদর্শন করা হচ্ছে।


সারাংশ

Apache Commons CLI ব্যবহার করার সময় কিছু Best Practices অনুসরণ করলে আপনার অ্যাপ্লিকেশনটির কমান্ড লাইন ইন্টারফেস আরও শক্তিশালী, ব্যবহারকারী-বান্ধব এবং ত্রুটিমুক্ত হবে। এর মধ্যে অপশন নামের স্পষ্টতা, আর্গুমেন্ট চেক করা, ডিফল্ট মান, এবং ত্রুটি হ্যান্ডলিংয়ের মাধ্যমে এক্সপেরিয়েন্স উন্নত করা সম্ভব। HelpFormatter, OptionGroup, এবং Validation এর ব্যবহার দিয়ে আপনি আরও উন্নত CLI অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...