package org.jboss.tools.seam.pages.xml.model; import java.util.Map; import java.util.TreeMap; import org.eclipse.ui.IViewReference; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.filesystems.FileSystemsHelper; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.jboss.tools.jst.web.model.tree.WebPagesTree; import org.jboss.tools.seam.pages.xml.model.helpers.SeamPagesDiagramStructureHelper; public class ViewIdsTree extends WebPagesTree { Map<String, XModelObject> pageMap; XModelObject root; XModelObject webRoot; XModelObject pages; public void setConstraint(Object object) { super.setConstraint(object); Object[] os = (Object[])object; XModelObject c = (XModelObject)os[1]; root = FileSystemsHelper.getFileSystems(c.getModel()); webRoot = FileSystemsHelper.getWebRoot(c.getModel()); XModelObject f = SeamPagesDiagramStructureHelper.getInstance().getParentFile(c); pages = f.getChildByPath("Pages"); XModelObject[] ps = pages == null ? new XModelObject[0] : pages.getChildren(); pageMap = new TreeMap<String, XModelObject>(); for (int i = 0; i < ps.length; i++) { String viewId = ps[i].getAttributeValue(SeamPagesConstants.ATTR_VIEW_ID); if(viewId == null || viewId.length() == 0 || viewId.indexOf('*') >= 0) continue; pageMap.put(viewId, ps[i]); } } public XModelObject getRoot() { return root; } public XModelObject[] getChildren(XModelObject object) { if(object == root) { if(webRoot == null) { XModelObject[] rs = super.getChildren(object); if(pages == null) { return rs; } else { XModelObject[] rs1 = new XModelObject[rs.length + 1]; System.arraycopy(rs, 0, rs1, 0, rs.length); rs1[rs.length] = pages; return rs1; } } if(pages == null) { return new XModelObject[]{webRoot}; } else { return new XModelObject[]{webRoot, pages}; } } if(object == pages) return pageMap.values().toArray(new XModelObject[0]); return super.getChildren(object); } public String getValue(XModelObject object) { if(isLocalPage(object)) { return object.getAttributeValue(SeamPagesConstants.ATTR_VIEW_ID); } return super.getValue(object); } public XModelObject find(String value) { if(value != null && pageMap.containsKey(value)) { return pageMap.get(value); } return super.find(value); } public boolean isSelectable(XModelObject object) { if(isLocalPage(object)) { return true; } return super.isSelectable(object); } public boolean hasChildren(XModelObject object) { if(isLocalPage(object)) { return false; } return super.hasChildren(object); } private boolean isLocalPage(XModelObject object) { return (object != null && object.getParent() == pages); } }