001: package org.andromda.cartridges.jsf.metafacades;
002:
003: import java.util.Collection;
004: import java.util.Collections;
005: import java.util.Iterator;
006: import java.util.LinkedHashMap;
007: import java.util.Map;
008:
009: import org.andromda.cartridges.jsf.JSFGlobals;
010: import org.andromda.cartridges.jsf.JSFProfile;
011: import org.andromda.cartridges.jsf.JSFUtils;
012: import org.andromda.metafacades.uml.StateVertexFacade;
013: import org.andromda.utils.StringUtilsHelper;
014:
015: /**
016: * MetafacadeLogic implementation for org.andromda.cartridges.jsf.metafacades.JSFForward.
017: *
018: * @see org.andromda.cartridges.jsf.metafacades.JSFForward
019: */
020: public class JSFForwardLogicImpl extends JSFForwardLogic {
021:
022: public JSFForwardLogicImpl(Object metaObject, String context) {
023: super (metaObject, context);
024: }
025:
026: /**
027: * @see org.andromda.metafacades.uml.ModelElementFacade#getName()
028: */
029: public String getName() {
030: StringBuffer name = new StringBuffer(super .getName());
031: final Object target = this .getTarget();
032: if (target instanceof JSFFinalState) {
033: name.append(JSFGlobals.USECASE_FORWARD_NAME_SUFFIX);
034: } else {
035: name.insert(0, this .getUseCase().getName() + "-");
036: }
037: return JSFUtils.toWebResourceName(name.toString());
038: }
039:
040: /**
041: * @see org.andromda.cartridges.jsf.metafacades.JSFForward#getPath()
042: */
043: protected String handleGetPath() {
044: String forwardPath = null;
045: final StateVertexFacade target = getTarget();
046: if (this .isEnteringView()) {
047: forwardPath = ((JSFView) target).getPath();
048: } else if (this .isEnteringFinalState()) {
049: forwardPath = ((JSFFinalState) target).getPath();
050: }
051:
052: return forwardPath;
053: }
054:
055: protected boolean handleIsSuccessMessagesPresent() {
056: return !this .getSuccessMessages().isEmpty();
057: }
058:
059: protected boolean handleIsWarningMessagesPresent() {
060: return !this .getWarningMessages().isEmpty();
061: }
062:
063: /**
064: * Collects specific messages in a map.
065: *
066: * @param taggedValue the tagged value from which to read the message
067: * @return maps message keys to message values, but only those that match the arguments
068: * will have been recorded
069: */
070: private Map getMessages(String taggedValue) {
071: Map messages;
072:
073: final Collection taggedValues = this
074: .findTaggedValues(taggedValue);
075: if (taggedValues.isEmpty()) {
076: messages = Collections.EMPTY_MAP;
077: } else {
078: messages = new LinkedHashMap(); // we want to keep the order
079:
080: for (final Iterator iterator = taggedValues.iterator(); iterator
081: .hasNext();) {
082: final String value = (String) iterator.next();
083: messages.put(StringUtilsHelper
084: .toResourceMessageKey(value), value);
085: }
086: }
087:
088: return messages;
089: }
090:
091: protected Map handleGetSuccessMessages() {
092: return this
093: .getMessages(JSFProfile.TAGGEDVALUE_ACTION_SUCCESS_MESSAGE);
094: }
095:
096: protected Map handleGetWarningMessages() {
097: return this
098: .getMessages(JSFProfile.TAGGEDVALUE_ACTION_WARNING_MESSAGE);
099: }
100:
101: /**
102: * @see org.andromda.cartridges.jsf.metafacades.JSFForward#isFinalStateTarget()
103: */
104: protected boolean handleIsFinalStateTarget() {
105: return this .getTarget() instanceof JSFFinalState;
106: }
107:
108: /**
109: * @see org.andromda.cartridges.jsf.metafacades.JSFForward#getFromOutcome()
110: */
111: protected String handleGetFromOutcome() {
112: return this.getName();
113: }
114: }
|