1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.dam.app.assets.form.action;
35
36 import info.magnolia.cms.core.Path;
37 import info.magnolia.dam.jcr.AssetNodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.ui.form.EditorCallback;
40 import info.magnolia.ui.form.EditorValidator;
41 import info.magnolia.ui.form.action.SaveFormAction;
42 import info.magnolia.ui.form.action.SaveFormActionDefinition;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter;
44 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
45
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48
49 import org.apache.commons.io.FilenameUtils;
50 import org.apache.commons.lang3.StringUtils;
51
52 import com.vaadin.v7.data.Item;
53
54
55
56
57
58
59
60
61
62
63
64
65 public class SaveAssetFormAction extends SaveFormAction {
66
67 public SaveAssetFormAction(SaveFormActionDefinition definition, Item item, EditorCallback callback, EditorValidator validator) {
68 super(definition, (JcrNodeAdapter) item, callback, validator);
69 }
70
71 @Override
72 protected void setNodeName(Node assetNode, JcrNodeAdapter item) throws RepositoryException {
73
74 if (item instanceof JcrNewNodeAdapter) {
75
76 Node resourceNode = AssetNodeTypes.AssetResource.getResourceNodeFromAsset(assetNode);
77 String fileName = extractFileName(resourceNode);
78
79 if (StringUtils.isNotBlank(fileName)) {
80 setAssetPropertyName(item, assetNode, fileName);
81
82 String newNodeName = generateUniqueNodeNameForAsset(assetNode, fileName);
83
84 item.setNodeName(newNodeName);
85 NodeUtil.renameNode(assetNode, newNodeName);
86 }
87 }
88 }
89
90 public static String extractFileName(Node resourceNode) throws RepositoryException {
91 String fileName = StringUtils.EMPTY;
92 if (resourceNode != null) {
93 if (resourceNode.hasProperty(AssetNodeTypes.AssetResource.FILENAME) && StringUtils.isNotBlank(resourceNode.getProperty(AssetNodeTypes.AssetResource.FILENAME).getString())) {
94 fileName = resourceNode.getProperty(AssetNodeTypes.AssetResource.FILENAME).getString();
95 }
96 }
97 return fileName;
98 }
99
100 public static void setAssetPropertyName(Item item, Node assetNode, String fileName) throws RepositoryException {
101
102 if (item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME) == null ||
103 item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME).getValue() == null ||
104 StringUtils.isBlank(item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME).getValue().toString())) {
105 assetNode.setProperty(AssetNodeTypes.Asset.ASSET_NAME, FilenameUtils.removeExtension(fileName));
106 }
107 }
108
109
110
111
112 public static String generateUniqueNodeNameForAsset(final Node node, String newNodeName) throws RepositoryException {
113 return Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
114 }
115
116
117 }