Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java983
1 files changed, 0 insertions, 983 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java
deleted file mode 100644
index e2a9fb08e..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java
+++ /dev/null
@@ -1,983 +0,0 @@
-/*******************************************************************************
- * 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.synchronization;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.jst.jsf.facesconfig.emf.DescriptionType;
-import org.eclipse.jst.jsf.facesconfig.emf.DisplayNameType;
-import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigFactory;
-import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
-import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType;
-import org.eclipse.jst.jsf.facesconfig.emf.FromViewIdType;
-import org.eclipse.jst.jsf.facesconfig.emf.IconType;
-import org.eclipse.jst.jsf.facesconfig.emf.LargeIconType;
-import org.eclipse.jst.jsf.facesconfig.emf.NavigationCaseType;
-import org.eclipse.jst.jsf.facesconfig.emf.NavigationRuleType;
-import org.eclipse.jst.jsf.facesconfig.emf.SmallIconType;
-import org.eclipse.jst.jsf.facesconfig.emf.ToViewIdType;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.Pageflow;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowElement;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowFactory;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowPage;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.PageReferenceElement;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.ReferenceElement;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowModelManager;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowTransform;
-import org.eclipse.jst.jsf.facesconfig.ui.util.WebrootUtil;
-
-/**
- * Update and synchronize pageflow from faces-config or vice-versa.
- *
- * @author hmeng
- *
- */
-
-public class FC2PFTransformer extends AdapterImpl {
-
- // For code debug.
- private static final boolean DEBUG = false;
-
- /**
- * the first notification event type after the defaults
- */
- public static final int MY_NOTIFICATION_TYPE = Notification.EVENT_TYPE_COUNT + 1;
-
- /**
- * the first notification event type after MY_NOTIFICATION_TYPE
- */
- public static final int MY_NOTIFICATION_TYPE1 = MY_NOTIFICATION_TYPE + 1;
-
- /**
- * The listener is active.
- */
- private boolean listenToNotify;
-
- /**
- * Avoid redundent event.
- */
- private boolean isInEvent;
-
- boolean pageflowChanged = false;
-
- /**
- * Perform operations batched.
- */
- boolean needBatchOperations = false;
-
- /**
- * Catches
- */
- private Map mapPaths2PF = new HashMap();
-
- private Map mapCases2Links = new HashMap();
-
- /**
- * The pageflow model.
- */
- private Pageflow pageflow;
-
- /**
- * The faces-config model.
- */
- FacesConfigType facesConfig;
-
- /**
- * Default constructor
- */
- public FC2PFTransformer() {
- super();
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param listenToNotify
- */
- public void setListenToNotify(boolean listenToNotify) {
- this.listenToNotify = listenToNotify;
- }
-
- private void postEMFChanged() {
- startFCNotify();
- // Refresh all facesConfig?
- facesConfig.eNotify(new ENotificationImpl(
- (InternalEObject) facesConfig, Notification.REMOVE,
- FacesConfigPackage.FACES_CONFIG_TYPE__NAVIGATION_RULE, null,
- null));
- List rules;
- rules = facesConfig.getNavigationRule();
- for (int i = 0; i < rules.size(); i++) {
- ((NavigationRuleType) rules.get(i)).eNotify(new ENotificationImpl(
- (InternalEObject) rules.get(i), Notification.REMOVE,
- FacesConfigPackage.NAVIGATION_RULE_TYPE__NAVIGATION_CASE,
- null, null));
- }
- }
-
- /**
- * Set notify adapters.
- *
- */
- private void startFCNotify() {
- TreeIterator iterator = facesConfig.eAllContents();
- while (iterator.hasNext()) {
- EObject object = (EObject) iterator.next();
- object.eSetDeliver(true);
- }
- facesConfig.eSetDeliver(true);
- }
-
- /**
- * Set not notify adapters
- *
- * @return
- */
- private TreeIterator stopFCNotify() {
- TreeIterator iterator = facesConfig.eAllContents();
- // Stop the listener
- while (iterator.hasNext()) {
- EObject object = (EObject) iterator.next();
- object.eSetDeliver(false);
- }
- facesConfig.eSetDeliver(false);
- return iterator;
- }
-
- /**
- * For performance issue, we are going to update DOM only after the EMF
- * modifications are done.
- */
- boolean isNeedBatchOperations() {
- return needBatchOperations;
- }
-
- /**
- * @param enable
- */
- public void setNeedBatchOperations(boolean enable) {
- this.needBatchOperations = enable;
- if (!enable) {
- isInEvent = true;
- postEMFChanged();
- isInEvent = false;
- } else {
- stopFCNotify();
- }
- }
-
- private void updateFacesRule(NavigationRuleType navigationRule,
- PageflowPage pageSource) {
- FacesConfigFactory factory = FacesConfigFactory.eINSTANCE;
- if (pageSource.getComment() != null) {
- DescriptionType description = factory.createDescriptionType();
- description.setTextContent(pageSource.getComment());
- navigationRule.getDescription().clear();
- navigationRule.getDescription().add(description);
- }
- // set the navigation rule's icon
- if (pageSource.getLargeicon() != null
- || pageSource.getSmallicon() != null) {
- IconType icon = factory.createIconType();
- if (pageSource.getLargeicon() != null) {
- LargeIconType largeicon = factory.createLargeIconType();
- largeicon.setTextContent(pageSource.getLargeicon());
- icon.setLargeIcon(largeicon);
- }
-
- if (pageSource.getSmallicon() != null) {
- SmallIconType smallicon = factory.createSmallIconType();
- smallicon.setTextContent(pageSource.getSmallicon());
- icon.setSmallIcon(smallicon);
- }
- navigationRule.getIcon().clear();
- navigationRule.getIcon().add(icon);
- }
- if (pageSource.getName() != null) {
- DisplayNameType displayName = factory.createDisplayNameType();
- displayName.setTextContent(pageSource.getName());
- navigationRule.getDisplayName().clear();
- navigationRule.getDisplayName().add(displayName);
- }
- }
-
- /**
- * TODO: If we cache the case's properties in a link, then we can restore
- * them.
- *
- * @param navigationCase
- * @param link
- */
- // TODO: not used, dead?
-// private void updateFacesCase(NavigationCaseType navigationCase,
-// PageflowLink link) {
-// FacesConfigFactory factory = FacesConfigFactory.eINSTANCE;
-// if (link.getComment() != null) {
-// DescriptionType description = factory.createDescriptionType();
-// description.setTextContent(link.getComment());
-// navigationCase.getDescription().clear();
-// navigationCase.getDescription().add(description);
-// }
-// // set the navigation rule's icon
-// if (link.getLargeicon() != null || link.getSmallicon() != null) {
-// IconType icon = factory.createIconType();
-// if (link.getLargeicon() != null) {
-// LargeIconType largeicon = factory.createLargeIconType();
-// largeicon.setTextContent(link.getLargeicon());
-// icon.setLargeIcon(largeicon);
-// }
-//
-// if (link.getSmallicon() != null) {
-// SmallIconType smallicon = factory.createSmallIconType();
-// smallicon.setTextContent(link.getSmallicon());
-// icon.setSmallIcon(smallicon);
-// }
-// navigationCase.getIcon().clear();
-// navigationCase.getIcon().add(icon);
-// }
-// if (link.getFromaction() != null) {
-// FromActionType fromAction = factory.createFromActionType();
-// fromAction.setTextContent(link.getFromaction());
-// navigationCase.setFromAction(fromAction);
-// }
-// if (link.getOutcome() != null) {
-// FromOutcomeType fromOutcome = factory.createFromOutcomeType();
-// fromOutcome.setTextContent(link.getOutcome());
-// navigationCase.setFromOutcome(fromOutcome);
-// }
-// }
-
- private void createFacesCase(PageflowLink link, PageflowPage source,
- PageflowPage target_) {
- NavigationRuleType rule = FacesConfigFactory.eINSTANCE
- .createNavigationRuleType();
- FromViewIdType from = FacesConfigFactory.eINSTANCE
- .createFromViewIdType();
- from.setTextContent((source).getPath());
- rule.setFromViewId(from);
- NavigationCaseType navCase = FacesConfigFactory.eINSTANCE
- .createNavigationCaseType();
- ToViewIdType toView = FacesConfigFactory.eINSTANCE.createToViewIdType();
- toView.setTextContent((target_).getPath());
- navCase.setToViewId(toView);
- rule.getNavigationCase().add(navCase);
- facesConfig.getNavigationRule().add(rule);
- updateFacesRule(rule, source);
- source.getFCElements().add(from);
- target_.getFCElements().add(toView);
- link.getFCElements().add(navCase);
- mapCases2Links.put(navCase, link);
- }
-
- private void removePageflowPage(PageflowPage source) {
- Assert.isTrue(source.getOutlinks().size() == 0
- && source.getInlinks().size() == 0);
- pageflow.getNodes().remove(source);
- }
-
- void removeCase(NavigationCaseType navCase) {
- NavigationRuleType rule = (NavigationRuleType) navCase.eContainer();
- (rule).getNavigationCase().remove(navCase);
- if (rule.getNavigationCase().size() == 0) {
- facesConfig.getNavigationRule().remove(rule);
- }
- }
-
- /**
- * Remove a link in pageflow model.
- *
- * @param pLink
- */
- private void removeLink(PageflowLink pLink) {
- // Link
- PageflowPage source = (PageflowPage) pLink.getSource();
- PageflowPage target_ = (PageflowPage) pLink.getTarget();
- pLink.getPageflow().getLinks().remove(pLink);
- source.getOutlinks().remove(pLink);
- target_.getInlinks().remove(pLink);
- // Navigation case
- pLink.getFCElements().clear();
- cleanPage(source);
- cleanPage(target_);
- }
-
- /**
- * Remove a link in pageflow model.
- *
- * @param pLink
- */
- void changePFLinkStart(PageflowLink pLink, String newValue) {
- PageflowPage newPage = null;
- if ((newPage = getValidPFPageInCache(newValue)) != null) {
- if (newValue.equals(((PageflowPage) pLink.getSource()).getPath())) {
- return;
- }
- } else if ((newPage = TransformUtil.findPage(newValue, pageflow)) == null) {
- return;
- }
-
- // remove old case
- NavigationCaseType caseType = (NavigationCaseType) pLink
- .getFCElements().getData().get(0);
- //NavigationRuleType rule = (NavigationRuleType) caseType.eContainer();
- removeCase(caseType);
-
- // create new rule / case
- NavigationCaseType newCase = FacesConfigFactory.eINSTANCE
- .createNavigationCaseType();
- ToViewIdType toView = FacesConfigFactory.eINSTANCE.createToViewIdType();
- toView.setTextContent(caseType.getToViewId().getTextContent());
- newCase.setToViewId(toView);
-
- NavigationRuleType newRule = FacesConfigFactory.eINSTANCE
- .createNavigationRuleType();
- FromViewIdType fromView = FacesConfigFactory.eINSTANCE
- .createFromViewIdType();
- fromView.setTextContent(newValue);
- newRule.setFromViewId(fromView);
- newRule.getNavigationCase().add(newCase);
- facesConfig.getNavigationRule().add(newRule);
-
- // update
- // updateNode(rule, newRule);
- updateNode(caseType, newCase);
-
- pLink.getFCElements().clear();
- pLink.getFCElements().add(newCase);
- pLink.setSource(newPage);
-
- updatePageflowElements(pageflow, newCase);
- }
-
- private void updateNode(EObject old, EObject newOne) {
- if (old instanceof NavigationRuleType) {
- ((NavigationRuleType) newOne).getDescription().clear();
- ((NavigationRuleType) newOne).getDescription().addAll(
- ((NavigationRuleType) old).getDescription());
- ((NavigationRuleType) newOne).getDisplayName().clear();
- ((NavigationRuleType) newOne).getDisplayName().addAll(
- ((NavigationRuleType) old).getDisplayName());
- ((NavigationRuleType) newOne).getDescription().clear();
- ((NavigationRuleType) newOne).getIcon().clear();
- ((NavigationRuleType) newOne).getIcon().addAll(
- ((NavigationRuleType) old).getIcon());
- } else if (old instanceof NavigationCaseType) {
- ((NavigationCaseType) newOne).getDescription().clear();
- ((NavigationCaseType) newOne).getDescription().addAll(
- ((NavigationCaseType) old).getDescription());
- ((NavigationCaseType) newOne).getDisplayName().clear();
- ((NavigationCaseType) newOne).getDisplayName().addAll(
- ((NavigationCaseType) old).getDisplayName());
- ((NavigationCaseType) newOne).getDescription().clear();
- ((NavigationCaseType) newOne).getIcon().clear();
- ((NavigationCaseType) newOne).getIcon().addAll(
- ((NavigationCaseType) old).getIcon());
- ((NavigationCaseType) newOne)
- .setFromAction(((NavigationCaseType) old).getFromAction());
- ((NavigationCaseType) newOne)
- .setFromOutcome(((NavigationCaseType) old).getFromOutcome());
- }
- }
-
- void changePFLinkEnd(PageflowLink pLink, String newValue) {
- PageflowPage newPage = null;
- if ((newPage = getValidPFPageInCache(newValue)) != null) {
- if (newValue.equals(((PageflowPage) pLink.getSource()).getPath())) {
- return;
- }
- } else if ((newPage = TransformUtil.findPage(newValue, pageflow)) == null) {
- return;
- }
-
- // remove old case
- NavigationCaseType caseType = (NavigationCaseType) pLink
- .getFCElements().getData().get(0);
- ToViewIdType toView = caseType.getToViewId(); // FacesConfigFactory.eINSTANCE.createToViewIdType();
- if (toView == null) {
- toView = FacesConfigFactory.eINSTANCE.createToViewIdType();
- }
- toView.setTextContent(newValue);
- caseType.setToViewId(toView);
-
- pLink.setTarget(newPage);
-
- updatePageflowElements(pageflow, caseType);
- }
-
- void removeLink(NavigationCaseType caseType) {
- PageflowLink link = (PageflowLink) mapCases2Links.get(caseType);
- if (link != null) {
- removeLink(link);
- }
- }
-
- void addLink(PageflowPage source, PageflowPage target_, PageflowLink value) {
- if (source != null && target_ != null && value != null) {
- createFacesCase(value, source, target_);
- }
- }
-
- private void cleanPage(PageflowPage source) {
- if (source.getInlinks().size() == 0 && source.getOutlinks().size() == 0) {
- removePageflowPage(source);
- }
- source.update();
- }
-
- void refreshPFAdapter(EObject object) {
- TreeIterator content = object.eAllContents();
- while (content.hasNext()) {
- Object next = content.next();
- adapt((EObject) next);
- }
- adapt(object);
- }
-
- void refreshFCAdapter(EObject object) {
- List rules = facesConfig.getNavigationRule();
- if (rules != null) {
- for (int i = 0; i < rules.size(); i++) {
- NavigationRuleType rule = (NavigationRuleType) rules.get(i);
- adapt(rule);
- TreeIterator children = rule.eAllContents();
- while (children.hasNext()) {
- adapt((EObject) children.next());
- }
- }
- }
- adapt(facesConfig);
- }
-
- /**
- * @param facesConfig
- */
- public void setFacesConfig(FacesConfigType facesConfig) {
- this.facesConfig = facesConfig;
- refreshFCAdapter(facesConfig);
- }
-
- /**
- * @param pageflow
- */
- public void setPageflow(Pageflow pageflow) {
- this.pageflow = pageflow;
- pageflow.eAdapters().add(this);
- refreshPFAdapter(pageflow);
- }
-
- /**
- * Install compatible synchronization adapter for particular object.
- *
- * @param object
- */
- public void adapt(EObject object) {
- if (object != null && !isAdapted(object)) {
- if (object instanceof PageflowElement) {
- object.eAdapters().add(new PF2FCSynchronizer(this));
- } else {
- object.eAdapters().add(new FC2PFSynchronizer(this));
- }
- }
- }
-
- /**
- * Remove the synchronization adapter.
- *
- * @param object
- */
- public void unAdapt(EObject object) {
- Iterator adapters = object.eAdapters().iterator();
- while (adapters.hasNext()) {
- Object adapter = adapters.next();
- if (adapter instanceof FC2PFSynchronizer
- || adapter instanceof PF2FCSynchronizer) {
- adapters.remove();
- }
- }
- }
-
- /**
- * @param object
- * @return true if this transformer adapts object
- */
- public boolean isAdapted(EObject object) {
- if (object != null) {
- Iterator adapters = object.eAdapters().iterator();
- while (adapters.hasNext()) {
- Object adapter = adapters.next();
- if (adapter instanceof FC2PFSynchronizer
- || adapter instanceof PF2FCSynchronizer) {
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * clear the internal maps
- */
- public void clearCaches() {
- mapPaths2PF.clear();
- mapCases2Links.clear();
- }
-
- /**
- * dispose of this object.
- */
- public void dispose() {
- clearCaches();
- Pageflow pageFlow = getPageflow();
-
- if (pageFlow != null)
- {
- pageFlow.dispose();
- }
- }
-
- public Notifier getTarget() {
- return null;
- }
-
- public boolean isAdapterForType(Object type) {
- return false;
- }
-
- public void setTarget(Notifier newTarget) {
- // do nothing
- }
-
- /**
- * @param caseType
- * @return the from view id in caseType
- */
- public static FromViewIdType getSource(NavigationCaseType caseType) {
- if (caseType.eContainer() instanceof NavigationRuleType) {
- NavigationRuleType rule = (NavigationRuleType) caseType
- .eContainer();
- return rule.getFromViewId();
- }
- return null;
- }
-
- private PageflowPage getOrCreateStartPage(NavigationCaseType navCase) {// FromViewIdType
- PageflowPage startPageflowNode = null;
- String path = "*"; //$NON-NLS-1$
- NavigationRuleType rule = (NavigationRuleType) navCase.eContainer();
- FromViewIdType source = getSource(navCase);
- if (source != null) {
- path = source.getTextContent();
- }
- if (getValidPFPageInCache(path) == null) {
- startPageflowNode = TransformUtil.findPage(path, pageflow);
-
- if (startPageflowNode == null) {
- // not exist or is "*"
- if (DEBUG)
- System.out.println("Create new start page"); //$NON-NLS-1$
- startPageflowNode = createPFPage(path);
- pageflowChanged = true;
- }
- mapPaths2PF.put(path, startPageflowNode);
- PageflowTransform.getInstance().updatePageflowSourcePage(
- startPageflowNode, rule);
- } else {
- startPageflowNode = (PageflowPage) mapPaths2PF.get(path);
- }
- if (source != null) {
- ReferenceElement element = new PageReferenceElement(
- startPageflowNode);
- element.add(source);
- startPageflowNode
- .setReferenceLink(element.resolveReferenceString());
- startPageflowNode.getFCElements().add(source);
- }
- return startPageflowNode;
- }
-
- /**
- * Search for an existing pageflow page matching to navigation case's
- * target, if there is no such page existing, create one.
- *
- * @param navCase
- * @return
- */
- private PageflowPage getOrCreateEndPage(NavigationCaseType navCase) {
- PageflowPage endPageflowNode = null;
- ToViewIdType target_ = navCase.getToViewId();
- if (target_ != null) {
- String path = target_.getTextContent();
- if (getValidPFPageInCache(path) == null) {
- endPageflowNode = TransformUtil.findPage(path, pageflow);
- if (endPageflowNode == null) {
- endPageflowNode = createPFPage(path);
- if (DEBUG)
- System.out.println("Create new end page"); //$NON-NLS-1$
- pageflowChanged = true;
- }
- mapPaths2PF.put(path, endPageflowNode);
- PageflowTransform.getInstance().updatePageflowTargetPage(
- endPageflowNode, navCase);
- } else {
- endPageflowNode = (PageflowPage) mapPaths2PF.get(path);
- }
- if (target_ != null) {
- ReferenceElement element = new PageReferenceElement(
- endPageflowNode);
- element.add(target_);
- endPageflowNode.setReferenceLink(element
- .resolveReferenceString());
- endPageflowNode.getFCElements().add(target_);
- }
- }
- return endPageflowNode;
- }
-
- /**
- * Return a valid cached pageflow node.
- *
- * @param key
- * @return
- */
- private PageflowPage getValidPFPageInCache(Object key) {
- EObject element = (EObject) mapPaths2PF.get(key);
- if (!TransformUtil.isValidPageflowElement(element)
- || !(element instanceof PageflowPage)
- || !((PageflowPage) element).getPath().equals(key)) {
- mapPaths2PF.remove(key);
- element = null;
- }
- return (PageflowPage) element;
- }
-
- /**
- * Return a valid cached pageflow link.
- *
- * @param caseType
- * @return
- */
- private PageflowLink getValidPFLinkInCache(EObject caseType) {
- PageflowLink link = (PageflowLink) mapCases2Links.get(caseType);
- if (!TransformUtil.isValidLink(link)) {
- mapCases2Links.remove(caseType);
- link = null;
- }
- return link;
-
- }
-
- /**
- * Update pageflow model elements against faces-config navigation case.
- * @param pageflow_
- * @param caseFC
- * @return true if the pageflow was changed
- */
- public boolean updatePageflowElements(Pageflow pageflow_,
- NavigationCaseType caseFC) {
- this.pageflowChanged = false;
- this.pageflow = pageflow_;
- ToViewIdType target_ = caseFC.getToViewId();
- if (target_ == null) {
- return false;
- }
-
- PageflowPage start = null, end = null;
- // start page
- start = getOrCreateStartPage(caseFC);
- String action = null;
- // action
- if (caseFC.getFromAction() != null) {
- action = caseFC.getFromAction().getTextContent();
- }
- // from outcome
- String fromOutCome = null;
- if (caseFC.getFromOutcome() != null) {
- fromOutCome = caseFC.getFromOutcome().getTextContent();
- }
- // end page
- end = getOrCreateEndPage(caseFC);
- // link
- // Is there a link in pageflow model?
- PageflowLink link = null;
- if ((link = findUnmappedLink(start, end, caseFC)) == null) {
- if (end != null) {
- if (DEBUG)
- System.out.println("Create new link"); //$NON-NLS-1$
- link = createPFLink(start, end, action, fromOutCome);
- pageflowChanged = true;
- }
- }
- if (link != null) {
- link.getFCElements().clear();
- link.getFCElements().add(caseFC);
- mapCases2Links.put(caseFC, link);
- }
- adapt(start);
- adapt(end);
- adapt(caseFC);
- adapt(link);
- return pageflowChanged;
- }
-
- private boolean cleanPageflowNavigationRule(Pageflow pageflow_) {
- boolean dirty = false;
- List links = pageflow_.getLinks();
- Iterator linksIterator = links.iterator();
- while (linksIterator.hasNext()) {
- PageflowLink link = (PageflowLink) linksIterator.next();
- if (link.getFCElements().isEmpty()) {
- linksIterator.remove();
- if (link.getSource() != null) {
- link.getSource().getOutlinks().remove(link);
- }
- if (link.getTarget() != null) {
- link.getTarget().getInlinks().remove(link);
- }
- dirty = true;
- }
- }
- return dirty;
- }
-
- /**
- * merge the two navigation rules list between pageflow and face-config
- * file. merge rule: 1. if the from-view-id, from-action, and from-outcome
- * are same, they are the same navigation case, then the navigation case in
- * face-config file should be updated by one in the pageflow. 2. otherwise
- * the new navigation case should be created.
- *
- * FIXME: Not merge, only update page flow from faces-config.
- *
- * @param rulesFC -
- * navigation rules in faces-config.
- * @param navigationRulesInPageflow -
- * navigation rules in pageflow model.
- *
- * @return boolean - whether add a new rule or not.
- */
- private boolean updateNavigationRulesInPageflowFromFacesConfig(List rulesFC) {
- boolean isNew = false;
- // if the faces-config file is empty, the links should be removed.
- if (rulesFC == null || rulesFC.isEmpty()) {
- for (Iterator iterLink = pageflow.getLinks().iterator(); iterLink
- .hasNext();) {
- PageflowLink link = (PageflowLink) iterLink.next();
- link.getSource().getOutlinks().remove(link);
- link.getTarget().getInlinks().remove(link);
- }
- pageflow.getLinks().clear();
- } else {
- // Rule - Cases
- for (Iterator iterRulesFC = rulesFC.iterator(); iterRulesFC
- .hasNext();) {
- NavigationRuleType ruleFC = (NavigationRuleType) iterRulesFC
- .next();
-
- List casesFC = ruleFC.getNavigationCase();
- for (Iterator iterCasesFC = casesFC.iterator(); iterCasesFC
- .hasNext();) {
- NavigationCaseType navigationCaseFC = (NavigationCaseType) iterCasesFC
- .next();
- isNew |= updatePageflowElements(pageflow, navigationCaseFC);
- }
- }
- }
- isNew |= cleanPageflowNavigationRule(pageflow);
- return isNew;
- }
-
- /**
- * Find a pageflow link that is not linked to a faces-config element. Since
- * user might edit faces-config file with other editor, so the path is not
- * always valid, here we still try to match link and navigation case. TODO:
- * should we always resolve mapping from referenceLink on PageflowElement?
- */
- private PageflowLink findUnmappedLink(PageflowPage start, PageflowPage end,
- NavigationCaseType caseFC) {
- List links = start.getOutlinks();
- for (int i = 0, n = links.size(); i < n; i++) {
- PageflowLink link = (PageflowLink) links.get(i);
- if (link.getSource() == start && link.getTarget() == end) {
- link.update();
- if (link.getFCElements().isEmpty()
- || link.getFCElements().getData().get(0) == caseFC) {
- return link;
- }
- }
- }
- return null;
- }
-
- /**
- * create a new PFLink object according to fromOutcome attribute
- *
- * @param fromOutcome -
- * PFLink's fromOutcome attribute
- * @return - new PFLink object
- */
- public PageflowLink createPFLink(String fromOutcome) {
- PageflowLink link = null;
- link = PageflowModelManager.getFactory().createPFLink();
- if (fromOutcome != null && fromOutcome.length() > 0) {
- link.setOutcome(fromOutcome.trim());
- }
- pageflow.getLinks().add(link);
- return link;
- }
-
- /**
- * create a new PFLink object according to fromOutcome attribute
- * @param start
- * @param target_
- * @param action
- *
- * @param fromOutcome -
- * PFLink's fromOutcome attribute
- * @return - new PFLink object
- */
- public PageflowLink createPFLink(PageflowNode start, PageflowNode target_,
- String action, String fromOutcome) {
- Assert.isTrue(start != null && target_ != null);
- PageflowLink link = null;
- link = createPFLink(fromOutcome);
- link.setFromaction(action);
- link.setSource(start);
- link.setTarget(target_);
- start.getOutlinks().add(link);
- target_.getInlinks().add(link);
- return link;
- }
-
- /**
- * Create a new PFPage according to from-view-id
- *
- * @param fromViewID -
- * page's from-view-id
- * @return the page flow page
- */
- public PageflowPage createPFPage(String fromViewID) {
- PageflowPage page = PageflowFactory.eINSTANCE.createPFPage();
- if (fromViewID != null && fromViewID.length() > 0) {
- page.setPath(fromViewID.trim());
- page.setName(WebrootUtil.getPageNameFromWebPath(fromViewID.trim()));
- }
- this.pageflow.getNodes().add(page);
- return page;
- }
-
- /**
- * update pageflow model according to the face-config model
- *
- * @author sfshi
- * @return true if new rules were added
- */
- public boolean updatePageflowModelFromEMF() {
- if (pageflow != null && facesConfig != null) {
- List navigationRulesInFacesconfig = facesConfig.getNavigationRule();
- clearCaches();
- // if add new one, we can relayout the current pageflow.
- return updateNavigationRulesInPageflowFromFacesConfig(navigationRulesInFacesconfig);
- }
- return false;
- }
-
- void refreshLink(NavigationCaseType caseType) {
- PageflowLink link = getValidPFLinkInCache(caseType);
- if (link != null) {
- removeLink(link);
- }
- // update pageflow
- if (TransformUtil.isValidFacesConfigElement(caseType)) {
- updatePageflowElements(pageflow, caseType);
- }
- }
-
- public void notifyChanged(Notification msg) {
- int type = msg.getEventType();
- switch (type) {
- case MY_NOTIFICATION_TYPE:
- setNeedBatchOperations(true);
- break;
- case MY_NOTIFICATION_TYPE1:
- setNeedBatchOperations(false);
- }
- }
-
- /**
- * @return true if is listening to notifications and not
- * currently in an event
- */
- public boolean isListenToNotify() {
- return listenToNotify && !isInEvent;
- }
-
- /**
- * @return true if in event
- */
-// public boolean isInEvent() {
-// return isInEvent;
-// }
-
- /**
- * @param isInEvent
- */
- public void setInEvent(boolean isInEvent) {
- this.isInEvent = isInEvent;
- }
-
- /**
- * @return the faces config model
- */
- public FacesConfigType getFacesConfig() {
- return facesConfig;
- }
-
- /**
- * @return the root page flow
- */
- public Pageflow getPageflow() {
- return pageflow;
- }
-
- /**
- * @param value
- * @return a new fromViewId with the text content set to value
- */
- public static FromViewIdType createRLFromViewID(String value) {
- FromViewIdType fromView = FacesConfigFactory.eINSTANCE
- .createFromViewIdType();
- fromView.setTextContent(value);
- return fromView;
- }
-
- /**
- * @param value
- * @return a new to view with the text content set to value
- */
- public static ToViewIdType createFCToViewID(String value) {
- ToViewIdType toView = FacesConfigFactory.eINSTANCE.createToViewIdType();
- toView.setTextContent(value);
- return toView;
- }
-}

Back to the top