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 }