/**
	 * Renvoie une instance de la classe attributes correspondant au paramêtre
	 * ACTION trouvé dans la requête. Si le formulaire est encodé en multiform,
	 * alors la requête est parsée avec la librairie common-fileupload de
	 * Jakarta.
	 *
	 * @return Si aucun paramêtre ACTION n'est trouvé, la méthode renvoie une
	 * nouvelle instance de la classe <code>ControllerBaseAttributes</code>,
	 * et si une action est trouvée, alors la méthode essaie de renvoyer une
	 * nouvelle instance de la classe CtrlAttributesxxx (ou xxx est le nom de
	 * l'action), située dans le même package que le controleur en cours.
	 */

        public static ControllerBaseAttributes getInstance(HttpServletRequest req, SessionContainer sc,
                                                           Type controllerClass)
        {
            ControllerBaseAttributes attributes = null;
            bool isMultipartContent = FileUploadBase.IsMultipartContent(req);
            ArrayList l = null;
            String action = null;
            Hashtable h = null;
            if (isMultipartContent)
            {
                // Retrieve multipart content
                DefaultFileItemFactory dfif = new DefaultFileItemFactory();
                FileUpload upload = new FileUpload(dfif);
                String s = SConfig.GetInstance().getProperty("Config.upload.maxSize");
                long maxUploadSize = long.Parse(s);
                upload.SetSizeMax(maxUploadSize);
                try
                {
                    l = upload.ParseRequest(req);
                    h = new Hashtable(l.Count);

                    foreach (DefaultFileItem defaultFileItem in l)
                    {
                        h[defaultFileItem.GetFieldName()] = defaultFileItem;

                    }

                    // récupêre le paramêtre ACTION
                    FileItem fi = (FileItem)h[ControllerBase.ACTION_PARAMETER];
                    if (fi != null)
                    {
                        action = fi.GetString();
                    }
                }
                catch (FileUploadBase.SizeLimitExceededException slee)
                {
                    // Le fichier uploadé dépasse la taille maximale
                    sc.setMessageErreurKey("error.parameter.file_size");
                    if (logger.IsDebugEnabled)
                    {
                        logger.Debug("ControllerBaseAttributes", slee);
                    }
                    throw new IncorrectParameterException();
                }
                catch (FileUploadException e)
                {
                    if (logger.IsErrorEnabled)
                    {
                        logger.Error("Impossible de parser la requête multiform", e);
                    }
                    l = null;
                    // x7786 3.4 UPLOAD INTERROMPU PAR UTILISATEUR
                    // envoi exception pour stopper exécution servlet
                    throw new IncorrectParameterException();
                }
            }
            else
            {
                action = req.GetParameter(ControllerBase.ACTION_PARAMETER);
            }
            String className = controllerClass.FullName;
            // x7786 3.5 ACTION NULL ou vide
            // envoi exception pour stopper execution servlet
            if (action == null || "".Equals(action))
            {
                if (logger.IsWarnEnabled)
                {
                    logger.Warn("Le parametre action 'mth' n'est pas defini " + "pour le controleur " + className);
                }
                sc.setMessageErreurKey("error.action.null");
                throw new IncorrectParameterException();
            }
            else
            {
                int i = className.LastIndexOf(".");
                className = className.Substring(0, i + 1) + ControllerBase.CTRL_ATTRIBUTES_PREFIX + action;
                try
                {
                    Type attributesClass = Type.GetType(className);
                    attributes = (ControllerBaseAttributes)Activator.CreateInstance(attributesClass);
                }
                catch (TypeLoadException cnfe)
                {
                    if (logger.IsWarnEnabled)
                    {
                        logger.Warn("la classe " + className + " n'a pas été trouvée " + "pour gérer l'action " + action
                                    + " dans le controleur " + controllerClass.FullName);
                    }
                    // x7786 3.X ACTION mal renseignée
                    // envoi exception pour stopper execution servlet
                    sc.setMessageErreurKey("error.action.wrong");
                    throw new IncorrectParameterException();
                }
            }
            if (attributes == null)
            {
                attributes = new ControllerBaseAttributes();
            }
            if (isMultipartContent)
            {
                attributes.setFileItems(h);
            }
            attributes.setAction(action);
            return attributes;
        }
Exemple #2
0
 public FileUpload(DefaultFileItemFactory dfif)
 {
     throw new NotImplementedException();
 }