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;
019:
020: import java.util.List;
021: import java.util.Map;
022:
023: import org.apache.lenya.cms.repository.Session;
024:
025: /**
026: * <p>
027: * This service allows to invoke a usecase in a convenient way. A typical usage
028: * scenario is the composition of usecases - you can invoke one or multiple
029: * "child" usecases from another usecase.
030: * </p>
031: * <p>
032: * Example:
033: * </p>
034: *
035: * <pre>
036: * UsecaseInvoker invoker = null;
037: * try {
038: * invoker = (UsecaseInvoker) this.manager.lookup(UsecaseInvoker.ROLE);
039: * Map params = new HashMap();
040: * params.put(..., ...);
041: * invoker.invoke(getSourceUrl(), childUsecaseName, params);
042: *
043: * if (invoker.getResult() != UsecaseInvoker.SUCCESS) {
044: * List messages = invoker.getErrorMessages();
045: * for (Iterator i = messages.iterator(); i.hasNext();) {
046: * UsecaseMessage message = (UsecaseMessage) i.next();
047: * addErrorMessage(message.getMessage(), message.getParameters());
048: * }
049: * }
050: * } finally {
051: * if (invoker != null) {
052: * this.manager.release(invoker);
053: * }
054: * }
055: *
056: * </pre>
057: *
058: * @version $Id: UsecaseInvoker.java 507914 2007-02-15 12:15:30Z andreas $
059: */
060: public interface UsecaseInvoker {
061:
062: /**
063: * The Avalon role.
064: */
065: String ROLE = UsecaseInvoker.class.getName();
066:
067: /**
068: * Invokes a usecase.
069: * @param webappUrl The URL to invoke the usecase on.
070: * @param usecaseName The name of the usecase.
071: * @param parameters The parameters.
072: * @throws UsecaseException if an error occurs.
073: */
074: void invoke(String webappUrl, String usecaseName, Map parameters)
075: throws UsecaseException;
076:
077: /**
078: * @return The result of the invocation.
079: */
080: int getResult();
081:
082: /**
083: * The invocation was successful.
084: */
085: int SUCCESS = 0;
086:
087: /**
088: * The precondition check failed.
089: */
090: int PRECONDITIONS_FAILED = 1;
091:
092: /**
093: * The execution condition check failed.
094: */
095: int EXECUTION_CONDITIONS_FAILED = 2;
096:
097: /**
098: * The execution itself failed.
099: */
100: int EXECUTION_FAILED = 3;
101:
102: /**
103: * The postcondition check failed.
104: */
105: int POSTCONDITIONS_FAILED = 4;
106:
107: /**
108: * Returns the error messages from the previous operation. Error messages
109: * prevent the operation from being executed.
110: * @return A list of {@link UsecaseMessage} objects.
111: */
112: List getErrorMessages();
113:
114: /**
115: * Returns the info messages from the previous operation. Info messages do
116: * not prevent the operation from being executed.
117: * @return A list of {@link UsecaseMessage} objects.
118: */
119: List getInfoMessages();
120:
121: /**
122: * @return The target URL of the usecase, based on the success. This method
123: * throws a RuntimeException if the usecase hasn't been executed
124: * yet.
125: */
126: String getTargetUrl();
127:
128: /**
129: * @param session The test session to use.
130: */
131: void setTestSession(Session session);
132:
133: }
|