2006/unicorn/src/org/w3c/unicorn/action IndexAction.java,1.11,1.12 Action.java,1.3,1.4 ObserveAction.java,1.12,1.13

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

Modified Files:
	IndexAction.java Action.java ObserveAction.java 
Log Message:
done some refactoring

Index: IndexAction.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/IndexAction.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- IndexAction.java	4 Sep 2009 17:59:43 -0000	1.11
+++ IndexAction.java	7 Sep 2009 16:33:49 -0000	1.12
@@ -29,58 +29,25 @@
 	private VelocityContext velocityContext;
 	
 	@Override
-	public void init() throws ServletException {
-		//logger.trace("Init IndexAction");
-		//super.init();
-	}
-	
-	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		
-		if (!Framework.isUcnInitialized) {
-			resp.sendError(500, "Unicorn is not initialized properly. Check logs.");
-			return;
-		}
+		super.doGet(req, resp);
 		
 		resp.setContentType("text/html; charset=UTF-8");
 		
 		ArrayList<Message> messages = new ArrayList<Message>();
+		String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX");
+		String lang = getLanguage(req, messages);
+		String task = getTask(req, lang, null);
+		String queryString = getQueryStringWithout(paramPrefix + "lang", req);
 		
-		// Language negotiation
-		String langParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "lang");
-		if (langParameter == null || !Framework.getLanguageProperties().containsKey(langParameter)) {
-			langParameter = Language.negociate(req.getLocales());
-		}
-		
-		if (!langParameter.equals(req.getLocale().getLanguage())) {
-			messages.add(new Message(Message.Level.INFO, "$message_unavailable_language (" + req.getLocale().getDisplayLanguage(req.getLocale()) + "). $message_translation", null));
-		}
-		
-		if (!Language.isComplete(langParameter))
-			messages.add(new Message(Message.Level.INFO, "$message_incomplete_language. $message_translation", null));
-		
-		velocityContext = new VelocityContext(Language.getContext(langParameter));
-		
-		velocityContext.put("queryString", getQueryStringWithout(Property.get("UNICORN_PARAMETER_PREFIX") + "lang", req));
-		
-		/*String query = req.getQueryString();
-		String queryString;
-		if (query == null) {
-			queryString = "./?";
-		} else {
-			queryString = "?";
-			queryString += query.replaceAll("&?ucn_lang=[^&]*", "");
-			if (!queryString.equals("?"))
-				queryString += "&";
-		}
+		if (req.getAttribute("unicorn_message") != null)
+			messages.add((Message) req.getAttribute("unicorn_message"));
 		
-		/*String query = req.getQueryString();
-		String queryString = "?";
-		if (query != null)
-			queryString += query.replaceAll("&?ucn_lang=[^&]*", "");
-		if (!queryString.equals("?"))
-			queryString += "&";*/
-		//velocityContext.put("queryString", queryString);
+		velocityContext = new VelocityContext(Language.getContext(lang));
+		velocityContext.put("queryString", queryString);
+		velocityContext.put("messages", messages);
+		velocityContext.put("current_task", Framework.mapOfTask.get(task));
 		
 		/*messages.add(new Message(Message.Level.WARNING, "un warning", null));
 		messages.add(new Message(Message.Level.ERROR, "une error", null));
@@ -89,29 +56,7 @@
 		messages.add(new Message(Message.Level.ERROR, "une error avec long message",  "le long message\nle long message\nle long message\nle long message\nle long message\nle long message\n"));
 		messages.add(new Message(Message.Level.INFO, "une info avec long message",  "le long message\nle long message\nle long message\nle long message\nle long message\nle long message\nle long message\n"));*/
 		
