2006/unicorn/src/org/w3c/unicorn/action IndexAction.java,1.13,1.14 Action.java,1.5,1.6 ObserveAction.java,1.14,1.15

Update of /sources/public/2006/unicorn/src/org/w3c/unicorn/action
In directory hutz:/tmp/cvs-serv17777/src/org/w3c/unicorn/action

Modified Files:
	IndexAction.java Action.java ObserveAction.java 
Log Message:
changed signature of method getTask() to be language independent
+ added some verifications on request parameters
+ refactored some more

Index: IndexAction.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/IndexAction.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- IndexAction.java	7 Sep 2009 17:35:20 -0000	1.13
+++ IndexAction.java	8 Sep 2009 14:23:33 -0000	1.14
@@ -38,7 +38,7 @@
 		ArrayList<Message> messages = new ArrayList<Message>();
 		String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX");
 		String lang = getLanguage(req.getParameter(paramPrefix + "lang"), req, messages);
-		String task = getTask(req.getParameter(paramPrefix + "task"), lang, null);
+		String task = getTask(req.getParameter(paramPrefix + "task"), null);
 		String queryString = getQueryStringWithout(paramPrefix + "lang", req);
 		
 		if (req.getAttribute("unicorn_message") != null)

Index: ObserveAction.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/ObserveAction.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- ObserveAction.java	7 Sep 2009 17:35:21 -0000	1.14
+++ ObserveAction.java	8 Sep 2009 14:23:33 -0000	1.15
@@ -9,7 +9,6 @@
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -34,10 +33,10 @@
 import org.w3c.unicorn.output.OutputModule;
 import org.w3c.unicorn.util.Message;
 import org.w3c.unicorn.util.Property;
+import org.w3c.unicorn.Framework;
 
 /**
- * FirstServlet<br />
- * Created: Jun 26, 2006 2:04:11 PM<br />
+ * ObserveAction
  * 
  * @author Jean-Guilhem ROUEL
  */
@@ -51,6 +50,8 @@
 	
 	private static ServletFileUpload upload;
 	
+	private static ArrayList<String> outputParams;
+	
 	@Override
 	public void init(final ServletConfig aServletConfig) throws ServletException {
 		logger.trace("Init ObserverAction");
@@ -58,14 +59,20 @@
 		factory.setRepository(new File(Property.get("UPLOADED_FILES_REPOSITORY")));
 		upload = new ServletFileUpload(factory);
 		logger.debug("Created a ServletFileUpload with repository set to: " + Property.get("UPLOADED_FILES_REPOSITORY"));
+		
+		outputParams = new ArrayList<String>();
+		outputParams.add("output");
+		outputParams.add("format");
+		outputParams.add("charset");
+		outputParams.add("mimetype");
+		outputParams.add("lang");
 	}
 	
 	private Map<String, Object> getRequestParameters(HttpServletRequest req) throws FileUploadException {
 		
 		Hashtable<String, Object> params = new Hashtable<String, Object>();
-			
+		
 		if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) {
-
 			List<?> listOfItem = upload.parseRequest(req);
 			for (Object fileItem : listOfItem) {
 				FileItem aFileItem = (FileItem) fileItem;
@@ -73,17 +80,27 @@
 					params.put(aFileItem.getFieldName(), aFileItem.getString());
 				} else if (aFileItem.getFieldName().equals(Property.get("UNICORN_PARAMETER_PREFIX") + "file")) {
 					params.put(aFileItem.getFieldName(), aFileItem);
+				} else {
+					// TODO log "unknown fileItem, ignored"
 				}
 			}
-			
-			return params;
+		} else {
+			Enumeration<?> paramEnum = req.getParameterNames();
+			while (paramEnum.hasMoreElements()) {
+				
+				Object key = paramEnum.nextElement();
+				logger.debug("TOM: " + key);
+				params.put(key.toString(), req.getParameter(key.toString()));
+			}
 		}
 		
