/** * Copyright 2010 JBoss Inc * * 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. */ package org.drools.eclipse.core; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IFile; public class DroolsModelBuilder { public static RuleSet createRuleSet() { return new RuleSet(); } public static Package createPackage(String packageName, int offset, int length) { Package pkg = new Package(null, packageName); pkg.setFile(null, offset, length); return pkg; } public static Package addPackage(RuleSet ruleSet, String packageName, int offset, int length) { Package pkg = new Package(ruleSet, packageName); pkg.setFile(null, offset, length); ruleSet.addPackage(pkg); return pkg; } public static void removePackage(Package pkg) { RuleSet ruleSet = pkg.getParentRuleSet(); if (ruleSet != null) { ruleSet.removePackage(pkg.getPackageName()); } } public static void clearRuleSet(RuleSet ruleSet) { ruleSet.clear(); } public static Rule addRule(Package pkg, String ruleName, IFile file, int offset, int length, Map attributes) { Rule rule = new Rule(pkg, ruleName); rule.setFile(file, offset, length); if (attributes != null) { for (Iterator iterator = attributes.entrySet().iterator(); iterator .hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); String attributeKey = (String) entry.getKey(); String attributeValue = (String) entry.getValue(); RuleAttribute attribute = new RuleAttribute(rule, attributeKey, attributeValue); attribute.setFile(file, offset, length); rule.addAttribute(attribute); // TODO Create constant for Attribute ?? RuleGroup group = null; if (attributeKey.equals("agenda-group")) { group = pkg.getGroup(attributeValue, DroolsElement.AGENDA_GROUP); if (group != null) { group.addRule(rule); } else { group = new AgendaGroup(pkg, rule, attributeValue); } } if (attributeKey.equals("ruleflow-group")) { group = pkg.getGroup(attributeValue, DroolsElement.RULEFLOW_GROUP); if (group != null) { group.addRule(rule); } else { group = new RuleFlowGroup(pkg, rule, attributeValue); } } if (attributeKey.equals("activation-group")) { group = pkg.getGroup(attributeValue, DroolsElement.ACTIVATION_GROUP); if (group != null) { group.addRule(rule); } else { group = new ActivationGroup(pkg, rule, attributeValue); } } if (group != null) { rule.setGroup(group); group.setFile(file, offset, length); } } if (rule.getGroup() == null) { pkg.getDefaultGroup().addRule(rule); } } pkg.addRule(rule); return rule; } public static void removeRule(Rule rule) { Package pkg = rule.getParentPackage(); if (pkg != null) { pkg.removeRule(rule); if (pkg.getChildren().length == 0) { removePackage(pkg); } } } public static Function addFunction(Package pkg, String functionName, IFile file, int offset, int length) { Function function = new Function(pkg, functionName); function.setFile(file, offset, length); pkg.addFunction(function); return function; } public static void removeFunction(Function function) { Package pkg = function.getParentPackage(); if (pkg != null) { pkg.removeFunction(function); } } public static void addExpander(Package pkg, String expanderName, IFile file, int offset, int length) { Expander expander = new Expander(pkg, expanderName); expander.setFile(file, offset, length); pkg.addExpander(expander); } public static void removeExpander(Expander expander) { Package pkg = expander.getParentPackage(); if (pkg != null) { pkg.removeExpander(expander); } } public static void addImport(Package pkg, String importClass, IFile file, int offset, int length) { Import imp = new Import(pkg, importClass); imp.setFile(file, offset, length); pkg.addImport(imp); } public static void removeImport(Import imp) { Package pkg = imp.getParentPackage(); if (pkg != null) { pkg.removeImport(imp); } } public static Global addGlobal(Package pkg, String globalName, IFile file, int offset, int length) { Global global = new Global(pkg, globalName); global.setFile(file, offset, length); pkg.addGlobal(global); return global; } public static void removeGlobal(Global global) { Package pkg = global.getParentPackage(); if (pkg != null) { pkg.removeGlobal(global); } } public static Query addQuery(Package pkg, String queryName, IFile file, int offset, int length) { Query query = new Query(pkg, queryName); query.setFile(file, offset, length); pkg.addQuery(query); return query; } public static void removeQuery(Query query) { Package pkg = query.getParentPackage(); if (pkg != null) { pkg.removeQuery(query); } } public static Template addTemplate(Package pkg, String templateName, IFile file, int offset, int length) { Template template = new Template(pkg, templateName); template.setFile(file, offset, length); pkg.addTemplate(template); return template; } public static void removeTemplate(Template template) { Package pkg = template.getParentPackage(); if (pkg != null) { pkg.removeTemplate(template); } } public static Process addProcess(Package pkg, String processId, IFile file) { Process process = new Process(pkg, processId); process.setFile(file, -1, -1); pkg.addProcess(process); return process; } public static void removeProcess(Process process) { Package pkg = process.getParentPackage(); if (pkg != null) { pkg.removeProcess(process); } } public static void removeElement(DroolsElement element) { switch (element.getType()) { case DroolsElement.RULESET: clearRuleSet((RuleSet) element); break; case DroolsElement.PACKAGE: removePackage((Package) element); break; case DroolsElement.RULE: removeRule((Rule) element); removePackageIfEmpty(((Rule) element).getParentPackage()); break; case DroolsElement.QUERY: removeQuery((Query) element); removePackageIfEmpty(((Query) element).getParentPackage()); break; case DroolsElement.FUNCTION: removeFunction((Function) element); removePackageIfEmpty(((Function) element).getParentPackage()); break; case DroolsElement.TEMPLATE: removeTemplate((Template) element); removePackageIfEmpty(((Template) element).getParentPackage()); break; case DroolsElement.EXPANDER: removeExpander((Expander) element); removePackageIfEmpty(((Expander) element).getParentPackage()); break; case DroolsElement.GLOBAL: removeGlobal((Global) element); removePackageIfEmpty(((Global) element).getParentPackage()); break; case DroolsElement.PROCESS: removeProcess((Process) element); removePackageIfEmpty(((Process) element).getParentPackage()); break; } } private static void removePackageIfEmpty(Package pkg) { if (pkg.getChildren().length == 0) { removePackage(pkg); } } }