/*
* VManagerModel.java
*
* Created on July 14, 2003, 3:50 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.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.plugin.ModelPlugin;
import org.jboss.tools.common.verification.vrules.VHelper;
import org.jboss.tools.common.verification.vrules.VManager;
import org.jboss.tools.common.verification.vrules.VMessageFormat;
import org.jboss.tools.common.verification.vrules.VModel;
import org.jboss.tools.common.verification.vrules.VRuleSet;
import org.jboss.tools.common.verification.vrules.impl.VManagerImpl;
import org.jboss.tools.common.verification.vrules.layer.VModelFactory;
import org.jboss.tools.common.verification.vrules.layer.VModelImpl;
/**
*
* @author valera
*/
public class VManagerModel extends RegularObjectImpl implements PropertyChangeListener {
private static final long serialVersionUID = 2133677518200661058L;
protected VManagerImpl manager;
protected boolean developer = false;
/** Creates a new instance of VManagerModel */
public VManagerModel() {
}
public VManager getManager() {
if (manager == null) {
init();
}
return manager;
}
public void init() {
manager = new VManagerImpl();
manager.setModel(new VModelImpl(getModel()));
VHelper.setManager(this);
manager.setMessageFormat(new VMessageFormat(getBundle(getAttributeValue("bundle")).getString(getAttributeValue("format id")))); //$NON-NLS-1$ //$NON-NLS-2$
manager.setRuleSets(getRuleSets());
String s = getAttributeValue("minimum significance"); //$NON-NLS-1$
try {
if(s != null && s.length() > 0) {
manager.setMinSignificance(Integer.parseInt(s));
}
} catch (NumberFormatException e) {
ModelPlugin.getPluginLog().logError(e);
}
developer = "developer".equals(getAttributeValue("mode")); //$NON-NLS-1$ //$NON-NLS-2$
manager.addPropertyChangeListener(this);
}
static Map<String,Object> bundles = new HashMap<String,Object>();
private ResourceBundle getBundle(String baseName) {
if (baseName == null || baseName.length() == 0) return null;
if("null".equals(bundles.get(baseName))) return null; //$NON-NLS-1$
ResourceBundle bundle = (ResourceBundle)bundles.get(baseName);
if(bundle != null) {
return bundle;
}
bundle = ResourceBundle.getBundle(baseName);
Object bo = (bundle == null) ? (Object)"null" : bundle; //$NON-NLS-1$
bundles.put(baseName, bo);
return bundle;
}
private VRuleSet[] getRuleSets() {
XModelObject[] c = getChildren();
VRuleSet[] ruleSets = new VRuleSet[c.length];
for (int i = 0; i < c.length; i++) {
ruleSets[i] = ((VRuleSetModel)c[i]).getRuleSet();
}
return ruleSets;
}
protected void loadChildren() {
if(getParent() != null) VHelper.setManager(this);
//it would be nice to remove this init
//but then menu will not be initialized
if (manager == null && getParent() != null) init();
}
public boolean addChild(XModelObject child) {
boolean res = super.addChild(child);
if (res && manager != null) {
VRuleSet ruleSet = ((VRuleSetModel)child).getRuleSet();
manager.loadRuleSet(ruleSet);
}
return res;
}
public void removeChild(XModelObject child) {
super.removeChild(child);
if (manager != null) {
VRuleSet ruleSet = ((VRuleSetModel)child).getRuleSet();
manager.unloadRuleSet(ruleSet);
VModel vmodel = VModelFactory.getModel(getModel());
((VModelImpl)vmodel).removeRuleSetActionList(ruleSet);
}
}
public String setAttributeValue(String name, String value) {
String result = super.setAttributeValue(name, value);
if (manager != null) {
if ("mode".equals(name)) { //$NON-NLS-1$
developer = "developer".equals(getAttributeValue("mode")); //$NON-NLS-1$ //$NON-NLS-2$
} else if ("minimum significance".equals(name)) { //$NON-NLS-1$
try {
if(result != null && result.length() > 0) {
manager.setMinSignificance(Integer.parseInt(result));
}
} catch (NumberFormatException e) {
ModelPlugin.getPluginLog().logError(e);
}
}
}
return result;
}
protected Comparator<XModelObject> createComparator() {
return super.createComparator();
}
public boolean isObjectEditable() {
return developer && super.isObjectEditable();
}
public boolean isAttributeEditable(String name) {
return "mode".equals(name) || "minimum significance".equals(name) || super.isAttributeEditable(name); //$NON-NLS-1$ //$NON-NLS-2$
}
public void propertyChange(PropertyChangeEvent evt) {
String name = evt.getPropertyName();
String value = "" + evt.getNewValue(); //$NON-NLS-1$
if ("minSignificance".equals(name)) { //$NON-NLS-1$
if (!value.equals(getAttributeValue("minimum significance"))) { //$NON-NLS-1$
setAttributeValue("minimum significance", value); //$NON-NLS-1$
setModified(true);
}
}
}
}