-		for (Object key : req.getParameterMap().keySet()) {
-			params.put(key.toString(), req.getParameter(key.toString()));
+		String s = "Parameters: ";
+		for (String key : params.keySet()) {
+			s += "\n\t" + key + " - " + params.get(key);
 		}
-		return params;
+		logger.debug(s);
 		
+		return params;
 	}
 	
 	@Override
@@ -92,16 +109,24 @@
 		
 		super.doGet(req, resp);
 		
+		Map<String, Object> reqParams;
+		try {
+			reqParams = getRequestParameters(req);
+		} catch (FileUploadException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+			return;
+		}
+		
+		FileItem aFileItemUploaded = null;
 		Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>();
-		Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>();
+		Map<String, String> mapOfSpecificParameter = new Hashtable<String, String>();
 		Map<String, String> mapOfOutputParameter = new Hashtable<String, String>();
 		ArrayList<Message> messages = new ArrayList<Message>();
-		
-		//Map<String, String> reqParameters = getRequestParameters(req);
+		UnicornCall aUnicornCall = new UnicornCall();
 		
 		String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX");
-		String lang = getLanguage(req.getParameter(paramPrefix + "lang"), req, null);
-		String task = getTask(req.getParameter(paramPrefix + "task"), lang, messages);
+		String outParamPrefix = Property.get("UNICORN_PARAMETER_OUTPUT_PREFIX");
 		String queryString = getQueryStringWithout(paramPrefix + "lang", req);
 		
 		mapOfStringObject.put("queryString", queryString);
@@ -111,26 +136,123 @@
 		mapOfOutputParameter.put("format", "xhtml10");
 		mapOfOutputParameter.put("charset", "UTF-8");
 		mapOfOutputParameter.put("mimetype", "text/html");
-		mapOfOutputParameter.put("lang", lang);
 		
-		UnicornCall aUnicornCall = new UnicornCall();
-		String aLocale = convertEnumerationToString(req.getLocales());
-		if (null == aLocale)
-			aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE"));
-		else
-			aUnicornCall.setLang(lang + "," + aLocale);
+		for (String key : reqParams.keySet()) {
+			if (!key.startsWith(paramPrefix) && !key.startsWith(outParamPrefix)) {
+				logger.debug("UnicornCall parameter: " + key + " - " + (String) reqParams.get(key));
+				aUnicornCall.addParameter(key, (String) reqParams.get(key)); 
+				continue;
+			}
+			
+			if (key.startsWith(outParamPrefix)) {
+				logger.debug("Specific parameter: " + key + " - " + (String) reqParams.get(key));
+				String paramName = key.substring(outParamPrefix.length());
+				mapOfSpecificParameter.put(paramName, (String) reqParams.get(key));
+				continue;
+			}
+			
+			if (key.startsWith(paramPrefix)) {
+				String paramName = key.substring(paramPrefix.length());
+				
+				if (paramName.equals("lang")) {
+					logger.debug("Lang parameter: " + key + " - " + (String) reqParams.get(key));
+					String lang = getLanguage((String) reqParams.get(key), req, null);
+					mapOfOutputParameter.put(paramName, lang);
+					String aLocale = convertEnumerationToString(req.getLocales());		
+					if (null == aLocale)
+						aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE"));
+					else
+						aUnicornCall.setLang(lang + "," + aLocale);
+					if (!lang.equals(reqParams.get(key))) {
+						logger.debug("Lang parameter unsupported. Resolved to: " + lang);
+					}
+				} else if (paramName.equals("task")) {
+					logger.debug("Task parameter: " + key + " - " + (String) reqParams.get(key));
+					String task = getTask((String) reqParams.get(key), messages);
+					if (!task.equals(reqParams.get(key))) {
+						mapOfStringObject.put("default_task", Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()));
+						logger.debug("Task parameter unsupported. Resolved to: " + task);
+					}
+					aUnicornCall.setTask(task);
+				} else if (outputParams.contains(paramName)) {
+					logger.debug("Output parameter: " + key + " - " + (String) reqParams.get(key));
+					mapOfOutputParameter.put(paramName, (String) reqParams.get(key));
+					continue;
+				} else if (paramName.equals("uri")) {
+					logger.debug("Uri parameter: " + key + " - " + (String) reqParams.get(key));
+					aUnicornCall.setEnumInputMethod(EnumInputMethod.URI);
+					String uri = (String) reqParams.get(key);
+					if (uri.length() < 7 || !uri.substring(0, 7).equals("http://")) {
+						uri = "http://" + uri;
+					}
+					aUnicornCall.setDocumentName(uri);
+					aUnicornCall.setInputParameterValue(uri);
+				} else if (paramName.equals("text")) {
+					logger.debug("Text parameter: " + key + " - " + (String) reqParams.get(key));
+					aUnicornCall.setEnumInputMethod(EnumInputMethod.DIRECT);
+					aUnicornCall.setInputParameterValue((String) reqParams.get(key));
+				} else if (paramName.equals("file")) {
+					logger.debug("File parameter: " + key + " - " + reqParams.get(key).toString());
+					Object object = reqParams.get(key);
+					if (object instanceof FileItem) {
+						aFileItemUploaded = (FileItem) object;
+						aUnicornCall.setDocumentName(aFileItemUploaded.getName());
+						aUnicornCall.setInputParameterValue(aFileItemUploaded);
+						aUnicornCall.setEnumInputMethod(EnumInputMethod.UPLOAD);
+					} else {
+						// TODO log "ucn_file not an instance of FileItem ?"
+					}
+				} else {
+					logger.debug("Unknown parameter: " + key + " - " + (String) reqParams.get(key));
+					// TODO Warn that there is an unknown parameter which is added to unicornCall by default
+					aUnicornCall.addParameter(paramName, (String) reqParams.get(key));
+				}
+			}
+		}
 		
