All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.acidmanic.commandline.utility.ParameterDescriber Maven / Gradle / Ivy

package com.acidmanic.commandline.utility;

import java.util.Collection;

import com.acidmanic.commandline.commands.parameters.Parameter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class ParameterDescriber  {

    public String describeParameters(Collection> params){
        
        Collection> sortedParams = sort(params);
        
        StringBuilder sb = new StringBuilder();

        appendCommandCall(sb,sortedParams);

        appendParameterDescriptions(sb,sortedParams);
        
        return sb.toString();
    }

    private void appendParameterDescriptions(StringBuilder sb, Collection> params) {
        
        for(Parameter param : params){

            String name = param.getName();

            sb.append('\n').append('\t').append(name).append('\t')

            .append(param.getDescription());
        }
    }

    private StringBuilder appendCommandCall(StringBuilder sb, Collection> params) {

        String mandatories = "";
        String optionals ="";
        boolean anyOptional = false;
        
        for(Parameter param : params){

            if(param.isMandatory()){

                mandatories += param.describeProvision() + " ";

            }else{

                anyOptional = true;
                
                optionals += param.describeProvision() + " ";
            }
        }

        sb.append(mandatories.trim());

        if(anyOptional){

            sb.append(" [ ").append(optionals.trim()).append(" ]");
        }
        
        return sb;
    }

    private Collection> sort(Collection> params) {
        
        List> sortedParams = new ArrayList<>();
        
        params.forEach(param -> sortedParams.add(param));
        
        sortedParams.sort((o1,o2) -> compare (o1,o2));
        
        return sortedParams;
    }

    private int compare(Parameter o1, Parameter o2) {
        if(o1.isMandatory() && !o2.isMandatory()){
            return 10;
        }
        
        if(!o1.isMandatory() && o2.isMandatory()){
            return -10;
        }
        
        return o1.compareOrderTo(o2);
    }
    
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy