- From: Thomas Gambet via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 12 Aug 2009 13:15:23 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2006/unicorn/src/org/w3c/unicorn/action In directory hutz:/tmp/cvs-serv22119/src/org/w3c/unicorn/action Modified Files: Tag: dev2 IndexAction.java ObserveAction.java Added Files: Tag: dev2 InitAction.java Log Message: All initialization actions moved to Framework.java Index: IndexAction.java =================================================================== RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/Attic/IndexAction.java,v retrieving revision 1.1.2.5 retrieving revision 1.1.2.6 diff -u -d -r1.1.2.5 -r1.1.2.6 --- IndexAction.java 11 Aug 2009 16:05:42 -0000 1.1.2.5 +++ IndexAction.java 12 Aug 2009 13:15:21 -0000 1.1.2.6 @@ -34,6 +34,7 @@ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { templateList.clear(); + resp.setContentType("text/html"); // Language negotiation String langParameter = req.getParameter("lang"); @@ -57,8 +58,10 @@ } }*/ + + // Is response cached ? - File cachedIndex = new File(Property.get("PATH_TO_CACHE") + "index/index." + lang + ".html"); + /*File cachedIndex = new File(Property.get("PATH_TO_CACHE") + "index/index." + lang + ".html"); logger.info(cachedIndex.getPath()); logger.info("exists ?"+cachedIndex.exists()); if (cachedIndex.exists()) { --- NEW FILE: InitAction.java --- package org.w3c.unicorn.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.w3c.unicorn.Framework; /** * Servlet implementation class InitAction */ public class InitAction extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public InitAction() { try { Framework.init(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getRemoteAddr().equals("0:0:0:0:0:0:0:1") || request.getRemoteAddr().equals("127.0.0.1")) try { Framework.init(); } catch (Exception e) { response.setContentType("text/plain"); response.getWriter().print(e.getMessage() + "\n" + e.getStackTrace()); } else response.getWriter().print(request.getRemoteAddr()); response.getWriter().close(); } } Index: ObserveAction.java =================================================================== RCS file: /sources/public/2006/unicorn/src/org/w3c/unicorn/action/Attic/ObserveAction.java,v retrieving revision 1.1.2.4 retrieving revision 1.1.2.5 diff -u -d -r1.1.2.4 -r1.1.2.5 --- ObserveAction.java 11 Aug 2009 16:05:42 -0000 1.1.2.4 +++ ObserveAction.java 12 Aug 2009 13:15:21 -0000 1.1.2.5 @@ -1,19 +1,498 @@ +// $Id$ +// Author: Jean-Guilhem Rouel +// (c) COPYRIGHT MIT, ERCIM and Keio, 2006. +// Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.unicorn.action; +import java.io.File; +import java.io.IOException; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -public class ObserveAction extends Action { - private static final long serialVersionUID = 1L; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +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.NoTaskException; +import org.w3c.unicorn.index.IndexGenerator; +import org.w3c.unicorn.output.OutputFactory; +import org.w3c.unicorn.output.OutputFormater; +import org.w3c.unicorn.output.OutputModule; +import org.w3c.unicorn.util.LocalizedString; +import org.w3c.unicorn.util.Property; + +/** + * FirstServlet<br /> + * Created: Jun 26, 2006 2:04:11 PM<br /> + * + * @author Jean-Guilhem ROUEL + */ +public class ObserveAction extends HttpServlet { + + private static final Log logger = LogFactory + .getLog("org.w3c.unicorn.servlet"); + + private static final long serialVersionUID = -1375355420965607571L; + + private static final DiskFileItemFactory factory = new DiskFileItemFactory(); + + /** + * Creates a new file upload handler. + */ + private static final ServletFileUpload upload = new ServletFileUpload( + ObserveAction.factory); + + /* + * (non-Javadoc) + * + * @see javax.servlet.GenericServlet#init() + */ + @Override + public void init(final ServletConfig aServletConfig) + throws ServletException { + ObserveAction.logger.trace("init"); + + ObserveAction.factory.setRepository(new File(Property + .get("UPLOADED_FILES_REPOSITORY"))); + + try { + IndexGenerator.generateIndexes(); + } catch (final ResourceNotFoundException e) { + ObserveAction.logger.error("ResourceNotFoundException : " + + e.getMessage(), e); + e.printStackTrace(); + } catch (final ParseErrorException e) { + ObserveAction.logger.error( + "ParseErrorException : " + e.getMessage(), e); + e.printStackTrace(); + } catch (final Exception e) { + ObserveAction.logger.error("Exception : " + e.getMessage(), e); + e.printStackTrace(); + } + ObserveAction.logger.info("End of initialisation of servlet."); - public ObserveAction() { - // TODO Auto-generated constructor stub } - //@Override - public void execute(HttpServletRequest request, HttpServletResponse response) { - // TODO Auto-generated method stub + /* + * (non-Javadoc) + * + * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, + * javax.servlet.http.HttpServletResponse) + */ + @Override + protected void doGet(final HttpServletRequest aHttpServletRequest, + final HttpServletResponse aHttpServletResponse) + throws ServletException, IOException { + ObserveAction.logger.trace("doGet"); + // 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"); + + // Returns the preferred Locale that the client will accept content in, + // based on the Accept-Language header + final String aLocale = convertEnumerationToString(aHttpServletRequest + .getLocales()); + final UnicornCall aUnicornCall = new UnicornCall(); + + // Language of the template + // ucn_lang is a parameter which is define in xx_index.html.vm. + // It is an hidden parameter of a form. + String templateLang = null; + if (aHttpServletRequest.getParameterValues(Property + .get("UNICORN_PARAMETER_PREFIX") + + "lang") != null) { + templateLang = aHttpServletRequest.getParameterValues(Property + .get("UNICORN_PARAMETER_PREFIX") + + "lang")[0]; + } else { + templateLang = chooseTemplateLang(aLocale); + } + + mapOfOutputParameter.put("lang", templateLang); + + if (null == aLocale) { + aUnicornCall.setLang(LocalizedString.DEFAULT_LANGUAGE); + } else { + aUnicornCall.setLang(templateLang + "," + aLocale); + } + + for (final Enumeration<?> aEnumParamName = aHttpServletRequest + .getParameterNames(); aEnumParamName.hasMoreElements();) { + final String sParamName = (String) aEnumParamName.nextElement(); + final String[] tStringParamValue = aHttpServletRequest + .getParameterValues(sParamName); + + this.addParameter(sParamName, tStringParamValue, aUnicornCall, + mapOfSpecificParameter, mapOfOutputParameter); + } // For + + if (aUnicornCall.getTask() == null) { + ObserveAction.logger.error("No task selected."); + this.createError(aHttpServletResponse, new NoTaskException(), + mapOfSpecificParameter, mapOfOutputParameter); + return; + } + + try { + aUnicornCall.doTask(); + + this.createOutput(aHttpServletResponse, aUnicornCall, + mapOfSpecificParameter, mapOfOutputParameter); + } catch (final Exception aException) { + ObserveAction.logger.error("Exception : " + aException.getMessage(), + aException); + this.createError(aHttpServletResponse, 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 aHttpServletRequest, + final HttpServletResponse aHttpServletResponse) + throws ServletException, IOException { + ObserveAction.logger.trace("doPost"); + + // Check that we have a file upload request + final boolean bIsMultipart = ServletFileUpload + .isMultipartContent(new ServletRequestContext( + aHttpServletRequest)); + + if (!bIsMultipart) { + this.doGet(aHttpServletRequest, aHttpServletResponse); + return; + } + + // Parse the request + final List<?> listOfItem; + + final UnicornCall aUnicornCall = new UnicornCall(); + + // 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"); + + // Returns the preferred Locale that the client will accept content in, + // based on the Accept-Language header + final String aLocale = convertEnumerationToString(aHttpServletRequest + .getLocales()); + + // Language of the template + // ucn_lang is a parameter which is define in xx_index.html.vm. + // It is an hidden parameter of a form. + String templateLang = null; + + ObserveAction.logger.trace("doPost"); + + final Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>(); + + FileItem aFileItemUploaded = null; + + try { + listOfItem = ObserveAction.upload.parseRequest(aHttpServletRequest); + + // Process the uploaded items + for (final Iterator<?> aIterator = listOfItem.iterator(); aIterator + .hasNext();) { + final FileItem aFileItem = (FileItem) aIterator.next(); + if (aFileItem.isFormField()) { + + if (aFileItem.getFieldName().equals("ucn_lang")) { + templateLang = aFileItem.getString(); + } + + 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 (templateLang == null) { + templateLang = chooseTemplateLang(aLocale); + } + + if (null == aLocale) { + aUnicornCall.setLang(LocalizedString.DEFAULT_LANGUAGE); + } else { + aUnicornCall.setLang(templateLang + "," + aLocale); + } + mapOfOutputParameter.put("lang", templateLang); + + } + + catch (final FileUploadException aFileUploadException) { + ObserveAction.logger.error("FileUploadException : " + + aFileUploadException.getMessage(), aFileUploadException); + this.createError(aHttpServletResponse, aFileUploadException, + mapOfSpecificParameter, mapOfOutputParameter); + } + + try { + aUnicornCall.doTask(); + + this.createOutput(aHttpServletResponse, aUnicornCall, + mapOfSpecificParameter, mapOfOutputParameter); + } catch (final Exception aException) { + ObserveAction.logger.error("Exception : " + aException.getMessage(), + aException); + this.createError(aHttpServletResponse, aException, + mapOfSpecificParameter, mapOfOutputParameter); + } finally { + if ("true".equals(Property.get("DELETE_UPLOADED_FILES")) + && aFileItemUploaded != null + && aFileItemUploaded instanceof FileItem) { + aFileItemUploaded.delete(); + } + } + } + + /** + * Adds a parameter at the correct call. + * + * @param sParamName + * Name of the parameter. + * @param sParamValue + * Value of the parameter. + * @param aUnicornCall + * @param mapOfSpecificParameter + * @param mapOfOutputParameter + */ + private void addParameter(final String sParamName, + final String sParamValue, final UnicornCall aUnicornCall, + final Map<String, String[]> mapOfSpecificParameter, + final Map<String, String> mapOfOutputParameter) { + final String[] tStringValues = { sParamValue }; + this.addParameter(sParamName, tStringValues, aUnicornCall, + mapOfSpecificParameter, mapOfOutputParameter); + } + + /** + * + * @param sParamName + * @param tStringParamValue + * @param aUnicornCall + * @param mapOfSpecificParameter + * @param mapOfOutputParameter + */ + private void addParameter(String sParamName, + final String[] tStringParamValue, final UnicornCall aUnicornCall, + final Map<String, String[]> mapOfSpecificParameter, + final Map<String, String> mapOfOutputParameter) { + + if (null == tStringParamValue || 0 == tStringParamValue.length) { + // no value for this parameter + // TODO log this info if necessary + return; + } + + if (!sParamName.startsWith(Property.get("UNICORN_PARAMETER_PREFIX"))) { + // task parameter + aUnicornCall.addParameter(sParamName, tStringParamValue); + 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"))) { + sParamName = sParamName.substring(Property.get( + "UNICORN_PARAMETER_OUTPUT_PREFIX").length()); + mapOfSpecificParameter.put(sParamName, tStringParamValue); + return; + } + + if (sParamName.equals("lang")) { + aUnicornCall.addParameter(Property.get("UNICORN_PARAMETER_PREFIX") + + "lang", tStringParamValue); + } + + // Global Unicorn parameter + if (sParamName.equals("task")) { + // FirstServlet.logger.debug(""); + aUnicornCall.setTask(tStringParamValue[0]); + } else if (sParamName.equals("uri")) { + aUnicornCall.setEnumInputMethod(EnumInputMethod.URI); + + if (!tStringParamValue[0].substring(0, 7).equals("http://")) { + ObserveAction.logger.info("URI missing protocol : " + + tStringParamValue[0]); + tStringParamValue[0] = "http://" + tStringParamValue[0]; + ObserveAction.logger.info("URI modified to : " + + tStringParamValue[0]); + } + + aUnicornCall.setDocumentName(tStringParamValue[0]); + aUnicornCall.setInputParameterValue(tStringParamValue[0]); + } else if (sParamName.equals("text")) { + aUnicornCall.setEnumInputMethod(EnumInputMethod.DIRECT); + aUnicornCall.setDocumentName(tStringParamValue[0]); + aUnicornCall.setInputParameterValue(tStringParamValue[0]); + } + // TODO add upload handle when it work + else if (sParamName.equals("output") || sParamName.equals("format") + || sParamName.equals("charset") + || sParamName.equals("mimetype") || sParamName.equals("lang")) { + mapOfOutputParameter.put(sParamName, tStringParamValue[0]); + } else if (sParamName.equals("text_mime")) { + aUnicornCall.addParameter(Property.get("UNICORN_PARAMETER_PREFIX") + + "mime", tStringParamValue); + } + } + + 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 + .getOutputFormater(mapOfOutputParameter.get("format"), + mapOfOutputParameter.get("lang"), + mapOfOutputParameter.get("mimetype")); + final OutputModule aOutputModule = OutputFactory + .getOutputModule(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 createOutput(final HttpServletResponse aHttpServletResponse, + final UnicornCall aUnicornCall, + final Map<String, String[]> mapOfSpecificParameter, + final Map<String, String> mapOfOutputParameter) throws IOException { + aHttpServletResponse.setContentType(mapOfOutputParameter + .get("mimetype") + + "; charset=" + mapOfOutputParameter.get("charset")); + try { + Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>(); + mapOfStringObject.put("unicorncall", aUnicornCall); + + final OutputFormater aOutputFormater = OutputFactory + .getOutputFormater(mapOfOutputParameter.get("format"), + mapOfOutputParameter.get("lang"), + mapOfOutputParameter.get("mimetype")); + final OutputModule aOutputModule = OutputFactory + .getOutputModule(mapOfOutputParameter.get("output")); + aOutputModule.produceOutput(aOutputFormater, mapOfStringObject, + 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>"); + } + } + + /** + * This method returns the first language of the accept language list which + * is equal to one of available index template language + * + * @param aLocale + * @return The selected language or the default language. + */ + private String chooseTemplateLang(String aLocale) { + String[] tabLang = aLocale.split(";|,"); + for (int i = 0; i < tabLang.length; i++) { + if (Framework.outputLang.contains(tabLang[i])) { + return tabLang[i]; + } else if (Framework.outputLang.contains(tabLang[i].split("-")[0])) { + return tabLang[i].split("-")[0]; + } + } + + return LocalizedString.DEFAULT_LANGUAGE; + } + + /** + * Converts an Enumeration object to a string, the terms being separated by + * a coma. + * + * @param myEnum + * The enumeration to convert. + * @return The converted string. + */ + private String convertEnumerationToString(Enumeration<?> myEnum) { + String ret = ""; + while (myEnum.hasMoreElements()) { + ret += myEnum.nextElement().toString() + ","; + } + return ret.substring(0, ret.length() - 1); } }
Received on Wednesday, 12 August 2009 13:15:33 UTC