Update of 
/var/cvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform
In directory 
james.mmbase.org:/tmp/cvs-serv31706/portlets-dynamicforms/src/java/com/finalist/portlets/responseform

Modified Files:
      Tag: b1_4
        ResponseFormPortlet.java 
Log Message:
 CMSC-838 The responseformportlet need some improvements in robustness
 Some logging which makes it a little easier to find the errors


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform
See also: http://www.mmbase.org/jira/browse/CMSC-838


Index: ResponseFormPortlet.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-dynamicforms/src/java/com/finalist/portlets/responseform/ResponseFormPortlet.java,v
retrieving revision 1.8.2.2
retrieving revision 1.8.2.3
diff -u -b -r1.8.2.2 -r1.8.2.3
--- ResponseFormPortlet.java    17 Mar 2008 14:08:57 -0000      1.8.2.2
+++ ResponseFormPortlet.java    28 Mar 2008 10:09:41 -0000      1.8.2.3
@@ -13,7 +13,6 @@
 import java.io.UnsupportedEncodingException;
 import java.util.Arrays;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.Iterator;
@@ -64,7 +63,6 @@
                                                       // Meg
    private static final long MEGABYTE = 1024 * 1024; // 1 Meg
    private static final String FIELD_PREFIX = "field_";
-   // TODO: use these constants (and clean up this mess)
    private static final int TYPE_TEXTBOX = 1;
    private static final int TYPE_TEXTAREA = 2;
    private static final int TYPE_RADIO = 4;
