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    package org.apache.commons.scxml.model;
018    
019    import java.io.Serializable;
020    import java.util.ArrayList;
021    import java.util.HashMap;
022    import java.util.List;
023    import java.util.Map;
024    
025    import org.apache.commons.scxml.PathResolver;
026    
027    /**
028     * The class in this SCXML object model that corresponds to the
029     * <invoke> SCXML element.
030     *
031     */
032    public class Invoke implements NamespacePrefixesHolder, PathResolverHolder,
033            Serializable {
034    
035        /**
036         * Serial version UID.
037         */
038        private static final long serialVersionUID = 1L;
039    
040        /**
041         * The type of target to be invoked.
042         */
043        private String targettype;
044    
045        /**
046         * The source URL for the external service.
047         */
048        private String src;
049    
050        /**
051         * The expression that evaluates to the source URL for the
052         * external service.
053         */
054        private String srcexpr;
055    
056        /**
057         * The Map of the params to be sent to the invoked process.
058         *
059         * Remove with deprecated getParams() in 1.0
060         */
061        private Map params;
062    
063        /**
064         * The List of the params to be sent to the invoked process.
065         */
066        private List paramsList;
067    
068        /**
069         * The <finalize> child, may be null.
070         */
071        private Finalize finalize;
072    
073        /**
074         * {@link PathResolver} for resolving the "src" or "srcexpr" result.
075         */
076        private PathResolver pathResolver;
077    
078        /**
079         * The current XML namespaces in the SCXML document for this action node,
080         * preserved for deferred XPath evaluation.
081         */
082        private Map namespaces;
083    
084        /**
085         * Default no-args constructor for Digester.
086         */
087        public Invoke() {
088            params = new HashMap();
089            paramsList = new ArrayList();
090        }
091    
092        /**
093         * Get the target type for this <invoke> element.
094         *
095         * @return String Returns the targettype.
096         */
097        public final String getTargettype() {
098            return targettype;
099        }
100    
101        /**
102         * Set the target type for this <invoke> element.
103         *
104         * @param targettype The targettype to set.
105         */
106        public final void setTargettype(final String targettype) {
107            this.targettype = targettype;
108        }
109    
110        /**
111         * Get the URL for the external service.
112         *
113         * @return String The URL.
114         */
115        public final String getSrc() {
116            return src;
117        }
118    
119        /**
120         * Set the URL for the external service.
121         *
122         * @param src The source URL.
123         */
124        public final void setSrc(final String src) {
125            this.src = src;
126        }
127    
128        /**
129         * Get the expression that evaluates to the source URL for the
130         * external service.
131         *
132         * @return String The source expression.
133         */
134        public final String getSrcexpr() {
135            return srcexpr;
136        }
137    
138        /**
139         * Set the expression that evaluates to the source URL for the
140         * external service.
141         *
142         * @param srcexpr The source expression.
143         */
144        public final void setSrcexpr(final String srcexpr) {
145            this.srcexpr = srcexpr;
146        }
147    
148        /**
149         * Get the params Map.
150         *
151         * @return Map The params map.
152         * @deprecated Remove in v1.0, use params() instead
153         */
154        public final Map getParams() {
155            return params;
156        }
157    
158        /**
159         * Get the list of {@link Param}s.
160         *
161         * @return List The params list.
162         */
163        public final List params() {
164            return paramsList;
165        }
166    
167        /**
168         * Add this param to this invoke.
169         *
170         * @param param The invoke parameter.
171         */
172        public final void addParam(final Param param) {
173            params.put(param.getName(), param.getExpr());
174            paramsList.add(param);
175        }
176    
177        /**
178         * Get the Finalize for this Invoke.
179         *
180         * @return Finalize The Finalize for this Invoke.
181         */
182        public final Finalize getFinalize() {
183            return finalize;
184        }
185    
186        /**
187         * Set the Finalize for this Invoke.
188         *
189         * @param finalize The Finalize for this Invoke.
190         */
191        public final void setFinalize(final Finalize finalize) {
192            this.finalize = finalize;
193        }
194    
195        /**
196         * Get the {@link PathResolver}.
197         *
198         * @return Returns the pathResolver.
199         */
200        public PathResolver getPathResolver() {
201            return pathResolver;
202        }
203    
204        /**
205         * Set the {@link PathResolver}.
206         *
207         * @param pathResolver The pathResolver to set.
208         */
209        public void setPathResolver(final PathResolver pathResolver) {
210            this.pathResolver = pathResolver;
211        }
212    
213        /**
214         * Get the XML namespaces at this action node in the SCXML document.
215         *
216         * @return Returns the map of namespaces.
217         */
218        public final Map getNamespaces() {
219            return namespaces;
220        }
221    
222        /**
223         * Set the XML namespaces at this action node in the SCXML document.
224         *
225         * @param namespaces The document namespaces.
226         */
227        public final void setNamespaces(final Map namespaces) {
228            this.namespaces = namespaces;
229        }
230    
231    }
232