-		for (Object param : req.getParameterMap().keySet()) {
+		if (!reqParams.containsKey(paramPrefix + "lang")) {
+			String lang = getLanguage(null, req, null);
+			reqParams.put(paramPrefix + "lang", getLanguage(null, req, null));
+			logger.debug("No language parameter found. Language negociation resolved language to: " + lang);
+			mapOfOutputParameter.put("lang", lang);
+			String aLocale = convertEnumerationToString(req.getLocales());		
+			if (null == aLocale)
+				aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE"));
+			else
+				aUnicornCall.setLang(lang + "," + aLocale);
+		}
+		
+		if (!reqParams.containsKey(paramPrefix + "task")) {
+			String task = getTask(null, messages);
+			reqParams.put(paramPrefix + "task", task);
+			logger.debug("No task parameter found. Task parameter is set to task id: " + task);
+			mapOfStringObject.put("default_task", Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()));
+			aUnicornCall.setTask(task);
+		}
+		
+		if (reqParams.containsKey(paramPrefix + "uri")) {
+			//TODO vérifier que n'est pas vide
+		} else if (reqParams.containsKey(paramPrefix + "text")) {
+			//TODO vérifier que n'est pas vide + vérifier présence de ucn_text_mime
+		} else if (reqParams.containsKey(paramPrefix + "file")) {
+			//TODO vérifier que n'est pas vide
+		} else {
+			//TODO aucun des 3 paramètres n'est présent -> erreur
+		}
+		
+		
+		
+		/*for (Object param : req.getParameterMap().keySet()) {
 			String sParamName = (String) param;
 			String[] tStringParamValue = req.getParameterValues(sParamName);
 			addParameter(sParamName, tStringParamValue, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
-		}
+		}*/
 		
