From: <die...@us...> - 2012-07-18 13:38:36
|
Revision: 4107 http://openutils.svn.sourceforge.net/openutils/?rev=4107&view=rev Author: diego_schivo Date: 2012-07-18 13:38:26 +0000 (Wed, 18 Jul 2012) Log Message: ----------- CONTROLS-51 Grid: add the possibility to store editcode columns into binary properties Modified Paths: -------------- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/AbstractGridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/CheckboxGridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/ComboGridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/EditCodeGridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/AbstractGridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/AbstractGridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/AbstractGridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -85,7 +85,7 @@ /** * {@inheritDoc} */ - public void processColumnOnLoad(String[] column, Content colConfig) + public void processColumnOnLoad(String[] column, Content colConfig, String propertyName, Content storageNode) { } Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/CheckboxGridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/CheckboxGridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/CheckboxGridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -83,7 +83,7 @@ /** * {@inheritDoc} */ - public void processColumnOnLoad(String[] column, Content colConfig) + public void processColumnOnLoad(String[] column, Content colConfig, String propertyName, Content storageNode) { // TODO Auto-generated method stub Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/ComboGridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/ComboGridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/ComboGridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -49,6 +49,7 @@ result.append("/.resources/controls/js/PipeComboBox.js\"></script>"); // Combobox must be patched because of a bug. For reference, see: // http://www.sencha.com/forum/showthread.php?17465-1.1.1-Local-ComboBox-data-store-filter-not-cleared-on-call-to-setValue%28%29 + result.append("<script type=\"text/javascript\">"); result.append("var PatchedComboBox = Ext.extend(Ext.form.ComboBox, {"); result.append(" setValue: function(v) {"); result.append(" this.store.clearFilter();"); Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/EditCodeGridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/EditCodeGridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/EditCodeGridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -19,12 +19,35 @@ 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.i18n.Messages; +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.SaveHandlerImpl; +import java.io.File; +import java.io.IOException; +import java.util.Iterator; import java.util.Map; +import javax.jcr.RepositoryException; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.safehaus.uuid.UUIDGenerator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + /** * @author diego * @version $Id: $ @@ -32,6 +55,18 @@ public class EditCodeGridColumnType extends AbstractGridColumnType { + public static String escapeEditCodeGridColumnValue(String value) + { + return StringEscapeUtils.escapeXml(StringEscapeUtils.escapeJava(value)); + } + + public static String unescapeEditCodeGridColumnValue(String value) + { + return StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeXml(value)); + } + + private Logger log = LoggerFactory.getLogger(getClass()); + /** * {@inheritDoc} */ @@ -47,6 +82,110 @@ * {@inheritDoc} */ @Override + public void processColumnOnLoad(String[] column, Content colConfig, String propertyName, Content storageNode) + { + if (NodeDataUtil.getBoolean(colConfig, "binary", false)) + { + HierarchyManager hm = storageNode.getHierarchyManager(); + for (int index = 0; index < column.length; index++) + { + String value = StringUtils.EMPTY; + String link = StringUtils.trim(column[index]); + if (StringUtils.isNotBlank(link)) + { + NodeData nodeData = null; + try + { + nodeData = hm.getNodeData(storageNode.getHandle() + + "/" + + StringUtils.substringBeforeLast(link, "/")); + } + catch (RepositoryException e) + { + log.warn(e.getMessage(), e); + } + if (nodeData != null) + { + try + { + value = escapeEditCodeGridColumnValue(StringUtils.join( + IOUtils.readLines(nodeData.getStream(), "UTF-8"), + '\n')); + } + catch (Exception e) + { + log.warn(e.getMessage(), e); + } + } + } + column[index] = value; + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public void processColumnOnSave(String[] column, Content colConfig, String propertyName, Content parentNode) + throws RepositoryException, AccessDeniedException + { + if (NodeDataUtil.getBoolean(colConfig, "binary", false)) + { + String filename = NodeDataUtil.getString(colConfig, "binaryFilename", "file.txt"); + String type = NodeDataUtil.getString(colConfig, "binaryType", "text/plain"); + HierarchyManager hm = parentNode.getHierarchyManager(); + Content filesNode = ContentUtil.getOrCreateContent(parentNode, propertyName + + "_" + + colConfig.getName() + + "_files", ItemType.CONTENTNODE); + + for (Iterator<NodeData> iter = filesNode.getNodeDataCollection().iterator(); iter.hasNext();) + { + NodeData fileNodeData = iter.next(); + fileNodeData.delete(); + } + + String uuid = UUIDGenerator.getInstance().generateTimeBasedUUID().toString(); + File tmpDir = new File(Path.getTempDirectoryPath() + "/fckeditor/" + uuid); + for (int index = 0; index < column.length; index++) + { + if (StringUtils.isEmpty(column[index])) + { + continue; + } + File tmpFile = new File(tmpDir, filename); + try + { + FileUtils.writeStringToFile(tmpFile, unescapeEditCodeGridColumnValue(column[index]), "UTF-8"); + } + catch (IOException e) + { + log.error("can't write to tmp file [" + tmpFile + "]"); + } + Document doc = new Document(tmpFile, type); + String fileNodeName = Path.getUniqueLabel(hm, filesNode.getHandle(), "file"); + SaveHandlerImpl.saveDocument(filesNode, doc, fileNodeName, "", ""); + String link = filesNode.getName() + "/" + 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 + "]"); + } + } + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("rawtypes") + @Override protected void addColumnData(Map<String, String> column, String propertyName, int colIndex, Map colMap, Messages msgs) { Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/GridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -67,8 +67,10 @@ * Possibly transforms the column values on grid load. * @param column * @param colConfig + * @param propertyName + * @param storageNode */ - public void processColumnOnLoad(String[] column, Content colConfig); + public void processColumnOnLoad(String[] column, Content colConfig, String propertyName, Content storageNode); /** * Possibly transforms the column values on grid save. Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/configuration/UUIDLinkGridColumnType.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -82,7 +82,7 @@ * {@inheritDoc} */ @Override - public void processColumnOnLoad(String[] column, Content colConfig) + public void processColumnOnLoad(String[] column, Content colConfig, String propertyName, Content storageNode) { String repository = StringUtils.defaultIfEmpty( NodeDataUtil.getString(colConfig, "repository"), Modified: magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java =================================================================== --- magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java 2012-07-17 16:56:01 UTC (rev 4106) +++ magnoliamodules/branches/magnolia44/openutils-mgnlcontrols/src/main/java/net/sourceforge/openutils/mgnlcontrols/dialog/DialogGrid.java 2012-07-18 13:38:26 UTC (rev 4107) @@ -105,7 +105,7 @@ GridColumnType colType = colTypeMap.get(colTypeName); if (colType != null) { - colType.processColumnOnLoad(column, colConfig); + colType.processColumnOnLoad(column, colConfig, getName(), getStorageNode()); } } colIndex++; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |