001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.lenya.cms.usecase.impl;
019:
020: import java.util.HashMap;
021: import java.util.List;
022: import java.util.Map;
023: import java.util.Set;
024:
025: import org.apache.lenya.cms.repository.Session;
026: import org.apache.lenya.cms.usecase.Usecase;
027: import org.apache.lenya.cms.usecase.UsecaseView;
028:
029: /**
030: * Proxy which holds the parameters of a usecase. It is used to restore the usecase after the
031: * flowscript is re-entered and to pass the usecase parameters to a JX template.
032: *
033: * @version $Id: UsecaseProxy.java 546890 2007-06-13 14:39:04Z andreas $
034: */
035: public class UsecaseProxy {
036:
037: private Map parameters = new HashMap();
038: private String name;
039: private String sourceUrl;
040: private UsecaseView view;
041:
042: /**
043: * Ctor.
044: * @param usecase The usecase to extract the parameters from.
045: */
046: public UsecaseProxy(Usecase usecase) {
047: this .name = usecase.getName();
048:
049: String[] names = usecase.getParameterNames();
050: for (int i = 0; i < names.length; i++) {
051: this .parameters.put(names[i], usecase
052: .getParameter(names[i]));
053: }
054:
055: this .errorMessages = usecase.getErrorMessages();
056: this .infoMessages = usecase.getInfoMessages();
057: this .sourceUrl = usecase.getSourceURL();
058: this .view = usecase.getView();
059: }
060:
061: /**
062: * Initializes a usecase from this proxy.
063: * @param usecase The usecase.
064: */
065: public void setup(Usecase usecase) {
066: usecase.setName(this .name);
067: usecase.setSourceURL(this .sourceUrl);
068: usecase.setView(this .view);
069:
070: String[] names = getParameterNames();
071: for (int i = 0; i < names.length; i++) {
072: usecase.setParameter(names[i], parameters.get(names[i]));
073: }
074: }
075:
076: /**
077: * Returns the current value of a parameter.
078: * @param name The parameter name.
079: * @return An object.
080: */
081: public Object getParameter(String name) {
082: return this .parameters.get(name);
083: }
084:
085: /**
086: * Returns the current value of a parameter.
087: * @param name The parameter name.
088: * @param defaultValue The default value to use when the parameter is not set.
089: * @return An object.
090: */
091: public Object getParameter(String name, Object defaultValue) {
092: Object value = this .parameters.get(name);
093: if (value == null) {
094: value = defaultValue;
095: }
096: return value;
097: }
098:
099: /**
100: * Returns the current value of a parameter as a string.
101: * @param name The parameter name.
102: * @return A string or <code>null</code> if the parameter was not set.
103: */
104: public String getParameterAsString(String name) {
105: String valueString = null;
106: Object value = getParameter(name);
107: if (value != null) {
108: valueString = value.toString();
109: }
110: return valueString;
111: }
112:
113: /**
114: * @return The parameter names.
115: */
116: public String[] getParameterNames() {
117: Set keys = this .parameters.keySet();
118: return (String[]) keys.toArray(new String[keys.size()]);
119: }
120:
121: private List errorMessages;
122: private List infoMessages;
123:
124: /**
125: * Returns the error messages from the previous operation. Error messages prevent the operation
126: * from being executed.
127: * @return A list of strings.
128: */
129: public List getErrorMessages() {
130: return this .errorMessages;
131: }
132:
133: /**
134: * Returns the info messages from the previous operation. Info messages do not prevent the
135: * operation from being executed.
136: * @return A list of strings.
137: */
138: public List getInfoMessages() {
139: return this .infoMessages;
140: }
141:
142: /**
143: * Determine if the usecase has error messages. Provides a way of checking for errors without
144: * actually retrieving them.
145: * @return true if the usecase resulted in error messages.
146: */
147: public boolean hasErrors() {
148: boolean ret = false;
149: if (this .errorMessages != null)
150: ret = !this .errorMessages.isEmpty();
151: return ret;
152: }
153:
154: /**
155: * Determine if the usecase has info messages. Provides a way of checking for info messages
156: * without actually retrieving them.
157: * @return true if the usecase resulted in info messages being generated.
158: */
159: public boolean hasInfoMessages() {
160: boolean ret = false;
161: if (this .infoMessages != null)
162: ret = !this .infoMessages.isEmpty();
163: return ret;
164: }
165:
166: /**
167: * @return The name of this usecase.
168: */
169: public String getName() {
170: return this .name;
171: }
172:
173: /**
174: * @return The view of the usecase.
175: */
176: public UsecaseView getView() {
177: return this .view;
178: }
179:
180: /**
181: * @return The session of the usecase.
182: */
183: public Session getSession() {
184: return (Session) getParameter("private.session");
185: }
186:
187: /**
188: * Returns one of the strings "true" or "false" depending on whether the
189: * corresponding checkbox was checked.
190: * @param name The parameter name.
191: * @return A string.
192: */
193: public String getBooleanCheckboxParameter(String name) {
194: String value = "false";
195: String paramValue = getParameterAsString(name);
196: if (paramValue != null
197: && (paramValue.equals("on") || paramValue
198: .equals("true"))) {
199: value = "true";
200: }
201: return value;
202: }
203:
204: /**
205: * @return The source URL of the usecase.
206: */
207: public String getSourceURL() {
208: return this.sourceUrl;
209: }
210:
211: }
|