/* * VRuleSetModel.java * * Created on July 14, 2003, 3:37 PM */ package org.jboss.tools.common.verification.vrules.model; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Comparator; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.impl.RegularObjectImpl; import org.jboss.tools.common.model.util.ModelFeatureFactory; import org.jboss.tools.common.verification.vrules.VEntity; import org.jboss.tools.common.verification.vrules.VModel; import org.jboss.tools.common.verification.vrules.VRule; import org.jboss.tools.common.verification.vrules.VRuleSet; import org.jboss.tools.common.verification.vrules.impl.VRuleSetImpl; import org.jboss.tools.common.verification.vrules.layer.VModelFactory; import org.jboss.tools.common.verification.vrules.layer.VModelImpl; import org.jboss.tools.common.verification.vrules.plugin.VerificationPlugin; /** * * @author valera */ public class VRuleSetModel extends RegularObjectImpl implements PropertyChangeListener { private static final long serialVersionUID = 2133689216972164607L; protected VRuleSetImpl ruleSet; protected boolean installed = false; /** Creates a new instance of VRuleSetModel */ public VRuleSetModel() { } public VRuleSet getRuleSet() { return getRuleSet(null); } public VRuleSet getRuleSet(VRuleSet parent) { if (ruleSet == null) { ruleSet = new VRuleSetImpl(); ruleSet.setManagerKey(getModel()); ruleSet.setName(getAttributeValue("name")); //$NON-NLS-1$ ruleSet.setDescription(getAttributeValue("description")); //$NON-NLS-1$ ruleSet.setEnabled(Boolean.valueOf(getAttributeValue("enabled")).booleanValue()); //$NON-NLS-1$ String defaultEnabled = get("default-enabled"); //$NON-NLS-1$ if("false".equals(defaultEnabled)) { //$NON-NLS-1$ ruleSet.setDefaultEnabled(false); } ruleSet.setURL(getAttributeValue("url")); //$NON-NLS-1$ ruleSet.setVendor(getAttributeValue("vendor")); //$NON-NLS-1$ ruleSet.setVersion(getAttributeValue("version")); //$NON-NLS-1$ ruleSet.setResourceBundle(getBundle(getAttributeValue("bundle"))); //$NON-NLS-1$ ruleSet.setRules(getRules()); ruleSet.setRuleSets(getRuleSets()); installed = Boolean.valueOf(getAttributeValue("installed")).booleanValue(); //$NON-NLS-1$ ruleSet.addPropertyChangeListener(this); } if(parent != null && ruleSet.getParentRuleSet() == null) ruleSet.setParentRuleSet(parent); return ruleSet; } private VRule[] getRules() { XModelObject[] c = getChildren("VRule"); //$NON-NLS-1$ VRule[] rules = new VRule[c.length]; for (int i = 0; i < c.length; i++) { rules[i] = ((VRuleModel)c[i]).getRule(ruleSet); } return rules; } private VRuleSet[] getRuleSets() { XModelObject[] c = getChildren("VRuleSet"); //$NON-NLS-1$ VRuleSet ruleSet = getRuleSet(); VRuleSet[] ruleSets = new VRuleSet[c.length]; for (int i = 0; i < c.length; i++) { ruleSets[i] = ((VRuleSetModel)c[i]).getRuleSet(ruleSet); } return ruleSets; } static Map<String,Object> bundles = new HashMap<String,Object>(); static Object NULL = new Object(); private static ResourceBundle getBundle(String baseName) { if (baseName == null || baseName.length() == 0) return null; if(bundles.get(baseName) == NULL) return null; ResourceBundle resourceBundle = (ResourceBundle)bundles.get(baseName); if(resourceBundle != null) return resourceBundle; String bundleLoaderClassName = baseName.substring(0, baseName.lastIndexOf('.') + 1) + "BundleLoader"; //$NON-NLS-1$ Class c = ModelFeatureFactory.getInstance().getFeatureClass(bundleLoaderClassName); if(c != null) { try { ResourceBundle b = ResourceBundle.getBundle(baseName, Locale.getDefault(), c.getClassLoader()); if(b != null) { bundles.put(baseName, b); return b; } } catch (RuntimeException e) { //ignore } } bundles.put(baseName, NULL); if(VerificationPlugin.isDebugEnabled()) { VerificationPlugin.getPluginLog().logInfo("Resource not found: " + baseName + " by org.jboss.tools.common.verification.vrules.model.VRuleSetModel:getBundle()"); //$NON-NLS-1$ //$NON-NLS-2$ } return null; } public void set(String name, String value) { super.set(name, value); if (ruleSet != null) { if ("default-enabled".equals(name)) { //$NON-NLS-1$ if("false".equals(value)) { //$NON-NLS-1$ ruleSet.setDefaultEnabled(false); } } } } public String setAttributeValue(String name, String value) { String result = super.setAttributeValue(name, value); if (ruleSet != null) { if ("enabled".equals(name)) { //$NON-NLS-1$ ruleSet.setEnabled(Boolean.valueOf(result).booleanValue()); } else if ("name".equals(name)) { //$NON-NLS-1$ String oldName = ruleSet.getName(); ruleSet.setName(result); VModel vmodel = VModelFactory.getModel(getModel()); ((VModelImpl)vmodel).updateRuleSetActionList(ruleSet, oldName); } else if ("installed".equals(name)) { //$NON-NLS-1$ installed = Boolean.valueOf(result).booleanValue(); } else if ("bundle".equals(name)) { //$NON-NLS-1$ ruleSet.setResourceBundle(getBundle(result)); } } return result; } public boolean addChild(XModelObject child) { boolean res = super.addChild(child); if (res && ruleSet != null) { ruleSet.setRules(getRules()); ruleSet.setRuleSets(getRuleSets()); if(child instanceof VRuleSetModel) return true; VRule rule = ((VRuleModel)child).getRule(ruleSet); VEntity[] entities = rule.getEntities(); for (int i = 0; i < entities.length; i++) { if (entities[i]!=null) entities[i].addRule(rule); } } return res; } public void removeChild(XModelObject child) { super.removeChild(child); if (ruleSet != null) { ruleSet.setRules(getRules()); VRule rule = ((VRuleModel)child).getRule(ruleSet); VEntity[] entities = rule.getEntities(); for (int i = 0; i < entities.length; i++) { if (entities[i]!=null) entities[i].removeRule(rule); } VModel vmodel = VModelFactory.getModel(child.getModel()); ((VModelImpl)vmodel).removeRuleAction(rule); } } protected Comparator<XModelObject> createComparator() { return super.createComparator(); } // TODO: override public boolean isObjectEditable() { return !installed && super.isObjectEditable(); } public boolean isAttributeEditable(String name) { return "enabled".equals(name) || super.isAttributeEditable(name); //$NON-NLS-1$ } public String getPathPart() { return getAttributeValue("name"); //$NON-NLS-1$ } public String getPresentationString() { return getAttributeValue("name"); //$NON-NLS-1$ } public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); String value = "" + evt.getNewValue(); //$NON-NLS-1$ if ("enabled".equals(name)) { //$NON-NLS-1$ if (!value.equals(getAttributeValue(name))) { setAttributeValue(name, value); setModified(true); } } } }