package org.korsakow.services.plugin.predicate;
import java.util.HashMap;
import java.util.Map;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.resources.PredicateType;
import org.korsakow.services.plugin.predicate.argument.KeywordArgumentInfo;
import org.korsakow.services.plugin.predicate.argument.LongArgumentInfo;
import org.korsakow.services.plugin.predicate.argument.PercentArgumentInfo;
import org.korsakow.services.plugin.predicate.argument.ResourceArgumentInfo;
public class PredicateTypeInfoFactory
{
private static PredicateTypeInfoFactory singleton = null;
public static PredicateTypeInfoFactory getFactory()
{
if (singleton == null) {
singleton = new PredicateTypeInfoFactory();
}
return singleton;
}
static
{
try {
PredicateTypeInfoFactory factory = getFactory();
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.True.getId(), 0, LanguageBundle.getString("predicate.true.label")));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.False.getId(), 0, LanguageBundle.getString("predicate.false.label")));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.Not.getId(), 1, LanguageBundle.getString("predicate.or.label")));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.And.getId(), 2, LanguageBundle.getString("predicate.and.label")));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.Or.getId(), 2, LanguageBundle.getString("predicate.or.label")));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.KeywordInHistory.getId(), 0, LanguageBundle.getString("predicate.keywordinhistory.label"), LanguageBundle.getString("predicate.keywordinhistory.arglabel"), new KeywordArgumentInfo("keyword", LanguageBundle.getString("predicate.arg.keyword.label"))));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.SnuInHistory.getId(), 0, LanguageBundle.getString("predicate.snuinhistory.label"), LanguageBundle.getString("predicate.snuinhistory.arglabel"), new ResourceArgumentInfo("snuId", LanguageBundle.getString("predicate.arg.snu.label"))));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.PercentOfSnusInHistory.getId(), 0, LanguageBundle.getString("predicate.snuinhistory.label"), LanguageBundle.getString("predicate.percentofsnusinhistory.arglabel"), new PercentArgumentInfo("percent", LanguageBundle.getString("predicate.arg.percent.label"))));
factory.registerTypeInfo(PredicateTypeInfo.create(PredicateType.NumberOfSnusInHistory.getId(), 0, LanguageBundle.getString("predicate.snuinhistory.label"), LanguageBundle.getString("predicate.numberofsnusinhistory.arglabel"), new LongArgumentInfo("number", LanguageBundle.getString("predicate.arg.number.label"))));
} catch (Throwable t) {
t.printStackTrace();
Application.getInstance().showUnhandledErrorDialog("Internal Error", t);
System.exit(1); // this is an unrecoverable internal error.
// TODO: handle this better
}
}
private Map<String, IPredicateTypeInfo> registry = new HashMap<String, IPredicateTypeInfo>();
public void registerTypeInfo(IPredicateTypeInfo info) throws PredicateTypeInfoFactoryException
{
registry.put(info.getId(), info);
}
public IPredicateTypeInfo getTypeInfo(String id) throws PredicateTypeInfoFactoryException
{
if (!registry.containsKey(id))
throw new PredicateTypeInfoFactoryException("No such predicate: " + id);
return registry.get(id);
}
}