/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.jsf.model.helpers; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.markers.XMarkerManager; import org.jboss.tools.jsf.model.*; import org.jboss.tools.jst.web.model.ReferenceObject; import org.jboss.tools.jst.web.model.helpers.WebProcessStructureHelper; public class JSFProcessStructureHelper extends WebProcessStructureHelper implements JSFConstants { public static final JSFProcessStructureHelper instance = new JSFProcessStructureHelper(); public XModelObject getParentProcess(XModelObject element) { XModelObject p = element; while(p != null && p.getFileType() == XModelObject.NONE && !"JSFProcess".equals(p.getModelEntity().getName())) p = p.getParent(); //$NON-NLS-1$ return p; } public XModelObject[] getGroups(XModelObject process) { return process.getChildren(ENT_PROCESS_GROUP); } public XModelObject[] getItems(XModelObject group) { return group.getChildren(ENT_PROCESS_ITEM); } public boolean isMultiRuleGroup(XModelObject group) { return getItems(group).length > 1; } public XModelObject[] getOutputs(XModelObject item) { return item.getChildren(ENT_PROCESS_ITEM_OUTPUT); } public String getPath(XModelObject element) { return element.getAttributeValue(ATT_PATH); } public XModelObject getItemOutputTarget(XModelObject itemOutput) { return itemOutput.getParent().getParent().getParent().getChildByPath(itemOutput.getAttributeValue(ATT_TARGET)); } public boolean isGroupPattern(XModelObject group) { String path = group.getAttributeValue(ATT_PATH); return (path != null) && (path.length() == 0 || path.indexOf('*') >= 0); } public String getPageTitle(XModelObject group) { return group.getPresentationString(); } public String getItemOutputPresentation(XModelObject itemOutput) { // boolean s = isShortcut(itemOutput); return itemOutput.getPresentationString(); } public static String createItemOutputPresentation(XModelObject reference) { if(reference == null) return null; String action = reference.getAttributeValue(ATT_FROM_ACTION); String prefix = (action == null || action.length() == 0) ? "" : action + ":"; //$NON-NLS-1$ //$NON-NLS-2$ String outcome = reference.getAttributeValue(ATT_FROM_OUTCOME); if(outcome.length() == 0) outcome = JSFConstants.EMPTY_NAVIGATION_RULE_NAME; return prefix + outcome; } public boolean isUnconfirmedPage(XModelObject group) { if(!(group instanceof ReferenceGroupImpl)) return false; if(isGroupPattern(group)) return false; return !"true".equals(group.getAttributeValue("confirmed")); //$NON-NLS-1$ //$NON-NLS-2$ } /// public static boolean isPageConfirmed(XModelObject itemPage) { /// return "true".equals(itemPage.get("confirmed")); /// } public XModelObject getReference(XModelObject diagramObject) { if(diagramObject instanceof ReferenceGroupImpl) { ReferenceGroupImpl g = (ReferenceGroupImpl)diagramObject; XModelObject[] rs = g.getReferences(); if(rs.length > 0) return rs[0]; String path = g.getAttributeValue(ATT_PATH); if(path == null) return null; XModelObject page = g.getModel().getByPath(path); return page; } else if(diagramObject instanceof ReferenceObject) { return ((ReferenceObject)diagramObject).getReference(); } return null; } public boolean hasErrors(XModelObject diagramObject){ if(diagramObject instanceof ReferenceGroupImpl) { ReferenceGroupImpl g = (ReferenceGroupImpl)diagramObject; XModelObject[] rs = g.getReferences(); if(rs.length > 0) { for (int i = 0; i < rs.length; i++) { if(XMarkerManager.getInstance().hasErrors(rs[i])) return true; } } if(isGroupPattern(diagramObject)) return false; String path = g.getAttributeValue(ATT_PATH); if(path != null) { XModelObject page = g.getModel().getByPath(path); return XMarkerManager.getInstance().hasErrors(page); } } else if(diagramObject instanceof ReferenceObject) { XModelObject reference = ((ReferenceObject)diagramObject).getReference(); return XMarkerManager.getInstance().hasErrors(reference); } return XMarkerManager.getInstance().hasErrors(diagramObject); } }