001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.krad.uif.field;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.kuali.rice.krad.datadictionary.parse.BeanTag;
020    import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
021    import org.kuali.rice.krad.uif.component.Component;
022    import org.kuali.rice.krad.uif.element.Header;
023    import org.kuali.rice.krad.uif.element.Image;
024    import org.kuali.rice.krad.uif.element.Message;
025    import org.kuali.rice.krad.uif.view.View;
026    
027    import java.util.List;
028    
029    /**
030     * Field that wraps an image content element.
031     *
032     * <p>
033     * Puts a <code>&lt;DIV&gt;</code> tag around an image element. This allows for labeling, styling, etc.
034     * </p>
035     *
036     * @see org.kuali.rice.krad.uif.element.Image
037     * @author Kuali Rice Team (rice.collab@kuali.org)
038     */
039    @BeanTag(name = "imageField-bean", parent = "Uif-ImageField")
040    public class ImageField extends FieldBase {
041        private static final long serialVersionUID = -7994212503770623408L;
042    
043        private Image image;
044    
045        public ImageField() {
046            super();
047        }
048    
049        /**
050         * PerformFinalize override - calls super, corrects the field's Label for attribute to point to this field's
051         * content
052         *
053         * @param view the view
054         * @param model the model
055         * @param parent the parent component
056         */
057        @Override
058        public void performFinalize(View view, Object model, Component parent) {
059            super.performFinalize(view, model, parent);
060    
061            //determine what id to use for the for attribute of the label, if present
062            if (this.getFieldLabel() != null && this.getImage() != null && StringUtils.isNotBlank(this.getImage().getId())) {
063                this.getFieldLabel().setLabelForComponentId(this.getImage().getId());
064            }
065        }
066    
067        /**
068         * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle()
069         */
070        @Override
071        public List<Component> getComponentsForLifecycle() {
072            List<Component> components = super.getComponentsForLifecycle();
073    
074            components.add(image);
075    
076            return components;
077        }
078    
079        /**
080         * Retrieves the {@link Image} element wrapped by this field
081         *
082         * @return the Image element representing the HTML IMG element
083         */
084        @BeanTagAttribute(name="image",type= BeanTagAttribute.AttributeType.SINGLEBEAN)
085        public Image getImage() {
086            return image;
087        }
088    
089        /**
090         * Sets the Image to be wrapped by this field
091         *
092         * @param image the Image element to be wrapped by this field
093         */
094        public void setImage(Image image) {
095            this.image = image;
096        }
097    
098        /**
099         * Retrieves the URL the image wrapped by this field
100         *
101         * @see org.kuali.rice.krad.uif.element.Image#getSource()
102         * @return the URL for the image
103         */
104        @BeanTagAttribute(name="source")
105        public String getSource() {
106            return image.getSource();
107        }
108    
109        /**
110         * Sets the source URL for the Image associated with this field
111         *
112         * @param source URL for the image
113         */
114        public void setSource(String source) {
115            image.setSource(source);
116        }
117    
118        /**
119         * Provides alternate information for the image element
120         *
121         * <p>The altText property specifies an alternate text for an image. It is displayed by the browser
122         * if the image cannot be displayed.  This is especially important for accessibility, because screen
123         * readers can't understand images, but rather will read aloud the alternative text assigned to them.
124         * </p>
125         *
126         * @see org.kuali.rice.krad.uif.element.Image#getAltText()
127         * @return alternative information about this image
128         */
129        @BeanTagAttribute(name="altText")
130        public String getAltText() {
131            return image.getAltText();
132        }
133    
134        /**
135         * Sets the alternate text attribute of the image assosiated with this field
136         *
137         * @param altText the alternative information about the image
138         */
139        public void setAltText(String altText) {
140            image.setAltText(altText);
141        }
142    
143        /**
144         * Gets the height of the image
145         *
146         * @return height
147         */
148        @BeanTagAttribute(name="height")
149        public String getHeight() {
150            return image.getHeight();
151        }
152    
153        /**
154         * Sets the height of the image
155         *
156         * @param height
157         */
158        public void setHeight(String height) {
159            image.setHeight(height);
160        }
161    
162        /**
163         * Sets the width of the image
164         *
165         * @param width
166         */
167        public void setWidth(String width) {
168            if (image != null) {
169                image.setWidth(width);
170            }
171        }
172    
173        /**
174         * Gets the width of the image
175         *
176         * @return width
177         */
178        @BeanTagAttribute(name="width")
179        public String getWidth() {
180            return image.getWidth();
181        }
182    
183        /**
184         * Gets the caption header text
185         *
186         * @return captionHeaderText
187         */
188        @BeanTagAttribute(name="captionHeaderText")
189        public String getCaptionHeaderText() {
190            return image.getCaptionHeaderText();
191        }
192    
193        /**
194         * Sets the caption header text
195         *
196         * @param captionHeaderText
197         */
198        public void setCaptionHeaderText(String captionHeaderText) {
199            image.setCaptionHeaderText(captionHeaderText);
200        }
201    
202        /**
203         * Gets the caption header
204         *
205         * @return captionHeader
206         */
207        @BeanTagAttribute(name="captionHeader",type= BeanTagAttribute.AttributeType.SINGLEBEAN)
208        public Header getCaptionHeader() {
209            return image.getCaptionHeader();
210        }
211    
212        /**
213         * Sets the caption header
214         *
215         * @param captionHeader
216         */
217        public void setCaptionHeader(Header captionHeader) {
218            image.setCaptionHeader(captionHeader);
219        }
220    
221        /**
222         * Gets the cutline text
223         *
224         * @return cutlineText
225         */
226        @BeanTagAttribute(name="cutlineText")
227        public String getCutlineText() {
228            return image.getCutlineText();
229        }
230    
231        /**
232         * Sets the cutline text
233         *
234         * @param cutlineText
235         */
236        public void setCutlineText(String cutlineText) {
237            image.setCutlineText(cutlineText);
238        }
239    
240        /**
241         * Gets the cutline
242         *
243         * @return cutline
244         */
245        @BeanTagAttribute(name="cutline",type= BeanTagAttribute.AttributeType.SINGLEBEAN)
246        public Message getCutline() {
247            return image.getCutlineMessage();
248        }
249    
250        /**
251         * Sets the cutline
252         *
253         * @param cutline
254         */
255        public void setCutline(Message cutline) {
256            image.setCutlineMessage(cutline);
257        }
258    
259        /**
260         * Gets boolen of whether the caption header is above the image
261         *
262         * @return captionHeaderAboveImage
263         */
264        @BeanTagAttribute(name="captionHeaderAboveImage")
265        public boolean isCaptionHeaderAboveImage() {
266            return image.isCaptionHeaderPlacementAboveImage();
267        }
268    
269        /**
270         * Sets boolen of whether the caption header is above the image
271         *
272         * @param captionHeaderAboveImage
273         */
274        public void setCaptionHeaderAboveImage(boolean captionHeaderAboveImage) {
275            image.setCaptionHeaderPlacementAboveImage(captionHeaderAboveImage);
276        }
277    
278        /**
279         * @see org.kuali.rice.krad.uif.component.ComponentBase#copy()
280         */
281        @Override
282        protected <T> void copyProperties(T component) {
283            super.copyProperties(component);
284    
285            ImageField imageFieldCopy = (ImageField) component;
286    
287            if (this.image != null) {
288                imageFieldCopy.setImage((Image) this.image.copy());
289            }
290        }
291    }