From: <die...@us...> - 2010-01-18 13:44:57
|
Revision: 1664 http://openutils.svn.sourceforge.net/openutils/?rev=1664&view=rev Author: diego_schivo Date: 2010-01-18 13:44:50 +0000 (Mon, 18 Jan 2010) Log Message: ----------- CONTROLS-16 Add handling for column type=uuidLink Modified Paths: -------------- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java 2010-01-18 13:29:59 UTC (rev 1663) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java 2010-01-18 13:44:50 UTC (rev 1664) @@ -17,6 +17,23 @@ */ package net.sourceforge.openutils.mgnlcontrols.dialog; +import info.magnolia.cms.beans.config.ContentRepository; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.ItemType; +import info.magnolia.cms.util.ContentUtil; +import info.magnolia.cms.util.NodeDataUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; + + /** * @author fgiust * @version $Id$ @@ -24,12 +41,83 @@ public class DialogGrid extends ConfigurableFreemarkerDialog { + private List colConfigs = new ArrayList(); + /** * {@inheritDoc} */ @Override + public void init(HttpServletRequest request, HttpServletResponse response, Content websiteNode, Content configNode) + throws RepositoryException + { + super.init(request, response, websiteNode, configNode); + if (configNode != null && configNode.hasContent("columns")) + { + colConfigs.addAll(configNode.getChildByName("columns").getChildren(ItemType.CONTENTNODE)); + } + } + + /** + * {@inheritDoc} + */ + @Override protected String getPath() { return "dialogs/grid.ftl"; } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + protected void addToParameters(Map parameters) + { + super.addToParameters(parameters); + String value = getValue(); + if (value != null) + { + StringBuffer sbValue = new StringBuffer(value.length()); + StringBuffer sbLine = new StringBuffer(); + for (String line : StringUtils.splitPreserveAllTokens(value, '\n')) + { + line = StringUtils.removeEnd(line, "\r"); + int colIndex = 0; + for (String token : StringUtils.splitPreserveAllTokens(line, '\t')) + { + if (colIndex < colConfigs.size()) + { + Content colConfig = (Content) colConfigs.get(colIndex); + String colType = NodeDataUtil.getString(colConfig, "type"); + if ("uuidLink".equals(colType)) + { + String repository = StringUtils.defaultIfEmpty(NodeDataUtil.getString( + colConfig, + "repository"), ContentRepository.WEBSITE); + Content node = ContentUtil.getContentByUUID(repository, token); + if (node != null) + { + token = node.getHandle(); + } + } + } + if (sbLine.length() > 0) + { + sbLine.append('\t'); + } + sbLine.append(token); + colIndex++; + } + if (sbValue.length() > 0) + { + sbValue.append('\n'); + } + sbValue.append(sbLine); + sbLine.setLength(0); + } + value = new String(sbValue); + } + parameters.put("gridValue", value); + } + } Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java 2010-01-18 13:29:59 UTC (rev 1663) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java 2010-01-18 13:44:50 UTC (rev 1664) @@ -1,5 +1,6 @@ package net.sourceforge.openutils.mgnlcontrols.dialog; +import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.cms.beans.runtime.Document; import info.magnolia.cms.beans.runtime.MultipartForm; import info.magnolia.cms.core.Content; @@ -27,12 +28,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** - * Needed by file upload. Setup: assign this class name as a "saveHandler" - * property of the grid field's configuration node. - * + * Needed by file upload. Setup: assign this class name as a "saveHandler" property of the grid field's configuration + * node. * @author dschivo - * */ public class DialogGridSaveHandler implements FieldSaveHandler { @@ -41,8 +41,14 @@ @SuppressWarnings("unchecked") public void save(Content parentNode, Content configNode, String name, MultipartForm form, int type, int valueType, - int isRichEditValue, int encoding) throws RepositoryException, AccessDeniedException + int isRichEditValue, int encoding) throws RepositoryException, AccessDeniedException { + List colConfigs = new ArrayList(); + if (configNode != null && configNode.hasContent("columns")) + { + colConfigs.addAll(configNode.getChildByName("columns").getChildren(ItemType.CONTENTNODE)); + } + HierarchyManager hm = parentNode.getHierarchyManager(); Content filesNode = ContentUtil.getOrCreateContent(parentNode, name + "_files", ItemType.CONTENTNODE); String value = form.getParameter(name); @@ -53,41 +59,72 @@ StringBuffer sbLine = new StringBuffer(); for (String line : StringUtils.splitPreserveAllTokens(value, '\n')) { + line = StringUtils.removeEnd(line, "\r"); + int colIndex = 0; for (String token : StringUtils.splitPreserveAllTokens(line, '\t')) { - if (token.startsWith(ctx)) + if (colIndex < colConfigs.size()) { - String link = StringUtils.substringAfter(token, ctx); - if (StringUtils.startsWith(link, tmpPath)) + Content colConfig = (Content) colConfigs.get(colIndex); + String colType = NodeDataUtil.getString(colConfig, "type"); + if ("file".equals(colType)) { - String uuid = StringUtils.substringBetween(link, tmpPath, "/"); - Document doc = FCKEditorTmpFiles.getDocument(uuid); - String fileNodeName = Path.getUniqueLabel(hm, filesNode.getHandle(), "file"); - SaveHandlerImpl.saveDocument(filesNode, doc, fileNodeName, "", ""); - link = filesNode.getHandle() + "/" + fileNodeName + "/" + doc.getFileNameWithExtension(); - token = link; - doc.delete(); - try + if (token.startsWith(ctx)) { - FileUtils.deleteDirectory(new java.io.File(Path.getTempDirectory() + "/fckeditor/" + uuid)); + String link = StringUtils.substringAfter(token, ctx); + if (StringUtils.startsWith(link, tmpPath)) + { + String uuid = StringUtils.substringBetween(link, tmpPath, "/"); + Document doc = FCKEditorTmpFiles.getDocument(uuid); + String fileNodeName = Path.getUniqueLabel(hm, filesNode.getHandle(), "file"); + SaveHandlerImpl.saveDocument(filesNode, doc, fileNodeName, "", ""); + link = filesNode.getHandle() + + "/" + + fileNodeName + + "/" + + doc.getFileNameWithExtension(); + token = link; + doc.delete(); + try + { + FileUtils.deleteDirectory(new java.io.File(Path.getTempDirectory() + + "/fckeditor/" + + uuid)); + } + catch (IOException e) + { + log.error("can't delete tmp file [" + + Path.getTempDirectory() + + "/fckeditor/" + + uuid + + "]"); + } + } } - catch (IOException e) + if (token.startsWith(filesNode.getHandle())) { - log.error("can't delete tmp file [" + Path.getTempDirectory() + "/fckeditor/" + uuid + "]"); + String fileNodeName = StringUtils.removeStart(token, filesNode.getHandle() + "/"); + fileNodeName = StringUtils.substringBefore(fileNodeName, "/"); + usedFiles.add(fileNodeName); } } + else if ("uuidLink".equals(colType)) + { + String repository = StringUtils.defaultIfEmpty(NodeDataUtil + .getString(colConfig, "repository"), ContentRepository.WEBSITE); + Content node = ContentUtil.getContent(repository, token); + if (node != null) + { + token = node.getUUID(); + } + } } - if (token.startsWith(filesNode.getHandle())) - { - String fileNodeName = StringUtils.removeStart(token, filesNode.getHandle() + "/"); - fileNodeName = StringUtils.substringBefore(fileNodeName, "/"); - usedFiles.add(fileNodeName); - } if (sbLine.length() > 0) { sbLine.append('\t'); } sbLine.append(token); + colIndex++; } if (sbValue.length() > 0) { Modified: trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl =================================================================== --- trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl 2010-01-18 13:29:59 UTC (rev 1663) +++ trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl 2010-01-18 13:44:50 UTC (rev 1664) @@ -70,7 +70,7 @@ [#assign key = uuid?replace("-", "")] -<input type="hidden" id="${name}" name="${name}" value="${value?html}"/> +<input type="hidden" id="${name}" name="${name}" value="${gridValue?html}"/> <div id="grid-container-${name}"> <div id="grid-${name}"></div> @@ -129,7 +129,7 @@ header: '${colmap.header}', dataIndex: '${colmap_index}', sortable: false, - [#if (colmap.type?? && colmap.type = 'link')] + [#if (colmap.type?? && (colmap.type = 'link' || colmap.type = 'uuidLink'))] editor: new Ed(new LinkField({ [#if (colmap.repository??)]repository: '${colmap.repository}',[/#if] [#if (colmap.extension??)]extension: '${colmap.extension}',[/#if] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |