/* * 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; } } } } }