Author: mfortun Date: 2011-05-04 12:12:53 +0200 (Wed, 04 May 2011) New Revision: 856 Url: http://nuiton.org/repositories/revision/wikitty/856 Log: * String collection can be edited with edit page Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java 2011-05-03 17:55:52 UTC (rev 855) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/ActionEdit.java 2011-05-04 10:12:53 UTC (rev 856) @@ -27,9 +27,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.CollectionUtil; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.entities.FieldType; +import org.nuiton.wikitty.entities.FieldType.TYPE; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.entities.WikittyImpl; @@ -38,24 +41,25 @@ import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.operators.Element; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.Map; /** - * + * * @author poussin * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ + * + * Last update: $Date$ + * by : $Author$ */ public class ActionEdit extends AbstractActionOnWikitty { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ActionError.class); - static final protected String exampleUsage = - "edit/WikittyPubText.name=Wiki\n" + static final protected String exampleUsage = "edit/WikittyPubText.name=Wiki\n" + "edit/Tuto\n" + "edit/WikittyPubText.name=Tuto\n" + "edit/Command.id=df\n"; @@ -70,7 +74,7 @@ public Object doAction(WikittyPublicationContext context) { String result; Wikitty w; - + WikittyProxy proxy = context.getWikittyProxy(); if (context.getArguments().containsKey("delete")) { @@ -78,10 +82,12 @@ // affichera un wikitty vide String id = context.getArguments().get("id"); proxy.delete(id); - // apres un effacement on reprend l'edition d'un tout nouveau wikitty + // apres un effacement on reprend l'edition d'un tout nouveau + // wikitty w = new WikittyImpl(); } else { - // recherche du Wikitty a editer ou creation d'un nouveau si necessaire + // recherche du Wikitty a editer ou creation d'un nouveau si + // necessaire Criteria criteria = searchCriteria(context.getMandatoryArguments()); if (criteria == null) { w = new WikittyImpl(); @@ -91,8 +97,10 @@ // si on ne retrouve pas le wikitty, mais qu'il vient d'etre cree // pour l'edition, on recree un wikitty avec ce meme identifiant - if (w == null && "0.0".equals(context.getArguments().get("version"))) { - // c'est un nouvel objet, il n'a pas encore ete sauve, mais on veut le faire + if (w == null + && "0.0".equals(context.getArguments().get("version"))) { + // c'est un nouvel objet, il n'a pas encore ete sauve, mais on + // veut le faire String id = context.getArguments().get("id"); w = new WikittyImpl(id); } @@ -109,10 +117,11 @@ // ajout des extensions deja existante si necessaire String extensions = context.getArgument("extensions", null); if (extensions != null) { - String[] exts = StringUtil.split( - extensions.replace("[", "").replace("]", ""), ","); + String[] exts = StringUtil.split(extensions + .replace("[", "").replace("]", ""), ","); for (String extName : exts) { - WikittyExtension ext = proxy.restoreExtensionLastVersion(extName); + WikittyExtension ext = proxy + .restoreExtensionLastVersion(extName); if (ext != null) { w.addExtension(ext); } @@ -122,14 +131,13 @@ // ajout de l'extension demande par l'utilisateur String extName = context.getArgument("newExtension", null); if (extName != null && !"".equals(extName)) { - WikittyExtension ext = proxy.restoreExtensionLastVersion(extName); + WikittyExtension ext = proxy + .restoreExtensionLastVersion(extName); if (ext != null) { w.addExtension(ext); } } - - Map<String, Object> args = new HashMap<String, Object>(); args.putAll(context.getArguments()); args.putAll(context.getArgumentFiles()); @@ -138,25 +146,57 @@ Object value = null; if (key.contains(WikittyUtil.FQ_FIELD_NAME_SEPARATOR)) { String ext = WikittyExtension.extractExtensionName(key); - String fieldName = WikittyExtension.extractFieldName(key); + String fieldName = WikittyExtension + .extractFieldName(key); if (w.hasField(ext, fieldName)) { - if (!"true".equals(context.getArgument("isNull-" + key, "false"))) { + if (!"true".equals(context.getArgument("isNull-" + + key, "false"))) { + value = field.getValue(); } - w.setField(ext, fieldName, value); - + + FieldType extFieldType = w.getExtension(ext) + .getFieldType(fieldName); + if (extFieldType.isCollection() + && extFieldType.getType() == TYPE.STRING + && value != null) { + + String valueString = value.toString(); + + valueString = new String(valueString.substring( + 1, valueString.length() - 1)); + + Collection<String> list = new ArrayList<String>(); + + String[] valuesString = StringUtil.split( + valueString, ","); + + for (String element : valuesString) { + list.add(element.trim()); + } + + w.setField(ext, fieldName, list); + + } else { + w.setField(ext, fieldName, value); + } // si w est un WikittyPubData on essai de mettre a // jour si besoin les champs mimetype et name if (ext.equals(WikittyPubData.EXT_WIKITTYPUBDATA) - && fieldName.equals(WikittyPubData.FIELD_WIKITTYPUBDATA_CONTENT)) { + && fieldName + .equals(WikittyPubData.FIELD_WIKITTYPUBDATA_CONTENT)) { if (null == WikittyPubDataHelper.getName(w)) { - WikittyPubDataHelper.setName(w, - String.valueOf(args.get(key + "-filename"))); + WikittyPubDataHelper.setName( + w, + String.valueOf(args.get(key + + "-filename"))); } if (null == WikittyPubDataHelper.getMimeType(w)) { - WikittyPubDataHelper.setMimeType(w, - String.valueOf(args.get(key + "-contentType"))); + WikittyPubDataHelper.setMimeType( + w, + String.valueOf(args.get(key + + "-contentType"))); } } } @@ -169,11 +209,10 @@ } } } - + // forward l'affichage de la page vers la jsp d'edition context.setContentType("forward/jsp"); - context.getRequest().setAttribute( - ActionEval.CONTEXT_VAR, context); + context.getRequest().setAttribute(ActionEval.CONTEXT_VAR, context); context.getRequest().setAttribute(ActionEval.WIKITTY_VAR, w); result = "/WEB-INF/jsp/edit.jsp"; @@ -181,16 +220,16 @@ } /** - * create url to edit wikitty object, assume that edition already start - * add context.getActionName() return edit action name. + * create url to edit wikitty object, assume that edition already start add + * context.getActionName() return edit action name. * * @param context * @param w * @return */ public String makeUrl(WikittyPublicationContext context, Wikitty w) { - String url = getMapping() + "/" - + Element.ELT_ID + SEARCH_SEPARATOR + w.getId(); + String url = getMapping() + "/" + Element.ELT_ID + SEARCH_SEPARATOR + + w.getId(); url = context.makeUrl(url); return url; }