Default এবং Custom Values সেট করা

Advanced Option এবং Argument হ্যান্ডলিং - অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) - Java Technologies

258

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

এখানে আমরা দেখব কিভাবে Default values এবং Custom values সেট করা যায় Apache Commons CLI ব্যবহার করে।


১. Default Values সেট করা

কখনও কখনও, আপনি চান যে কিছু অপশনগুলির জন্য default values ব্যবহার করা হোক, যদি ইউজার সেগুলি প্রদান না করেন। Apache Commons CLI এ আপনি Option তৈরির সময় setOptionalArg(true) ব্যবহার করে এই ডিফল্ট মানটি সেট করতে পারেন।

উদাহরণ:

ধরা যাক, আমাদের একটি অ্যাপ্লিকেশন আছে, যেখানে একটি ইনপুট ফাইল (-f) এবং একটি আউটপুট ফাইল (-o) প্রদান করা হয়। যদি আউটপুট ফাইল (-o) ইউজার প্রদান না করেন, তবে আমরা একটি ডিফল্ট ফাইল নাম (output.txt) সেট করব।

import org.apache.commons.cli.*;

public class DefaultValuesExample {

    public static void main(String[] args) {
        // অপশন কনফিগারেশন
        Options options = new Options();

        // ইনপুট ফাইল অপশন (Required)
        Option inputFile = new Option("f", "file", true, "Input file path");
        inputFile.setRequired(true);  // এটি একটি Required অপশন
        options.addOption(inputFile);

        // আউটপুট ফাইল অপশন (Optional, Default value সেট করা হবে)
        Option outputFile = new Option("o", "output", true, "Output file path");
        outputFile.setRequired(false);  // এটি একটি Optional অপশন
        options.addOption(outputFile);

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

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

            // ইনপুট ফাইল নাম গ্রহণ
            String input = cmd.getOptionValue("f");
            System.out.println("Input file: " + input);

            // আউটপুট ফাইল নাম গ্রহণ (যদি দেওয়া থাকে)
            String output = cmd.getOptionValue("o");

            // যদি আউটপুট ফাইল নাম না দেওয়া থাকে, ডিফল্ট সেট করা হবে
            if (output == null) {
                output = "output.txt";
            }
            System.out.println("Output file: " + output);

        } catch (ParseException e) {
            // যদি Required আর্গুমেন্ট না দেওয়া হয়
            System.err.println("Error: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("DefaultValuesExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Option inputFile: এই অপশনটি Required, তাই এটি অবশ্যই প্রদান করতে হবে।
  2. Option outputFile: এই অপশনটি Optional, তবে যদি ইউজার এটি প্রদান না করেন, তবে আমরা একটি default value হিসেবে "output.txt" সেট করি।
  3. cmd.getOptionValue("o"): আউটপুট ফাইল অপশন থেকে মান নেওয়া হয়েছে এবং যদি এটি প্রদান না করা হয়, তাহলে "output.txt" ডিফল্টভাবে সেট করা হয়।

আউটপুট:

  • যদি আপনি আউটপুট ফাইলের নাম না দেন:
java DefaultValuesExample -f input.txt

আউটপুট:

Input file: input.txt
Output file: output.txt
  • যদি আপনি আউটপুট ফাইলের নাম দেন:
java DefaultValuesExample -f input.txt -o result.txt

আউটপুট:

Input file: input.txt
Output file: result.txt

২. Custom Values সেট করা

কিছু ক্ষেত্রে, আপনি চান যে কিছু অপশন custom values গ্রহণ করুক, যা ব্যবহারকারীর ইনপুট বা অন্য কোন কন্ডিশনের উপর নির্ভর করবে। Apache Commons CLI এ আপনি Option এর setValueSeparator() বা setArgName() ব্যবহার করে কাস্টম মান সেট করতে পারেন।

উদাহরণ:

ধরা যাক, আপনি একটি অ্যাপ্লিকেশন তৈরি করেছেন যেখানে ইউজার একটি অপশন থেকে একটি কাস্টম মান নির্বাচন করবে, যেমন একটি ইমেল প্রেরণের জন্য SMTP সার্ভারের নাম এবং পোর্ট নম্বর।

import org.apache.commons.cli.*;

public class CustomValuesExample {

    public static void main(String[] args) {
        // অপশন কনফিগারেশন
        Options options = new Options();

        // SMTP সার্ভার এবং পোর্ট অপশন
        Option smtpOption = new Option("s", "smtp", true, "SMTP server and port");
        smtpOption.setRequired(true);
        options.addOption(smtpOption);

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

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

            // SMTP সার্ভার এবং পোর্ট গ্রহণ
            String smtpValue = cmd.getOptionValue("s");

            // কাস্টম মান (SMTP সার্ভার এবং পোর্ট) সেট করা
            String[] smtpDetails = smtpValue.split(":");
            String server = smtpDetails[0];
            String port = smtpDetails[1];

            System.out.println("SMTP Server: " + server);
            System.out.println("SMTP Port: " + port);

        } catch (ParseException e) {
            // যদি Required আর্গুমেন্ট না দেওয়া হয়
            System.err.println("Error: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("CustomValuesExample", options);
        }
    }
}

ব্যাখ্যা:

  1. Option smtpOption: এই অপশনটি Required এবং এটি SMTP server and port কে গ্রহণ করে। ইউজারকে এটি server:port ফরম্যাটে প্রদান করতে হবে (যেমন smtp.example.com:25)।
  2. split(":"): split(":") ব্যবহার করে আমরা সার্ভার নাম এবং পোর্ট আলাদা করি, যা ইউজার প্রদান করবে।

আউটপুট:

  • যদি আপনি SMTP সার্ভার এবং পোর্ট প্রদান করেন:
java CustomValuesExample -s smtp.example.com:25

আউটপুট:

SMTP Server: smtp.example.com
SMTP Port: 25

৩. Dynamic Custom Values

আপনি চাইলে ইউজারের ইনপুট অনুযায়ী কাস্টম মান পরিবর্তন করতে পারেন। ধরুন, একটি কমান্ড-লাইন অ্যাপ্লিকেশন তৈরি করছেন যা ইউজারের প্রদত্ত পোর্ট নম্বর অনুযায়ী একটি নির্দিষ্ট কাজ করবে, যেমন একটি সার্ভার চালু করা।

উদাহরণ:

import org.apache.commons.cli.*;

public class DynamicCustomValuesExample {

    public static void main(String[] args) {
        // অপশন কনফিগারেশন
        Options options = new Options();

        // পোর্ট নম্বর অপশন
        Option portOption = new Option("p", "port", true, "Port number for the server");
        portOption.setRequired(true);  // এই অপশনটি Required
        options.addOption(portOption);

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

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

            // পোর্ট নম্বর গ্রহণ
            String port = cmd.getOptionValue("p");
            int portNumber = Integer.parseInt(port);

            // কাস্টম মান যাচাই এবং কাজ করা
            if (portNumber == 8080) {
                System.out.println("Starting server on port 8080...");
            } else {
                System.out.println("Starting server on port " + portNumber + "...");
            }

        } catch (ParseException e) {
            // যদি Required আর্গুমেন্ট না দেওয়া হয়
            System.err.println("Error: " + e.getMessage());
            HelpFormatter formatter = new HelpFormatter();
            formatter.printHelp("DynamicCustomValuesExample", options);
        } catch (NumberFormatException e) {
            System.err.println("Error: Invalid port number format.");
        }
    }
}

ব্যাখ্যা:

  1. Dynamic Custom Values: এখানে আমরা ইউজারের প্রদত্ত পোর্ট নম্বরের উপর ভিত্তি করে একটি বিশেষ কাজ করতে চাই (যেমন পোর্ট 8080 হলে সার্ভার চালু করা)।
  2. Integer.parseInt(): ইউজারের ইনপুট পোর্ট নম্বরটিকে Integer এ কনভার্ট করা হয়েছে এবং তারপরে তা ব্যবহার করা হয়েছে।

আউটপুট:

  • যদি আপনি পোর্ট 8080 প্রদান করেন:
java DynamicCustomValuesExample -p 8080

আউটপুট:

Starting server on port 8080...
  • যদি আপনি অন্য কোন পোর্ট প্রদান করেন:
java DynamicCustomValuesExample -p 9090

আউটপুট:

Starting server on port 9090...

সারাংশ

Apache Commons CLI ব্যবহার করে আপনি Default values এবং Custom values সহজেই সেট করতে পারেন:

  1. Default Values: আপনি অপশনগুলির জন্য ডিফল্ট মান নির্ধারণ করতে পারেন, যাতে ইউজার যদি কোনো মান প্রদান না করেন, তবে সেই ডিফল্ট মান ব্যবহার করা হয়।
  2. Custom Values: ইউজারের ইনপুট অনুযায়ী কাস্টম মান নির্ধারণ এবং সেট করা সম্ভব। আপনি split(), parse(), অথবা অন্যান্য কাস্টম লজিক ব্যবহার করে এই মান প্রক্রিয়া করতে পারেন।

এভাবে, আপনি CLI অ্যাপ্লিকেশনগুলিতে default এবং custom মান ব্যবহারের মাধ্যমে ফিচার এবং কার্যকারিতা কাস্টমাইজ করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...