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