package org.korsakow.services.plugin.rule;
import java.util.HashMap;
import java.util.Map;
import org.korsakow.ide.Application;
import org.korsakow.ide.lang.LanguageBundle;
import org.korsakow.ide.rules.RuleType;
import org.korsakow.services.plugin.predicate.argument.LongArgumentInfo;
import org.korsakow.services.plugin.predicate.argument.ResourceArgumentInfo;
import org.korsakow.services.plugin.predicate.argument.StringArgumentInfo;
public class RuleTypeInfoFactory
{
private static RuleTypeInfoFactory singleton = null;
public static RuleTypeInfoFactory getFactory()
{
if (singleton == null) {
singleton = new RuleTypeInfoFactory();
}
return singleton;
}
static
{
try {
RuleTypeInfoFactory factory = getFactory();
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.RandomLookup.getId(), LanguageBundle.getString("rules.randomlookup.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.KeywordLookup.getId(), LanguageBundle.getString("rules.keywordlookup.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.RequireKeywords.getId(), LanguageBundle.getString("rules.requirekeywords.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ExcludeKeywords.getId(), LanguageBundle.getString("rules.excludekeywords.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.SetBackgroundImage.getId(), LanguageBundle.getString("rules.setbackgroundimage.label"), LanguageBundle.getString("rules.setbackgroundimage.label"), new LongArgumentInfo("imageId", "Image")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ClearScores.getId(), LanguageBundle.getString("rules.clearscores.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.EndfilmLookup.getId(), LanguageBundle.getString("rules.endfilmlookup.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.RequireEndfilm.getId(), LanguageBundle.getString("rules.requireendfilm.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ExcludeEndfilm.getId(), LanguageBundle.getString("rules.excludeendfilm.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.NextIsEndfilm.getId(), LanguageBundle.getString("rules.nextisendfilm.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.SetEndfilm.getId(), LanguageBundle.getString("rules.setendfilm.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.IfCondition.getId(), LanguageBundle.getString("rules.ifcondition.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.OpenXMLSocket.getId(), LanguageBundle.getString("rules.openxmlsocket.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.SendXMLSocket.getId(), LanguageBundle.getString("rules.sendxmlsocket.label")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.HttpRequest.getId(), LanguageBundle.getString("rules.httprequest.label"), LanguageBundle.getString("rules.httprequest.label"), new StringArgumentInfo("hostname", "Hostname"), new StringArgumentInfo("requestVariableName", "RequestVariableName"), new StringArgumentInfo("requestVariableValue", "RequestVariableValue")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.SetVariable.getId(), "SetVariable", "SetVariable", new StringArgumentInfo("variableName", "Name"), new StringArgumentInfo("variableValue", "Value")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.Search.getId(), RuleType.Search.getName(), RuleType.Search.getName(), new LongArgumentInfo("maxLinks", "MaxLinks")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ExcludeKeywords.getId(), RuleType.ExcludeKeywords.getName(), RuleType.Search.getName(), new LongArgumentInfo("maxLinks", "MaxLinks")));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.PrePlayMedia.getId(), RuleType.PrePlayMedia.getName(), LanguageBundle.getString("rules.preplaymedia.arglabel"), new ResourceArgumentInfo("mediaId", LanguageBundle.getString("rules.arg.media.label"))));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.PostPlayMedia.getId(), RuleType.PostPlayMedia.getName(), LanguageBundle.getString("rules.postplaymedia.arglabel"), new ResourceArgumentInfo("mediaId", LanguageBundle.getString("rules.arg.media.label"))));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.PlayMedia.getId(), RuleType.PlayMedia.getName(), LanguageBundle.getString("rules.playmedia.arglabel"), new ResourceArgumentInfo("mediaId", LanguageBundle.getString("rules.arg.media.label"))));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ReplaySnu.getId(), RuleType.ReplaySnu.getName()));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.ReplaySnuMainMedia.getId(), RuleType.ReplaySnuMainMedia.getName()));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.SetSnuLives.getId(), LanguageBundle.getString("rules.setsnulives.label"), LanguageBundle.getString("rules.setsnulives.arglabel"), new LongArgumentInfo("lives", LanguageBundle.getString("rules.arg.lives.label"))));
factory.registerTypeInfo(RuleTypeInfo.create(RuleType.RemoveFromSearchResults.getId(), RuleType.ClearScores.getName()));
} 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 final Map<String, IRuleTypeInfo> registry = new HashMap<String, IRuleTypeInfo>();
public void registerTypeInfo(IRuleTypeInfo info) throws RuleTypeInfoFactoryException
{
registry.put(info.getId(), info);
}
public IRuleTypeInfo getTypeInfo(String id) throws RuleTypeInfoFactoryException
{
if (!registry.containsKey(id))
throw new RuleTypeInfoFactoryException("No such rule: " + id);
return registry.get(id);
}
}