/*
* VModelImpl.java
*
* Created on July 11, 2003, 6:48 PM
*/
package org.jboss.tools.common.verification.vrules.layer;
import org.jboss.tools.common.verification.vrules.*;
import org.jboss.tools.common.meta.*;
import org.jboss.tools.common.meta.action.*;
import org.jboss.tools.common.meta.action.impl.*;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
import java.util.*;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IType;
/**
*
* @author valera
*/
public class VModelImpl implements VModel {
private XModel model;
XModelMetaData meta;
private IProject project;
private Map<String,VEntity> entities;
/** Creates a new instance of VModelImpl */
public VModelImpl(XModel model) {
this.model = model;
meta = model.getMetaData();
project = (IProject)model.getProperties().get("project"); //$NON-NLS-1$
this.entities = new HashMap<String,VEntity>();
}
public boolean isMain() {
return project == null;
}
public Object getManagerKey() {
return model;
}
public VEntity getEntity(String name) {
VEntity entity = (VEntity)entities.get(name);
if(entity == null) {
entity = new VEntityImpl(meta, name, this);
entities.put(name, entity);
}
return entity;
}
public VObject getObjectByPath(String path) {
XModelObject o = model.getByPath(path);
return o == null ? null : new VObjectImpl(o, this);
}
public VObject[] getRootObjects() {
return new VObject[] { new VObjectImpl(model.getRoot(), this) };
}
private static XActionItem.Acceptor acceptor1 = new XActionItem.Acceptor() {
public boolean accepts(XActionItem item) {
return item.getName().charAt(0) != '[';
}
};
public XActionListImpl createGlobalActionList(XModelEntity entity) {
XActionList global = (XActionList)model.getMetaData().getGlobalActions().getItem("VerifyActions"); //$NON-NLS-1$
XActionListImpl entityActions = (XActionListImpl)entity.getActionList();
XActionListImpl verifyActions = (XActionListImpl)entityActions.getItem("VerifyActions"); //$NON-NLS-1$
if (verifyActions == null) {
verifyActions = (XActionListImpl)global.copy(acceptor1);
entityActions.addActionItem(verifyActions);
}
return verifyActions;
}
public XActionListImpl getGlobalActionList(XModelEntity entity) {
XActionListImpl verifyActions = (XActionListImpl)entity.getActionList().getItem("VerifyActions"); //$NON-NLS-1$
return verifyActions;
}
// public void removeGlobalActionList(XModelEntity entity) {
// if(!isMain()) return;
// XActionListImpl entityActions = (XActionListImpl)entity.getActionList();
// XActionListImpl verifyActions = (XActionListImpl)entityActions.getItem("VerifyActions");
// if (verifyActions != null) {
// removeAction(entityActions, verifyActions.getName());
// }
// }
public XActionListImpl createRuleSetActionList(XModelEntity entity, VRuleSet ruleSet) {
// XActionList global = (XActionList)model.getMetaData().getGlobalActions().getItem("VerifyActions");
// XActionListImpl verifyActions =
createGlobalActionList(entity);
return null;
}
public void createRuleAction(XModelEntity entity, VRule rule) {
// XActionListImpl ruleSetList =
createRuleSetActionList(entity, rule.getRuleSet());
}
public void createRuleActionInh(XModelEntity entity, VRule rule) {
createRuleAction(entity, rule);
Iterator ancestors = getAncestors(entity.getName()).iterator();
while(ancestors.hasNext()) {
String n = ancestors.next().toString();
XModelEntity ent = model.getMetaData().getEntity(n);
if(ent != null) createRuleAction(ent, rule);
}
}
// private void removeAction(XActionList list, String action) {
// }
private Set getAncestors(String name) {
return model.getMetaData().getParentInfo().getAncestors(name);
}
public XActionListImpl getRuleSetActionList(XModelEntity entity, String ruleSetName) {
XActionListImpl verifyActions = getGlobalActionList(entity);
if (verifyActions == null) return null;
XActionListImpl dynamicList = (XActionListImpl)verifyActions.getItem("DynamicActions"); //$NON-NLS-1$
XActionListImpl ruleSetList = (XActionListImpl)dynamicList.getItem(ruleSetName);
return ruleSetList;
}
public void updateRuleSetActionList(VRuleSet ruleSet, String oldName) {
}
public void removeRuleSetActionList(VRuleSet ruleSet) {
// if(!isMain()) return;
}
public void removeRuleSetActionList(XModelEntity entity, VRuleSet ruleSet) {
// if(!isMain()) return;
}
public XActionImpl getRuleAction(XModelEntity entity, String ruleSetName, String ruleName) {
XActionListImpl ruleSetList = getRuleSetActionList(entity, ruleSetName);
if (ruleSetList == null) return null;
XActionListImpl dynamicList2 = (XActionListImpl)ruleSetList.getItem("DynamicActions"); //$NON-NLS-1$
XActionImpl ruleAction = (XActionImpl)dynamicList2.getItem(ruleName);
return ruleAction;
}
public void updateRuleAction(VRule rule, String oldName) {
// if(!isMain()) return;
}
public void removeRuleAction(VRule rule) {
// if(!isMain()) return;
}
public void removeRuleAction(XModelEntity entity, VRule rule) {
// if(!isMain()) return;
}
public void removeRuleActionInh(XModelEntity entity, VRule rule) {
// if(!isMain()) return;
}
public IType getValidType(String className) {
if(project == null) return null;
IType type = EclipseResourceUtil.getValidType(project, className);
if(type != null) return type;
if(EclipseResourceUtil.isContainedInOutput(project, className)) {
// Eclipse does not have type in this case,
// so we return something instead of null
// This is ok while result is only compared to null
return EclipseResourceUtil.getValidType(project, "java.lang.Class"); //$NON-NLS-1$
}
return null;
}
}