001/**
002 * Copyright 2005-2016 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 */
016package org.kuali.rice.kns.web.struts.form.pojo;
017
018import javax.servlet.http.HttpServletRequest;
019import java.util.Map;
020import java.util.Set;
021
022/**
023 * begin Kuali Foundation modification
024 * This interface defines methods that Pojo Forms must provide.
025 * end Kuali Foundation modification
026 */
027// Kuali Foundation modification: original name: SLForm
028public interface PojoForm {
029    public void populate(HttpServletRequest request);
030
031    // begin Kuali Foundation modification
032    // cachedActionErrors() method removed
033    public void postprocessRequestParameters(Map requestParameters);
034    // end Kuali Foundation modification
035
036    public Map getUnconvertedValues();
037
038    public Object formatValue(Object value, String keypath, Class type);
039
040    // begin Kuali Foundation modification
041    public void processValidationFail();
042    
043    Set<String> getRequiredNonEditableProperties();
044    
045    void registerEditableProperty(String editablePropertyName);
046    
047    /**
048     * Reinitializes the form to allow it to register the editable properties of the currently processing request.
049     */
050    void clearEditablePropertyInformation();
051
052    Set<String> getEditableProperties();
053    
054    /**
055     * 
056     * This method adds the required property names, that are not directly editable by user on the html page, to a list, regardless of the context
057     * in which they appear.  Request parameter names corresponding to these properties
058     * will be populated into the form. 
059     *
060     */
061    void addRequiredNonEditableProperties();
062    
063    /**
064     * Sets the value of the "scope" attribute for the Struts action mapping corresponding to this form instance.  Note that this
065     * method name is NOT in the syntax of the conventional POJO setter; this is to prevent clients from maliciously altering the value
066     * of this parameter
067     * 
068     * @param scope
069     */
070    public void registerStrutsActionMappingScope(String scope);
071    
072   
073    public void registerIsNewForm(boolean isNewForm);
074    
075    public boolean getIsNewForm();
076    
077    
078    /**
079         * Returns whether a request parameter should be populated as a property of the form, assuming that the request parameter name
080         * corresponds to a property on the form.  This method makes no determination whether the request parameter is a property of the form, but rather
081         * from a security perspective, whether the framework should attempt to set the form property with the same name as the request parameter. 
082         * 
083         * @param requestParameterName the name of the request parameter
084         * @param request the HTTP request
085         * @return whether the parameter should be 
086         */
087        public boolean shouldPropertyBePopulatedInForm(String requestParameterName, HttpServletRequest request);
088        
089        /**
090         * Returns a set of methodToCalls for which the system will bypass the session.  The return value of this method may depend ONLY upon the
091         * type of the class implementing it.  Each instance of an implementation of this interface
092         * must return the same result.  More formally, for 2 instances of this interfaces a1 and a2, if a1.getClass().equals(a2.getClass()), then
093         * a1.getMethodToCallsToBypassSessionRetrievalForGETRequests().equals(a2.getMethodToCallsToBypassSessionRetrievalForGETRequests())
094         * 
095         * NOTE: read Javadoc of {@link PojoFormBase#getMethodToCallsToBypassSessionRetrievalForGETRequests()} for important implementation details.
096         * 
097         * @return
098         */
099        public Set<String> getMethodToCallsToBypassSessionRetrievalForGETRequests();
100        
101        /**
102     * Sets the editable properties guid for this form
103     * @param guid the key to the editable properties for this form
104     */
105    public abstract void setPopulateEditablePropertiesGuid(String guid);
106    
107    /**
108     * Sets the guid associated with the edited properties associated with the action
109     * 
110     * @param guid the guid of the action editable properties
111     */
112    public abstract void setActionEditablePropertiesGuid(String guid);
113    // end Kuali Foundation modification
114
115}