001    // Copyright 2007, 2008, 2010 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.MarkupWriter;
018    import org.apache.tapestry5.Renderable;
019    import org.apache.tapestry5.annotations.Environmental;
020    import org.apache.tapestry5.internal.TapestryInternalUtils;
021    import org.apache.tapestry5.ioc.annotations.Inject;
022    import org.apache.tapestry5.services.BeanBlockSource;
023    import org.apache.tapestry5.services.PropertyOutputContext;
024    
025    import java.text.DateFormat;
026    import java.util.Calendar;
027    import java.util.Date;
028    import java.util.Locale;
029    
030    /**
031     * Contains blocks for displaying basic property types; the blocks are contributed to the
032     * {@link BeanBlockSource} service.
033     */
034    public class PropertyDisplayBlocks
035    {
036        @Environmental
037        private PropertyOutputContext context;
038    
039        @Inject
040        private Locale locale;
041    
042        private final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
043    
044        public String getConvertedEnumValue()
045        {
046            Enum value = (Enum) context.getPropertyValue();
047    
048            if (value == null) return null;
049    
050            return TapestryInternalUtils.getLabelForEnum(context.getMessages(), value);
051        }
052    
053        public DateFormat getDateFormat()
054        {
055            return dateFormat;
056        }
057        
058        public Date getCalendarDate() 
059        {
060            Calendar calendar = (Calendar) context.getPropertyValue();
061            
062            if(calendar == null)
063                return null;
064            
065            return calendar.getTime();
066         }
067    
068    
069        public PropertyOutputContext getContext()
070        {
071            return context;
072        }
073    
074        public Renderable getPasswordRenderer()
075        {
076            return new Renderable()
077            {
078                public void render(MarkupWriter writer)
079                {
080    
081                    Object value = context.getPropertyValue();
082    
083                    int length = value == null ? 0 : value.toString().length();
084    
085                    for (int i = 0; i < length; i++) writer.write("*");
086                }
087            };
088        }
089    }