diff --git a/src/main/java/info/magnolia/dam/commands/ImportAssetZipCommand.java b/src/main/java/info/magnolia/dam/commands/ImportAssetZipCommand.java index b118e34..4f3449d 100644 --- a/src/main/java/info/magnolia/dam/commands/ImportAssetZipCommand.java +++ b/src/main/java/info/magnolia/dam/commands/ImportAssetZipCommand.java @@ -1,5 +1,5 @@ /** - * This file Copyright (c) 2013 Magnolia International + * This file Copyright (c) 2013-2014 Magnolia International * Ltd. (http://www.magnolia-cms.com). All rights reserved. * * @@ -33,28 +33,23 @@ */ package info.magnolia.dam.commands; -import info.magnolia.cms.beans.runtime.FileProperties; import info.magnolia.cms.core.Path; import info.magnolia.dam.DamModule; import info.magnolia.dam.DamNodeTypes; import info.magnolia.dam.asset.field.DamFileItemWrapper; import info.magnolia.i18nsystem.SimpleTranslator; import info.magnolia.jcr.util.NodeTypes; -import info.magnolia.jcr.util.NodeUtil; -import info.magnolia.ui.framework.command.ImportZipCommand; import info.magnolia.ui.form.field.upload.UploadReceiver; +import info.magnolia.ui.framework.command.ImportZipCommand; import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter; import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter; import javax.inject.Inject; -import javax.jcr.Item; import javax.jcr.Node; import javax.jcr.RepositoryException; import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.JcrConstants; - -import com.vaadin.data.Property; /** * Imports assets stored in zip archive into "dam" workspace. @@ -71,42 +66,26 @@ @Override protected void doHandleEntryFromReceiver(Node parentFolder, UploadReceiver receiver) throws RepositoryException { - JcrNodeAdapter folderNodeAdapter = new JcrNodeAdapter(parentFolder); - - String newAssetName = receiver.getFileName(); - JcrNodeAdapter resourceNode = new JcrNewNodeAdapter(parentFolder, NodeTypes.Resource.NAME, JcrConstants.JCR_CONTENT); - JcrNewNodeAdapter newAsset = new JcrNewNodeAdapter(parentFolder, DamNodeTypes.Asset.NAME, newAssetName); - resourceNode.setParent(newAsset); - - new DamFileItemWrapper(resourceNode, Path.getTempDirectory(), dam).populateFromReceiver(receiver); - - newAsset.setParent(folderNodeAdapter); - - Node newAssetNode = newAsset.applyChanges(); - - String fileName = extractFileName(resourceNode); - if (StringUtils.isNotBlank(fileName)) { - newAssetNode.setProperty("name", fileName); - String newNodeName = generateUniqueNodeNameForAsset(newAssetNode, fileName); - newAsset.setNodeName(newNodeName); - NodeUtil.renameNode(newAssetNode, newNodeName); + String assetName = StringUtils.removeEnd(receiver.getFileName(), "." + receiver.getExtension()); + JcrNodeAdapter resourceItem = null; + JcrNodeAdapter assetItem = null; + // Get the existing asset or create one new + if (parentFolder.hasNode(assetName)) { + assetItem = new JcrNodeAdapter(parentFolder.getNode(assetName)); + resourceItem = new JcrNodeAdapter(parentFolder.getNode(assetName).getNode(JcrConstants.JCR_CONTENT)); + } else { + assetItem = new JcrNewNodeAdapter(parentFolder, DamNodeTypes.Asset.NAME, assetName); + resourceItem = new JcrNewNodeAdapter(parentFolder, NodeTypes.Resource.NAME, JcrConstants.JCR_CONTENT); } + // Link the resource to the Asset Item + resourceItem.setParent(assetItem); + // Populate the resourceItem based on the receiver + new DamFileItemWrapper(resourceItem, Path.getTempDirectory(), dam).populateFromReceiver(receiver); + + Node assetNode = assetItem.applyChanges(); + // Set the Asset name property + assetNode.setProperty("name", assetName); + } - private String extractFileName(JcrNodeAdapter resourceNode) { - String fileName = null; - Property fileNameProperty = resourceNode.getItemProperty(FileProperties.PROPERTY_FILENAME); - boolean hasFilenameProperty = fileNameProperty != null; - if (hasFilenameProperty) { - fileName = (String)fileNameProperty.getValue(); - } - return fileName; - } - - /** - * Create a new Node Unique NodeName. - */ - private String generateUniqueNodeNameForAsset(final Item item, String newNodeName) throws RepositoryException { - return Path.getUniqueLabel(item.getSession(), item.getParent().getPath(), Path.getValidatedLabel(newNodeName)); - } }