/*
* VHelper.java
*
* Created on July 14, 2003, 5:16 PM
*/
package org.jboss.tools.common.verification.vrules;
import java.util.*;
import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.common.verification.vrules.model.VManagerModel;
import org.jboss.tools.common.verification.vrules.plugin.VerificationPlugin;
/**
*
* @author valera
*/
public class VHelper {
private static VManagerModel managerModel;
/** Creates a new instance of VHelper */
private VHelper() {}
/** Returns instance of VManager
*/
public static VManager getManager() {
return managerModel == null ? null : managerModel.getManager();
}
/** Sets instance of VManager
*/
public static void setManager(VManagerModel mgr) {
if(managerModel == null) {
managerModel = mgr;
} else if(managerModel != mgr) {
VerificationPlugin.getPluginLog().logInfo("Warning: VManager already exists."); //$NON-NLS-1$
}
}
/** Returns filtered list of all rules that can be applied
* to given object and its children.
*/
public static VRule[] getRules(VManager manager, VObject object) {
if(manager == null || object == null) return null;
List<VRule> result = new ArrayList<VRule>();
VEntity entity = object.getEntity();
VRuleSet[] ruleSets = manager.getRuleSets();
int sign = manager.getMinSignificance();
filterRuleSets(ruleSets, entity, sign, result);
return (VRule[])result.toArray(new VRule[result.size()]);
}
private static void filterRuleSets(VRuleSet[] ruleSets, VEntity entity, int sign, List<VRule> result) {
if(ruleSets == null) return;
//if (!ruleSets[i].isEnabled()) return;
for (int i = 0; i < ruleSets.length; i++) {
filterRuleSets(ruleSets[i].getRuleSets(), entity, sign, result);
}
for (int i = 0; i < ruleSets.length; i++) {
filterRules(ruleSets[i].getRules(), entity, sign, result);
}
}
/** Returns filtered list of rules from given rule set that
* can be applied to given object and its children.
*/
public static VRule[] getRules(VManager manager, VObject object, VRuleSet ruleSet) {
List<VRule> result = new ArrayList<VRule>();
VEntity entity = object.getEntity();
int sign = manager.getMinSignificance();
filterRules(ruleSet.getRules(), entity, sign, result);
filterRuleSets(ruleSet.getRuleSets(), entity, sign, result);
return (VRule[])result.toArray(new VRule[result.size()]);
}
private static void filterRules(VRule[] rules, VEntity entity, int sign, List<VRule> result) {
for (int j = 0; j < rules.length; j++) {
VRule rule = rules[j];
if (/*!rule.isEnabled() || rule.getAction() == null
||*/ rule.getSignificance() < sign) continue;
VEntity[] entities = rule.getEntities();
for (int k = 0; k < entities.length; k++) {
if(entity == null || entity.getName() == null) continue;
if(entities[k] == null || entities[k].getName() == null) continue;
String name = entities[k].getName();
if ((entity.getName().equals(name)) || entity.isDescendant(name)) {
result.add(rule);
break;
}
}
}
}
}