001 // Copyright 2004, 2005 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry.engine;
016
017 import java.util.Map;
018
019 import org.apache.hivemind.util.Defense;
020 import org.apache.tapestry.util.QueryParameterMap;
021
022 /**
023 * Implementation of {@link org.apache.tapestry.engine.ServiceEncoding}, which adds the ability to
024 * determine when the encoding has been modified.
025 *
026 * @author Howard M. Lewis Ship
027 * @since 4.0
028 */
029 public class ServiceEncodingImpl implements ServiceEncoding
030 {
031 private String _servletPath;
032
033 private String _pathInfo;
034
035 /**
036 * Map of query parameter values; key is string name, value is either a string, an array of
037 * strings, or null. Could have done this with subclassing rather than delegation.
038 */
039
040 private final QueryParameterMap _parameters;
041
042 private boolean _modified;
043
044 public boolean isModified()
045 {
046 return _modified;
047 }
048
049 public void resetModified()
050 {
051 _modified = false;
052 }
053
054 /**
055 * Creates a new instance with a new map of parameters.
056 */
057
058 public ServiceEncodingImpl(String servletPath)
059 {
060 this(servletPath, null, new QueryParameterMap());
061 }
062
063 public ServiceEncodingImpl(String servletPath, Map parametersMap)
064 {
065 this(servletPath, null, new QueryParameterMap(parametersMap));
066 }
067
068 public ServiceEncodingImpl(String servletPath, String pathInfo, QueryParameterMap parameters)
069 {
070 Defense.notNull(servletPath, "servletPath");
071 Defense.notNull(parameters, "parameters");
072
073 _servletPath = servletPath;
074 _pathInfo = pathInfo;
075
076 _parameters = parameters;
077 }
078
079 public String getParameterValue(String name)
080 {
081 return _parameters.getParameterValue(name);
082 }
083
084 public String[] getParameterValues(String name)
085 {
086 return _parameters.getParameterValues(name);
087 }
088
089 public void setServletPath(String servletPath)
090 {
091 Defense.notNull(servletPath, "servletPath");
092
093 _servletPath = servletPath;
094 _modified = true;
095 }
096
097 public void setParameterValue(String name, String value)
098 {
099 _parameters.setParameterValue(name, value);
100
101 _modified = true;
102 }
103
104 public void setParameterValues(String name, String[] values)
105 {
106 _parameters.setParameterValues(name, values);
107
108 _modified = true;
109 }
110
111 public String getServletPath()
112 {
113 return _servletPath;
114 }
115
116 public String[] getParameterNames()
117 {
118 return _parameters.getParameterNames();
119 }
120
121 public String getPathInfo()
122 {
123 return _pathInfo;
124 }
125 }