http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractClassOption.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractClassOption.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractClassOption.java
deleted file mode 100644
index 11ecad3..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractClassOption.java
+++ /dev/null
@@ -1,252 +0,0 @@
-package com.yahoo.labs.samoa.moa.options;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.io.File;
-import com.github.javacliparser.AbstractOption;
-import com.github.javacliparser.SerializeUtils;
-import com.yahoo.labs.samoa.moa.core.ObjectRepository;
-import com.yahoo.labs.samoa.moa.tasks.Task;
-import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
-
-/**
- * Abstract class option.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision$
- */
-public abstract class AbstractClassOption extends AbstractOption {
-
-  private static final long serialVersionUID = 1L;
-
-  /** The prefix text to use to indicate file. */
-  public static final String FILE_PREFIX_STRING = "file:";
-
-  /** The prefix text to use to indicate inmem. */
-  public static final String INMEM_PREFIX_STRING = "inmem:";
-
-  /** The current object */
-  protected Object currentValue;
-
-  /** The class type */
-  protected Class<?> requiredType;
-
-  /** The default command line interface text. */
-  protected String defaultCLIString;
-
-  /** The null text. */
-  protected String nullString;
-
-  /**
-   * Creates a new instance of an abstract option given its class name, 
command line interface text, its purpose, its
-   * class type and its default command line interface text.
-   * 
-   * @param name
-   *          the name of this option
-   * @param cliChar
-   *          the command line interface text
-   * @param purpose
-   *          the text describing the purpose of this option
-   * @param requiredType
-   *          the class type
-   * @param defaultCLIString
-   *          the default command line interface text
-   */
-  public AbstractClassOption(String name, char cliChar, String purpose,
-      Class<?> requiredType, String defaultCLIString) {
-    this(name, cliChar, purpose, requiredType, defaultCLIString, null);
-  }
-
-  /**
-   * Creates a new instance of an abstract option given its class name, 
command line interface text, its purpose, its
-   * class type, default command line interface text, and its null text.
-   * 
-   * @param name
-   *          the name of this option
-   * @param cliChar
-   *          the command line interface text
-   * @param purpose
-   *          the text describing the purpose of this option
-   * @param requiredType
-   *          the class type
-   * @param defaultCLIString
-   *          the default command line interface text
-   * @param nullString
-   *          the null text
-   */
-  public AbstractClassOption(String name, char cliChar, String purpose,
-      Class<?> requiredType, String defaultCLIString, String nullString) {
-    super(name, cliChar, purpose);
-    this.requiredType = requiredType;
-    this.defaultCLIString = defaultCLIString;
-    this.nullString = nullString;
-    resetToDefault();
-  }
-
-  /**
-   * Sets current object.
-   * 
-   * @param obj
-   *          the object to set as current.
-   */
-  public void setCurrentObject(Object obj) {
-    if (((obj == null) && (this.nullString != null))
-        || this.requiredType.isInstance(obj)
-        || (obj instanceof String)
-        || (obj instanceof File)
-        || ((obj instanceof Task) && 
this.requiredType.isAssignableFrom(((Task) obj).getTaskResultType()))) {
-      this.currentValue = obj;
-    } else {
-      throw new IllegalArgumentException("Object not of required type.");
-    }
-  }
-
-  /**
-   * Returns the current object.
-   * 
-   * @return the current object
-   */
-  public Object getPreMaterializedObject() {
-    return this.currentValue;
-  }
-
-  /**
-   * Gets the class type of this option.
-   * 
-   * @return the class type of this option
-   */
-  public Class<?> getRequiredType() {
-    return this.requiredType;
-  }
-
-  /**
-   * Gets the null string of this option.
-   * 
-   * @return the null string of this option
-   */
-  public String getNullString() {
-    return this.nullString;
-  }
-
-  /**
-   * Gets a materialized object of this option.
-   * 
-   * @param monitor
-   *          the task monitor to use
-   * @param repository
-   *          the object repository to use
-   * @return the materialized object
-   */
-  public Object materializeObject(TaskMonitor monitor,
-      ObjectRepository repository) {
-    if ((this.currentValue == null)
-        || this.requiredType.isInstance(this.currentValue)) {
-      return this.currentValue;
-    } else if (this.currentValue instanceof String) {
-      if (repository != null) {
-        Object inmemObj = repository.getObjectNamed((String) 
this.currentValue);
-        if (inmemObj == null) {
-          throw new RuntimeException("No object named "
-              + this.currentValue + " found in repository.");
-        }
-        return inmemObj;
-      }
-      throw new RuntimeException("No object repository available.");
-    } else if (this.currentValue instanceof Task) {
-      Task task = (Task) this.currentValue;
-      Object result = task.doTask(monitor, repository);
-      return result;
-    } else if (this.currentValue instanceof File) {
-      File inputFile = (File) this.currentValue;
-      Object result = null;
-      try {
-        result = SerializeUtils.readFromFile(inputFile);
-      } catch (Exception ex) {
-        throw new RuntimeException("Problem loading "
-            + this.requiredType.getName() + " object from file '"
-            + inputFile.getName() + "':\n" + ex.getMessage(), ex);
-      }
-      return result;
-    } else {
-      throw new RuntimeException(
-          "Could not materialize object of required type "
-              + this.requiredType.getName() + ", found "
-              + this.currentValue.getClass().getName()
-              + " instead.");
-    }
-  }
-
-  @Override
-  public String getDefaultCLIString() {
-    return this.defaultCLIString;
-  }
-
-  /**
-   * Gets the command line interface text of the class.
-   * 
-   * @param aClass
-   *          the class
-   * @param requiredType
-   *          the class type
-   * @return the command line interface text of the class
-   */
-  public static String classToCLIString(Class<?> aClass, Class<?> 
requiredType) {
-    String className = aClass.getName();
-    String packageName = requiredType.getPackage().getName();
-    if (className.startsWith(packageName)) {
-      // cut off package name
-      className = className.substring(packageName.length() + 1, 
className.length());
-    } else if (Task.class.isAssignableFrom(aClass)) {
-      packageName = Task.class.getPackage().getName();
-      if (className.startsWith(packageName)) {
-        // cut off task package name
-        className = className.substring(packageName.length() + 1,
-            className.length());
-      }
-    }
-    return className;
-  }
-
-  @Override
-  public abstract String getValueAsCLIString();
-
-  @Override
-  public abstract void setValueViaCLIString(String s);
-
-  // @Override
-  // public abstract JComponent getEditComponent();
-
-  /**
-   * Gets the class name without its package name prefix.
-   * 
-   * @param className
-   *          the name of the class
-   * @param expectedType
-   *          the type of the class
-   * @return the class name without its package name prefix
-   */
-  public static String stripPackagePrefix(String className, Class<?> 
expectedType) {
-    if (className.startsWith(expectedType.getPackage().getName())) {
-      return className.substring(expectedType.getPackage().getName().length() 
+ 1);
-    }
-    return className;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractOptionHandler.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractOptionHandler.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractOptionHandler.java
deleted file mode 100644
index 761de50..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/AbstractOptionHandler.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.yahoo.labs.samoa.moa.options;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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 com.github.javacliparser.Options;
-import com.yahoo.labs.samoa.moa.AbstractMOAObject;
-import com.yahoo.labs.samoa.moa.core.ObjectRepository;
-import com.yahoo.labs.samoa.moa.tasks.NullMonitor;
-import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
-
-/**
- * Abstract Option Handler. All classes that have options in MOA extend this 
class.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public abstract class AbstractOptionHandler extends AbstractMOAObject 
implements
-    OptionHandler {
-
-  private static final long serialVersionUID = 1L;
-
-  /** Options to handle */
-  // protected Options options;
-
-  /** Dictionary with option texts and objects */
-  // protected Map<String, Object> classOptionNamesToPreparedObjects;
-
-  @Override
-  public String getPurposeString() {
-    return "Anonymous object: purpose undocumented.";
-  }
-
-  @Override
-  public Options getOptions() {
-    /*
-     * if (this.options == null) { this.options = new Options(); if
-     * (this.config== null) { this.config = new OptionsHandler(this, "");
-     * this.config.prepareForUse(); } Option[] myOptions =
-     * this.config.discoverOptionsViaReflection(); for (Option option :
-     * myOptions) { this.options.addOption(option); } } return this.options;
-     */
-    if (this.config == null) {
-      this.config = new OptionsHandler(this, "");
-      // this.config.prepareForUse(monitor, repository);
-    }
-    return this.config.getOptions();
-  }
-
-  @Override
-  public void prepareForUse() {
-    prepareForUse(new NullMonitor(), null);
-  }
-
-  protected OptionsHandler config;
-
-  @Override
-  public void prepareForUse(TaskMonitor monitor, ObjectRepository repository) {
-    // prepareClassOptions(monitor, repository);
-    if (this.config == null) {
-      this.config = new OptionsHandler(this, "");
-      this.config.prepareForUse(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);
-
-  @Override
-  public String getCLICreationString(Class<?> expectedType) {
-    return ClassOption.stripPackagePrefix(this.getClass().getName(),
-        expectedType)
-        + " " + getOptions().getAsCLIString();
-  }
-
-  @Override
-  public OptionHandler copy() {
-    return (OptionHandler) super.copy();
-  }
-
-  /**
-   * Gets the options of this class via reflection.
-   * 
-   * @return an array of options
-   */
-  /*
-   * protected Option[] discoverOptionsViaReflection() { Class<? extends
-   * AbstractOptionHandler> c = this.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); } 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
-   */
-  protected void prepareClassOptions(TaskMonitor monitor,
-      ObjectRepository repository) {
-    this.config.prepareClassOptions(monitor, 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
-   */
-  protected Object getPreparedClassOption(ClassOption opt) {
-    return this.config.getPreparedClassOption(opt);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/ClassOption.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/ClassOption.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/ClassOption.java
deleted file mode 100644
index 1c047be..0000000
--- a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/ClassOption.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package com.yahoo.labs.samoa.moa.options;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.io.File;
-import com.github.javacliparser.Option;
-import com.github.javacliparser.Options;
-import com.yahoo.labs.samoa.moa.options.OptionHandler;
-import com.yahoo.labs.samoa.moa.tasks.Task;
-
-/**
- * Class option.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public class ClassOption extends AbstractClassOption {
-
-  private static final long serialVersionUID = 1L;
-
-  public ClassOption(String name, char cliChar, String purpose,
-      Class<?> requiredType, String defaultCLIString) {
-    super(name, cliChar, purpose, requiredType, defaultCLIString);
-  }
-
-  public ClassOption(String name, char cliChar, String purpose,
-      Class<?> requiredType, String defaultCLIString, String nullString) {
-    super(name, cliChar, purpose, requiredType, defaultCLIString, nullString);
-  }
-
-  @Override
-  public String getValueAsCLIString() {
-    if ((this.currentValue == null) && (this.nullString != null)) {
-      return this.nullString;
-    }
-    return objectToCLIString(this.currentValue, this.requiredType);
-  }
-
-  @Override
-  public void setValueViaCLIString(String s) {
-    if ((this.nullString != null)
-        && ((s == null) || (s.length() == 0) || s.equals(this.nullString))) {
-      this.currentValue = null;
-    } else {
-      try {
-        this.currentValue = cliStringToObject(s, this.requiredType,
-            null);
-      } catch (Exception e) {
-        throw new IllegalArgumentException("Problems with option: " + 
getName(), e);
-      }
-    }
-  }
-
-  public static String objectToCLIString(Object obj, Class<?> requiredType) {
-    if (obj == null) {
-      return "";
-    }
-    if (obj instanceof File) {
-      return (FILE_PREFIX_STRING + ((File) obj).getPath());
-    }
-    if (obj instanceof String) {
-      return (INMEM_PREFIX_STRING + obj);
-    }
-    String className = classToCLIString(obj.getClass(), requiredType);
-    if (obj instanceof OptionHandler) {
-      String subOptions = ((OptionHandler) obj).getOptions().getAsCLIString();
-      if (subOptions.length() > 0) {
-        return (className + " " + subOptions);
-      }
-    }
-    return className;
-  }
-
-  public static Object cliStringToObject(String cliString,
-      Class<?> requiredType, Option[] externalOptions) throws Exception {
-    if (cliString.startsWith(FILE_PREFIX_STRING)) {
-      return new File(cliString.substring(FILE_PREFIX_STRING.length()));
-    }
-    if (cliString.startsWith(INMEM_PREFIX_STRING)) {
-      return cliString.substring(INMEM_PREFIX_STRING.length());
-    }
-    cliString = cliString.trim();
-    int firstSpaceIndex = cliString.indexOf(' ', 0);
-    String className;
-    String classOptions;
-    if (firstSpaceIndex > 0) {
-      className = cliString.substring(0, firstSpaceIndex);
-      classOptions = cliString.substring(firstSpaceIndex + 1, 
cliString.length());
-      classOptions = classOptions.trim();
-    } else {
-      className = cliString;
-      classOptions = "";
-    }
-    Class<?> classObject;
-    try {
-      classObject = Class.forName(className);
-    } catch (Throwable t1) {
-      try {
-        // try prepending default package
-        classObject = Class.forName(requiredType.getPackage().getName()
-            + "." + className);
-      } catch (Throwable t2) {
-        try {
-          // try prepending task package
-          classObject = Class.forName(Task.class.getPackage().getName()
-              + "." + className);
-        } catch (Throwable t3) {
-          throw new Exception("Class not found: " + className);
-        }
-      }
-    }
-    Object classInstance;
-    try {
-      classInstance = classObject.newInstance();
-    } catch (Exception ex) {
-      throw new Exception("Problem creating instance of class: "
-          + className, ex);
-    }
-    if (requiredType.isInstance(classInstance)
-        || ((classInstance instanceof Task) && requiredType
-            .isAssignableFrom(((Task) classInstance).getTaskResultType()))) {
-      Options options = new Options();
-      if (externalOptions != null) {
-        for (Option option : externalOptions) {
-          options.addOption(option);
-        }
-      }
-      if (classInstance instanceof OptionHandler) {
-        Option[] objectOptions = ((OptionHandler) 
classInstance).getOptions().getOptionArray();
-        for (Option option : objectOptions) {
-          options.addOption(option);
-        }
-      }
-      try {
-        options.setViaCLIString(classOptions);
-      } catch (Exception ex) {
-        throw new Exception("Problem with options to '"
-            + className
-            + "'."
-            + "\n\nValid options for "
-            + className
-            + ":\n"
-            + ((OptionHandler) classInstance).getOptions().getHelpString(), 
ex);
-      } finally {
-        options.removeAllOptions(); // clean up listener refs
-      }
-    } else {
-      throw new Exception("Class named '" + className
-          + "' is not an instance of " + requiredType.getName() + ".");
-    }
-    return classInstance;
-  }
-
-  // @Override
-  // public JComponent getEditComponent() {
-  // return new ClassOptionEditComponent(this);
-  // }
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionHandler.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionHandler.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionHandler.java
deleted file mode 100644
index c325ec3..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionHandler.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.yahoo.labs.samoa.moa.options;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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 com.github.javacliparser.Configurable;
-import com.github.javacliparser.Options;
-import com.yahoo.labs.samoa.moa.MOAObject;
-import com.yahoo.labs.samoa.moa.core.ObjectRepository;
-import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
-
-/**
- * Interface representing an object that handles options or parameters.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public interface OptionHandler extends MOAObject, Configurable {
-
-  /**
-   * Gets the purpose of this object
-   * 
-   * @return the string with the purpose of this object
-   */
-  public String getPurposeString();
-
-  /**
-   * Gets the options of this object
-   * 
-   * @return the options of this object
-   */
-  public Options getOptions();
-
-  /**
-   * This method prepares this object for use.
-   * 
-   */
-  public void prepareForUse();
-
-  /**
-   * This method prepares this object for use.
-   * 
-   * @param monitor
-   *          the TaskMonitor to use
-   * @param repository
-   *          the ObjectRepository to use
-   */
-  public void prepareForUse(TaskMonitor monitor, ObjectRepository repository);
-
-  /**
-   * This method produces a copy of this object.
-   * 
-   * @return a copy of this object
-   */
-  @Override
-  public OptionHandler copy();
-
-  /**
-   * Gets the Command Line Interface text to create the object
-   * 
-   * @return the Command Line Interface text to create the object
-   */
-  public String getCLICreationString(Class<?> expectedType);
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionsHandler.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionsHandler.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionsHandler.java
deleted file mode 100644
index a57cbad..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/options/OptionsHandler.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.yahoo.labs.samoa.moa.options;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.");
-  // }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ArffFileStream.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ArffFileStream.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ArffFileStream.java
deleted file mode 100644
index 7dd0975..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ArffFileStream.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-import com.github.javacliparser.FileOption;
-import com.github.javacliparser.IntOption;
-import com.yahoo.labs.samoa.instances.Instances;
-import com.yahoo.labs.samoa.instances.InstancesHeader;
-import com.yahoo.labs.samoa.moa.core.InputStreamProgressMonitor;
-import com.yahoo.labs.samoa.moa.core.InstanceExample;
-import com.yahoo.labs.samoa.moa.core.ObjectRepository;
-import com.yahoo.labs.samoa.moa.options.AbstractOptionHandler;
-import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
-
-/**
- * Stream reader of ARFF files.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public class ArffFileStream extends AbstractOptionHandler implements 
InstanceStream {
-
-  @Override
-  public String getPurposeString() {
-    return "A stream read from an ARFF file.";
-  }
-
-  private static final long serialVersionUID = 1L;
-
-  public FileOption arffFileOption = new FileOption("arffFile", 'f',
-      "ARFF file to load.", null, "arff", false);
-
-  public IntOption classIndexOption = new IntOption(
-      "classIndex",
-      'c',
-      "Class index of data. 0 for none or -1 for last attribute in file.",
-      -1, -1, Integer.MAX_VALUE);
-
-  protected Instances instances;
-
-  transient protected Reader fileReader;
-
-  protected boolean hitEndOfFile;
-
-  protected InstanceExample lastInstanceRead;
-
-  protected int numInstancesRead;
-
-  transient protected InputStreamProgressMonitor fileProgressMonitor;
-
-  protected boolean hasStarted;
-
-  public ArffFileStream() {
-  }
-
-  public ArffFileStream(String arffFileName, int classIndex) {
-    this.arffFileOption.setValue(arffFileName);
-    this.classIndexOption.setValue(classIndex);
-    this.hasStarted = false;
-    restart();
-  }
-
-  @Override
-  public void prepareForUseImpl(TaskMonitor monitor,
-      ObjectRepository repository) {
-    // restart();
-    this.hasStarted = false;
-    this.lastInstanceRead = null;
-  }
-
-  @Override
-  public InstancesHeader getHeader() {
-    return new InstancesHeader(this.instances);
-  }
-
-  @Override
-  public long estimatedRemainingInstances() {
-    double progressFraction = this.fileProgressMonitor.getProgressFraction();
-    if ((progressFraction > 0.0) && (this.numInstancesRead > 0)) {
-      return (long) ((this.numInstancesRead / progressFraction) - 
this.numInstancesRead);
-    }
-    return -1;
-  }
-
-  @Override
-  public boolean hasMoreInstances() {
-    return !this.hitEndOfFile;
-  }
-
-  @Override
-  public InstanceExample nextInstance() {
-    if (this.lastInstanceRead == null) {
-      readNextInstanceFromFile();
-    }
-    InstanceExample prevInstance = this.lastInstanceRead;
-    this.hitEndOfFile = !readNextInstanceFromFile();
-    return prevInstance;
-  }
-
-  @Override
-  public boolean isRestartable() {
-    return true;
-  }
-
-  @Override
-  public void restart() {
-    try {
-      reset();
-      // this.hitEndOfFile = !readNextInstanceFromFile();
-    } catch (IOException ioe) {
-      throw new RuntimeException("ArffFileStream restart failed.", ioe);
-    }
-  }
-
-  protected boolean readNextInstanceFromFile() {
-    boolean ret;
-    if (!this.hasStarted) {
-      try {
-        reset();
-        ret = getNextInstanceFromFile();
-        this.hitEndOfFile = !ret;
-      } catch (IOException ioe) {
-        throw new RuntimeException("ArffFileStream restart failed.", ioe);
-      }
-      this.hasStarted = true;
-    } else {
-      ret = getNextInstanceFromFile();
-    }
-    return ret;
-  }
-
-  @Override
-  public void getDescription(StringBuilder sb, int indent) {
-    // TODO Auto-generated method stub
-  }
-
-  private void reset() throws IOException {
-    if (this.fileReader != null) {
-      this.fileReader.close();
-    }
-    InputStream fileStream = new 
FileInputStream(this.arffFileOption.getFile());
-    this.fileProgressMonitor = new InputStreamProgressMonitor(
-        fileStream);
-    this.fileReader = new BufferedReader(new InputStreamReader(
-        this.fileProgressMonitor));
-    this.instances = new Instances(this.fileReader, 1, 
this.classIndexOption.getValue());
-    if (this.classIndexOption.getValue() < 0) {
-      this.instances.setClassIndex(this.instances.numAttributes() - 1);
-    } else if (this.classIndexOption.getValue() > 0) {
-      this.instances.setClassIndex(this.classIndexOption.getValue() - 1);
-    }
-    this.numInstancesRead = 0;
-    this.lastInstanceRead = null;
-  }
-
-  private boolean getNextInstanceFromFile() throws RuntimeException {
-    try {
-      if (this.instances.readInstance(this.fileReader)) {
-        this.lastInstanceRead = new 
InstanceExample(this.instances.instance(0));
-        this.instances.delete(); // keep instances clean
-        this.numInstancesRead++;
-        return true;
-      }
-      if (this.fileReader != null) {
-        this.fileReader.close();
-        this.fileReader = null;
-      }
-      return false;
-    } catch (IOException ioe) {
-      throw new RuntimeException(
-          "ArffFileStream failed to read instance from stream.", ioe);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ExampleStream.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ExampleStream.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ExampleStream.java
deleted file mode 100644
index fa120b5..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/ExampleStream.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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 com.yahoo.labs.samoa.instances.InstancesHeader;
-import com.yahoo.labs.samoa.moa.MOAObject;
-import com.yahoo.labs.samoa.moa.core.Example;
-
-/**
- * Interface representing a data stream of examples.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public interface ExampleStream<E extends Example> extends MOAObject {
-
-  /**
-   * Gets the header of this stream. This is useful to know attributes and 
classes. InstancesHeader is an extension of
-   * weka.Instances.
-   * 
-   * @return the header of this stream
-   */
-  public InstancesHeader getHeader();
-
-  /**
-   * Gets the estimated number of remaining instances in this stream
-   * 
-   * @return the estimated number of instances to get from this stream
-   */
-  public long estimatedRemainingInstances();
-
-  /**
-   * Gets whether this stream has more instances to output. This is useful 
when reading streams from files.
-   * 
-   * @return true if this stream has more instances to output
-   */
-  public boolean hasMoreInstances();
-
-  /**
-   * Gets the next example from this stream.
-   * 
-   * @return the next example of this stream
-   */
-  public E nextInstance();
-
-  /**
-   * Gets whether this stream can restart.
-   * 
-   * @return true if this stream can restart
-   */
-  public boolean isRestartable();
-
-  /**
-   * Restarts this stream. It must be similar to starting a new stream from 
scratch.
-   * 
-   */
-  public void restart();
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/InstanceStream.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/InstanceStream.java 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/InstanceStream.java
deleted file mode 100644
index 7b77c13..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/InstanceStream.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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 com.yahoo.labs.samoa.moa.core.Example;
-import com.yahoo.labs.samoa.instances.Instance;
-
-/**
- * Interface representing a data stream of instances.
- * 
- * @author Richard Kirkby ([email protected])
- * @version $Revision: 7 $
- */
-public interface InstanceStream extends ExampleStream<Example<Instance>> {
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEvent.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEvent.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEvent.java
deleted file mode 100644
index ac0dc8c..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEvent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams.clustering;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.EventObject;
-
-public class ClusterEvent extends EventObject {
-
-  private String type;
-  private String message;
-  private long timestamp;
-
-  public ClusterEvent(Object source, long timestamp, String type, String 
message) {
-    super(source);
-    this.type = type;
-    this.message = message;
-    this.timestamp = timestamp;
-  }
-
-  public String getMessage() {
-    return message;
-  }
-
-  public long getTimestamp() {
-    return timestamp;
-  }
-
-  public String getType() {
-    return type;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEventListener.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEventListener.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEventListener.java
deleted file mode 100644
index 311339a..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusterEventListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams.clustering;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.EventListener;
-
-public interface ClusterEventListener extends EventListener {
-
-  public void changeCluster(ClusterEvent e);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusteringStream.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusteringStream.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusteringStream.java
deleted file mode 100644
index ee53e6e..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/ClusteringStream.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams.clustering;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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 com.yahoo.labs.samoa.moa.options.AbstractOptionHandler;
-import com.github.javacliparser.FloatOption;
-import com.github.javacliparser.IntOption;
-import com.yahoo.labs.samoa.moa.streams.InstanceStream;
-
-public abstract class ClusteringStream extends AbstractOptionHandler 
implements InstanceStream {
-  public IntOption decayHorizonOption = new IntOption("decayHorizon", 'h',
-      "Decay horizon", 1000, 0, Integer.MAX_VALUE);
-
-  public FloatOption decayThresholdOption = new FloatOption("decayThreshold", 
't',
-      "Decay horizon threshold", 0.01, 0, 1);
-
-  public IntOption evaluationFrequencyOption = new 
IntOption("evaluationFrequency", 'e',
-      "Evaluation frequency", 1000, 0, Integer.MAX_VALUE);
-
-  public IntOption numAttsOption = new IntOption("numAtts", 'a',
-      "The number of attributes to generate.", 2, 0, Integer.MAX_VALUE);
-
-  public int getDecayHorizon() {
-    return decayHorizonOption.getValue();
-  }
-
-  public double getDecayThreshold() {
-    return decayThresholdOption.getValue();
-  }
-
-  public int getEvaluationFrequency() {
-    return evaluationFrequencyOption.getValue();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/9b178f63/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/RandomRBFGeneratorEvents.java
----------------------------------------------------------------------
diff --git 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/RandomRBFGeneratorEvents.java
 
b/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/RandomRBFGeneratorEvents.java
deleted file mode 100644
index d1eba95..0000000
--- 
a/samoa-api/src/main/java/com/yahoo/labs/samoa/moa/streams/clustering/RandomRBFGeneratorEvents.java
+++ /dev/null
@@ -1,967 +0,0 @@
-package com.yahoo.labs.samoa.moa.streams.clustering;
-
-/*
- * #%L
- * SAMOA
- * %%
- * Copyright (C) 2014 - 2015 Apache Software Foundation
- * %%
- * 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.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.Random;
-import java.util.Vector;
-
-import com.yahoo.labs.samoa.moa.cluster.Clustering;
-import com.yahoo.labs.samoa.moa.cluster.SphereCluster;
-import com.yahoo.labs.samoa.moa.core.AutoExpandVector;
-import com.yahoo.labs.samoa.moa.core.InstanceExample;
-import com.yahoo.labs.samoa.instances.InstancesHeader;
-import com.yahoo.labs.samoa.moa.core.ObjectRepository;
-import com.yahoo.labs.samoa.moa.core.DataPoint;
-import com.github.javacliparser.FlagOption;
-import com.github.javacliparser.FloatOption;
-import com.github.javacliparser.IntOption;
-import com.yahoo.labs.samoa.moa.streams.InstanceStream;
-import com.yahoo.labs.samoa.moa.tasks.TaskMonitor;
-import com.yahoo.labs.samoa.instances.Attribute;
-import com.yahoo.labs.samoa.instances.DenseInstance;
-import com.yahoo.labs.samoa.moa.core.FastVector;
-import com.yahoo.labs.samoa.instances.Instance;
-import com.yahoo.labs.samoa.instances.Instances;
-
-public class RandomRBFGeneratorEvents extends ClusteringStream {
-  private transient Vector listeners;
-
-  private static final long serialVersionUID = 1L;
-
-  public IntOption modelRandomSeedOption = new IntOption("modelRandomSeed",
-      'm', "Seed for random generation of model.", 1);
-
-  public IntOption instanceRandomSeedOption = new IntOption(
-      "instanceRandomSeed", 'i',
-      "Seed for random generation of instances.", 5);
-
-  public IntOption numClusterOption = new IntOption("numCluster", 'K',
-      "The average number of centroids in the model.", 5, 1, 
Integer.MAX_VALUE);
-
-  public IntOption numClusterRangeOption = new IntOption("numClusterRange", 
'k',
-      "Deviation of the number of centroids in the model.", 3, 0, 
Integer.MAX_VALUE);
-
-  public FloatOption kernelRadiiOption = new FloatOption("kernelRadius", 'R',
-      "The average radii of the centroids in the model.", 0.07, 0, 1);
-
-  public FloatOption kernelRadiiRangeOption = new 
FloatOption("kernelRadiusRange", 'r',
-      "Deviation of average radii of the centroids in the model.", 0, 0, 1);
-
-  public FloatOption densityRangeOption = new FloatOption("densityRange", 'd',
-      "Offset of the average weight a cluster has. Value of 0 means all 
cluster " +
-          "contain the same amount of points.", 0, 0, 1);
-
-  public IntOption speedOption = new IntOption("speed", 'V',
-      "Kernels move a predefined distance of 0.01 every X points", 500, 1, 
Integer.MAX_VALUE);
-
-  public IntOption speedRangeOption = new IntOption("speedRange", 'v',
-      "Speed/Velocity point offset", 0, 0, Integer.MAX_VALUE);
-
-  public FloatOption noiseLevelOption = new FloatOption("noiseLevel", 'N',
-      "Noise level", 0.1, 0, 1);
-
-  public FlagOption noiseInClusterOption = new FlagOption("noiseInCluster", 
'n',
-      "Allow noise to be placed within a cluster");
-
-  public IntOption eventFrequencyOption = new IntOption("eventFrequency", 'E',
-      "Event frequency. Enable at least one of the events below and set 
numClusterRange!", 30000, 0, Integer.MAX_VALUE);
-
-  public FlagOption eventMergeSplitOption = new 
FlagOption("eventMergeSplitOption", 'M',
-      "Enable merging and splitting of clusters. Set eventFrequency and 
numClusterRange!");
-
-  public FlagOption eventDeleteCreateOption = new 
FlagOption("eventDeleteCreate", 'C',
-      "Enable emering and disapperaing of clusters. Set eventFrequency and 
numClusterRange!");
-
-  private double merge_threshold = 0.7;
-  private int kernelMovePointFrequency = 10;
-  private double maxDistanceMoveThresholdByStep = 0.01;
-  private int maxOverlapFitRuns = 50;
-  private double eventFrequencyRange = 0;
-
-  private boolean debug = false;
-
-  private AutoExpandVector<GeneratorCluster> kernels;
-  protected Random instanceRandom;
-  protected InstancesHeader streamHeader;
-  private int numGeneratedInstances;
-  private int numActiveKernels;
-  private int nextEventCounter;
-  private int nextEventChoice = -1;
-  private int clusterIdCounter;
-  private GeneratorCluster mergeClusterA;
-  private GeneratorCluster mergeClusterB;
-  private boolean mergeKernelsOverlapping = false;
-
-  private class GeneratorCluster implements Serializable {
-    // TODO: points is redundant to microclusterpoints, we need to come
-    // up with a good strategy that microclusters get updated and
-    // rebuild if needed. Idea: Sort microclusterpoints by timestamp and let
-    // microclusterdecay hold the timestamp for when the last point in a
-    // microcluster gets kicked, then we rebuild... or maybe not... could be
-    // same as searching for point to be kicked. more likely is we rebuild
-    // fewer times then insert.
-
-    private static final long serialVersionUID = -6301649898961112942L;
-
-    SphereCluster generator;
-    int kill = -1;
-    boolean merging = false;
-    double[] moveVector;
-    int totalMovementSteps;
-    int currentMovementSteps;
-    boolean isSplitting = false;
-
-    LinkedList<DataPoint> points = new LinkedList<DataPoint>();
-    ArrayList<SphereCluster> microClusters = new ArrayList<SphereCluster>();
-    ArrayList<ArrayList<DataPoint>> microClustersPoints = new ArrayList();
-    ArrayList<Integer> microClustersDecay = new ArrayList();
-
-    public GeneratorCluster(int label) {
-      boolean outofbounds = true;
-      int tryCounter = 0;
-      while (outofbounds && tryCounter < maxOverlapFitRuns) {
-        tryCounter++;
-        outofbounds = false;
-        double[] center = new double[numAttsOption.getValue()];
-        double radius = kernelRadiiOption.getValue() + 
(instanceRandom.nextBoolean() ? -1 : 1)
-            * kernelRadiiRangeOption.getValue() * instanceRandom.nextDouble();
-        while (radius <= 0) {
-          radius = kernelRadiiOption.getValue() + 
(instanceRandom.nextBoolean() ? -1 : 1)
-              * kernelRadiiRangeOption.getValue() * 
instanceRandom.nextDouble();
-        }
-        for (int j = 0; j < numAttsOption.getValue(); j++) {
-          center[j] = instanceRandom.nextDouble();
-          if (center[j] - radius < 0 || center[j] + radius > 1) {
-            outofbounds = true;
-            break;
-          }
-        }
-        generator = new SphereCluster(center, radius);
-      }
-      if (tryCounter < maxOverlapFitRuns) {
-        generator.setId(label);
-        double avgWeight = 1.0 / numClusterOption.getValue();
-        double weight = avgWeight + (instanceRandom.nextBoolean() ? -1 : 1) * 
avgWeight * densityRangeOption.getValue()
-            * instanceRandom.nextDouble();
-        generator.setWeight(weight);
-        setDesitnation(null);
-      }
-      else {
-        generator = null;
-        kill = 0;
-        System.out.println("Tried " + maxOverlapFitRuns + " times to create 
kernel. Reduce average radii.");
-      }
-    }
-
-    public GeneratorCluster(int label, SphereCluster cluster) {
-      this.generator = cluster;
-      cluster.setId(label);
-      setDesitnation(null);
-    }
-
-    public int getWorkID() {
-      for (int c = 0; c < kernels.size(); c++) {
-        if (kernels.get(c).equals(this))
-          return c;
-      }
-      return -1;
-    }
-
-    private void updateKernel() {
-      if (kill == 0) {
-        kernels.remove(this);
-      }
-      if (kill > 0) {
-        kill--;
-      }
-      // we could be lot more precise if we would keep track of timestamps of
-      // points
-      // then we could remove all old points and rebuild the cluster on up to
-      // date point base
-      // BUT worse the effort??? so far we just want to avoid overlap with 
this,
-      // so its more
-      // konservative as needed. Only needs to change when we need a thighter
-      // representation
-      for (int m = 0; m < microClusters.size(); m++) {
-        if (numGeneratedInstances - microClustersDecay.get(m) > 
decayHorizonOption.getValue()) {
-          microClusters.remove(m);
-          microClustersPoints.remove(m);
-          microClustersDecay.remove(m);
-        }
-      }
-
-      if (!points.isEmpty()
-          && numGeneratedInstances - points.getFirst().getTimestamp() >= 
decayHorizonOption.getValue()) {
-        // if(debug)
-        // System.out.println("Cleaning up macro cluster "+generator.getId());
-        points.removeFirst();
-      }
-
-    }
-
-    private void addInstance(Instance instance) {
-      DataPoint point = new DataPoint(instance, numGeneratedInstances);
-      points.add(point);
-
-      int minMicroIndex = -1;
-      double minHullDist = Double.MAX_VALUE;
-      boolean inserted = false;
-      // we favour more recently build clusters so we can remove earlier 
cluster
-      // sooner
-      for (int m = microClusters.size() - 1; m >= 0; m--) {
-        SphereCluster micro = microClusters.get(m);
-        double hulldist = micro.getCenterDistance(point) - micro.getRadius();
-        // point fits into existing cluster
-        if (hulldist <= 0) {
-          microClustersPoints.get(m).add(point);
-          microClustersDecay.set(m, numGeneratedInstances);
-          inserted = true;
-          break;
-        }
-        // if not, check if its at least the closest cluster
-        else {
-          if (hulldist < minHullDist) {
-            minMicroIndex = m;
-            minHullDist = hulldist;
-          }
-        }
-      }
-      // Reseting index choice for alternative cluster building
-      int alt = 1;
-      if (alt == 1)
-        minMicroIndex = -1;
-      if (!inserted) {
-        // add to closest cluster and expand cluster
-        if (minMicroIndex != -1) {
-          microClustersPoints.get(minMicroIndex).add(point);
-          // we should keep the miniball instances and just check in
-          // new points instead of rebuilding the whole thing
-          SphereCluster s = new 
SphereCluster(microClustersPoints.get(minMicroIndex), numAttsOption.getValue());
-          // check if current microcluster is bigger then generating cluster
-          if (s.getRadius() > generator.getRadius()) {
-            // remove previously added point
-            
microClustersPoints.get(minMicroIndex).remove(microClustersPoints.get(minMicroIndex).size()
 - 1);
-            minMicroIndex = -1;
-          }
-          else {
-            microClusters.set(minMicroIndex, s);
-            microClustersDecay.set(minMicroIndex, numGeneratedInstances);
-          }
-        }
-        // minMicroIndex might have been reset above
-        // create new micro cluster
-        if (minMicroIndex == -1) {
-          ArrayList<DataPoint> microPoints = new ArrayList<DataPoint>();
-          microPoints.add(point);
-          SphereCluster s;
-          if (alt == 0)
-            s = new SphereCluster(microPoints, numAttsOption.getValue());
-          else
-            s = new SphereCluster(generator.getCenter(), 
generator.getRadius(), 1);
-
-          microClusters.add(s);
-          microClustersPoints.add(microPoints);
-          microClustersDecay.add(numGeneratedInstances);
-          int id = 0;
-          while (id < kernels.size()) {
-            if (kernels.get(id) == this)
-              break;
-            id++;
-          }
-          s.setGroundTruth(id);
-        }
-      }
-
-    }
-
-    private void move() {
-      if (currentMovementSteps < totalMovementSteps) {
-        currentMovementSteps++;
-        if (moveVector == null) {
-          return;
-        }
-        else {
-          double[] center = generator.getCenter();
-          boolean outofbounds = true;
-          while (outofbounds) {
-            double radius = generator.getRadius();
-            outofbounds = false;
-            center = generator.getCenter();
-            for (int d = 0; d < center.length; d++) {
-              center[d] += moveVector[d];
-              if (center[d] - radius < 0 || center[d] + radius > 1) {
-                outofbounds = true;
-                setDesitnation(null);
-                break;
-              }
-            }
-          }
-          generator.setCenter(center);
-        }
-      }
-      else {
-        if (!merging) {
-          setDesitnation(null);
-          isSplitting = false;
-        }
-      }
-    }
-
-    void setDesitnation(double[] destination) {
-
-      if (destination == null) {
-        destination = new double[numAttsOption.getValue()];
-        for (int j = 0; j < numAttsOption.getValue(); j++) {
-          destination[j] = instanceRandom.nextDouble();
-        }
-      }
-      double[] center = generator.getCenter();
-      int dim = center.length;
-
-      double[] v = new double[dim];
-
-      for (int d = 0; d < dim; d++) {
-        v[d] = destination[d] - center[d];
-      }
-      setMoveVector(v);
-    }
-
-    void setMoveVector(double[] vector) {
-      // we are ignoring the steps, otherwise we have to change
-      // speed of the kernels, do we want that?
-      moveVector = vector;
-      int speedInPoints = speedOption.getValue();
-      if (speedRangeOption.getValue() > 0)
-        speedInPoints += (instanceRandom.nextBoolean() ? -1 : 1) * 
instanceRandom.nextInt(speedRangeOption.getValue());
-      if (speedInPoints < 1)
-        speedInPoints = speedOption.getValue();
-
-      double length = 0;
-      for (int d = 0; d < moveVector.length; d++) {
-        length += Math.pow(vector[d], 2);
-      }
-      length = Math.sqrt(length);
-
-      totalMovementSteps = (int) (length / (maxDistanceMoveThresholdByStep * 
kernelMovePointFrequency) * speedInPoints);
-      for (int d = 0; d < moveVector.length; d++) {
-        moveVector[d] /= (double) totalMovementSteps;
-      }
-
-      currentMovementSteps = 0;
-      // if(debug){
-      // System.out.println("Setting new direction for C"+generator.getId()+": 
distance "
-      // +length+" in "+totalMovementSteps+" steps");
-      // }
-    }
-
-    private String tryMerging(GeneratorCluster merge) {
-      String message = "";
-      double overlapDegree = generator.overlapRadiusDegree(merge.generator);
-      if (overlapDegree > merge_threshold) {
-        SphereCluster mcluster = merge.generator;
-        double radius = Math.max(generator.getRadius(), mcluster.getRadius());
-        generator.combine(mcluster);
-
-        // //adjust radius, get bigger and bigger with high dim data
-        generator.setRadius(radius);
-        // double[] center = generator.getCenter();
-        // double[] mcenter = mcluster.getCenter();
-        // double weight = generator.getWeight();
-        // double mweight = generator.getWeight();
-        // // for (int i = 0; i < center.length; i++) {
-        // // center[i] = (center[i] * weight + mcenter[i] * mweight) / 
(mweight
-        // + weight);
-        // // }
-        // generator.setWeight(weight + mweight);
-        message = "Clusters merging: " + mergeClusterB.generator.getId() + " 
into " + mergeClusterA.generator.getId();
-
-        // clean up and restet merging stuff
-        // mark kernel so it gets killed when it doesn't contain any more
-        // instances
-        merge.kill = decayHorizonOption.getValue();
-        // set weight to 0 so no new instances will be created in the cluster
-        mcluster.setWeight(0.0);
-        normalizeWeights();
-        numActiveKernels--;
-        mergeClusterB = mergeClusterA = null;
-        merging = false;
-        mergeKernelsOverlapping = false;
-      }
-      else {
-        if (overlapDegree > 0 && !mergeKernelsOverlapping) {
-          mergeKernelsOverlapping = true;
-          message = "Merge overlapping started";
-        }
-      }
-      return message;
-    }
-
-    private String splitKernel() {
-      isSplitting = true;
-      // todo radius range
-      double radius = kernelRadiiOption.getValue();
-      double avgWeight = 1.0 / numClusterOption.getValue();
-      double weight = avgWeight + avgWeight * densityRangeOption.getValue() * 
instanceRandom.nextDouble();
-      SphereCluster spcluster = null;
-
-      double[] center = generator.getCenter();
-      spcluster = new SphereCluster(center, radius, weight);
-
-      if (spcluster != null) {
-        GeneratorCluster gc = new GeneratorCluster(clusterIdCounter++, 
spcluster);
-        gc.isSplitting = true;
-        kernels.add(gc);
-        normalizeWeights();
-        numActiveKernels++;
-        return "Split from Kernel " + generator.getId();
-      }
-      else {
-        System.out.println("Tried to split new kernel from C" + 
generator.getId() +
-            ". Not enough room for new cluster, decrease average radii, number 
of clusters or enable overlap.");
-        return "";
-      }
-    }
-
-    private String fadeOut() {
-      kill = decayHorizonOption.getValue();
-      generator.setWeight(0.0);
-      numActiveKernels--;
-      normalizeWeights();
-      return "Fading out C" + generator.getId();
-    }
-
-  }
-
-  public RandomRBFGeneratorEvents() {
-    noiseInClusterOption.set();
-    // eventDeleteCreateOption.set();
-    // eventMergeSplitOption.set();
-  }
-
-  public InstancesHeader getHeader() {
-    return streamHeader;
-  }
-
-  public long estimatedRemainingInstances() {
-    return -1;
-  }
-
-  public boolean hasMoreInstances() {
-    return true;
-  }
-
-  public boolean isRestartable() {
-    return true;
-  }
-
-  @Override
-  public void prepareForUseImpl(TaskMonitor monitor, ObjectRepository 
repository) {
-    monitor.setCurrentActivity("Preparing random RBF...", -1.0);
-    generateHeader();
-    restart();
-  }
-
-  public void restart() {
-    instanceRandom = new Random(instanceRandomSeedOption.getValue());
-    nextEventCounter = eventFrequencyOption.getValue();
-    nextEventChoice = getNextEvent();
-    numActiveKernels = 0;
-    numGeneratedInstances = 0;
-    clusterIdCounter = 0;
-    mergeClusterA = mergeClusterB = null;
-    kernels = new AutoExpandVector<GeneratorCluster>();
-
-    initKernels();
-  }
-
-  protected void generateHeader() { // 2013/06/02: Noise label
-    ArrayList<Attribute> attributes = new ArrayList<Attribute>();
-    for (int i = 0; i < this.numAttsOption.getValue(); i++) {
-      attributes.add(new Attribute("att" + (i + 1)));
-    }
-
-    ArrayList<String> classLabels = new ArrayList<String>();
-    for (int i = 0; i < this.numClusterOption.getValue(); i++) {
-      classLabels.add("class" + (i + 1));
-    }
-    if (noiseLevelOption.getValue() > 0)
-      classLabels.add("noise"); // The last label = "noise"
-
-    attributes.add(new Attribute("class", classLabels));
-    streamHeader = new InstancesHeader(new 
Instances(getCLICreationString(InstanceStream.class), attributes, 0));
-    streamHeader.setClassIndex(streamHeader.numAttributes() - 1);
-  }
-
-  protected void initKernels() {
-    for (int i = 0; i < numClusterOption.getValue(); i++) {
-      kernels.add(new GeneratorCluster(clusterIdCounter));
-      numActiveKernels++;
-      clusterIdCounter++;
-    }
-    normalizeWeights();
-  }
-
-  public InstanceExample nextInstance() {
-    numGeneratedInstances++;
-    eventScheduler();
-
-    // make room for the classlabel
-    double[] values_new = new double[numAttsOption.getValue()]; // +1
-    double[] values = null;
-    int clusterChoice = -1;
-
-    if (instanceRandom.nextDouble() > noiseLevelOption.getValue()) {
-      clusterChoice = chooseWeightedElement();
-      values = 
kernels.get(clusterChoice).generator.sample(instanceRandom).toDoubleArray();
-    }
-    else {
-      // get ranodm noise point
-      values = getNoisePoint();
-    }
-
-    if (Double.isNaN(values[0])) {
-      System.out.println("Instance corrupted:" + numGeneratedInstances);
-    }
-    System.arraycopy(values, 0, values_new, 0, values.length);
-
-    Instance inst = new DenseInstance(1.0, values_new);
-    inst.setDataset(getHeader());
-    if (clusterChoice == -1) {
-      // 2013/06/02 (Yunsu Kim)
-      // Noise instance has the last class value instead of "-1"
-      // Preventing ArrayIndexOutOfBoundsException in WriteStreamToARFFFile
-      inst.setClassValue(numClusterOption.getValue());
-    }
-    else {
-      inst.setClassValue(kernels.get(clusterChoice).generator.getId());
-      // Do we need micro cluster representation if have overlapping clusters?
-      // if(!overlappingOption.isSet())
-      kernels.get(clusterChoice).addInstance(inst);
-    }
-    // System.out.println(numGeneratedInstances+": Overlap 
is"+updateOverlaps());
-
-    return new InstanceExample(inst);
-  }
-
-  public Clustering getGeneratingClusters() {
-    Clustering clustering = new Clustering();
-    for (int c = 0; c < kernels.size(); c++) {
-      clustering.add(kernels.get(c).generator);
-    }
-    return clustering;
-  }
-
-  public Clustering getMicroClustering() {
-    Clustering clustering = new Clustering();
-    int id = 0;
-
-    for (int c = 0; c < kernels.size(); c++) {
-      for (int m = 0; m < kernels.get(c).microClusters.size(); m++) {
-        kernels.get(c).microClusters.get(m).setId(id);
-        
kernels.get(c).microClusters.get(m).setGroundTruth(kernels.get(c).generator.getId());
-        clustering.add(kernels.get(c).microClusters.get(m));
-        id++;
-      }
-    }
-
-    // System.out.println("numMicroKernels "+clustering.size());
-    return clustering;
-  }
-
-  /**************************** EVENTS 
******************************************/
-  private void eventScheduler() {
-
-    for (int i = 0; i < kernels.size(); i++) {
-      kernels.get(i).updateKernel();
-    }
-
-    nextEventCounter--;
-    // only move kernels every 10 points, performance reasons????
-    // should this be randomized as well???
-    if (nextEventCounter % kernelMovePointFrequency == 0) {
-      // move kernels
-      for (int i = 0; i < kernels.size(); i++) {
-        kernels.get(i).move();
-        // overlapControl();
-      }
-    }
-
-    if (eventFrequencyOption.getValue() == 0) {
-      return;
-    }
-
-    String type = "";
-    String message = "";
-    boolean eventFinished = false;
-    switch (nextEventChoice) {
-    case 0:
-      if (numActiveKernels > 1 && numActiveKernels > 
numClusterOption.getValue() - numClusterRangeOption.getValue()) {
-        message = mergeKernels(nextEventCounter);
-        type = "Merge";
-      }
-      if (mergeClusterA == null && mergeClusterB == null && 
message.startsWith("Clusters merging")) {
-        eventFinished = true;
-      }
-      break;
-    case 1:
-      if (nextEventCounter <= 0) {
-        if (numActiveKernels < numClusterOption.getValue() + 
numClusterRangeOption.getValue()) {
-          type = "Split";
-          message = splitKernel();
-        }
-        eventFinished = true;
-      }
-      break;
-    case 2:
-      if (nextEventCounter <= 0) {
-        if (numActiveKernels > 1 && numActiveKernels > 
numClusterOption.getValue() - numClusterRangeOption.getValue()) {
-          message = fadeOut();
-          type = "Delete";
-        }
-        eventFinished = true;
-      }
-      break;
-    case 3:
-      if (nextEventCounter <= 0) {
-        if (numActiveKernels < numClusterOption.getValue() + 
numClusterRangeOption.getValue()) {
-          message = fadeIn();
-          type = "Create";
-        }
-        eventFinished = true;
-      }
-      break;
-
-    }
-    if (eventFinished) {
-      nextEventCounter = (int) (eventFrequencyOption.getValue() + 
(instanceRandom.nextBoolean() ? -1 : 1)
-          * eventFrequencyOption.getValue() * eventFrequencyRange * 
instanceRandom.nextDouble());
-      nextEventChoice = getNextEvent();
-      // System.out.println("Next event choice: "+nextEventChoice);
-    }
-    if (!message.isEmpty()) {
-      message += " (numKernels = " + numActiveKernels + " at " + 
numGeneratedInstances + ")";
-      if (!type.equals("Merge") || message.startsWith("Clusters merging"))
-        fireClusterChange(numGeneratedInstances, type, message);
-    }
-  }
-
-  private int getNextEvent() {
-    int choice = -1;
-    boolean lowerLimit = numActiveKernels <= numClusterOption.getValue() - 
numClusterRangeOption.getValue();
-    boolean upperLimit = numActiveKernels >= numClusterOption.getValue() + 
numClusterRangeOption.getValue();
-
-    if (!lowerLimit || !upperLimit) {
-      int mode = -1;
-      if (eventDeleteCreateOption.isSet() && eventMergeSplitOption.isSet()) {
-        mode = instanceRandom.nextInt(2);
-      }
-
-      if (mode == 0 || (mode == -1 && eventMergeSplitOption.isSet())) {
-        // have we reached a limit? if not free choice
-        if (!lowerLimit && !upperLimit)
-          choice = instanceRandom.nextInt(2);
-        else
-        // we have a limit. if lower limit, choose split
-        if (lowerLimit)
-          choice = 1;
-        // otherwise we reached upper level, choose merge
-        else
-          choice = 0;
-      }
-
-      if (mode == 1 || (mode == -1 && eventDeleteCreateOption.isSet())) {
-        // have we reached a limit? if not free choice
-        if (!lowerLimit && !upperLimit)
-          choice = instanceRandom.nextInt(2) + 2;
-        else
-        // we have a limit. if lower limit, choose create
-        if (lowerLimit)
-          choice = 3;
-        // otherwise we reached upper level, choose delete
-        else
-          choice = 2;
-      }
-    }
-
-    return choice;
-  }
-
-  private String fadeOut() {
-    int id = instanceRandom.nextInt(kernels.size());
-    while (kernels.get(id).kill != -1)
-      id = instanceRandom.nextInt(kernels.size());
-
-    String message = kernels.get(id).fadeOut();
-    return message;
-  }
-
-  private String fadeIn() {
-    GeneratorCluster gc = new GeneratorCluster(clusterIdCounter++);
-    kernels.add(gc);
-    numActiveKernels++;
-    normalizeWeights();
-    return "Creating new cluster";
-  }
-
-  private String changeWeight(boolean increase) {
-    double changeRate = 0.1;
-    int id = instanceRandom.nextInt(kernels.size());
-    while (kernels.get(id).kill != -1)
-      id = instanceRandom.nextInt(kernels.size());
-
-    int sign = 1;
-    if (!increase)
-      sign = -1;
-    double weight_old = kernels.get(id).generator.getWeight();
-    double delta = sign * numActiveKernels * instanceRandom.nextDouble() * 
changeRate;
-    kernels.get(id).generator.setWeight(weight_old + delta);
-
-    normalizeWeights();
-
-    String message;
-    if (increase)
-      message = "Increase ";
-    else
-      message = "Decrease ";
-    message += " weight on Cluster " + id + " from " + weight_old + " to " + 
(weight_old + delta);
-    return message;
-
-  }
-
-  private String changeRadius(boolean increase) {
-    double maxChangeRate = 0.1;
-    int id = instanceRandom.nextInt(kernels.size());
-    while (kernels.get(id).kill != -1)
-      id = instanceRandom.nextInt(kernels.size());
-
-    int sign = 1;
-    if (!increase)
-      sign = -1;
-
-    double r_old = kernels.get(id).generator.getRadius();
-    double r_new = r_old + sign * r_old * instanceRandom.nextDouble() * 
maxChangeRate;
-    if (r_new >= 0.5)
-      return "Radius to big";
-    kernels.get(id).generator.setRadius(r_new);
-
-    String message;
-    if (increase)
-      message = "Increase ";
-    else
-      message = "Decrease ";
-    message += " radius on Cluster " + id + " from " + r_old + " to " + r_new;
-    return message;
-  }
-
-  private String splitKernel() {
-    int id = instanceRandom.nextInt(kernels.size());
-    while (kernels.get(id).kill != -1)
-      id = instanceRandom.nextInt(kernels.size());
-
-    String message = kernels.get(id).splitKernel();
-
-    return message;
-  }
-
-  private String mergeKernels(int steps) {
-    if (numActiveKernels > 1 && ((mergeClusterA == null && mergeClusterB == 
null))) {
-
-      // choose clusters to merge
-      double diseredDist = steps / speedOption.getValue() * 
maxDistanceMoveThresholdByStep;
-      double minDist = Double.MAX_VALUE;
-      // System.out.println("DisredDist:"+(2*diseredDist));
-      for (int i = 0; i < kernels.size(); i++) {
-        for (int j = 0; j < i; j++) {
-          if (kernels.get(i).kill != -1 || kernels.get(j).kill != -1) {
-            continue;
-          }
-          else {
-            double kernelDist = 
kernels.get(i).generator.getCenterDistance(kernels.get(j).generator);
-            double d = kernelDist - 2 * diseredDist;
-            // System.out.println("Dist:"+i+" / "+j+" "+d);
-            if (Math.abs(d) < minDist &&
-                (minDist != Double.MAX_VALUE || d > 0 || Math.abs(d) < 0.001)) 
{
-              minDist = Math.abs(d);
-              mergeClusterA = kernels.get(i);
-              mergeClusterB = kernels.get(j);
-            }
-          }
-        }
-      }
-
-      if (mergeClusterA != null && mergeClusterB != null) {
-        double[] merge_point = mergeClusterA.generator.getCenter();
-        double[] v = 
mergeClusterA.generator.getDistanceVector(mergeClusterB.generator);
-        for (int i = 0; i < v.length; i++) {
-          merge_point[i] = merge_point[i] + v[i] * 0.5;
-        }
-
-        mergeClusterA.merging = true;
-        mergeClusterB.merging = true;
-        mergeClusterA.setDesitnation(merge_point);
-        mergeClusterB.setDesitnation(merge_point);
-
-        if (debug) {
-          System.out.println("Center1" + 
Arrays.toString(mergeClusterA.generator.getCenter()));
-          System.out.println("Center2" + 
Arrays.toString(mergeClusterB.generator.getCenter()));
-          System.out.println("Vector" + Arrays.toString(v));
-
-          System.out.println("Try to merge cluster " + 
mergeClusterA.generator.getId() +
-              " into " + mergeClusterB.generator.getId() +
-              " at " + Arrays.toString(merge_point) +
-              " time " + numGeneratedInstances);
-        }
-        return "Init merge";
-      }
-    }
-
-    if (mergeClusterA != null && mergeClusterB != null) {
-
-      // movekernels will move the kernels close to each other,
-      // we just need to check and merge here if they are close enough
-      return mergeClusterA.tryMerging(mergeClusterB);
-    }
-
-    return "";
-  }
-
-  /************************* TOOLS **************************************/
-
-  public void getDescription(StringBuilder sb, int indent) {
-
-  }
-
-  private double[] getNoisePoint() {
-    double[] sample = new double[numAttsOption.getValue()];
-    boolean incluster = true;
-    int counter = 20;
-    while (incluster) {
-      for (int j = 0; j < numAttsOption.getValue(); j++) {
-        sample[j] = instanceRandom.nextDouble();
-      }
-      incluster = false;
-      if (!noiseInClusterOption.isSet() && counter > 0) {
-        counter--;
-        for (int c = 0; c < kernels.size(); c++) {
-          for (int m = 0; m < kernels.get(c).microClusters.size(); m++) {
-            Instance inst = new DenseInstance(1, sample);
-            if 
(kernels.get(c).microClusters.get(m).getInclusionProbability(inst) > 0) {
-              incluster = true;
-              break;
-            }
-          }
-          if (incluster)
-            break;
-        }
-      }
-    }
-
-    // double [] sample = new double [numAttsOption.getValue()];
-    // for (int j = 0; j < numAttsOption.getValue(); j++) {
-    // sample[j] = instanceRandom.nextDouble();
-    // }
-
-    return sample;
-  }
-
-  private int chooseWeightedElement() {
-    double r = instanceRandom.nextDouble();
-
-    // Determine index of choosen element
-    int i = 0;
-    while (r > 0.0) {
-      r -= kernels.get(i).generator.getWeight();
-      i++;
-    }
-    --i; // Overcounted once
-    // System.out.println(i);
-    return i;
-  }
-
-  private void normalizeWeights() {
-    double sumWeights = 0.0;
-    for (int i = 0; i < kernels.size(); i++) {
-      sumWeights += kernels.get(i).generator.getWeight();
-    }
-    for (int i = 0; i < kernels.size(); i++) {
-      kernels.get(i).generator.setWeight(kernels.get(i).generator.getWeight() 
/ sumWeights);
-    }
-  }
-
-  /*************** EVENT Listener *********************/
-  // should go into the superclass of the generator, create new one for cluster
-  // streams?
-
-  /** Add a listener */
-  synchronized public void addClusterChangeListener(ClusterEventListener l) {
-    if (listeners == null)
-      listeners = new Vector();
-    listeners.addElement(l);
-  }
-
-  /** Remove a listener */
-  synchronized public void removeClusterChangeListener(ClusterEventListener l) 
{
-    if (listeners == null)
-      listeners = new Vector();
-    listeners.removeElement(l);
-  }
-
-  /** Fire a ClusterChangeEvent to all registered listeners */
-  protected void fireClusterChange(long timestamp, String type, String 
message) {
-    // if we have no listeners, do nothing...
-    if (listeners != null && !listeners.isEmpty()) {
-      // create the event object to send
-      ClusterEvent event =
-          new ClusterEvent(this, timestamp, type, message);
-
-      // make a copy of the listener list in case
-      // anyone adds/removes listeners
-      Vector targets;
-      synchronized (this) {
-        targets = (Vector) listeners.clone();
-      }
-
-      // walk through the listener list and
-      // call the sunMoved method in each
-      Enumeration e = targets.elements();
-      while (e.hasMoreElements()) {
-        ClusterEventListener l = (ClusterEventListener) e.nextElement();
-        l.changeCluster(event);
-
-      }
-    }
-  }
-
-  @Override
-  public String getPurposeString() {
-    return "Generates a random radial basis function stream.";
-  }
-
-  public String getParameterString() {
-    return "";
-  }
-
-}

Reply via email to