package org.jboss.tools.seam.pages.xml.model.handlers;
import java.util.ArrayList;
import java.util.Properties;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.jst.web.model.ReferenceObject;
import org.jboss.tools.jst.web.model.handlers.FindItemOnDiagramHandler;
import org.jboss.tools.seam.pages.xml.model.SeamPagesConstants;
import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramStructureHelper;
public class GoToNodeNandler extends FindItemOnDiagramHandler {
public GoToNodeNandler() {
}
public boolean isEnabled(XModelObject object) {
if(!super.isEnabled(object)) return false;
if(!(object instanceof ReferenceObject)) return false;
if(((ReferenceObject)object).getReference() != null) return false;
return true;
}
protected void fillProperties(XModelObject object, Properties p) {
super.fillProperties(object, p);
p.put("object", object.getParent());
//Find all matching nodes taking into account EL.
XModelObject[] outputs = object.getChildren();
ArrayList<XModelObject> targets = new ArrayList<XModelObject>();
for (int i = 0; i < outputs.length; i++) {
XModelObject o = SeamPagesDiagramStructureHelper.getInstance().getItemOutputTarget(outputs[i]);
if(o != null) targets.add(o);
}
String path = object.getAttributeValue(SeamPagesConstants.ATTR_PATH);
if(PageAdopt.isEL(path)) {
XModelObject[] items = object.getParent().getChildren();
for (int i = 0; i < items.length; i++) {
if(targets.contains(items[i])) {
continue;
}
String path_i = items[i].getAttributeValue(SeamPagesConstants.ATTR_PATH);
if(path_i == null || PageAdopt.isEL(path_i)) {
continue;
}
String type = items[i].getAttributeValue(SeamPagesConstants.ATTR_TYPE);
if(SeamPagesConstants.TYPE_EXCEPTION.equals(type)) {
continue;
}
//TODO improve if EL is only part of path
targets.add(items[i]);
}
}
p.put("items", targets.toArray(new XModelObject[0]));
}
}