|
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.
|