Changeset 301:a7efdd8a5cb3

Show
Ignore:
Timestamp:
09/08/09 14:23:33 (4 years ago)
Author:
tgambet
Branch:
default
convert_revision:
svn:cdcfb263-7567-472c-a848-e2c2df3466e7/trunk@302
Message:

changed signature of method getTask() to be language independent
+ added some verifications on request parameters
+ refactored some more

Location:
src/org/w3c/unicorn/action
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • src/org/w3c/unicorn/action/Action.java

    r299 r301  
    7474        } 
    7575 
    76         public String getTask(String taskParameter, String lang, ArrayList<Message> messages) { 
     76        public String getTask(String taskParameter, ArrayList<Message> messages) { 
    7777                 
    7878                //String taskParameter = req.getParameter(Property.get("UNICORN_PARAMETER_PREFIX") + "task"); 
     
    8787                 
    8888                if (taskParameter == null) { 
    89                         Message mess = new Message(Message.Level.WARNING, "$message_no_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(lang), null); 
     89                        Message mess = new Message(Message.Level.WARNING, "$message_no_task " + "$default_task.getLongName($lang) ", null); 
    9090                        messages.add(mess); 
    9191                } else if (!Framework.mapOfTask.containsKey(taskParameter)) { 
    9292                        System.out.println(taskParameter); 
    93                         Message mess = new Message(Message.Level.WARNING, "$message_unknown_task " + Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId()).getLongName(lang), null); 
     93                        Message mess = new Message(Message.Level.WARNING, "$message_unknown_task " + "$default_task.getLongName($lang) ", null); 
    9494                        messages.add(mess); 
    9595                } 
  • src/org/w3c/unicorn/action/IndexAction.java

    r299 r301  
    1 // $Id: IndexAction.java,v 1.13 2009-09-07 17:35:20 tgambet Exp $Id $ 
     1// $Id: IndexAction.java,v 1.14 2009-09-08 14:23:33 tgambet Exp $Id $ 
    22// Author: Thomas Gambet 
    33// (c) COPYRIGHT MIT, ERCIM and Keio, 2009. 
     
    3939                String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX"); 
    4040                String lang = getLanguage(req.getParameter(paramPrefix + "lang"), req, messages); 
    41                 String task = getTask(req.getParameter(paramPrefix + "task"), lang, null); 
     41                String task = getTask(req.getParameter(paramPrefix + "task"), null); 
    4242                String queryString = getQueryStringWithout(paramPrefix + "lang", req); 
    4343                 
  • src/org/w3c/unicorn/action/ObserveAction.java

    r299 r301  
    1 // $Id: ObserveAction.java,v 1.14 2009-09-07 17:35:21 tgambet Exp $ 
     1// $Id: ObserveAction.java,v 1.15 2009-09-08 14:23:33 tgambet Exp $ 
    22// Author: Jean-Guilhem Rouel 
    33// (c) COPYRIGHT MIT, ERCIM and Keio, 2006. 
     
    1010import java.util.Enumeration; 
    1111import java.util.Hashtable; 
    12 import java.util.Iterator; 
    1312import java.util.LinkedHashMap; 
    1413import java.util.List; 
     
    3534import org.w3c.unicorn.util.Message; 
    3635import org.w3c.unicorn.util.Property; 
     36import org.w3c.unicorn.Framework; 
    3737 
    3838/** 
    39  * FirstServlet<br /> 
    40  * Created: Jun 26, 2006 2:04:11 PM<br /> 
     39 * ObserveAction 
    4140 *  
    4241 * @author Jean-Guilhem ROUEL 
     
    5150         
    5251        private static ServletFileUpload upload; 
     52         
     53        private static ArrayList<String> outputParams; 
    5354         
    5455        @Override 
     
    5960                upload = new ServletFileUpload(factory); 
    6061                logger.debug("Created a ServletFileUpload with repository set to: " + Property.get("UPLOADED_FILES_REPOSITORY")); 
     62                 
     63                outputParams = new ArrayList<String>(); 
     64                outputParams.add("output"); 
     65                outputParams.add("format"); 
     66                outputParams.add("charset"); 
     67                outputParams.add("mimetype"); 
     68                outputParams.add("lang"); 
    6169        } 
    6270         
     
    6472                 
    6573                Hashtable<String, Object> params = new Hashtable<String, Object>(); 
    66                          
     74                 
    6775                if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) { 
    68  
    6976                        List<?> listOfItem = upload.parseRequest(req); 
    7077                        for (Object fileItem : listOfItem) { 
     
    7481                                } else if (aFileItem.getFieldName().equals(Property.get("UNICORN_PARAMETER_PREFIX") + "file")) { 
    7582                                        params.put(aFileItem.getFieldName(), aFileItem); 
     83                                } else { 
     84                                        // TODO log "unknown fileItem, ignored" 
    7685                                } 
    7786                        } 
    78                          
    79                         return params; 
    80                 } 
    81                  
    82                 for (Object key : req.getParameterMap().keySet()) { 
    83                         params.put(key.toString(), req.getParameter(key.toString())); 
    84                 } 
     87                } else { 
     88                        Enumeration<?> paramEnum = req.getParameterNames(); 
     89                        while (paramEnum.hasMoreElements()) { 
     90                                 
     91                                Object key = paramEnum.nextElement(); 
     92                                logger.debug("TOM: " + key); 
     93                                params.put(key.toString(), req.getParameter(key.toString())); 
     94                        } 
     95                } 
     96                 
     97                String s = "Parameters: "; 
     98                for (String key : params.keySet()) { 
     99                        s += "\n\t" + key + " - " + params.get(key); 
     100                } 
     101                logger.debug(s); 
     102                 
    85103                return params; 
    86                  
    87104        } 
    88105         
     
    93110                super.doGet(req, resp); 
    94111                 
     112                Map<String, Object> reqParams; 
     113                try { 
     114                        reqParams = getRequestParameters(req); 
     115                } catch (FileUploadException e) { 
     116                        // TODO Auto-generated catch block 
     117                        e.printStackTrace(); 
     118                        return; 
     119                } 
     120                 
     121                FileItem aFileItemUploaded = null; 
    95122                Map<String, Object> mapOfStringObject = new LinkedHashMap<String, Object>(); 
    96                 Map<String, String[]> mapOfSpecificParameter = new Hashtable<String, String[]>(); 
     123                Map<String, String> mapOfSpecificParameter = new Hashtable<String, String>(); 
    97124                Map<String, String> mapOfOutputParameter = new Hashtable<String, String>(); 
    98125                ArrayList<Message> messages = new ArrayList<Message>(); 
    99                  
    100                 //Map<String, String> reqParameters = getRequestParameters(req); 
     126                UnicornCall aUnicornCall = new UnicornCall(); 
    101127                 
    102128                String paramPrefix = Property.get("UNICORN_PARAMETER_PREFIX"); 
    103                 String lang = getLanguage(req.getParameter(paramPrefix + "lang"), req, null); 
    104                 String task = getTask(req.getParameter(paramPrefix + "task"), lang, messages); 
     129                String outParamPrefix = Property.get("UNICORN_PARAMETER_OUTPUT_PREFIX"); 
    105130                String queryString = getQueryStringWithout(paramPrefix + "lang", req); 
    106131                 
     
    112137                mapOfOutputParameter.put("charset", "UTF-8"); 
    113138                mapOfOutputParameter.put("mimetype", "text/html"); 
    114                 mapOfOutputParameter.put("lang", lang); 
    115                  
    116                 UnicornCall aUnicornCall = new UnicornCall(); 
    117                 String aLocale = convertEnumerationToString(req.getLocales()); 
    118                 if (null == aLocale) 
    119                         aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE")); 
    120                 else 
    121                         aUnicornCall.setLang(lang + "," + aLocale); 
    122                  
    123                 for (Object param : req.getParameterMap().keySet()) { 
     139                 
     140                for (String key : reqParams.keySet()) { 
     141                        if (!key.startsWith(paramPrefix) && !key.startsWith(outParamPrefix)) { 
     142                                logger.debug("UnicornCall parameter: " + key + " - " + (String) reqParams.get(key)); 
     143                                aUnicornCall.addParameter(key, (String) reqParams.get(key));  
     144                                continue; 
     145                        } 
     146                         
     147                        if (key.startsWith(outParamPrefix)) { 
     148                                logger.debug("Specific parameter: " + key + " - " + (String) reqParams.get(key)); 
     149                                String paramName = key.substring(outParamPrefix.length()); 
     150                                mapOfSpecificParameter.put(paramName, (String) reqParams.get(key)); 
     151                                continue; 
     152                        } 
     153                         
     154                        if (key.startsWith(paramPrefix)) { 
     155                                String paramName = key.substring(paramPrefix.length()); 
     156                                 
     157                                if (paramName.equals("lang")) { 
     158                                        logger.debug("Lang parameter: " + key + " - " + (String) reqParams.get(key)); 
     159                                        String lang = getLanguage((String) reqParams.get(key), req, null); 
     160                                        mapOfOutputParameter.put(paramName, lang); 
     161                                        String aLocale = convertEnumerationToString(req.getLocales());           
     162                                        if (null == aLocale) 
     163                                                aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE")); 
     164                                        else 
     165                                                aUnicornCall.setLang(lang + "," + aLocale); 
     166                                        if (!lang.equals(reqParams.get(key))) { 
     167                                                logger.debug("Lang parameter unsupported. Resolved to: " + lang); 
     168                                        } 
     169                                } else if (paramName.equals("task")) { 
     170                                        logger.debug("Task parameter: " + key + " - " + (String) reqParams.get(key)); 
     171                                        String task = getTask((String) reqParams.get(key), messages); 
     172                                        if (!task.equals(reqParams.get(key))) { 
     173                                                mapOfStringObject.put("default_task", Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId())); 
     174                                                logger.debug("Task parameter unsupported. Resolved to: " + task); 
     175                                        } 
     176                                        aUnicornCall.setTask(task); 
     177                                } else if (outputParams.contains(paramName)) { 
     178                                        logger.debug("Output parameter: " + key + " - " + (String) reqParams.get(key)); 
     179                                        mapOfOutputParameter.put(paramName, (String) reqParams.get(key)); 
     180                                        continue; 
     181                                } else if (paramName.equals("uri")) { 
     182                                        logger.debug("Uri parameter: " + key + " - " + (String) reqParams.get(key)); 
     183                                        aUnicornCall.setEnumInputMethod(EnumInputMethod.URI); 
     184                                        String uri = (String) reqParams.get(key); 
     185                                        if (uri.length() < 7 || !uri.substring(0, 7).equals("http://")) { 
     186                                                uri = "http://" + uri; 
     187                                        } 
     188                                        aUnicornCall.setDocumentName(uri); 
     189                                        aUnicornCall.setInputParameterValue(uri); 
     190                                } else if (paramName.equals("text")) { 
     191                                        logger.debug("Text parameter: " + key + " - " + (String) reqParams.get(key)); 
     192                                        aUnicornCall.setEnumInputMethod(EnumInputMethod.DIRECT); 
     193                                        aUnicornCall.setInputParameterValue((String) reqParams.get(key)); 
     194                                } else if (paramName.equals("file")) { 
     195                                        logger.debug("File parameter: " + key + " - " + reqParams.get(key).toString()); 
     196                                        Object object = reqParams.get(key); 
     197                                        if (object instanceof FileItem) { 
     198                                                aFileItemUploaded = (FileItem) object; 
     199                                                aUnicornCall.setDocumentName(aFileItemUploaded.getName()); 
     200                                                aUnicornCall.setInputParameterValue(aFileItemUploaded); 
     201                                                aUnicornCall.setEnumInputMethod(EnumInputMethod.UPLOAD); 
     202                                        } else { 
     203                                                // TODO log "ucn_file not an instance of FileItem ?" 
     204                                        } 
     205                                } else { 
     206                                        logger.debug("Unknown parameter: " + key + " - " + (String) reqParams.get(key)); 
     207                                        // TODO Warn that there is an unknown parameter which is added to unicornCall by default 
     208                                        aUnicornCall.addParameter(paramName, (String) reqParams.get(key)); 
     209                                } 
     210                        } 
     211                } 
     212                 
     213                if (!reqParams.containsKey(paramPrefix + "lang")) { 
     214                        String lang = getLanguage(null, req, null); 
     215                        reqParams.put(paramPrefix + "lang", getLanguage(null, req, null)); 
     216                        logger.debug("No language parameter found. Language negociation resolved language to: " + lang); 
     217                        mapOfOutputParameter.put("lang", lang); 
     218                        String aLocale = convertEnumerationToString(req.getLocales());           
     219                        if (null == aLocale) 
     220                                aUnicornCall.setLang(lang + "," + Property.get("DEFAULT_LANGUAGE")); 
     221                        else 
     222                                aUnicornCall.setLang(lang + "," + aLocale); 
     223                } 
     224                 
     225                if (!reqParams.containsKey(paramPrefix + "task")) { 
     226                        String task = getTask(null, messages); 
     227                        reqParams.put(paramPrefix + "task", task); 
     228                        logger.debug("No task parameter found. Task parameter is set to task id: " + task); 
     229                        mapOfStringObject.put("default_task", Framework.mapOfTask.get(Framework.mapOfTask.getDefaultTaskId())); 
     230                        aUnicornCall.setTask(task); 
     231                } 
     232                 
     233                if (reqParams.containsKey(paramPrefix + "uri")) { 
     234                        //TODO vérifier que n'est pas vide 
     235                } else if (reqParams.containsKey(paramPrefix + "text")) { 
     236                        //TODO vérifier que n'est pas vide + vérifier présence de ucn_text_mime 
     237                } else if (reqParams.containsKey(paramPrefix + "file")) { 
     238                        //TODO vérifier que n'est pas vide 
     239                } else { 
     240                        //TODO aucun des 3 paramètres n'est présent -> erreur 
     241                } 
     242                 
     243                 
     244                 
     245                /*for (Object param : req.getParameterMap().keySet()) { 
    124246                        String sParamName = (String) param; 
    125247                        String[] tStringParamValue = req.getParameterValues(sParamName); 
    126248                        addParameter(sParamName, tStringParamValue, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter); 
    127                 } 
    128                  
    129                 addParameter(paramPrefix+ "task", task, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter); 
     249                }*/ 
     250                 
     251                //addParameter(paramPrefix+ "task", task, aUnicornCall, mapOfSpecificParameter, mapOfOutputParameter); 
    130252                 
    131253                // POST operations 
    132                 FileItem aFileItemUploaded = null; 
    133                 if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) { 
     254                //FileItem aFileItemUploaded = null; 
     255                /*if (req.getMethod().equals("POST") && ServletFileUpload.isMultipartContent(new ServletRequestContext(req))) { 
    134256                        messages.clear(); 
    135257                        try { 
     
    154276                                createError(req, resp, mess,mapOfSpecificParameter, mapOfOutputParameter); 
    155277                        } 
    156                 } 
     278                }*/ 
    157279                 
    158280                try { 
     
    174296                } finally { 
    175297                        if ("true".equals(Property.get("DELETE_UPLOADED_FILES")) 
    176                                         && aFileItemUploaded != null 
    177                                         && aFileItemUploaded instanceof FileItem) { 
     298                                        && aFileItemUploaded != null) { 
    178299                                aFileItemUploaded.delete(); 
    179300                        } 
     
    198319         * @param mapOfOutputParameter 
    199320         */ 
    200         private void addParameter(final String sParamName, 
     321        /*private void addParameter(final String sParamName, 
    201322                        final String sParamValue, final UnicornCall aUnicornCall, 
    202                         final Map<String, String[]> mapOfSpecificParameter, 
     323                        final Map<String, String> mapOfSpecificParameter, 
    203324                        final Map<String, String> mapOfOutputParameter) { 
    204325                final String[] tStringValues = { sParamValue }; 
     
    215336         * @param mapOfOutputParameter 
    216337         */ 
    217         private void addParameter(String sParamName, 
     338        /*private void addParameter(String sParamName, 
    218339                        final String[] tStringParamValue, final UnicornCall aUnicornCall, 
    219                         final Map<String, String[]> mapOfSpecificParameter, 
     340                        final Map<String, String> mapOfSpecificParameter, 
    220341                        final Map<String, String> mapOfOutputParameter) { 
    221342 
     
    280401                                        + "mime", tStringParamValue); 
    281402                } 
    282         } 
     403        }*/ 
    283404 
    284405        private void createError(HttpServletRequest req, HttpServletResponse resp, 
    285                         Message mess, Map<String, String[]> mapOfSpecificParameter, 
     406                        Message mess, Map<String, String> mapOfSpecificParameter, 
    286407                        Map<String, String> mapOfOutputParameter) throws IOException, ServletException { 
    287408                 
     
    304425        private void createOutput(HttpServletRequest req, HttpServletResponse resp, 
    305426                        Map<String, Object> mapOfStringObject, UnicornCall aUnicornCall, 
    306                         Map<String, String[]> mapOfSpecificParameter, Map<String, String> mapOfOutputParameter) throws IOException { 
     427                        Map<String, String> mapOfSpecificParameter, Map<String, String> mapOfOutputParameter) throws IOException { 
    307428                 
    308429                resp.setContentType(mapOfOutputParameter.get("mimetype") + "; charset=" + mapOfOutputParameter.get("charset"));