001    package org.hackystat.sensor.xmldata.option;
002    
003    import java.util.List;
004    
005    import org.hackystat.sensor.xmldata.XmlDataController;
006    
007    /**
008     * The class which follows the factory pattern to encapsulate the creation of
009     * options based on the specified parameters.
010     * @author aito
011     * 
012     */
013    public class OptionFactory {
014      /** Private constructor to prevent instantiation. */
015      private OptionFactory() {
016      }
017    
018      /**
019       * Returns an option instance based on the specified option name and
020       * parameters. If an option cannot be created, null is returned.
021       * @param controller the specified controller used to create an option.
022       * @param optionName the option name.
023       * @param parameters the option parameters.
024       * @return the option instance if it can be created, or null if an option
025       * instance cannot be created using the specified arguments.
026       */
027      public static Option getInstance(XmlDataController controller, String optionName,
028          List<String> parameters) {
029    
030        if (SdtOption.OPTION_NAME.equals(optionName)) {
031          return new SdtOption(controller, parameters);
032        }
033        else if (FileOption.OPTION_NAME.equals(optionName)) {
034          return new FileOption(controller, parameters);
035        }
036        else if (VerboseOption.OPTION_NAME.equals(optionName)) {
037          return new VerboseOption(controller, parameters);
038        }
039        else if (ArgListOption.OPTION_NAME.equals(optionName)) {
040          return new ArgListOption(controller, parameters);
041        }
042        else if (UniqueTstampOption.OPTION_NAME.equals(optionName)) {
043          return new UniqueTstampOption(controller, parameters);
044        }
045        else if (MigrationOption.OPTION_NAME.equals(optionName)) {
046          return new MigrationOption(controller, parameters);
047        }
048        else if (MultiShellOption.OPTION_NAME.equals(optionName)) {
049          return new MultiShellOption(controller, parameters);
050        }
051        else if (SetRuntimeOption.OPTION_NAME.equals(optionName)) {
052          return new SetRuntimeOption(controller, parameters);
053        }
054        else if (ResourceOption.OPTION_NAME.equals(optionName)) {
055          return new ResourceOption(controller, parameters);
056        }
057        else {
058          controller.fireMessage("The '" + optionName + "' option is not supported.");
059        }
060        return null;
061      }
062    }