Coverage Report - org.kuali.rice.kns.web.spring.form.UifFormBase
 
Classes in this File Line Coverage Branch Coverage Complexity
UifFormBase
0%
0/95
0%
0/8
1.089
 
 1  
 /*
 2  
  * Copyright 2007 The Kuali Foundation
 3  
  * 
 4  
  * Licensed under the Educational Community License, Version 1.0 (the
 5  
  * "License"); you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  * 
 8  
  * http://www.opensource.org/licenses/ecl1.php
 9  
  * 
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 12  
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 13  
  * License for the specific language governing permissions and limitations under
 14  
  * the License.
 15  
  */
 16  
 package org.kuali.rice.kns.web.spring.form;
 17  
 
 18  
 import java.io.Serializable;
 19  
 import java.util.HashMap;
 20  
 import java.util.Map;
 21  
 import java.util.Properties;
 22  
 import java.util.UUID;
 23  
 
 24  
 import javax.servlet.http.HttpServletRequest;
 25  
 
 26  
 import org.apache.commons.lang.StringUtils;
 27  
 import org.kuali.rice.kns.service.KNSServiceLocatorWeb;
 28  
 import org.kuali.rice.kns.uif.UifConstants;
 29  
 import org.kuali.rice.kns.uif.container.View;
 30  
 import org.kuali.rice.kns.uif.history.History;
 31  
 import org.kuali.rice.kns.uif.service.ViewService;
 32  
 import org.springframework.web.multipart.MultipartFile;
 33  
 
 34  
 /**
 35  
  * Base form class for views within the KRAD User Interface Framework
 36  
  * 
 37  
  * <p>
 38  
  * Holds properties necessary to determine the <code>View</code> instance that
 39  
  * will be used to render the UI
 40  
  * </p>
 41  
  * 
 42  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 43  
  */
 44  
 public class UifFormBase implements Serializable {
 45  
     private static final long serialVersionUID = 8432543267099454434L;
 46  
     
 47  
     private History formHistory;
 48  
 
 49  
     // current view
 50  
     protected String viewId;
 51  
     protected String viewName;
 52  
     protected String viewTypeName;
 53  
     protected String pageId;
 54  
     protected String methodToCall;
 55  
     protected String formKey;
 56  
     protected String jumpToId;
 57  
     protected String jumpToName;
 58  
     protected String focusId;
 59  
     protected String formPostUrl;
 60  
     
 61  
     protected boolean defaultsApplied;
 62  
 
 63  
     protected View view;
 64  
     protected View previousView;
 65  
     protected Map<String, String> viewRequestParameters;
 66  
 
 67  
     protected Map<String, Object> newCollectionLines;
 68  
     protected Map<String, String> actionParameters;
 69  
 
 70  
     protected MultipartFile attachmentFile;
 71  
 
 72  
     // navigation
 73  
     protected String returnLocation;
 74  
     protected String returnFormKey;
 75  
     protected String hubLocation;
 76  
     protected String hubFormKey;
 77  
     protected String homeLocation;
 78  
 
 79  
     protected boolean renderFullView;
 80  
     protected boolean validateDirty;
 81  
 
 82  0
     public UifFormBase() {
 83  0
         formKey = generateFormKey();
 84  0
         renderFullView = true;
 85  0
         defaultsApplied = false;
 86  
 
 87  0
         viewRequestParameters = new HashMap<String, String>();
 88  0
         newCollectionLines = new HashMap<String, Object>();
 89  0
         actionParameters = new HashMap<String, String>();
 90  
         //formHistory = new History();
 91  0
     }
 92  
 
 93  
     /**
 94  
      * Creates the unique id used to store this "conversation" in the session.
 95  
      * The default method generates a java UUID.
 96  
      * 
 97  
      * @return
 98  
      */
 99  
     protected String generateFormKey() {
 100  0
         return UUID.randomUUID().toString();
 101  
     }
 102  
 
 103  
     /**
 104  
      * Called after Spring binds the request to the form and before the
 105  
      * controller method is invoked.
 106  
      * 
 107  
      * @param request
 108  
      *            - request object containing the query parameters
 109  
      */
 110  
     public void postBind(HttpServletRequest request) {
 111  
         // default form post URL to request URL
 112  0
         formPostUrl = request.getRequestURL().toString();
 113  
 
 114  
         //history.pushToHistory(viewId, pageId, view.getTitle(), formPostUrl, formKey);
 115  0
     }
 116  
 
 117  
     /**
 118  
      * Unique Id for the <code>View</code> instance. This is specified for a
 119  
      * view in its definition by setting the 'id' property.
 120  
      * 
 121  
      * @return String view id
 122  
      */
 123  
     public String getViewId() {
 124  0
         return this.viewId;
 125  
     }
 126  
 
 127  
     /**
 128  
      * Setter for the unique view id
 129  
      * 
 130  
      * @param viewId
 131  
      */
 132  
     public void setViewId(String viewId) {
 133  0
         this.viewId = viewId;
 134  0
     }
 135  
 
 136  
     /**
 137  
      * Name for the <code>View</code> instance. This is specified for a view in
 138  
      * its definition by setting the 'id' property. The name is not necessary
 139  
      * unique and cannot be used by itself to retrieve a view. Typically it is
 140  
      * used with other parameters to identify a view with a certain type (view
 141  
      * type)
 142  
      * 
 143  
      * @return String view name
 144  
      */
 145  
     public String getViewName() {
 146  0
         return this.viewName;
 147  
     }
 148  
 
 149  
     /**
 150  
      * Setter for the view name
 151  
      * 
 152  
      * @param viewName
 153  
      */
 154  
     public void setViewName(String viewName) {
 155  0
         this.viewName = viewName;
 156  0
     }
 157  
 
 158  
     /**
 159  
      * Name for the type of view being requested. This can be used to find
 160  
      * <code>View</code> instances by request parameters (not necessary the
 161  
      * unique id)
 162  
      * 
 163  
      * @return String view type name
 164  
      */
 165  
     public String getViewTypeName() {
 166  0
         return this.viewTypeName;
 167  
     }
 168  
 
 169  
     /**
 170  
      * Setter for the view type name
 171  
      * 
 172  
      * @param viewTypeName
 173  
      */
 174  
     public void setViewTypeName(String viewTypeName) {
 175  0
         this.viewTypeName = viewTypeName;
 176  0
     }
 177  
 
 178  
     /**
 179  
      * Id for the current page being displayed within the view
 180  
      * 
 181  
      * @return String page id
 182  
      */
 183  
     public String getPageId() {
 184  0
         return this.pageId;
 185  
     }
 186  
 
 187  
     /**
 188  
      * Setter for the current page id
 189  
      * 
 190  
      * @param pageId
 191  
      */
 192  
     public void setPageId(String pageId) {
 193  0
         this.pageId = pageId;
 194  0
     }
 195  
 
 196  
     public String getFormPostUrl() {
 197  0
         return this.formPostUrl;
 198  
     }
 199  
 
 200  
     public void setFormPostUrl(String formPostUrl) {
 201  0
         this.formPostUrl = formPostUrl;
 202  0
     }
 203  
 
 204  
     public String getReturnLocation() {
 205  0
         return this.returnLocation;
 206  
     }
 207  
 
 208  
     public void setReturnLocation(String returnLocation) {
 209  0
         this.returnLocation = returnLocation;
 210  0
     }
 211  
 
 212  
     public String getReturnFormKey() {
 213  0
         return this.returnFormKey;
 214  
     }
 215  
 
 216  
     public void setReturnFormKey(String returnFormKey) {
 217  0
         this.returnFormKey = returnFormKey;
 218  0
     }
 219  
 
 220  
     public String getHubLocation() {
 221  0
         return this.hubLocation;
 222  
     }
 223  
 
 224  
     public void setHubLocation(String hubLocation) {
 225  0
         this.hubLocation = hubLocation;
 226  0
     }
 227  
 
 228  
     public String getHubFormKey() {
 229  0
         return this.hubFormKey;
 230  
     }
 231  
 
 232  
     public void setHubFormKey(String hubFormKey) {
 233  0
         this.hubFormKey = hubFormKey;
 234  0
     }
 235  
 
 236  
     public String getHomeLocation() {
 237  0
         return this.homeLocation;
 238  
     }
 239  
 
 240  
     public void setHomeLocation(String homeLocation) {
 241  0
         this.homeLocation = homeLocation;
 242  0
     }
 243  
 
 244  
     /**
 245  
      * Identifies the controller method that should be invoked to fulfill a
 246  
      * request. The value will be matched up against the 'params' setting on the
 247  
      * <code>RequestMapping</code> annotation for the controller method
 248  
      * 
 249  
      * @return String method to call
 250  
      */
 251  
     public String getMethodToCall() {
 252  0
         return this.methodToCall;
 253  
     }
 254  
 
 255  
     /**
 256  
      * Setter for the method to call
 257  
      * 
 258  
      * @param methodToCall
 259  
      */
 260  
     public void setMethodToCall(String methodToCall) {
 261  0
         this.methodToCall = methodToCall;
 262  0
     }
 263  
 
 264  
     /**
 265  
      * Map of parameters that was used to configured the <code>View</code>.
 266  
      * Maintained on the form to rebuild the view on posts and session timeout
 267  
      * 
 268  
      * @return Map<String, String> view parameters
 269  
      * @see org.kuali.rice.kns.uif.container.View.getViewRequestParameters()
 270  
      */
 271  
     public Map<String, String> getViewRequestParameters() {
 272  0
         return this.viewRequestParameters;
 273  
     }
 274  
 
 275  
     /**
 276  
      * Setter for the view's request parameter map
 277  
      * 
 278  
      * @param viewRequestParameters
 279  
      */
 280  
     public void setViewRequestParameters(Map<String, String> viewRequestParameters) {
 281  0
         this.viewRequestParameters = viewRequestParameters;
 282  0
     }
 283  
 
 284  
     /**
 285  
      * Holds instances for collection add lines. The key of the Map gives the
 286  
      * collection name the line instance applies to, the Map value is an
 287  
      * instance of the collection object class that holds the new line data
 288  
      * 
 289  
      * @return Map<String, Object> new collection lines
 290  
      */
 291  
     public Map<String, Object> getNewCollectionLines() {
 292  0
         return this.newCollectionLines;
 293  
     }
 294  
 
 295  
     /**
 296  
      * Setter for the new collection lines Map
 297  
      * 
 298  
      * @param newCollectionLines
 299  
      */
 300  
     public void setNewCollectionLines(Map<String, Object> newCollectionLines) {
 301  0
         this.newCollectionLines = newCollectionLines;
 302  0
     }
 303  
 
 304  
     /**
 305  
      * Map of parameters sent for the invoked action
 306  
      * <p>
 307  
      * Many times besides just setting the method to call actions need to send
 308  
      * additional parameters. For instance the method being called might do a
 309  
      * redirect, in which case the action needs to send parameters for the
 310  
      * redirect URL. An example of this is redirecting to a <code>Lookup</code>
 311  
      * view. In some cases the parameters that need to be sent conflict with
 312  
      * properties already on the form, and putting all the action parameters as
 313  
      * form properties would grow massive (in addition to adds an additional
 314  
      * step from the XML config). So this general map solves those issues.
 315  
      * </p>
 316  
      * 
 317  
      * @return Map<String, String> action parameters
 318  
      */
 319  
     public Map<String, String> getActionParameters() {
 320  0
         return this.actionParameters;
 321  
     }
 322  
 
 323  
     /**
 324  
      * Returns the action parameters map as a <code>Properties</code> instance
 325  
      * 
 326  
      * @return Properties action parameters
 327  
      */
 328  
     public Properties getActionParametersAsProperties() {
 329  0
         Properties actionProperties = new Properties();
 330  
 
 331  0
         if (actionParameters != null) {
 332  0
             for (Map.Entry<String, String> actionParameter : actionParameters.entrySet()) {
 333  0
                 actionProperties.put(actionParameter.getKey(), actionParameter.getValue());
 334  
             }
 335  
         }
 336  
 
 337  0
         return actionProperties;
 338  
     }
 339  
 
 340  
     /**
 341  
      * Setter for the action parameters map
 342  
      * 
 343  
      * @param actionParameters
 344  
      */
 345  
     public void setActionParameters(Map<String, String> actionParameters) {
 346  0
         this.actionParameters = actionParameters;
 347  0
     }
 348  
 
 349  
     /**
 350  
      * Retrieves the value for the given action parameter, or empty string if
 351  
      * not found
 352  
      * 
 353  
      * @param actionParameterName
 354  
      *            - name of the action parameter to retrieve value for
 355  
      * @return String parameter value or empty string
 356  
      */
 357  
     public String getActionParamaterValue(String actionParameterName) {
 358  0
         if ((actionParameters != null) && actionParameters.containsKey(actionParameterName)) {
 359  0
             return actionParameters.get(actionParameterName);
 360  
         }
 361  
 
 362  0
         return "";
 363  
     }
 364  
 
 365  
     /**
 366  
      * Key string that identifies the form instance in session storage
 367  
      * <p>
 368  
      * When the view is posted, the previous form instance is retrieved and then
 369  
      * populated from the request parameters. This key string is retrieve the
 370  
      * session form from the session service
 371  
      * </p>
 372  
      * 
 373  
      * @return String form session key
 374  
      */
 375  
     public String getFormKey() {
 376  0
         return this.formKey;
 377  
     }
 378  
 
 379  
     /**
 380  
      * Setter for the form's session key
 381  
      * 
 382  
      * @param formKey
 383  
      */
 384  
     public void setFormKey(String formKey) {
 385  0
         this.formKey = formKey;
 386  0
     }
 387  
     
 388  
     /**
 389  
      * Indicates whether the form has had default values from the configured
 390  
      * <code>View</code> applied. This happens only once for each form instance
 391  
      * 
 392  
      * @return boolean true if default values have been applied, false if not
 393  
      */
 394  
     public boolean isDefaultsApplied() {
 395  0
         return this.defaultsApplied;
 396  
     }
 397  
 
 398  
     /**
 399  
      * Setter for the defaults applied indicator
 400  
      * 
 401  
      * @param defaultsApplied
 402  
      */
 403  
     public void setDefaultsApplied(boolean defaultsApplied) {
 404  0
         this.defaultsApplied = defaultsApplied;
 405  0
     }
 406  
 
 407  
     /**
 408  
      * Holder for files that are attached through the view
 409  
      * 
 410  
      * @return MultipartFile representing the attachment
 411  
      */
 412  
     public MultipartFile getAttachmentFile() {
 413  0
         return this.attachmentFile;
 414  
     }
 415  
 
 416  
     /**
 417  
      * Setter for the form's attachment file
 418  
      * 
 419  
      * @param attachmentFile
 420  
      */
 421  
     public void setAttachmentFile(MultipartFile attachmentFile) {
 422  0
         this.attachmentFile = attachmentFile;
 423  0
     }
 424  
 
 425  
     /**
 426  
      * @return the renderFullView
 427  
      */
 428  
     public boolean isRenderFullView() {
 429  0
         return this.renderFullView;
 430  
     }
 431  
 
 432  
     /**
 433  
      * @param renderFullView
 434  
      */
 435  
     public void setRenderFullView(boolean renderFullView) {
 436  0
         this.renderFullView = renderFullView;
 437  0
     }
 438  
 
 439  
     /**
 440  
      * View instance associated with the form. Used to render the user interface
 441  
      * 
 442  
      * @return View
 443  
      */
 444  
     public View getView() {
 445  0
         return this.view;
 446  
     }
 447  
 
 448  
     /**
 449  
      * Setter for the view instance
 450  
      * 
 451  
      * @param view
 452  
      */
 453  
     public void setView(View view) {
 454  0
         this.view = view;
 455  0
     }
 456  
 
 457  
     /**
 458  
      * View instance for the page that made a request. Since a new view instance
 459  
      * gets initialized for each request before the controller logic is invoked,
 460  
      * any state about the previous view is lost. This could be needed to read
 461  
      * metadata from the view for such things as collection processing. When
 462  
      * this is necessary the previous view instance can be retrieved
 463  
      * 
 464  
      * @return View instance
 465  
      */
 466  
     public View getPreviousView() {
 467  0
         return this.previousView;
 468  
     }
 469  
 
 470  
     /**
 471  
      * Setter for the previous view instance
 472  
      * 
 473  
      * @param previousView
 474  
      */
 475  
     public void setPreviousView(View previousView) {
 476  0
         this.previousView = previousView;
 477  0
     }
 478  
 
 479  
     /**
 480  
      * Instance of the <code>ViewService</code> that can be used to retrieve
 481  
      * <code>View</code> instances
 482  
      * 
 483  
      * @return ViewService implementation
 484  
      */
 485  
     protected ViewService getViewService() {
 486  0
         return KNSServiceLocatorWeb.getViewService();
 487  
     }
 488  
 
 489  
         /**
 490  
          * The jumpToId for this form, the element with this id will be jumped to automatically
 491  
          * when the form is loaded in the view.
 492  
          * Using "TOP" or "BOTTOM" will jump to the top or the bottom of the resulting page.
 493  
          * jumpToId always takes precedence over jumpToName, if set.
 494  
      *
 495  
          * @return the jumpToId
 496  
          */
 497  
         public String getJumpToId() {
 498  0
                 return this.jumpToId;
 499  
         }
 500  
 
 501  
         /**
 502  
          * @param jumpToId the jumpToId to set
 503  
          */
 504  
         public void setJumpToId(String jumpToId) {
 505  0
                 this.jumpToId = jumpToId;
 506  0
         }
 507  
 
 508  
         /**
 509  
          * The jumpToName for this form, the element with this name will be jumped to automatically
 510  
          * when the form is loaded in the view.
 511  
          * WARNING: jumpToId always takes precedence over jumpToName, if set.
 512  
      *
 513  
          * @return the jumpToName
 514  
          */
 515  
         public String getJumpToName() {
 516  0
                 return this.jumpToName;
 517  
         }
 518  
 
 519  
         /**
 520  
          * @param jumpToName the jumpToName to set
 521  
          */
 522  
         public void setJumpToName(String jumpToName) {
 523  0
                 this.jumpToName = jumpToName;
 524  0
         }
 525  
 
 526  
         /**
 527  
          * Field to place focus on when the page loads
 528  
          * An empty focusId will result in focusing on the first visible input element by default.
 529  
      *
 530  
          * @return the focusId
 531  
          */
 532  
         public String getFocusId() {
 533  0
                 return this.focusId;
 534  
         }
 535  
 
 536  
         /**
 537  
          * @param focusId the focusId to set
 538  
          */
 539  
         public void setFocusId(String focusId) {
 540  0
                 this.focusId = focusId;
 541  0
         }
 542  
 
 543  
     /**
 544  
      * History parameter representing the History of views that have come before the
 545  
      * viewing of the current view.  Used for breadcrumb widget generation on the view.
 546  
      *
 547  
      * @param history the history to set
 548  
      */
 549  
     public void setFormHistory(History history) {
 550  0
         this.formHistory = history;
 551  0
     }
 552  
 
 553  
     /**
 554  
      * @return the history
 555  
      */
 556  
     public History getFormHistory() {
 557  0
         return formHistory;
 558  
     }
 559  
     
 560  
     public boolean isValidateDirty() {
 561  0
                 return this.validateDirty;
 562  
         }
 563  
 
 564  
         /**
 565  
          * Setter for dirty validation. 
 566  
          */
 567  
         public void setValidateDirty(boolean validateDirty) {
 568  0
                 this.validateDirty = validateDirty;
 569  0
         }    
 570  
 
 571  
 }