-		
-		
-		if (req.getAttribute("unicorn_message") != null)
-			messages.add((Message) req.getAttribute("unicorn_message"));
-		
-		velocityContext.put("messages", messages);
-		
-		String taskParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "task");
-		if (taskParameter == null || !Framework.mapOfTask.containsKey(taskParameter))
-			taskParameter = Framework.mapOfTask.getDefaultTaskId();
-		
-		velocityContext.put("current_task", Framework.mapOfTask.get(taskParameter));
-		
-		
-		
 		if (req.getHeader("X-Requested-With") != null && req.getHeader("X-Requested-With").equals("XMLHttpRequest")) {
-			//for JavaScript testing purposes
-			/*long s = System.currentTimeMillis();
-			long t;
-			do {
-				 t = System.currentTimeMillis();
-			} while ((t - s) < 3000);*/
-			// -----------------
 			Templates.write("parameters.vm", velocityContext, resp.getWriter());
 			resp.getWriter().close();
 		} else {

Index: ObserveAction.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/ObserveAction.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- ObserveAction.java	4 Sep 2009 17:59:43 -0000	1.12
+++ ObserveAction.java	7 Sep 2009 16:33:49 -0000	1.13
@@ -16,7 +16,6 @@
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -27,16 +26,12 @@
 import org.apache.commons.fileupload.servlet.ServletRequestContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.w3c.unicorn.Framework;
 import org.w3c.unicorn.UnicornCall;
 import org.w3c.unicorn.contract.EnumInputMethod;
 import org.w3c.unicorn.exceptions.UnsupportedMimeTypeException;
 import org.w3c.unicorn.output.OutputFactory;
 import org.w3c.unicorn.output.OutputFormater;
 import org.w3c.unicorn.output.OutputModule;
-import org.w3c.unicorn.util.Language;
 import org.w3c.unicorn.util.Message;
 import org.w3c.unicorn.util.Property;
 
@@ -47,274 +42,109 @@
  * @author Jean-Guilhem ROUEL
  */
 public class ObserveAction extends Action {
-
+	
 	private static final long serialVersionUID = -1375355420965607571L;
 	
 	private static Log logger = LogFactory.getLog(ObserveAction.class);
-
+	
 	private static DiskFileItemFactory factory;
-
-	/**
-	 * Creates a new file upload handler.
-	 */
+	
 	private static ServletFileUpload upload;
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see javax.servlet.GenericServlet#init()
-	 */
+	
 	@Override
 	public void init(final ServletConfig aServletConfig) throws ServletException {
 		logger.trace("Init ObserverAction");
-		super.init();
-		
 		factory = new DiskFileItemFactory();
 		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"));
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
-	 *      javax.servlet.http.HttpServletResponse)
-	 */
+	
 	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
 		
-		if (!Framework.isUcnInitialized) {
-			resp.sendError(500, "Unicorn is not initialized properly. Check logs.");
-			return;
-		}
+		super.doGet(req, resp);
 		
 		Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>();
+		Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>();
+		Map<String, String> mapOfOutputParameter = new Hashtable<String, String>();
+		ArrayList<Message> messages = new ArrayList<Message>();
 		
-		ObserveAction.logger.trace("doGet");
-
-		// Language negotiation
-		String langParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "lang");	
-		if (langParameter == null || !Framework.getLanguageProperties().containsKey(langParameter))
-			langParameter = Language.negociate(req.getLocales());
-		
-		logger.debug("Lang Parameter: " + langParameter);
-		
-		// Add query string
-		
+		String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX");
+		String lang = getLanguage(req, null);
+		String task = getTask(req, lang, messages);
+		String queryString = getQueryStringWithout(paramPrefix + "lang", req);
 		
-		String query = req.getQueryString();
-		String queryString;
-		if (query == null) {
-			queryString = "./?";
-		} else {
-			queryString = "?";
-			queryString += query.replaceAll("&?ucn_lang=[^&]*", "");
-			if (!queryString.equals("?"))
-				queryString += "&";
-		}
 		mapOfStringObject.put("queryString", queryString);
+		mapOfStringObject.put("messages", messages);
 		
-		
-		// Variables related to the output
-		final Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>();
-		final Map<String, String> mapOfOutputParameter = new Hashtable<String, String>();
 		mapOfOutputParameter.put("output", "simple");
 		mapOfOutputParameter.put("format", "xhtml10");
 		mapOfOutputParameter.put("charset", "UTF-8");
 		mapOfOutputParameter.put("mimetype", "text/html");
-		mapOfOutputParameter.put("lang", langParameter);
-		
-		final UnicornCall aUnicornCall = new UnicornCall();
-		final String aLocale = convertEnumerationToString(req.getLocales());
-		if (null == aLocale) {
-			aUnicornCall.setLang(langParameter + "," + Property.get("DEFAULT_LANGUAGE"));
-		} else {
-			aUnicornCall.setLang(langParameter + "," + aLocale);
-		}
-
-		
-		for (final Enumeration<?> aEnumParamName = req
-				.getParameterNames(); aEnumParamName.hasMoreElements();) {
-			final String sParamName = (String) aEnumParamName.nextElement();
-			final String[] tStringParamValue = req
-					.getParameterValues(sParamName);
-
-			this.addParameter(sParamName, tStringParamValue, aUnicornCall,
-					mapOfSpecificParameter, mapOfOutputParameter);
-		}
-		
-		if (aUnicornCall.getTask() == null) {
-			aUnicornCall.setTask(Framework.mapOfTask.getDefaultTaskId());
-			Message mess = new Message(Message.Level.WARNING, "$message_no_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(langParameter), null);
-			ArrayList<Message> messages = new ArrayList<Message>();
-			messages.add(mess);
-			mapOfStringObject.put("messages", messages);
-		}
-
-		/*if (aUnicornCall.getTask() == null) {
-			ObserveAction.logger.error("No task selected.");
-			this.createError(resp, new NoTaskException(),
-					mapOfSpecificParameter, mapOfOutputParameter);
-			return;
-		}*/
-		
-		
-		try {
-			aUnicornCall.doTask();
-
-			this.createOutput(resp, aUnicornCall,
-					mapOfSpecificParameter, mapOfOutputParameter, mapOfStringObject);
-		} catch (final UnsupportedMimeTypeException aException) {
-			if (mapOfOutputParameter.get("mimetype").equals("text/html")) {
-				Message mess = new Message(Message.Level.ERROR, "$message_unsupported_mime_type", null);
-				req.setAttribute("unicorn_message", mess);
-				(new IndexAction()).doGet(req, resp);
-				
-			}
-		} catch (final Exception aException) {
-			ObserveAction.logger.error("Exception : " + aException.getMessage(),
-					aException);
-			
-			if (mapOfOutputParameter.get("mimetype").equals("text/html")) {
-				String errorContent = "";
-				errorContent += aException.getMessage() + "\n";
-				for (StackTraceElement stackTraceElement : aException.getStackTrace()) {
-					errorContent += stackTraceElement.toString() + "\n";
-				}
-				Message mess = new Message(Message.Level.ERROR, "$stack_trace_text", errorContent);
-				req.setAttribute("unicorn_message", mess);
-				(new IndexAction()).doGet(req, resp);
-				
-			} else {
-				this.createError(resp, aException, mapOfSpecificParameter, mapOfOutputParameter);
-			}
-			
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
-	 *      javax.servlet.http.HttpServletResponse)
-	 */
-	@Override
-	protected void doPost(final HttpServletRequest req,
-			final HttpServletResponse resp)
-			throws ServletException, IOException {
-		ObserveAction.logger.trace("doPost");
+		mapOfOutputParameter.put("lang", lang);
 		
-		Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>();
+		UnicornCall aUnicornCall = new UnicornCall();
+		String aLocale = convertEnumerationToString(req.getLocales());
+		if (null == aLocale)
+			aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE"));
+		else
+			aUnicornCall.setLang(lang + "," + aLocale);
 		
-		// Check that we have a file upload request
-		final boolean bIsMultipart = ServletFileUpload.isMultipartContent(new ServletRequestContext(req));
-
-		if (!bIsMultipart) {
-			this.doGet(req, resp);
-			return;
+		for (Object param : req.getParameterMap().keySet()) {
+			String sParamName = (String) param;
+			String[] tStringParamValue = req.getParameterValues(sParamName);
+			addParameter(sParamName, tStringParamValue, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
 		}
 		
-		// Language negotiation
-		String langParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "lang");
-		if (langParameter == null || !Framework.getLanguageProperties().containsKey(langParameter))
-			langParameter = Language.negociate(req.getLocales());
-		
-		//String query = req.getQueryString();
-		String queryString = "./?";
-		//if (query != null)
-		//	queryString += query.replaceAll("&?ucn_lang=[^&]*", "");
-		//if (!queryString.equals("?"))
-		//	queryString += "&";
-		mapOfStringObject.put("queryString", queryString);
-		
-		
-		// Variables related to the output
-		final Map<String, String> mapOfOutputParameter = new Hashtable<String, String>();
-		mapOfOutputParameter.put("output", "simple");
-		mapOfOutputParameter.put("format", "xhtml10");
-		mapOfOutputParameter.put("charset", "UTF-8");
-		mapOfOutputParameter.put("mimetype", "text/html");
-		mapOfOutputParameter.put("lang", langParameter);
-		
-		final UnicornCall aUnicornCall = new UnicornCall();
-		final String aLocale = convertEnumerationToString(req.getLocales());
-		if (null == aLocale) {
-			aUnicornCall.setLang(langParameter + "," + Property.get("DEFAULT_LANGUAGE"));
-		} else {
-			aUnicornCall.setLang(langParameter + "," + aLocale);
-		}
+		addParameter(paramPrefix+ "task", task, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
 		
-		// Parse the request
-		final List<?> listOfItem;
-
-		ObserveAction.logger.trace("doPost");
-
-		final Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>();
-
+		// POST operations
 		FileItem aFileItemUploaded = null;
-
-		try {
-			listOfItem = ObserveAction.upload.parseRequest(req);
-
-			// Process the uploaded items
-			for (final Iterator<?> aIterator = listOfItem.iterator(); aIterator
-					.hasNext();) {
-				final FileItem aFileItem = (FileItem) aIterator.next();
-				if (aFileItem.isFormField()) {
-
-					addParameter(aFileItem.getFieldName(), aFileItem
-							.getString(), aUnicornCall, mapOfSpecificParameter,
-							mapOfOutputParameter);
-
-				} else if (aFileItem.getFieldName().equals(
-						Property.get("UNICORN_PARAMETER_PREFIX") + "file")) {
-					aFileItemUploaded = aFileItem;
-					aUnicornCall.setDocumentName(aFileItemUploaded.getName());
-					aUnicornCall.setInputParameterValue(aFileItemUploaded);
-					aUnicornCall.setEnumInputMethod(EnumInputMethod.UPLOAD);
+		if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) {
+			messages.clear();
+			try {
+				List<?> listOfItem = upload.parseRequest(req);
+				// Process the uploaded items
+				for (Iterator<?> aIterator = listOfItem.iterator(); aIterator.hasNext();) {
+					FileItem aFileItem = (FileItem) aIterator.next();
+					logger.error("TOM: " + aFileItem);
+					if (aFileItem.isFormField()) {
+						addParameter(aFileItem.getFieldName(), aFileItem.getString(),
+								aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
+					} else if (aFileItem.getFieldName().equals(paramPrefix + "file")) {
+						aFileItemUploaded = aFileItem;
+						aUnicornCall.setDocumentName(aFileItemUploaded.getName());
+						aUnicornCall.setInputParameterValue(aFileItemUploaded);
+						aUnicornCall.setEnumInputMethod(EnumInputMethod.UPLOAD);
+						break;
+					}
 				}
+			} catch (final FileUploadException aFileUploadException) {
+				logger.error("FileUploadException : " + aFileUploadException.getMessage(), aFileUploadException);
+				//TODO
+				Message mess = new Message();
+				createError(req, resp, mess,mapOfSpecificParameter, mapOfOutputParameter);
 			}
 		}
-
-		catch (final FileUploadException aFileUploadException) {
-			ObserveAction.logger.error("FileUploadException : "
-					+ aFileUploadException.getMessage(), aFileUploadException);
-			this.createError(resp, aFileUploadException,
-					mapOfSpecificParameter, mapOfOutputParameter);
-		}
-
-		if (aUnicornCall.getTask() == null) {
-			aUnicornCall.setTask(Framework.mapOfTask.getDefaultTaskId());
-			Message mess = new Message(Message.Level.WARNING, "$message_no_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(langParameter), null);
-			ArrayList<Message> messages = new ArrayList<Message>();
-			messages.add(mess);
-			mapOfStringObject.put("messages", messages);
-		}
 		
 		try {
 			aUnicornCall.doTask();
-
-			this.createOutput(resp, aUnicornCall,
-					mapOfSpecificParameter, mapOfOutputParameter, mapOfStringObject);
+			createOutput(req, resp, mapOfStringObject, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter);
 		} catch (final UnsupportedMimeTypeException aException) {
-			if (mapOfOutputParameter.get("mimetype").equals("text/html")) {
-				Message mess = new Message(Message.Level.ERROR, "$message_unsupported_mime_type", null);
-				req.setAttribute("unicorn_message", mess);
-				(new IndexAction()).doGet(req, resp);
-				
-			}
+			Message mess = new Message(Message.Level.ERROR, "$message_unsupported_mime_type", null);
+			createError(req, resp, mess, mapOfSpecificParameter, mapOfOutputParameter);
 		} catch (final Exception aException) {
-			ObserveAction.logger.error("Exception : " + aException.getMessage(),
-					aException);
+			logger.error("Exception : " + aException.getMessage(), aException);
 			
-			if (mapOfOutputParameter.get("format").equals("xhtml10")) {
-				(new IndexAction()).doGet(req, resp);
-			} else {
-				this.createError(resp, aException, mapOfSpecificParameter, mapOfOutputParameter);
+			String errorContent = "";
+			errorContent += aException.getMessage() + "\n";
+			for (StackTraceElement stackTraceElement : aException.getStackTrace()) {
+				errorContent += stackTraceElement.toString() + "\n";
 			}
-			
+			Message mess = new Message(Message.Level.ERROR, "$stack_trace_text", errorContent);
+			createError(req, resp, mess, mapOfSpecificParameter, mapOfOutputParameter);
 		} finally {
 			if ("true".equals(Property.get("DELETE_UPLOADED_FILES"))
 					&& aFileItemUploaded != null
@@ -324,6 +154,12 @@
 		}
 	}
 
+	@Override
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		doGet(req, resp);
+	}
+
 	/**
 	 * Adds a parameter at the correct call.
 	 * 
@@ -369,11 +205,6 @@
 			return;
 		}
 
-		// Unicorn parameter
-		// TODO: Why is it here?
-		sParamName = sParamName.substring(Property.get(
-				"UNICORN_PARAMETER_PREFIX").length());
-
 		// Output specific parameter
 		if (sParamName.startsWith(Property
 				.get("UNICORN_PARAMETER_OUTPUT_PREFIX"))) {
@@ -382,6 +213,11 @@
 			mapOfSpecificParameter.put(sParamName, tStringParamValue);
 			return;
 		}
+		
+		// Unicorn parameter
+		// TODO: Why is it here?
+		sParamName = sParamName.substring(Property.get(
+				"UNICORN_PARAMETER_PREFIX").length());
 
 		if (sParamName.equals("lang")) {
 			aUnicornCall.addParameter(Property.get("UNICORN_PARAMETER_PREFIX")
@@ -394,7 +230,6 @@
 			aUnicornCall.setTask(tStringParamValue[0]);
 		} else if (sParamName.equals("uri")) {
 			aUnicornCall.setEnumInputMethod(EnumInputMethod.URI);
-			// TODO First check that tStringParamValue[0] is at least 7 characters long
 			if (tStringParamValue[0].length() < 7 || !tStringParamValue[0].substring(0, 7).equals("http://")) {
 				ObserveAction.logger.info("URI missing protocol : "
 						+ tStringParamValue[0]);
@@ -403,8 +238,6 @@
 						+ tStringParamValue[0]);
 			}
 			
-			
-
 			aUnicornCall.setDocumentName(tStringParamValue[0]);
 			aUnicornCall.setInputParameterValue(tStringParamValue[0]);
 		} else if (sParamName.equals("text")) {
@@ -422,88 +255,46 @@
 		}
 	}
 
-	private void createError(final HttpServletResponse aHttpServletResponse,
-			final Exception aExceptionError,
-			final Map<String, String[]> mapOfSpecificParameter,
-			final Map<String, String> mapOfOutputParameter) throws IOException {
-		aHttpServletResponse.setContentType(mapOfOutputParameter
-				.get("mimetype")
-				+ "; charset=" + mapOfOutputParameter.get("charset"));
-
-		try {
-			final OutputFormater aOutputFormater = OutputFactory
-					.createOutputFormater(mapOfOutputParameter.get("format"),
-							mapOfOutputParameter.get("lang"),
-							mapOfOutputParameter.get("mimetype"));
-			final OutputModule aOutputModule = OutputFactory
-					.createOutputModule(mapOfOutputParameter.get("output"));
-			aOutputModule.produceError(aOutputFormater, aExceptionError,
-					mapOfSpecificParameter, aHttpServletResponse.getWriter());
-		} catch (final ResourceNotFoundException e) {
-			ObserveAction.logger.error("ResourceNotFoundException : "
-					+ e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
-		} catch (final ParseErrorException e) {
-			ObserveAction.logger.error(
-					"ParseErrorException : " + e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
-		} catch (final Exception e) {
-			ObserveAction.logger.error("Exception : " + e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
+	private void createError(HttpServletRequest req, HttpServletResponse resp,
+			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
+		if (mapOfOutputParameter.get("mimetype").equals("text/html")) {
+			req.setAttribute("unicorn_message", mess);
+			(new IndexAction()).doGet(req, resp);
+			return;
 		}
+		
+		resp.setContentType(mapOfOutputParameter.get("mimetype") + "; charset=" + mapOfOutputParameter.get("charset"));
+		OutputFormater aOutputFormater = OutputFactory
+			.createOutputFormater(mapOfOutputParameter.get("format"),
+								  mapOfOutputParameter.get("lang"),
+								  mapOfOutputParameter.get("mimetype"));
+		OutputModule aOutputModule = OutputFactory.createOutputModule(mapOfOutputParameter.get("output"));
+		aOutputModule.produceError(aOutputFormater, mess, mapOfSpecificParameter, resp.getWriter());
 	}
 
-	private void createOutput(final HttpServletResponse aHttpServletResponse,
-			final UnicornCall aUnicornCall,
-			final Map<String, String[]> mapOfSpecificParameter,
-			final Map<String, String> mapOfOutputParameter,
-			Map<String, Object> mapOfStringObject) throws IOException {
-		aHttpServletResponse.setContentType(mapOfOutputParameter
-				.get("mimetype")
-				+ "; charset=" + mapOfOutputParameter.get("charset"));
-		try {
-			//Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>();
-			mapOfStringObject.put("unicorncall", aUnicornCall);
+	private void createOutput(HttpServletRequest req, HttpServletResponse resp,
+			Map<String, Object> mapOfStringObject, UnicornCall aUnicornCall,
+			Map<String, String[]> mapOfSpecificParameter, Map<String, String> mapOfOutputParameter) throws IOException {
+		
+		resp.setContentType(mapOfOutputParameter.get("mimetype") + "; charset=" + mapOfOutputParameter.get("charset"));
 
-			logger.debug("Request output formater with parameters: " 
-					+ mapOfOutputParameter.get("format") + " "
-					+ mapOfOutputParameter.get("lang") + " "
-					+ mapOfOutputParameter.get("mimetype"));
-			
-			final OutputFormater aOutputFormater = OutputFactory
-					.createOutputFormater(mapOfOutputParameter.get("format"),
-							mapOfOutputParameter.get("lang"),
-							mapOfOutputParameter.get("mimetype"));
-			final OutputModule aOutputModule = OutputFactory
-					.createOutputModule(mapOfOutputParameter.get("output"));
-			aOutputModule.produceOutput(aOutputFormater, mapOfStringObject,
-					mapOfSpecificParameter, aHttpServletResponse.getWriter());
-		}
+		mapOfStringObject.put("unicorncall", aUnicornCall);
 
-		catch (final ResourceNotFoundException e) {
-			ObserveAction.logger.error("ResourceNotFoundException : "
-					+ e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
-		} catch (final ParseErrorException e) {
-			ObserveAction.logger.error(
-					"ParseErrorException : " + e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
-		} catch (final Exception e) {
-			ObserveAction.logger.error("Exception : " + e.getMessage(), e);
-			aHttpServletResponse.getWriter().println("<pre>");
-			e.printStackTrace(aHttpServletResponse.getWriter());
-			aHttpServletResponse.getWriter().println("</pre>");
-		}
+		logger.debug("Request output formater with parameters: " 
+				+ mapOfOutputParameter.get("format") + " "
+				+ mapOfOutputParameter.get("lang") + " "
+				+ mapOfOutputParameter.get("mimetype"));
+		
+		OutputFormater aOutputFormater = OutputFactory
+				.createOutputFormater(mapOfOutputParameter.get("format"),
+									  mapOfOutputParameter.get("lang"),
+									  mapOfOutputParameter.get("mimetype"));
+		OutputModule aOutputModule = OutputFactory
+				.createOutputModule(mapOfOutputParameter.get("output"));
+		aOutputModule.produceOutput(aOutputFormater, mapOfStringObject, mapOfSpecificParameter, resp.getWriter());
 	}
 
 	/**

Index: Action.java
===================================================================
RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/Action.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- Action.java	4 Sep 2009 17:59:43 -0000	1.3
+++ Action.java	7 Sep 2009 16:33:49 -0000	1.4
@@ -1,7 +1,6 @@
 package org.w3c.unicorn.action;
 
 import java.io.IOException;
-import java.net.URLConnection;
 import java.util.ArrayList;
 
 import javax.servlet.ServletException;
@@ -9,6 +8,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.w3c.unicorn.Framework;
 import org.w3c.unicorn.util.Language;
 import org.w3c.unicorn.util.Message;
@@ -16,7 +17,9 @@
 
 public abstract class Action extends HttpServlet {
 	
-	private static final long serialVersionUID = 1L;
+	private static final long serialVersionUID = -7503310240481494239L;
+	
+	private static Log logger = LogFactory.getLog(Action.class);
 	
 	@Override
 	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
@@ -26,22 +29,12 @@
 			resp.sendError(500, "Unicorn is not initialized properly. Check logs.");
 			return;
 		}
-		
-		ArrayList<Message> messages = new ArrayList<Message>();
-		
-		String langParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "lang");
-		if (langParameter == null || !Framework.getLanguageProperties().containsKey(langParameter))
-			langParameter = Language.negociate(req.getLocales());
-		
-		if (!langParameter.equals(req.getLocale().getLanguage()))
-			messages.add(new Message(Message.Level.INFO, "$message_unavailable_language (" + req.getLocale().getDisplayLanguage(req.getLocale()) + "). $message_translation", null));
-		
-		if (!Language.isComplete(langParameter))
-			messages.add(new Message(Message.Level.INFO, "$message_incomplete_language. $message_translation", null));
-		
-		
-		
-		
+	}
+
+	@Override
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		doGet(req, resp);
 	}
 
 	protected String getQueryStringWithout(String parameterName, HttpServletRequest req) {
@@ -57,20 +50,49 @@
 		}
 		return queryString;
 	}
-
-	@Override
-	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
-			throws ServletException, IOException {
-		// TODO Auto-generated method stub
-		super.doPost(req, resp);
+	
+	public String getLanguage(HttpServletRequest req, ArrayList<Message> messages) {
+		
+		String langParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "lang");
+		String lang;
+		if (langParameter == null || !Framework.getLanguageProperties().containsKey(langParameter))
+			lang = Language.negociate(req.getLocales());
+		else
+			lang = langParameter;
+		
+		if (messages == null)
+			return lang;
+		
+		if (!Language.isComplete(lang))
+			messages.add(new Message(Message.Level.INFO, "$message_incomplete_language. $message_translation", null));
+		else if (!Framework.getLanguageProperties().containsKey(req.getLocale().getLanguage()) && Property.get("SHOW_LANGUAGE_UNAVAILABLE_MESSAGE") == "true")
+			messages.add(new Message(Message.Level.INFO, "$message_unavailable_language (" + req.getLocale().getDisplayLanguage(req.getLocale()) + "). $message_translation", null));
+		
+		return lang;
 	}
 
-	@Override
-	public void init() throws ServletException {
-		// TODO Auto-generated method stub
-		super.init();
+	public String getTask(HttpServletRequest req, String lang, ArrayList<Message> messages) {
+		
+		String taskParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "task");
+		String task;
+		if (taskParameter == null || !Framework.mapOfTask.containsKey(taskParameter))
+			task = Framework.mapOfTask.getDefaultTaskId();
+		else
+			task = taskParameter;
+			
+		if (messages == null)
+			return task;
+		
+		if (taskParameter == null) {
+			Message mess = new Message(Message.Level.WARNING, "$message_no_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).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);
+			messages.add(mess);
+		}
+		
+		return task;
 	}
 	
-	
-
 }

Received on Monday, 7 September 2009 16:34:01 UTC