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 org.apache.hivemind.util.Defense;
018 import org.apache.tapestry.util.QueryParameterMap;
019
020 /**
021 * Implementation of {@link org.apache.tapestry.engine.ServiceEncoding}, which adds the ability to
022 * determine when the encoding has been modified.
023 *
024 * @author Howard M. Lewis Ship
025 * @since 4.0
026 */
027 public class ServiceEncodingImpl implements ServiceEncoding
028 {
029 protected String _servletPath;
030
031 protected String _pathInfo;
032
033 /**
034 * Map of query parameter values; key is string name, value is either a string, an array of
035 * strings, or null. Could have done this with subclassing rather than delegation.
036 */
037
038 protected final QueryParameterMap _parameters;
039
040 protected boolean _modified;
041
042 /**
043 * Creates a new instance with a new map of parameters.
044 */
045
046 public ServiceEncodingImpl(String servletPath)
047 {
048 this(servletPath, null, new QueryParameterMap());
049 }
050
051 public ServiceEncodingImpl(String servletPath, QueryParameterMap parametersMap)
052 {
053 this(servletPath, null, parametersMap);
054 }
055
056 public ServiceEncodingImpl(String servletPath, String pathInfo, QueryParameterMap parameters)
057 {
058 Defense.notNull(servletPath, "servletPath");
059 Defense.notNull(parameters, "parameters");
060
061 _servletPath = servletPath;
062 _pathInfo = pathInfo;
063 _parameters = parameters;
064 }
065
066 public boolean isModified()
067 {
068 return _modified;
069 }
070
071 public void resetModified()
072 {
073 _modified = false;
074 }
075
076 public String getParameterValue(String name)
077 {
078 return _parameters.getParameterValue(name);
079 }
080
081 public String[] getParameterValues(String name)
082 {
083 return _parameters.getParameterValues(name);
084 }
085
086 public void setServletPath(String servletPath)
087 {
088 Defense.notNull(servletPath, "servletPath");
089
090 _servletPath = servletPath;
091 _modified = true;
092 }
093
094 public void setParameterValue(String name, String value)
095 {
096 _parameters.setParameterValue(name, value);
097
098 _modified = true;
099 }
100
101 public void setParameterValues(String name, String[] values)
102 {
103 _parameters.setParameterValues(name, values);
104
105 _modified = true;
106 }
107
108 public String getServletPath()
109 {
110 return _servletPath;
111 }
112
113 public String[] getParameterNames()
114 {
115 return _parameters.getParameterNames();
116 }
117
118 public String getPathInfo()
119 {
120 return _pathInfo;
121 }
122
123 public void setPathInfo(String pathInfo)
124 {
125 _pathInfo = pathInfo;
126 }
127 }