📄 conditionexamplereader.java
字号:
/*
* YALE - Yet Another Learning Environment
* Copyright (C) 2001-2004
* Simon Fischer, Ralf Klinkenberg, Ingo Mierswa,
* Katharina Morik, Oliver Ritthoff
* Artificial Intelligence Unit
* Computer Science Department
* University of Dortmund
* 44221 Dortmund, Germany
* email: yale-team@lists.sourceforge.net
* web: http://yale.cs.uni-dortmund.de/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package edu.udo.cs.yale.example;
/** This ExampleReader skips all examples that do not fulfil a
* specified {@link Condition}.
*
* @version $Id: ConditionExampleReader.java,v 2.8 2004/08/27 11:57:31 ingomierswa Exp $
*/
public class ConditionExampleReader implements ExampleReader {
/** Array of fully qualified classnames of implementations of
* {@link Condition} that are useful independently
* of special applications. */
public static final String[] KNOWN_CONDITION_IMPLEMENTATIONS = {
AttributeValueFilter.class.getName(),
LegalNumberCondition.class.getName()
};
/** The example reader that provides a complete example set
* which must have a cluster attribute set. */
private ExampleReader parent;
private Condition condition;
/** The example that will be returned by the next invocation of next(). */
private Example currentExample;
/** Constructs a new ConditionExampleReader the next() method of which
* returns only examples that fulfil a specified condition. */
public ConditionExampleReader(ExampleReader parent, Condition condition) {
this.parent = parent;
this.currentExample = null;
this.condition = condition;
}
public boolean hasNext() {
while (currentExample == null) {
if (!parent.hasNext()) return false;
Example e = parent.next();
if (condition.conditionOk(e))
currentExample = e;
}
return true;
}
public Example next() {
hasNext();
Example dummy = currentExample;
currentExample = null;
return dummy;
}
/** Creates a new instance of className which must be an implementation
* of {@link Condition} by calling its two argument constructor passing
* it the example set and the parameter string */
public static Condition createCondition(String className,
ExampleSet exampleSet,
String parameterString) {
try {
Class clazz = edu.udo.cs.yale.tools.Tools.classForName(className);
if (!Condition.class.isAssignableFrom(clazz))
throw new ClassCastException("'"+className+"' does not implement Condition!");
java.lang.reflect.Constructor constructor =
clazz.getConstructor(new Class[] { ExampleSet.class, String.class });
return (Condition)constructor.newInstance(new Object[] { exampleSet, parameterString } );
} catch (ClassNotFoundException e) {
throw new RuntimeException("Cannot find class '"+className+"'. Check your classpath.");
} catch (NoSuchMethodException e) {
throw new RuntimeException("'"+className+"' must implement two argument constructor "+
className+"(ExampleSet,String) !");
} catch (java.lang.reflect.InvocationTargetException e) {
throw new RuntimeException("Cannot create "+className+": "+e+
". Target: "+e.getCause()+". Cause: "+e.getTargetException()+".");
} catch (Throwable throwable) {
throw new RuntimeException("While creating condition '"+className+"': "+throwable);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -