001 // Copyright 2007, 2008, 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.corelib.pages;
016
017 import org.apache.tapestry5.FieldTranslator;
018 import org.apache.tapestry5.FieldValidator;
019 import org.apache.tapestry5.SelectModel;
020 import org.apache.tapestry5.ValueEncoder;
021 import org.apache.tapestry5.annotations.Component;
022 import org.apache.tapestry5.annotations.Environmental;
023 import org.apache.tapestry5.corelib.components.*;
024 import org.apache.tapestry5.ioc.annotations.Inject;
025 import org.apache.tapestry5.ioc.services.TypeCoercer;
026 import org.apache.tapestry5.services.BeanBlockContribution;
027 import org.apache.tapestry5.services.BeanBlockSource;
028 import org.apache.tapestry5.services.PropertyEditContext;
029 import org.apache.tapestry5.util.EnumSelectModel;
030 import org.apache.tapestry5.util.EnumValueEncoder;
031
032 /**
033 * A page that exists to contain blocks used to edit different types of properties. The blocks on this page are
034 * contributed into the {@link BeanBlockSource} service configuration.
035 *
036 * @see BeanBlockContribution
037 * @see BeanEditForm
038 */
039 public class PropertyEditBlocks
040 {
041 @Environmental
042 private PropertyEditContext context;
043
044 @Component(
045 parameters = {"value=context.propertyValue", "label=prop:context.label",
046 "translate=prop:textFieldTranslator", "validate=prop:textFieldValidator",
047 "clientId=prop:context.propertyId", "annotationProvider=context"})
048 private TextField textField;
049
050 @Component(
051 parameters = {"value=context.propertyValue", "label=prop:context.label",
052 "translate=prop:numberFieldTranslator", "validate=prop:numberFieldValidator",
053 "clientId=prop:context.propertyId", "annotationProvider=context"})
054 private TextField numberField;
055
056
057 @Component(
058 parameters = {"value=context.propertyValue", "label=prop:context.label", "encoder=valueEncoderForProperty",
059 "model=selectModelForProperty", "validate=prop:selectValidator",
060 "clientId=prop:context.propertyId"})
061 private Select select;
062
063 @SuppressWarnings("unused")
064 @Component(
065 parameters = {"value=context.propertyValue", "label=prop:context.label",
066 "clientId=prop:context.propertyId"})
067 private Checkbox checkboxField;
068
069 @SuppressWarnings("unused")
070 @Component(
071 parameters = {"value=context.propertyValue", "label=prop:context.label", "clientId=prop:context.propertyid",
072 "validate=prop:dateFieldValidator"})
073 private DateField dateField;
074
075 @SuppressWarnings("unused")
076 @Component(
077 parameters = {"value=context.propertyValue", "label=prop:context.label", "clientId=prop:context.propertyid",
078 "validate=prop:calendarFieldValidator"})
079 private DateField calendarField;
080
081 @Component(
082 parameters = {"value=context.propertyValue", "label=prop:context.label",
083 "translate=prop:passwordFieldTranslator", "validate=prop:passwordFieldValidator",
084 "clientId=prop:context.propertyId", "annotationProvider=context"})
085 private PasswordField passwordField;
086
087 @Component(
088 parameters = {"value=context.propertyValue", "label=prop:context.label",
089 "translate=prop:textAreaTranslator",
090 "validate=prop:textAreaValidator", "clientId=prop:context.propertyId",
091 "annotationProvider=context"})
092 private TextArea textArea;
093
094
095 @Inject
096 private TypeCoercer typeCoercer;
097
098 public PropertyEditContext getContext()
099 {
100 return context;
101 }
102
103
104 public FieldTranslator getTextFieldTranslator()
105 {
106 return context.getTranslator(textField);
107 }
108
109 public FieldValidator getTextFieldValidator()
110 {
111 return context.getValidator(textField);
112 }
113
114 public FieldTranslator getNumberFieldTranslator()
115 {
116 return context.getTranslator(numberField);
117 }
118
119 public FieldValidator getNumberFieldValidator()
120 {
121 return context.getValidator(numberField);
122 }
123
124 public FieldTranslator getPasswordFieldTranslator()
125 {
126 return context.getTranslator(passwordField);
127 }
128
129 public FieldValidator getPasswordFieldValidator()
130 {
131 return context.getValidator(passwordField);
132 }
133
134 public FieldTranslator getTextAreaTranslator()
135 {
136 return context.getTranslator(textArea);
137 }
138
139 public FieldValidator getTextAreaValidator()
140 {
141 return context.getValidator(textArea);
142 }
143
144
145 public FieldValidator getDateFieldValidator()
146 {
147 return context.getValidator(dateField);
148 }
149
150 public FieldValidator getCalendarFieldValidator()
151 {
152 return context.getValidator(calendarField);
153 }
154
155 public FieldValidator getSelectValidator()
156 {
157 return context.getValidator(select);
158 }
159
160 /**
161 * Provide a value encoder for an enum type.
162 */
163 @SuppressWarnings("unchecked")
164 public ValueEncoder getValueEncoderForProperty()
165 {
166 return new EnumValueEncoder(typeCoercer, context.getPropertyType());
167 }
168
169 /**
170 * Provide a select mode for an enum type.
171 */
172 @SuppressWarnings("unchecked")
173 public SelectModel getSelectModelForProperty()
174 {
175 return new EnumSelectModel(context.getPropertyType(), context.getContainerMessages());
176 }
177 }