-		addParameter(paramPrefix+ "task", task, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
+		//addParameter(paramPrefix+ "task", task, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
 		
 		// POST operations
-		FileItem aFileItemUploaded = null;
-		if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) {
+		//FileItem aFileItemUploaded = null;
+		/*if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) {
 			messages.clear();
 			try {
 				List<?> listOfItem = upload.parseRequest(req);
@@ -153,7 +275,7 @@
 				Message mess = new Message();
 				createError(req, resp, mess,mapOfSpecificParameter, mapOfOutputParameter);
 			}
-		}
+		}*/
 		
 		try {
 			aUnicornCall.doTask();
@@ -173,8 +295,7 @@
 			createError(req, resp, mess, mapOfSpecificParameter, mapOfOutputParameter);
 		} finally {
 			if ("true".equals(Property.get("DELETE_UPLOADED_FILES"))
-					&& aFileItemUploaded != null
-					&& aFileItemUploaded instanceof FileItem) {
+					&& aFileItemUploaded != null) {
 				aFileItemUploaded.delete();
 			}
 		}
@@ -197,9 +318,9 @@
 	 * @param mapOfSpecificParameter
 	 * @param mapOfOutputParameter
 	 */
-	private void addParameter(final String sParamName,
+	/*private void addParameter(final String sParamName,
 			final String sParamValue, final UnicornCall aUnicornCall,
-			final Map<String, String[]> mapOfSpecificParameter,
+			final Map<String, String> mapOfSpecificParameter,
 			final Map<String, String> mapOfOutputParameter) {
 		final String[] tStringValues = { sParamValue };
 		this.addParameter(sParamName, tStringValues, aUnicornCall,
@@ -214,9 +335,9 @@
 	 * @param mapOfSpecificParameter
 	 * @param mapOfOutputParameter
 	 */
-	private void addParameter(String sParamName,
+	/*private void addParameter(String sParamName,
 			final String[] tStringParamValue, final UnicornCall aUnicornCall,
-			final Map<String, String[]> mapOfSpecificParameter,
+			final Map<String, String> mapOfSpecificParameter,
 			final Map<String, String> mapOfOutputParameter) {
 
 		if (null == tStringParamValue || 0 == tStringParamValue.length) {
@@ -279,10 +400,10 @@
 			aUnicornCall.addParameter(Property.get("UNICORN_PARAMETER_PREFIX")
 					+ "mime", tStringParamValue);
 		}
-	}
+	}*/
 
 	private void createError(HttpServletRequest req, HttpServletResponse resp,
-			Message mess, Map<String, String[]> mapOfSpecificParameter,
+			Message mess, Map<String, String> mapOfSpecificParameter,
 			Map<String, String> mapOfOutputParameter) throws IOException, ServletException {
 		
 		// If text/html is the mime-type the error will be displayed directly on index
@@ -303,7 +424,7 @@
 
 	private void createOutput(HttpServletRequest req, HttpServletResponse resp,
 			Map<String, Object> mapOfStringObject, UnicornCall aUnicornCall,
-			Map<String, String[]> mapOfSpecificParameter, Map<String, String> mapOfOutputParameter) throws IOException {
+			Map<String, String> mapOfSpecificParameter, Map<String, String> mapOfOutputParameter) throws IOException {
 		
 		resp.setContentType(mapOfOutputParameter.get("mimetype") + "; charset=" + mapOfOutputParameter.get("charset"));
 

Index: Action.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/Action.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- Action.java	7 Sep 2009 17:35:21 -0000	1.5
+++ Action.java	8 Sep 2009 14:23:33 -0000	1.6
@@ -73,7 +73,7 @@
 		return lang;
 	}
 
-	public String getTask(String taskParameter, String lang, ArrayList<Message> messages) {
+	public String getTask(String taskParameter, ArrayList<Message> messages) {
 		
 		//String taskParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "task");
 		String task;
@@ -86,11 +86,11 @@
 			return task;
 		
 		if (taskParameter == null) {
-			Message mess = new Message(Message.Level.WARNING, "$message_no_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(lang), null);
+			Message mess = new Message(Message.Level.WARNING, "$message_no_task " + "$default_task.getLongName($lang) ", null);
 			messages.add(mess);
 		} else if (!Framework.mapOfTask.containsKey(taskParameter)) {
 			System.out.println(taskParameter);
-			Message mess = new Message(Message.Level.WARNING, "$message_unknown_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(lang), null);
+			Message mess = new Message(Message.Level.WARNING, "$message_unknown_task " + "$default_task.getLongName($lang) ", null);
 			messages.add(mess);
 		}
 		

Received on Tuesday, 8 September 2009 14:23:46 UTC