@@ -79,66 +77,71 @@
 
    
        public void processView(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
-
-               Map errorMessages = new Hashtable();
-               Map parameterMap = new HashMap();
+      Map<String, String> errorMessages = new Hashtable<String, String>();
+      Map<String, String> parameterMap = new HashMap<String, String>();
                DataSource attachment = processUserRequest(request, 
errorMessages, parameterMap);
-               String action = request.getParameter("action");
-               Map formfields = new HashMap();
+      String action = request.getParameter(ACTION_PARAM);
+      Map<String, String> formfields = new HashMap<String, String>();
                StringBuffer data = new StringBuffer();
 
-               if (action == null)
+      if (action == null) {
                        response.setPortletMode(CmscPortletMode.EDIT_DEFAULTS);
+      }
                else if (action.equals("edit")) {
                        PortletPreferences preferences = 
request.getPreferences();
-                       String contentelement = 
preferences.getValue("contentelement", null);
+         String contentelement = preferences.getValue(CONTENTELEMENT, null);
+
                        if (contentelement != null) {
                                if (parameterMap.size() > 0) {
                                        CloudProvider cloudProvider = 
CloudProviderFactory.getCloudProvider();
                                        Cloud cloud = cloudProvider.getCloud();
                                        Node responseForm = 
cloud.getNode(contentelement);
-                                       NodeList formfieldList = 
SearchUtil.findRelatedOrderedNodeList(responseForm, "formfield", "posrel", 
"posrel.pos");
+               NodeList formfieldList = 
SearchUtil.findRelatedOrderedNodeList(responseForm, "formfield", "posrel",
+                     "posrel.pos");
                                        NodeIterator formfieldIterator = 
formfieldList.nodeIterator();
                                        String userEmailAddress = null;
-                                       String number;
-                                       String textValue;
 
-                                       while ( formfieldIterator.hasNext()) {
+               while (formfieldIterator.hasNext()) {
                                                Node formfield = 
formfieldIterator.nextNode();
-                                               number = 
formfield.getStringValue("number");
+                  String number = formfield.getStringValue("number");
                                                String label = 
formfield.getStringValue("label");
                                                int type = 
formfield.getIntValue("type");
                                                String regex = 
formfield.getStringValue("regex");
                                                boolean isMandatory = 
formfield.getBooleanValue("mandatory");
                                                boolean sendEmail = 
formfield.getBooleanValue("sendemail");
-
-                                               String fieldIdentifier = (new 
StringBuilder()).append("field_").append(number).toString();
-                                               String value = ((String) 
parameterMap.get(fieldIdentifier)).trim();
-                                               textValue = null;
-
+                  String fieldIdentifier = FIELD_PREFIX + number;
+                  String value = parameterMap.get(fieldIdentifier);
+                  String textValue = null;
                                                if (sendEmail) {
                                                        userEmailAddress = 
value;
                                                }
-                                               if (type == 2 && value != null 
&& value.length() >= 1024) {
-                                                       value = 
value.substring(0, 1023);
+                  if (type == TYPE_TEXTAREA && value != null && value.length() 
>= TEXTAREA_MAXLENGTH) {
+                     value = value.substring(0, TEXTAREA_MAXLENGTH - 1);
                                                }
-                                               if (isMandatory && ((type == 4 
|| type == 6) && value == null || (type == 1 || type == 2 || type == 7) && 
value.equals(""))) {
+                  if (isMandatory
+                        && (((type == TYPE_RADIO || type == TYPE_CHECKBOX) && 
(value == null)) || (((type == TYPE_TEXTBOX)
+                              || (type == TYPE_TEXTAREA) || (type == 
TYPE_ATTACHEMENT)) && value.equals("")))) {
                                                        
errorMessages.put(fieldIdentifier, "view.formfield.empty");
                                                }
-                                               if (!regex.equals("") && (type 
== 1 || type == 2) && !value.matches(regex)) {
+                  if (!regex.equals("")
+                        && (((type == TYPE_TEXTBOX) || (type == 
TYPE_TEXTAREA)) && !isEmailAddress(value))) {
                                                        
errorMessages.put(fieldIdentifier, "view.formfield.invalid");
                                                }
 
-                                               if (type == 6) {
-                                                       textValue = value != 
null ? "ja" : "nee";
+                  if ((type == TYPE_TEXTBOX) && sendEmail) {   //If data is 
used as email address, then it should be valid 
+                      if (!isEmailAddress(userEmailAddress))
+                         errorMessages.put(fieldIdentifier, 
"view.formfield.invalid");
                                                }
-                                               else if (type == 4) { 
-                                                       textValue = value != 
null ? value : "[niets gekozen]";
+                  
+                  if (type == TYPE_CHECKBOX) {
+                     textValue = (value == null) ? CHECKBOX_NO : CHECKBOX_YES;
+                  }
+                  else if (type == TYPE_RADIO) {
+                     textValue = (value == null) ? RADIO_EMPTY : value;
                                                }
                                                else {
-                                                       textValue = 
StringUtil.isEmptyOrWhitespace(value) ? "[niet ingevuld]" : value;
+                     textValue = (StringUtil.isEmptyOrWhitespace(value)) ? 
TEXTBOX_EMPTY : value;
                                                }
-
                                                addFormFieldsData(data, label, 
textValue);
                                                formfields.put(number, 
textValue);
                                        }
@@ -154,29 +157,34 @@
                                                        
errorMessages.put("sendemail", "view.error.sendemail");
                                                }
                                                else {
-                                                       
sendUserEmail(responseForm, userEmailAddress, emailData, parameterMap);
+                      // if the responseform email has been sent, send also 
the email to the user
+                      sent = sendUserEmail(responseForm, userEmailAddress, 
emailData, parameterMap);
+                      if (!sent) {
+                         errorMessages.put("sendemail", 
"view.error.sendemail");
+                      }
                                                }
                                        }
                                }
-                               
request.getPortletSession().setAttribute("parameterMap", parameterMap);
-
                                if (errorMessages.size() > 0) {
-                                       
request.getPortletSession().setAttribute("errormessages", errorMessages);
-                               } else {
+               request.getPortletSession().setAttribute(ERRORMESSAGES, 
errorMessages);
+               request.getPortletSession().setAttribute(PARAMETER_MAP, 
parameterMap);
+            }
+            else {
                                        
request.getPortletSession().setAttribute("confirm", "confirm");
                                }
-                       } else {
+         }
+         else {
                                getLogger().error("No contentelement");
                        }
-
+         // switch to View mode
                        response.setPortletMode(PortletMode.VIEW);
-               } else {
-                       getLogger().error((new StringBuilder()).append("Unknown 
action: '").append(action).append("'").toString());
+      }
+      else {
+         getLogger().error("Unknown action: '" + action + "'");
                }
        }
 
 
-
        private void addFormFieldsData(StringBuffer data, String label, String 
textValue) {
                data.append(label);
                data.append(": ");
@@ -185,30 +193,6 @@
        }
 
 
-
-
-
-
-       public void processEdit(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
-               super.processEdit(request, response);
-               String action = request.getParameter("action");
-               if (action == null) {
-                       response.setPortletMode(PortletMode.EDIT);
-               }
-               else if (action.equals("delete")) {
-                       String deleteNumber = 
request.getParameter("deleteNumber");
-                       CloudProvider cloudProvider = 
CloudProviderFactory.getCloudProvider();
-                       Cloud cloud = cloudProvider.getCloud();
-                       Node element = cloud.getNode(deleteNumber);
-                       element.delete(true);
-               }
-       }
-
-
-
-   
-
-
    private void saveResponseForm(Cloud cloud, Map<String, String> formfields, 
Node responseForm) {
 
       NodeManager savedFormMgr = cloud.getNodeManager("savedform");
@@ -241,6 +225,7 @@
          if (ServerUtil.isLive()) {
             PublishUtil.publishOrUpdateNode(savedFieldValue);
          }
+
       }
    }
 
@@ -284,6 +269,12 @@
             getLogger().error("error sending email", e);
          }
       }
+      else {
+          getLogger().error("error in mail data: userEmailText = '" + 
userEmailText +"' " +
+                       " userEmailSenderName = '" + userEmailSenderName +"' " +
+                       " userEmailAddress = '" + userEmailAddress +"' " +
+                       " userEmailSenderAddress = '" + userEmailSenderAddress 
+"' ");
+      }
       return sent;
    }
 
@@ -373,6 +364,23 @@
    }
 
 
+   public void processEdit(ActionRequest request, ActionResponse response) 
throws PortletException, IOException {
+      super.processEdit(request, response);
+
+      String action = request.getParameter(ACTION_PARAM);
+      if (action == null) {
+         response.setPortletMode(PortletMode.EDIT);
+      }
+      else if (action.equals("delete")) {
+         String deleteNumber = request.getParameter("deleteNumber");
+         CloudProvider cloudProvider = CloudProviderFactory.getCloudProvider();
+         Cloud cloud = cloudProvider.getCloud();
+         Node element = cloud.getNode(deleteNumber);
+         element.delete(true);
+      }
+   }
+
+
    private DataSource processUserRequest(ActionRequest request, Map<String, 
String> errorMessages,
          Map<String, String> parameterMap) {
       List<FileItem> fileItems = null;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to