001 /**
002 * Copyright 2005-2013 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.element;
017
018 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
019 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020 import org.kuali.rice.krad.datadictionary.parse.BeanTags;
021 import org.kuali.rice.krad.datadictionary.validator.ErrorReport;
022 import org.kuali.rice.krad.datadictionary.validator.Validator;
023 import org.kuali.rice.krad.datadictionary.validator.ValidationTrace;
024 import org.kuali.rice.krad.uif.component.Component;
025 import org.kuali.rice.krad.uif.util.ComponentFactory;
026 import org.kuali.rice.krad.uif.view.View;
027 import org.kuali.rice.krad.uif.widget.LightBox;
028
029 import java.util.ArrayList;
030 import java.util.List;
031
032 /**
033 * Content element that renders a link
034 *
035 * @author Kuali Rice Team (rice.collab@kuali.org)
036 */
037 @BeanTags({@BeanTag(name = "link-bean", parent="Uif-Link"), @BeanTag(name = "createNewLink-bean", parent = "Uif-CreateNewLink")})
038 public class Link extends ContentElementBase {
039 private static final long serialVersionUID = 8989868231938336068L;
040
041 private String linkText;
042 private String target;
043 private String href;
044
045 private boolean openInLightbox;
046
047 private LightBox lightBox;
048
049 public Link() {
050 super();
051 }
052
053 /**
054 * The following updates are done here:
055 *
056 * <ul>
057 * <li>Initialize the nested lightBox widget if open in lightbox is true</li>
058 * </ul>
059 *
060 * @see org.kuali.rice.krad.uif.component.Component#performApplyModel(org.kuali.rice.krad.uif.view.View, java.lang.Object,
061 * org.kuali.rice.krad.uif.component.Component)
062 */
063 @Override
064 public void performApplyModel(View view, Object model, Component parent) {
065 super.performApplyModel(view, model, parent);
066
067 if (openInLightbox && (lightBox == null)) {
068 lightBox = ComponentFactory.getLightBox();
069 }
070 }
071
072 /**
073 * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle()
074 */
075 @Override
076 public List<Component> getComponentsForLifecycle() {
077 List<Component> components = super.getComponentsForLifecycle();
078
079 components.add(lightBox);
080
081 return components;
082 }
083
084 /**
085 * Returns the label of the link
086 *
087 * @return The link label
088 */
089 @BeanTagAttribute(name="linkText")
090 public String getLinkText() {
091 return linkText;
092 }
093
094 /**
095 * Setter for the link label
096 *
097 * @param linkText
098 */
099 public void setLinkText(String linkText) {
100 this.linkText = linkText;
101 }
102
103 /**
104 * Returns the target that will be used to specify where to open the href
105 *
106 * @return The target
107 */
108 @BeanTagAttribute(name="target")
109 public String getTarget() {
110 return target;
111 }
112
113 /**
114 * Setter for the link target
115 *
116 * @param target
117 */
118 public void setTarget(String target) {
119 this.target = target;
120 }
121
122 /**
123 * Returns the href text
124 *
125 * @return The href text
126 */
127 @BeanTagAttribute(name="href")
128 public String getHref() {
129 return href;
130 }
131
132 /**
133 * Setter for the hrefText
134 *
135 * @param href
136 */
137 public void setHref(String href) {
138 this.href = href;
139 }
140
141 /**
142 * Indicates whether the link URL should be opened in a lightbox
143 *
144 * <p>
145 * If set the target attribute is ignored and the URL is opened in a lightbox instead
146 * </p>
147 *
148 * @return boolean true to open link in a lightbox, false if not (follow standard target attribute)
149 */
150 public boolean isOpenInLightbox() {
151 return openInLightbox;
152 }
153
154 /**
155 * Setter that indicates whether the link should be opened in a lightbox
156 *
157 * @param openInLightbox
158 */
159 public void setOpenInLightbox(boolean openInLightbox) {
160 this.openInLightbox = openInLightbox;
161 }
162
163 /**
164 * Returns the <code>LightBox</code> used to open the link in
165 *
166 * @return The <code>LightBox</code>
167 */
168 @BeanTagAttribute(name="lightBox",type= BeanTagAttribute.AttributeType.SINGLEBEAN)
169 public LightBox getLightBox() {
170 return lightBox;
171 }
172
173 /**
174 * Setter for the lightBox
175 *
176 * @param lightBox
177 */
178 public void setLightBox(LightBox lightBox) {
179 this.lightBox = lightBox;
180 }
181
182 /**
183 * @see org.kuali.rice.krad.uif.component.Component#completeValidation
184 */
185 @Override
186 public void completeValidation(ValidationTrace tracer){
187 ArrayList<ErrorReport> reports=new ArrayList<ErrorReport>();
188 tracer.addBean(this);
189
190 if(tracer.getValidationStage()== ValidationTrace.BUILD){
191
192 // Checks that href is set
193 if(getHref()==null){
194 if(!Validator.checkExpressions(this, "href")){
195 String currentValues [] = {"href ="+getHref()};
196 tracer.createError("Href must be set",currentValues);
197 }
198 }
199
200 // Checks that the text is set
201 if(getLinkText()==null){
202 if(!Validator.checkExpressions(this, "linkText")){
203 String currentValues [] = {"linkText = "+getLinkText()};
204 tracer.createError("LinkText must be set",currentValues);
205 }
206 }
207
208 }
209
210 super.completeValidation(tracer.getCopy());
211 }
212 }