package org.korsakow.domain; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.dsrg.soenea.uow.UoW; import org.korsakow.domain.interf.IKeyword; import org.korsakow.domain.interf.IRule; import org.korsakow.ide.DataRegistry; import org.korsakow.ide.rules.RuleType; public class RuleFactory { public static void registerNewRecursive(IRule rule) { for (IRule subRule : rule.getRules()) { registerNewRecursive(subRule); } UoW.getCurrent().registerNew(rule); } public static void registerCleanRecursive(IRule rule) { for (IRule subRule : rule.getRules()) { registerCleanRecursive(subRule); } UoW.getCurrent().registerNew(rule); } public static Rule createNew(long id, long version) { Rule object = new Rule(id, version); UoW.getCurrent().registerNew(object); return object; } public static Rule createNew(String ruletype) { Rule object = new Rule(DataRegistry.getMaxId(), 0); object.setRuleType(ruletype); UoW.getCurrent().registerNew(object); return object; } public static Rule createNew() { return createNew(DataRegistry.getMaxId(), 0); } public static Rule createNew(String type, Collection<IKeyword> keywords, String name, long triggerTime, List<IRule> rules) { Rule object = new Rule(DataRegistry.getMaxId(), 0, type, keywords, name, triggerTime, rules); UoW.getCurrent().registerNew(object); return object; } public static Rule createClean(String ruletype) { return createClean(DataRegistry.getMaxId(), 0, ruletype, new HashSet<IKeyword>(), ruletype, 0, new ArrayList<IRule>()); } public static Rule createClean(long id, long version, String type, Collection<IKeyword> keywords, String name, long triggerTime, List<IRule> rules) { Rule object = new Rule(id, version, type, keywords, name, triggerTime, rules); UoW.getCurrent().registerClean(object); return object; } public static Rule copy(IRule src) { final Rule copy = createNew(src.getRuleType(), KeywordFactory.copy(src.getKeywords()), src.getName(), src.getTriggerTime(), copy(src.getRules())); for (String propId : src.getDynamicPropertyIds()) copy.setDynamicProperty(propId, src.getDynamicProperty(propId)); return copy; } public static List<IRule> copy(List<IRule> src) { List<IRule> copies = new ArrayList<IRule>(); for (IRule rule : src) { copies.add(copy(rule)); } return copies; } public static IRule createSearchRule(List<IRule> rules) { IRule rule = RuleFactory.createClean(RuleType.Search.getId()); rule.setRules(rules); return rule; } public static IRule createClearScoresRule() { IRule rule = RuleFactory.createClean(RuleType.ClearScores.getId()); return rule; } public static IRule createSetEndFilmRule() { IRule rule = RuleFactory.createClean(RuleType.SetEndfilm.getId()); return rule; } public static IRule createRandomLookupRule() { IRule rule = RuleFactory.createClean(RuleType.RandomLookup.getId()); return rule; } public static IRule createEndfilmLookupRule() { IRule rule = RuleFactory.createClean(RuleType.EndfilmLookup.getId()); return rule; } public static IRule createKeywordLookupRule() { IRule rule = RuleFactory.createClean(RuleType.KeywordLookup.getId()); return rule; } public static IRule createRequireEndfilmRule() { IRule rule = RuleFactory.createClean(RuleType.RequireEndfilm.getId()); return rule; } public static IRule createExcludeEndfilmRule() { IRule rule = RuleFactory.createClean(RuleType.ExcludeEndfilm.getId()); return rule; } public static IRule createRequireKeywordsRuleFromStrings(Collection<String> keywords) { return createRequireKeywordsRule(Keyword.fromStrings(keywords)); } public static IRule createRequireKeywordsRule(Collection<IKeyword> keywords) { IRule rule = RuleFactory.createClean(RuleType.RequireKeywords.getId()); rule.setKeywords(keywords); return rule; } public static IRule createExcludeKeywordsRuleFromStrings(Collection<String> keywords) { return createExcludeKeywordsRule(Keyword.fromStrings(keywords)); } public static IRule createExcludeKeywordsRule(Collection<IKeyword> keywords) { IRule rule = RuleFactory.createClean(RuleType.ExcludeKeywords.getId()); rule.setKeywords(keywords); return rule; } }