| /******************************************************************************* |
| * Copyright (c) 2004, 2006 Sybase, Inc. and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are 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: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowElement; |
| import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource; |
| |
| /** |
| * The base class for mapping facesconfig node from pageflow node. The |
| * ReferenceElement could be extended later to enable other model to be |
| * referenced by pageflow. |
| * |
| * @author hmeng |
| * |
| */ |
| public abstract class ReferenceElement { |
| |
| private List data = new ArrayList(); |
| |
| /** |
| * the pageflow element |
| */ |
| protected PageflowElement pageflowElement; |
| |
| /** |
| * @param pageflowElement |
| */ |
| public ReferenceElement(PageflowElement pageflowElement) { |
| this.pageflowElement = pageflowElement; |
| } |
| |
| /** |
| * @param pageflowElement |
| * @param facesConfigObject |
| */ |
| public ReferenceElement(PageflowElement pageflowElement, |
| EObject facesConfigObject) { |
| this(pageflowElement); |
| this.add(facesConfigObject); |
| } |
| |
| /** |
| * Add object to the list. |
| * |
| * @param object |
| */ |
| public void add(EObject object) { |
| if (!data.contains(object)) { |
| data.add(object); |
| } |
| } |
| |
| |
| /** |
| * The fragment path of a node. |
| * |
| * @param object |
| * @return the path |
| */ |
| public static String resolvePath(EObject object) { |
| if (object != null) { |
| ((CompatibilityXMIResource) object.eResource()) |
| .setFormat(CompatibilityXMIResource.FORMAT_EMF1); |
| String uriTarget = object.eResource().getURIFragment(object); |
| return uriTarget; |
| } |
| return ""; //$NON-NLS-1$ |
| } |
| |
| /** |
| * Resolve each referenced data's path and combine the result into one |
| * string, the path will be seperated with '|'. |
| * |
| * @return the resolved string |
| */ |
| public String resolveReferenceString() { |
| String result = ""; //$NON-NLS-1$ |
| for (int i = 0, n = data.size(); i < n; i++) { |
| result += resolvePath((EObject) data.get(i)) + "|"; //$NON-NLS-1$ |
| } |
| if (result.length() > 0) { |
| result = result.substring(0, result.length()); |
| } |
| return result; |
| } |
| |
| /** |
| * The EMF paths of all referenced elements. |
| * |
| * @return the list of resolved paths for the data elements |
| */ |
| public List getPaths() { |
| List paths = new ArrayList(); |
| for (int i = 0, n = data.size(); i < n; i++) { |
| paths.add(resolvePath((EObject) data.get(i))); |
| } |
| return paths; |
| } |
| |
| /** |
| * The facesconfig elements that are referenced. |
| * |
| * @return the list of elements |
| */ |
| public List getData() { |
| return data; |
| } |
| |
| /** |
| * Clear the data |
| */ |
| public void clear() { |
| if (!data.isEmpty()) { |
| data.clear(); |
| } |
| } |
| |
| /** |
| * @return true if the data is empty |
| */ |
| public boolean isEmpty() { |
| return data.isEmpty(); |
| } |
| |
| /** |
| * Dispose the element |
| */ |
| public void dispose() { |
| clear(); |
| } |
| |
| /** |
| * Update the referenced faces-config elements. |
| * |
| */ |
| abstract public void update(); |
| |
| /** |
| * Return a pageflow property's value with referenced faces-config element. |
| * |
| * @param eFeature |
| * @return the value for eFeature |
| */ |
| abstract public Object get(int eFeature); |
| |
| /** |
| * To set a pageflow property's value will result in seting a faces-config |
| * element. |
| * |
| * @param eFeature |
| * @param newValue |
| */ |
| abstract public void set(EStructuralFeature eFeature, Object newValue); |
| } |