001 /** 002 * Copyright 2005-2012 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.kns.lookup; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.rice.core.web.format.DateFormatter; 020 import org.kuali.rice.kns.document.authorization.BusinessObjectRestrictions; 021 import org.kuali.rice.kns.document.authorization.FieldRestriction; 022 import org.kuali.rice.kns.service.BusinessObjectAuthorizationService; 023 import org.kuali.rice.kns.service.KNSServiceLocator; 024 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 025 import org.kuali.rice.krad.util.KRADConstants; 026 import org.kuali.rice.krad.util.ObjectUtils; 027 028 import java.io.Serializable; 029 import java.sql.Date; 030 import java.util.HashMap; 031 import java.util.Iterator; 032 import java.util.List; 033 import java.util.Map; 034 035 /** 036 * This class holds details of html data for an action url. 037 * 038 * @author Kuali Rice Team (rice.collab@kuali.org) 039 * 040 */ 041 @Deprecated 042 public abstract class HtmlData implements Serializable { 043 044 protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(HtmlData.class); 045 046 public static final String ANCHOR_HTML_DATA_TYPE = AnchorHtmlData.class.getName(); 047 public static final String INPUT_HTML_DATA_TYPE = InputHtmlData.class.getName(); 048 049 protected String name = ""; 050 protected String title = ""; 051 protected String methodToCall = ""; 052 protected String displayText = ""; 053 protected String prependDisplayText = ""; 054 protected String appendDisplayText = ""; 055 protected List<HtmlData> childUrlDataList; 056 protected String maxLength; 057 058 /** 059 * 060 * This method constructs the complete html tag based on the class attribute 061 * values. 062 * 063 * @return 064 */ 065 public abstract String constructCompleteHtmlTag(); 066 067 /** 068 * @return the appendDisplayText 069 */ 070 public String getAppendDisplayText() { 071 return this.appendDisplayText; 072 } 073 074 /** 075 * @param appendDisplayText the appendDisplayText to set 076 */ 077 public void setAppendDisplayText(String appendDisplayText) { 078 this.appendDisplayText = appendDisplayText; 079 } 080 081 /** 082 * @return the childUrlDataList 083 */ 084 public List<HtmlData> getChildUrlDataList() { 085 return this.childUrlDataList; 086 } 087 088 /** 089 * @param childUrlDataList the childUrlDataList to set 090 */ 091 public void setChildUrlDataList(List<HtmlData> childUrlDataList) { 092 this.childUrlDataList = childUrlDataList; 093 } 094 095 /** 096 * @return the prependDisplayText 097 */ 098 public String getPrependDisplayText() { 099 return this.prependDisplayText; 100 } 101 102 /** 103 * @param prependDisplayText the prependDisplayText to set 104 */ 105 public void setPrependDisplayText(String prependDisplayText) { 106 this.prependDisplayText = prependDisplayText; 107 } 108 109 /** 110 * @return the title 111 */ 112 public String getTitle() { 113 return this.title; 114 } 115 116 /** 117 * @param title the title to set 118 */ 119 public void setTitle(String title) { 120 this.title = title; 121 } 122 123 /** 124 * @return the name 125 */ 126 public String getName() { 127 return this.name; 128 } 129 130 /** 131 * @param name the name to set 132 */ 133 public void setName(String name) { 134 this.name = name; 135 } 136 137 /** 138 * @return the displayText 139 */ 140 public String getDisplayText() { 141 return this.displayText; 142 } 143 144 /** 145 * @param displayText the displayText to set 146 */ 147 public void setDisplayText(String displayText) { 148 this.displayText = displayText; 149 } 150 151 /** 152 * @return the methodToCall 153 */ 154 public String getMethodToCall() { 155 return this.methodToCall; 156 } 157 158 /** 159 * @param methodToCall the methodToCall to set 160 */ 161 public void setMethodToCall(String methodToCall) { 162 this.methodToCall = methodToCall; 163 } 164 165 public String getTitle(String prependText, Class bo, List keys) { 166 return KRADConstants.EMPTY_STRING; 167 } 168 169 /** 170 * KFSMI-658 This method gets the title text for a link/control 171 * 172 * @param prependText 173 * @param dataObject 174 * @param fieldConversions 175 * @param returnKeys 176 * @return title text 177 */ 178 public static String getTitleText(String prependText, Object dataObject, List<String> keys, BusinessObjectRestrictions businessObjectRestrictions) { 179 if (dataObject == null) 180 return KRADConstants.EMPTY_STRING; 181 182 Map<String, String> keyValueMap = new HashMap<String, String>(); 183 Iterator keysIt = keys.iterator(); 184 while (keysIt.hasNext()) { 185 String fieldNm = (String) keysIt.next(); 186 Object fieldVal = ObjectUtils.getPropertyValue(dataObject, fieldNm); 187 188 FieldRestriction fieldRestriction = null; 189 if (businessObjectRestrictions != null) { 190 fieldRestriction = businessObjectRestrictions.getFieldRestriction(fieldNm); 191 } 192 if (fieldRestriction != null && (fieldRestriction.isMasked() || fieldRestriction.isPartiallyMasked())) { 193 fieldVal = fieldRestriction.getMaskFormatter().maskValue(fieldVal); 194 } else if (fieldVal == null) { 195 fieldVal = KRADConstants.EMPTY_STRING; 196 } else if (fieldVal instanceof Date) { 197 // need to format date in url 198 DateFormatter dateFormatter = new DateFormatter(); 199 fieldVal = dateFormatter.format(fieldVal); 200 } 201 keyValueMap.put(fieldNm, fieldVal.toString()); 202 } 203 return getTitleText(prependText, dataObject.getClass(), keyValueMap); 204 } 205 206 private static BusinessObjectAuthorizationService businessObjectAuthorizationService; 207 private static BusinessObjectAuthorizationService getBusinessObjectAuthorizationService() { 208 if (businessObjectAuthorizationService == null) { 209 businessObjectAuthorizationService = KNSServiceLocator.getBusinessObjectAuthorizationService(); 210 } 211 return businessObjectAuthorizationService; 212 } 213 214 public static String getTitleText(String prependText, Class<?> dataObjectClass, Map<String, String> keyValueMap) { 215 StringBuffer titleText = new StringBuffer(prependText); 216 for (String key : keyValueMap.keySet()) { 217 String fieldVal = keyValueMap.get(key).toString(); 218 219 titleText.append(KRADServiceLocatorWeb.getDataDictionaryService() 220 .getAttributeLabel(dataObjectClass, key) 221 + "=" + fieldVal.toString() + " "); 222 } 223 return titleText.toString(); 224 } 225 226 /** 227 * 228 * This class is an extension of HtmlData. It represents an anchor tag. 229 * 230 * @author Kuali Rice Team (rice.collab@kuali.org) 231 * 232 */ 233 public static class AnchorHtmlData extends HtmlData { 234 public static final String TARGET_BLANK = "_blank"; 235 protected String href = ""; 236 protected String target = ""; 237 protected String style = ""; 238 protected String styleClass =""; 239 protected String onclick =""; 240 241 /** 242 * Needed by inquiry framework 243 */ 244 public AnchorHtmlData() { 245 } 246 247 public AnchorHtmlData(String href, String title) { 248 this.href = href; 249 this.title = title; 250 } 251 252 public AnchorHtmlData(String href, String methodToCall, 253 String displayText) { 254 this.href = href; 255 this.methodToCall = methodToCall; 256 this.displayText = displayText; 257 } 258 259 /** 260 * @param href the href to set 261 */ 262 public void setHref(String href) { 263 this.href = href; 264 } 265 266 /** 267 * 268 * This method generates anchor tag. 269 * 270 * @see HtmlData#constructCompleteHtmlTag() 271 */ 272 public String constructCompleteHtmlTag() { 273 String completeHtmlTag; 274 if (StringUtils.isEmpty(getHref())) 275 completeHtmlTag = getDisplayText(); 276 else 277 completeHtmlTag = getPrependDisplayText() 278 + "<a title=\"" 279 + title 280 + "\"" 281 + " href=\"" 282 + getHref() 283 + "\"" 284 + getStyle() 285 + " " 286 + getStyleClass() 287 + " " 288 + (StringUtils.isEmpty(getOnclick()) ? "" : " onClick=\"" 289 + getOnclick() + "\" ") 290 + (StringUtils.isEmpty(getTarget()) ? "" : " target=\"" 291 + getTarget() + "\" ") + ">" + getDisplayText() 292 + "</a>" + getAppendDisplayText(); 293 return completeHtmlTag; 294 } 295 296 /** 297 * @return the target 298 */ 299 public String getTarget() { 300 return this.target; 301 } 302 303 /** 304 * @param target 305 * the target to set 306 */ 307 public void setTarget(String target) { 308 this.target = target; 309 } 310 311 /** 312 * @return the style 313 */ 314 public String getStyle() { 315 return this.style; 316 } 317 318 /** 319 * @param style the style to set 320 */ 321 public void setStyle(String style) { 322 this.style = style; 323 } 324 325 /** 326 * @return the styleClass 327 */ 328 public String getStyleClass() { 329 return this.styleClass; 330 } 331 332 /** 333 * @param styleClass the styleClass to set 334 */ 335 public void setStyleClass(String styleClass) { 336 this.styleClass = styleClass; 337 } 338 339 /** 340 * @return the onclick 341 */ 342 public String getOnclick() { 343 return this.onclick; 344 } 345 346 /** 347 * @param onclick the onclick to set 348 */ 349 public void setOnclick(String onclick) { 350 this.onclick = onclick; 351 } 352 353 /** 354 * @return the href 355 */ 356 public String getHref() { 357 return this.href; 358 } 359 360 /** 361 * @return the methodToCall 362 */ 363 public String getMethodToCall() { 364 return this.methodToCall; 365 } 366 367 } 368 369 /** 370 * 371 * This class is an extension of HtmlData. It represents an input tag. 372 * 373 * @author Kuali Rice Team (rice.collab@kuali.org) 374 * 375 */ 376 public static class InputHtmlData extends HtmlData { 377 public static final String CHECKBOX_INPUT_TYPE = "checkbox"; 378 public static final String CHECKBOX_CHECKED_VALUE = "checked"; 379 380 protected String inputType = ""; 381 protected String src = ""; 382 protected String styleClass = ""; 383 protected String border = "0"; 384 protected String checked = ""; 385 protected String value = ""; 386 387 public InputHtmlData(String name, String inputType) { 388 this.name = name; 389 this.inputType = inputType; 390 } 391 392 public InputHtmlData(String name, String inputType, String src) { 393 this.name = name; 394 this.inputType = inputType; 395 this.src = src; 396 } 397 398 /*********************************************************************** 399 * 400 * This method contructs an input tag. 401 * 402 * @see HtmlData#constructCompleteHtmlTag() 403 */ 404 public String constructCompleteHtmlTag() { 405 return getPrependDisplayText() 406 + "<input title=\"" 407 + title 408 + "\"" 409 + " name=\"" 410 + getName() 411 + "\"" 412 + (StringUtils.isEmpty(src) ? "" 413 : " src=\"" + src + "\" ") 414 + " type=\"" 415 + getInputType() 416 + "\"" 417 + (StringUtils.isEmpty(value) ? "" 418 : " value=\"" + value + "\" ") 419 + (StringUtils.isEmpty(checked) ? "" 420 : " checked=\"" + checked + "\" ") 421 + (StringUtils.isEmpty(getStyleClass()) ? "" 422 : " styleClass=\"" + getStyleClass() + "\" ") 423 + " border=\"" + getBorder() + "\"" + " value=\"" 424 + getDisplayText() + "\"" + "/>" + getAppendDisplayText(); 425 } 426 427 /** 428 * @return the inputType 429 */ 430 public String getInputType() { 431 return this.inputType; 432 } 433 434 /** 435 * @return the src 436 */ 437 public String getSrc() { 438 return this.src; 439 } 440 441 /** 442 * @return the border 443 */ 444 public String getBorder() { 445 return this.border; 446 } 447 448 /** 449 * @param border 450 * the border to set 451 */ 452 public void setBorder(String border) { 453 this.border = border; 454 } 455 456 /** 457 * @return the styleClass 458 */ 459 public String getStyleClass() { 460 return this.styleClass; 461 } 462 463 /** 464 * @param styleClass 465 * the styleClass to set 466 */ 467 public void setStyleClass(String styleClass) { 468 this.styleClass = styleClass; 469 } 470 471 /** 472 * @param checked the checked to set 473 */ 474 public void setChecked(String checked) { 475 this.checked = checked; 476 } 477 478 /** 479 * @param value the value to set 480 */ 481 public void setValue(String value) { 482 this.value = value; 483 } 484 485 } 486 487 public static class MultipleAnchorHtmlData extends AnchorHtmlData { 488 protected List<AnchorHtmlData> anchorHtmlData; 489 protected static final String ANCHORS_SEPARATOR = ", "; 490 491 /** 492 * Needed by inquiry framework 493 */ 494 public MultipleAnchorHtmlData(List<AnchorHtmlData> anchorHtmlData) { 495 this.anchorHtmlData = anchorHtmlData; 496 } 497 498 /** 499 * 500 * This method generates anchor tag. 501 * 502 * @see HtmlData#constructCompleteHtmlTag() 503 */ 504 public String constructCompleteHtmlTag() { 505 StringBuffer completeHtmlTag = new StringBuffer(); 506 for(AnchorHtmlData anchor: anchorHtmlData){ 507 completeHtmlTag.append(anchor.constructCompleteHtmlTag()+","); 508 } 509 if(completeHtmlTag.toString().endsWith(ANCHORS_SEPARATOR)) 510 completeHtmlTag.delete(completeHtmlTag.length()-ANCHORS_SEPARATOR.length(), completeHtmlTag.length()); 511 return completeHtmlTag.toString(); 512 } 513 514 /** 515 * @return the anchorHtmlData 516 */ 517 public List<AnchorHtmlData> getAnchorHtmlData() { 518 return this.anchorHtmlData; 519 } 520 521 } 522 523 /** 524 * @return the maxLength 525 */ 526 public int getMaxLength() { 527 try{ 528 return Integer.parseInt(this.maxLength); 529 } catch(Exception ex){ 530 return -1; 531 } 532 } 533 534 /** 535 * @param maxLength the maxLength to set 536 */ 537 public void setMaxLength(String maxLength) { 538 this.maxLength = maxLength; 539 } 540 541 }