/**
* 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.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* This represents a package.
*
* @author <a href="mailto:kris_verlaenen@hotmail.com">Kris Verlaenen</a>
*/
public class Package extends DroolsElement {
private String packageName;
private List rules = new ArrayList();
private List functions = new ArrayList();
private List expanders = new ArrayList();
private List imports = new ArrayList();
private List globals = new ArrayList();
private List queries = new ArrayList();
private List templates = new ArrayList();
private List processes = new ArrayList();
private Map groups = new HashMap();
private DefaultRuleGroup defaultGroup = null;
Package(RuleSet parent, String packageName) {
super(parent);
this.packageName = packageName == null ? "(default package)"
: packageName;
defaultGroup = new DefaultRuleGroup(this, null, "MAIN");
}
public RuleSet getParentRuleSet() {
return (RuleSet) getParent();
}
public String getPackageName() {
return packageName;
}
public int getType() {
return PACKAGE;
}
public DroolsElement[] getChildren() {
List children = new ArrayList();
children.addAll(rules);
children.addAll(queries);
children.addAll(globals);
children.addAll(functions);
children.addAll(expanders);
children.addAll(imports);
children.addAll(templates);
children.addAll(processes);
// }
return (DroolsElement[]) children.toArray(new DroolsElement[0]);
}
public String toString() {
return packageName;
}
// These are helper methods for creating the model and should not
// be used directly. Use DroolsModelBuilder instead.
void addRule(Rule rule) {
rules.add(rule);
}
void removeRule(Rule rule) {
rules.remove(rule);
}
void addFunction(Function function) {
functions.add(function);
}
void removeFunction(Function function) {
functions.remove(function);
}
void addExpander(Expander expander) {
expanders.add(expander);
}
void removeExpander(Expander expander) {
expanders.remove(expander);
}
void addImport(Import imp) {
imports.add(imp);
}
void removeImport(Import imp) {
imports.remove(imp);
}
void addGlobal(Global global) {
globals.add(global);
}
void removeGlobal(Global global) {
globals.remove(global);
}
void addQuery(Query query) {
queries.add(query);
}
void removeQuery(Query query) {
queries.remove(query);
}
void addTemplate(Template template) {
templates.add(template);
}
void removeTemplate(Template template) {
templates.remove(template);
}
void addProcess(Process process) {
processes.add(process);
}
void removeProcess(Process process) {
processes.remove(process);
}
public RuleGroup getGroup(String name, int type) {
Map entries = (Map) groups.get(type);
if ((entries != null) && (entries.containsKey(name))) {
return (RuleGroup) entries.get(name);
}
return null;
}
void addGroup(RuleGroup group) {
Map entries = (Map) groups.get(group.getType());
if (entries == null) {
entries = new HashMap();
entries.put(group.toString(), group);
groups.put(group.getType(), entries);
} else {
if (!entries.containsKey(group.toString())) {
entries.put(group.toString(), group);
}
}
}
public RuleGroup getDefaultGroup() {
return defaultGroup;
}
void removeGroup(RuleGroup group) {
Map entries = (Map) groups.get(group.getType());
if (entries.containsValue(group)) {
entries.remove(group);
}
}
public DroolsElement[] getGroups() {
List returnedValue = new ArrayList();
for (Iterator it = groups.keySet().iterator(); it.hasNext();) {
int key = (Integer) it.next();
Map entries = (Map) groups.get(key);
returnedValue.addAll(entries.values());
}
return (DroolsElement[]) returnedValue.toArray(new DroolsElement[0]);
}
}