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

org.rhq.plugins.apache.mapping.SpecificParams Maven / Gradle / Ivy

There is a newer version: 4.13.0
Show newest version
package org.rhq.plugins.apache.mapping;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Class is used for avoid using of specific parameters which can not be used in augeas resp. in Rhq configuration.
 * During the transformation from augeas tree to configuration and back we need to replace directive specific parameters
 * by parameters which are understandable for RHQ configuration. 
 * @author fdrabek
 *
 */
public class SpecificParams {

    /**
     * Before mapping back to cofiguration file we need to replace all configuration specific parameters
     * by directive specific parameters.
     * 
     * @param name Name of the directive.
     * @param param Parameters of directive. 
     * @return directive prepared for validation without configuration specific parameters.
     */
    public static String prepareForAugeas(String name, String value) {
        if (name.equals("Options")) {
            StringBuilder ret = new StringBuilder();
            Pattern pattern = Pattern.compile("[ \t]*(Add|Remove|Set)[ \t]*([a-zA-Z]+)");
            int startIndex = 0;
            boolean updated = true;
            while (updated && startIndex < value.length()) {
                updated = false;
                Matcher m = pattern.matcher(value);
                while (m.find(startIndex)) {
                    if (m.groupCount() > 0)
                        for (int i = 1; i <= m.groupCount(); i++) {
                            String val = m.group(i);
                            if (val.equals("Add"))
                                val = "+";
                            if (val.equals("Remove"))
                                val = "-";
                            if (val.equals("Set"))
                                val = "";
                            ret.append(val + " ");
                        }
                    updated = true;
                    startIndex = m.end();
                }
            }
            if (ret.length() > 0)
                ret.deleteCharAt(ret.length() - 1);

            return ret.toString();
        }

        if (name.equals("Listen")) {
            int i;
            StringBuilder val = new StringBuilder(value);
            while (val.charAt(0) == ' ' || val.charAt(0) == '\t')
                val.deleteCharAt(0);

            String[] str = val.toString().split("[ \t]+");

            Pattern pat = Pattern.compile("[0-9]+");
            StringBuilder bld = new StringBuilder();
            for (i = 0; i < str.length; i++) {
                Matcher m = pat.matcher(str[i]);
                if (m.matches()) {
                    if (i == 1)
                        str[i] = ":" + str[i];
                    else
                        str[i] = " " + str[i];
                } else
                    str[i] = " " + str[i];
                bld.append(str[i]);
            }
            return bld.toString();
        }

        return value;

    }

    /**
     * Before mapping back to cofiguration file we need to replace all configuration specific parameters
     * by directive specific parameters.
     * 
     * @param name Name of the directive.
     * @param param Parameters of directive. 
     * @return directive prepared for validation without configuration specific parameters.
     */

    public static StringBuilder prepareForConfiguration(String name, StringBuilder value) {
        if (name.equals("Options")) {
            StringBuilder ret = new StringBuilder();
            Pattern pattern = Pattern.compile("[ \t]*([+-]?)([a-zA-Z]+)");
            int startIndex = 0;
            boolean updated = true;
            while (updated && startIndex < value.length()) {
                updated = false;
                Matcher m = pattern.matcher(value);
                while (m.find(startIndex)) {
                    if (m.groupCount() > 0)
                        for (int i = 1; i <= m.groupCount(); i++) {
                            String val = m.group(i);
                            if (val.equals("+"))
                                val = "Add";
                            if (val.equals("-"))
                                val = "Remove";
                            if (val.equals(""))
                                val = "Set";
                            ret.append(val + " ");
                        }
                    updated = true;
                    startIndex = m.end();
                }
            }
            if (ret.length() > 0)
                ret.deleteCharAt(ret.length() - 1);

            return ret;
        }

        return value;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy