001    // Copyright 2006, 2007, 2008, 2009, 2010, 2011 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.tapestry5.internal.services;
016    
017    import org.apache.tapestry5.internal.structure.ComponentPageElement;
018    import org.apache.tapestry5.internal.structure.Page;
019    import org.apache.tapestry5.ioc.Location;
020    import org.apache.tapestry5.ioc.Messages;
021    import org.apache.tapestry5.ioc.Resource;
022    import org.apache.tapestry5.ioc.internal.util.InternalUtils;
023    import org.apache.tapestry5.ioc.internal.util.MessagesImpl;
024    import org.apache.tapestry5.ioc.services.ClassFabUtils;
025    import org.apache.tapestry5.runtime.Component;
026    import org.apache.tapestry5.runtime.RenderCommand;
027    
028    import java.util.Arrays;
029    import java.util.Collection;
030    import java.util.List;
031    
032    public class ServicesMessages
033    {
034        private static final Messages MESSAGES = MessagesImpl.forClass(ServicesMessages.class);
035    
036        public static String markupWriterNoCurrentElement()
037        {
038            return MESSAGES.get("markup-writer-no-current-element");
039        }
040    
041        public static String missingTemplateResource(Resource resource)
042        {
043            return MESSAGES.format("missing-template-resource", resource);
044        }
045    
046        public static String contentInsideBodyNotAllowed(Location location)
047        {
048            return MESSAGES.format("content-inside-body-not-allowed", location);
049        }
050    
051        public static String renderQueueError(RenderCommand command, Throwable cause)
052        {
053            return MESSAGES.format("render-queue-error", command, cause);
054        }
055    
056        public static String contextIndexOutOfRange(String methodDescription)
057        {
058            return MESSAGES.format("context-index-out-of-range", methodDescription);
059        }
060    
061        public static String pageNameUnresolved(String pageClassName)
062        {
063            return MESSAGES.format("page-name-unresolved", pageClassName);
064        }
065    
066        public static String exceptionInMethodParameter(String methodDescription, int index, Throwable cause)
067        {
068            return MESSAGES.format("exception-in-method-parameter", methodDescription, index + 1, cause);
069        }
070    
071        public static String componentEventIsAborted(String methodDescription)
072        {
073            return MESSAGES.format("component-event-is-aborted", methodDescription);
074        }
075    
076        public static String componentInstanceIsNotAPage(Component result)
077        {
078            return MESSAGES.format("component-instance-is-not-a-page", result.getComponentResources().getCompleteId());
079        }
080    
081        public static String failureReadingMessages(Resource url, Throwable cause)
082        {
083            return MESSAGES.format("failure-reading-messages", url, cause);
084        }
085    
086        public static String unknownAssetPrefix(String path)
087        {
088            return MESSAGES.format("unknown-asset-prefix", path);
089        }
090    
091        public static String assetDoesNotExist(Resource resource)
092        {
093            return MESSAGES.format("asset-does-not-exist", resource);
094        }
095    
096        public static String wrongAssetDigest(Resource resource)
097        {
098            return MESSAGES.format("wrong-asset-digest", resource.getPath());
099        }
100    
101        public static String unknownValidatorType(String validatorType, List<String> knownValidatorTypes)
102        {
103            return MESSAGES.format("unknown-validator-type", validatorType, InternalUtils.join(knownValidatorTypes));
104        }
105    
106        public static String validatorSpecificationParseError(int cursor, String specification)
107        {
108            return MESSAGES.format("validator-specification-parse-error", specification.charAt(cursor), cursor + 1,
109                    specification);
110        }
111    
112        public static String mixinsInvalidWithoutIdOrType(String elementName)
113        {
114            return MESSAGES.format("mixins-invalid-without-id-or-type", elementName);
115        }
116    
117        public static String undefinedTapestryAttribute(String elementName, String attributeName,
118                                                        String allowedAttributeName)
119        {
120            return MESSAGES.format("undefined-tapestry-attribute", elementName, attributeName, allowedAttributeName);
121        }
122    
123        public static String parameterElementNameRequired()
124        {
125            return MESSAGES.get("parameter-element-name-required");
126        }
127    
128        public static String missingApplicationStatePersistenceStrategy(String name, Collection<String> availableNames)
129        {
130            return MESSAGES.format("missing-application-state-persistence-strategy", name, InternalUtils
131                    .joinSorted(availableNames));
132        }
133    
134        public static String requestException(Throwable cause)
135        {
136            return MESSAGES.format("request-exception", cause);
137        }
138    
139        public static String clientStateMustBeSerializable(Object newValue)
140        {
141            return MESSAGES.format("client-state-must-be-serializable", newValue);
142        }
143    
144        public static String corruptClientState()
145        {
146            return MESSAGES.get("corrupt-client-state");
147        }
148    
149        public static String unclosedAttributeExpression(String expression)
150        {
151            return MESSAGES.format("unclosed-attribute-expression", expression);
152        }
153    
154        public static String noDisplayForDataType(String datatype)
155        {
156            return MESSAGES.format("no-display-for-data-type", datatype);
157        }
158    
159        public static String noEditForDataType(String datatype)
160        {
161            return MESSAGES.format("no-edit-for-data-type", datatype);
162        }
163    
164        public static String missingValidatorConstraint(String validatorType, Class type, String perFormMessageKey,
165                                                        String generalMessageKey)
166        {
167            return MESSAGES.format("missing-validator-constraint", validatorType, type.getName(), perFormMessageKey,
168                    generalMessageKey);
169        }
170    
171        public static String resourcesAccessForbidden(String URI)
172        {
173            return MESSAGES.format("resource-access-forbidden", URI);
174        }
175    
176        public static String noMarkupFromPageRender(Page page)
177        {
178            return MESSAGES.format("no-markup-from-page-render", page.getName());
179        }
180    
181        public static String baseClassInWrongPackage(String parentClassName, String className, String suggestedPackage)
182        {
183            return MESSAGES.format("base-class-in-wrong-package", parentClassName, className, suggestedPackage);
184        }
185    
186        public static String invalidId(String messageKey, String idValue)
187        {
188            return MESSAGES.format(messageKey, idValue);
189        }
190    
191        public static String noTranslatorForType(Class valueType, Collection<String> typeNames)
192        {
193            return MESSAGES.format("no-translator-for-type", ClassFabUtils.toJavaClassName(valueType), InternalUtils
194                    .joinSorted(typeNames));
195        }
196    
197        public static String eventNotHandled(ComponentPageElement element, String eventName)
198        {
199            return MESSAGES.format("event-not-handled", eventName, element.getCompleteId());
200        }
201    
202        public static String documentMissingHTMLRoot(String rootElementName)
203        {
204            return MESSAGES.format("document-missing-html-root", rootElementName);
205        }
206    
207        public static String parameterElementDoesNotAllowAttributes()
208        {
209            return MESSAGES.get("parameter-element-does-not-allow-attributes");
210        }
211    
212        public static String invalidPathForLibraryNamespace(String URI)
213        {
214            return MESSAGES.format("invalid-path-for-library-namespace", URI);
215        }
216    
217        public static String literalConduitNotUpdateable()
218        {
219            return MESSAGES.get("literal-conduit-not-updateable");
220        }
221    
222        public static String markupWriterAttributeNameOrValueOmitted(String element, Object[] namesAndValues)
223        {
224            return MESSAGES.format("markup-writer-attribute-name-or-value-omitted", element, InternalUtils.join(Arrays
225                    .asList(namesAndValues)));
226        }
227    }