From: <die...@us...> - 2010-06-18 14:10:40
|
Revision: 2678 http://openutils.svn.sourceforge.net/openutils/?rev=2678&view=rev Author: diego_schivo Date: 2010-06-18 14:10:30 +0000 (Fri, 18 Jun 2010) Log Message: ----------- CONTROLS-31 file column type Modified Paths: -------------- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FckEditorGridColumnType.java trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/LinkGridColumnType.java trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/grid/MediaGridColumnType.java Added Paths: ----------- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FileGridColumnType.java Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FckEditorGridColumnType.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FckEditorGridColumnType.java 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FckEditorGridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -20,11 +20,14 @@ package net.sourceforge.openutils.mgnlcontrols.configuration; import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; import info.magnolia.context.MgnlContext; import java.util.Map; +import javax.jcr.RepositoryException; + /** * @author dschivo * @version $Id$ @@ -65,8 +68,8 @@ /** * {@inheritDoc} */ - public String processValueOnSave(String value, Content colConfig) + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException { - return value; } } Added: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FileGridColumnType.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FileGridColumnType.java (rev 0) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FileGridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -0,0 +1,127 @@ +package net.sourceforge.openutils.mgnlcontrols.configuration; + +import info.magnolia.cms.beans.runtime.Document; +import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.HierarchyManager; +import info.magnolia.cms.core.ItemType; +import info.magnolia.cms.core.NodeData; +import info.magnolia.cms.core.Path; +import info.magnolia.cms.gui.fckeditor.FCKEditorTmpFiles; +import info.magnolia.cms.security.AccessDeniedException; +import info.magnolia.cms.util.ContentUtil; +import info.magnolia.context.MgnlContext; +import info.magnolia.module.admininterface.SaveHandlerImpl; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.jcr.RepositoryException; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * @author dschivo + * @version $Id$ + */ +public class FileGridColumnType implements GridColumnType +{ + + private Logger log = LoggerFactory.getLogger(getClass()); + + /** + * {@inheritDoc} + */ + public String getHeadSnippet() + { + return "<script type=\"text/javascript\" src=\"" + + MgnlContext.getContextPath() + + "/.resources/controls/js/FileField.js\"></script>"; + } + + /** + * {@inheritDoc} + */ + public String getColumnModelSnippet(Map colmap) + { + return "editor: new Ed(new FileField({\n" + + "})),\n" + + "renderer : function(v, p, record){\n" + + "return v ? v.replace(/^.*\\//, '') : v;\n" + + "}"; + } + + /** + * {@inheritDoc} + */ + public String processValueOnLoad(String value, Content colConfig) + { + return value; + } + + /** + * {@inheritDoc} + */ + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException + { + String ctx = MgnlContext.getContextPath(); + HierarchyManager hm = parentNode.getHierarchyManager(); + Content filesNode = ContentUtil.getOrCreateContent(parentNode, propertyName + "_files", ItemType.CONTENTNODE); + String tmpPath = "/tmp/fckeditor/"; + List<String> usedFiles = new ArrayList<String>(); + + for (int index = 0; index < column.length; index++) + { + if (StringUtils.isEmpty(column[index])) + { + continue; + } + if (column[index].startsWith(ctx)) + { + String link = StringUtils.removeStart(column[index], 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(); + column[index] = 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 + "]"); + } + } + } + if (column[index].startsWith(filesNode.getHandle())) + { + String fileNodeName = StringUtils.removeStart(column[index], filesNode.getHandle() + "/"); + fileNodeName = StringUtils.substringBefore(fileNodeName, "/"); + usedFiles.add(fileNodeName); + } + } + + for (Iterator<NodeData> iter = filesNode.getNodeDataCollection().iterator(); iter.hasNext();) + { + NodeData fileNodeData = iter.next(); + if (!usedFiles.contains(fileNodeData.getName())) + { + fileNodeData.delete(); + } + } + + } + +} Property changes on: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/FileGridColumnType.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -20,10 +20,13 @@ package net.sourceforge.openutils.mgnlcontrols.configuration; import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; import java.util.Map; +import javax.jcr.RepositoryException; + /** * @author dschivo * @version $Id$ @@ -45,5 +48,6 @@ public String processValueOnLoad(String value, Content colConfig); - public String processValueOnSave(String value, Content colConfig); + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException; } Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/LinkGridColumnType.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/LinkGridColumnType.java 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/LinkGridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -1,12 +1,15 @@ package net.sourceforge.openutils.mgnlcontrols.configuration; import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; import info.magnolia.context.MgnlContext; import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.jcr.RepositoryException; + import org.apache.commons.lang.StringUtils; @@ -55,8 +58,8 @@ /** * {@inheritDoc} */ - public String processValueOnSave(String value, Content colConfig) + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException { - return value; } } Modified: trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java =================================================================== --- trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -2,6 +2,7 @@ import info.magnolia.cms.beans.config.ContentRepository; import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; import info.magnolia.context.MgnlContext; @@ -10,6 +11,8 @@ import java.util.List; import java.util.Map; +import javax.jcr.RepositoryException; + import org.apache.commons.lang.StringUtils; @@ -66,16 +69,22 @@ /** * {@inheritDoc} */ - public String processValueOnSave(String value, Content colConfig) + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException { String repository = StringUtils.defaultIfEmpty( NodeDataUtil.getString(colConfig, "repository"), ContentRepository.WEBSITE); - Content node = ContentUtil.getContent(repository, value); - if (node != null) + for (int index = 0; index < column.length; index++) { - value = node.getUUID(); + if (!StringUtils.isEmpty(column[index])) + { + Content node = ContentUtil.getContent(repository, column[index]); + if (node != null) + { + column[index] = node.getUUID(); + } + } } - return 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-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGridSaveHandler.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -19,24 +19,14 @@ package net.sourceforge.openutils.mgnlcontrols.dialog; -import info.magnolia.cms.beans.runtime.Document; import info.magnolia.cms.beans.runtime.MultipartForm; import info.magnolia.cms.core.Content; -import info.magnolia.cms.core.HierarchyManager; import info.magnolia.cms.core.ItemType; -import info.magnolia.cms.core.NodeData; -import info.magnolia.cms.core.Path; -import info.magnolia.cms.gui.fckeditor.FCKEditorTmpFiles; import info.magnolia.cms.security.AccessDeniedException; -import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; -import info.magnolia.context.MgnlContext; import info.magnolia.module.admininterface.FieldSaveHandler; -import info.magnolia.module.admininterface.SaveHandlerImpl; -import java.io.IOException; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.Map; @@ -45,7 +35,6 @@ import net.sourceforge.openutils.mgnlcontrols.configuration.GridColumnType; import net.sourceforge.openutils.mgnlcontrols.configuration.GridColumnTypeManager; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,6 +56,8 @@ public void save(Content parentNode, Content configNode, String name, MultipartForm form, int type, int valueType, int isRichEditValue, int encoding) throws RepositoryException, AccessDeniedException { + String value = form.getParameter(name); + List<Content> colConfigs = new ArrayList<Content>(); if (configNode != null && configNode.hasContent("columns")) { @@ -75,76 +66,50 @@ Map<String, GridColumnType> colTypeMap = GridColumnTypeManager.getInstance().getColumnTypes(); - HierarchyManager hm = parentNode.getHierarchyManager(); - Content filesNode = ContentUtil.getOrCreateContent(parentNode, name + "_files", ItemType.CONTENTNODE); - String value = form.getParameter(name); - String ctx = MgnlContext.getContextPath(); - String tmpPath = "/tmp/fckeditor/"; - List<String> usedFiles = new ArrayList<String>(); - StringBuffer sbValue = new StringBuffer(value.length()); - StringBuffer sbLine = new StringBuffer(); - for (String line : StringUtils.splitPreserveAllTokens(value, '\n')) + List<String[]> columns = new ArrayList<String[]>(); + String[] allRows = StringUtils.splitPreserveAllTokens(value, '\n'); + int rowIndex = 0; + int colIndex; + for (String row : allRows) { - line = StringUtils.removeEnd(line, "\r"); - int colIndex = 0; - for (String token : StringUtils.splitPreserveAllTokens(line, '\t')) + row = StringUtils.removeEnd(row, "\r"); + colIndex = 0; + for (String token : StringUtils.splitPreserveAllTokens(row, '\t')) { - if (colIndex < colConfigs.size()) + if (columns.size() < colIndex + 1) { - Content colConfig = colConfigs.get(colIndex); - String colTypeName = NodeDataUtil.getString(colConfig, "type"); - GridColumnType colType = colTypeMap.get(colTypeName); - if (colType != null) - { - token = colType.processValueOnSave(token, colConfig); - } - else if ("file".equals(colTypeName)) - { - if (token.startsWith(ctx)) - { - 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 - + "]"); - } - } - } - if (token.startsWith(filesNode.getHandle())) - { - String fileNodeName = StringUtils.removeStart(token, filesNode.getHandle() + "/"); - fileNodeName = StringUtils.substringBefore(fileNodeName, "/"); - usedFiles.add(fileNodeName); - } - } + columns.add(new String[allRows.length]); } + columns.get(colIndex)[rowIndex] = token; + colIndex++; + } + rowIndex++; + } + + colIndex = 0; + for (Content colConfig : colConfigs) + { + String colTypeName = NodeDataUtil.getString(colConfig, "type"); + GridColumnType colType = colTypeMap.get(colTypeName); + if (colType != null && colIndex < columns.size()) + { + colType.processValueOnSave(columns.get(colIndex), colConfig, name, parentNode); + } + colIndex++; + } + + StringBuilder sbValue = new StringBuilder(value.length()); + StringBuilder sbLine = new StringBuilder(); + for (rowIndex = 0; rowIndex < allRows.length; rowIndex++) + { + colIndex = 0; + for (String[] column : columns) + { if (colIndex > 0) { sbLine.append('\t'); } - sbLine.append(token); + sbLine.append(StringUtils.defaultString(column[rowIndex])); colIndex++; } if (sbValue.length() > 0) @@ -154,14 +119,7 @@ sbValue.append(sbLine); sbLine.setLength(0); } - for (Iterator<NodeData> iter = filesNode.getNodeDataCollection().iterator(); iter.hasNext();) - { - NodeData fileNodeData = iter.next(); - if (!usedFiles.contains(fileNodeData.getName())) - { - fileNodeData.delete(); - } - } + NodeDataUtil.getOrCreateAndSet(parentNode, name, new String(sbValue)); } Modified: trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl =================================================================== --- trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlcontrols/src/main/resources/dialogs/grid.ftl 2010-06-18 14:10:30 UTC (rev 2678) @@ -8,7 +8,6 @@ [/#if] <script type="text/javascript" src="${request.contextPath}/.resources/controls/js/CheckColumn.js"></script> <script type="text/javascript" src="${request.contextPath}/.resources/controls/js/PipeComboBox.js"></script> - <script type="text/javascript" src="${request.contextPath}/.resources/controls/js/FileField.js"></script> <script type="text/javascript" src="${request.contextPath}/.resources/controls/js/ColorField.js"></script> <script type="text/javascript"> @@ -153,12 +152,6 @@ lazyRender: true, listClass: 'x-combo-list-small' })) - [#elseif (colmap.type?? && colmap.type = 'file')] - editor: new Ed(new FileField({ - })), - renderer : function(v, p, record){ - return v ? v.replace(/^.*\//, '') : v; - } [#elseif (colmap.type?? && colmap.type = 'color')] editor: new Ed(new Ext.ux.ColorField({ })), Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/grid/MediaGridColumnType.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/grid/MediaGridColumnType.java 2010-06-18 13:14:42 UTC (rev 2677) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/grid/MediaGridColumnType.java 2010-06-18 14:10:30 UTC (rev 2678) @@ -20,12 +20,15 @@ package net.sourceforge.openutils.mgnlmedia.grid; import info.magnolia.cms.core.Content; +import info.magnolia.cms.security.AccessDeniedException; import info.magnolia.cms.util.ContentUtil; import info.magnolia.cms.util.NodeDataUtil; import info.magnolia.context.MgnlContext; import java.util.Map; +import javax.jcr.RepositoryException; + import net.sourceforge.openutils.mgnlcontrols.configuration.GridColumnType; import net.sourceforge.openutils.mgnlmedia.media.lifecycle.MediaModule; @@ -90,17 +93,23 @@ /** * {@inheritDoc} */ - public String processValueOnSave(String value, Content colConfig) + public void processValueOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException { String mediaValueType = StringUtils.defaultIfEmpty(NodeDataUtil.getString(colConfig, "valueType"), "uuid"); if ("uuid".equals(mediaValueType)) { - if (StringUtils.startsWith(value, "/")) + for (int index = 0; index < column.length; index++) { - Content node = ContentUtil.getContentByUUID(MediaModule.REPO, value); - value = node != null ? node.getUUID() : value; + if (StringUtils.startsWith(column[index], "/")) + { + Content node = ContentUtil.getContentByUUID(MediaModule.REPO, column[index]); + if (node != null) + { + column[index] = node.getUUID(); + } + } } } - return value; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |