blob: c643115688e84e4dbf393e22e30c1004c7f31b7f [file] [log] [blame]
package com.yahoo.labs.samoa.moa.options;
/*
* #%L
* SAMOA
* %%
* Copyright (C) 2007 University of Waikato, Hamilton, New Zealand
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import java.util.HashMap;
import com.github.javacliparser.JavaCLIParser;
import com.github.javacliparser.Option;
import com.yahoo.labs.samoa.moa.core.ObjectRepository;
import com.yahoo.labs.samoa.moa.tasks.NullMonitor;
import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author abifet
*/
public class OptionsHandler extends JavaCLIParser {
//public Object handler;
public OptionsHandler(Object c, String cliString) {
super(c,cliString);
//this.handler = c;
//this.prepareForUse();
/*int firstSpaceIndex = cliString.indexOf(' ', 0);
String classOptions;
String className;
if (firstSpaceIndex > 0) {
className = cliString.substring(0, firstSpaceIndex);
classOptions = cliString.substring(firstSpaceIndex + 1, cliString.length());
classOptions = classOptions.trim();
} else {
className = cliString;
classOptions = "";
}*/
//options.setViaCLIString(cliString);
}
//private static final long serialVersionUID = 1L;
/** Options to handle */
//protected Options options;
/** Dictionary with option texts and objects */
//protected Map<String, Object> classOptionNamesToPreparedObjects;
/*public String getPurposeString() {
return "Anonymous object: purpose undocumented.";
}
public Options getOptions() {
if (this.options == null) {
this.options = new Options();
Option[] myOptions = discoverOptionsViaReflection();
for (Option option : myOptions) {
this.options.addOption(option);
}
}
return this.options;
}*/
public void prepareForUse() {
prepareForUse(new NullMonitor(), null);
}
public void prepareForUse(TaskMonitor monitor, ObjectRepository repository) {
prepareClassOptions(monitor, repository);
//prepareForUseImpl(monitor, repository);
}
/**
* This method describes the implementation of how to prepare this object for use.
* All classes that extends this class have to implement <code>prepareForUseImpl</code>
* and not <code>prepareForUse</code> since
* <code>prepareForUse</code> calls <code>prepareForUseImpl</code>.
*
* @param monitor the TaskMonitor to use
* @param repository the ObjectRepository to use
*/
//protected abstract void prepareForUseImpl(TaskMonitor monitor,
// ObjectRepository repository);
/* public String getCLICreationString(Class<?> expectedType) {
return ClassOption.stripPackagePrefix(this.getClass().getName(),
expectedType)
+ " " + getOptions().getAsCLIString();
}*/
/**
* Gets the options of this class via reflection.
*
* @return an array of options
*/
/*public Option[] discoverOptionsViaReflection() {
//Class<? extends AbstractOptionHandler> c = this.getClass();
Class c = this.handler.getClass();
Field[] fields = c.getFields();
List<Option> optList = new LinkedList<Option>();
for (Field field : fields) {
String fName = field.getName();
Class<?> fType = field.getType();
if (fType.getName().endsWith("Option")) {
if (Option.class.isAssignableFrom(fType)) {
Option oVal = null;
try {
field.setAccessible(true);
oVal = (Option) field.get(this.handler);
} catch (IllegalAccessException ignored) {
// cannot access this field
}
if (oVal != null) {
optList.add(oVal);
}
}
}
}
return optList.toArray(new Option[optList.size()]);
}*/
/**
* Prepares the options of this class.
*
* @param monitor the TaskMonitor to use
* @param repository the ObjectRepository to use
*/
public void prepareClassOptions(TaskMonitor monitor,
ObjectRepository repository) {
this.classOptionNamesToPreparedObjects = null;
Option[] optionArray = getOptions().getOptionArray();
for (Option option : optionArray) {
if (option instanceof ClassOption) {
ClassOption classOption = (ClassOption) option;
monitor.setCurrentActivity("Materializing option "
+ classOption.getName() + "...", -1.0);
Object optionObj = classOption.materializeObject(monitor,
repository);
if (monitor.taskShouldAbort()) {
return;
}
if (optionObj instanceof OptionHandler) {
monitor.setCurrentActivity("Preparing option "
+ classOption.getName() + "...", -1.0);
((OptionHandler) optionObj).prepareForUse(monitor,
repository);
if (monitor.taskShouldAbort()) {
return;
}
}
if (this.classOptionNamesToPreparedObjects == null) {
this.classOptionNamesToPreparedObjects = new HashMap<String, Object>();
}
this.classOptionNamesToPreparedObjects.put(option.getName(),
optionObj);
}
}
}
/**
* Gets a prepared option of this class.
*
* @param opt the class option to get
* @return an option stored in the dictionary
*/
public Object getPreparedClassOption(ClassOption opt) {
if (this.classOptionNamesToPreparedObjects == null) {
this.prepareForUse();
}
return this.classOptionNamesToPreparedObjects.get(opt.getName());
}
//@Override
//public void getDescription(StringBuilder sb, int i) {
// throw new UnsupportedOperationException("Not supported yet.");
//}
}