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.lang.StringUtils;
50
51 import com.vaadin.data.Item;
52
53
54
55
56
57
58
59
60
61
62 public class SaveAssetFormAction extends SaveFormAction {
63
64 public SaveAssetFormAction(SaveFormActionDefinition definition, Item item, EditorCallback callback, EditorValidator validator) {
65 super(definition, (JcrNodeAdapter) item, callback, validator);
66 }
67
68 @Override
69 protected void setNodeName(Node assetNode, JcrNodeAdapter item) throws RepositoryException {
70
71 if (item instanceof JcrNewNodeAdapter) {
72
73 Node resourceNode = AssetNodeTypes.AssetResource.getResourceNodeFromAsset(assetNode);
74 String fileName = extractFileName(resourceNode);
75
76 if (StringUtils.isNotBlank(fileName)) {
77 setAssetPropertyName(item, assetNode, fileName);
78
79 String newNodeName = generateUniqueNodeNameForAsset(assetNode, fileName);
80
81 item.setNodeName(newNodeName);
82 NodeUtil.renameNode(assetNode, newNodeName);
83 }
84 }
85 }
86
87 public static String extractFileName(Node resourceNode) throws RepositoryException {
88 String fileName = StringUtils.EMPTY;
89 if (resourceNode != null) {
90 if (resourceNode.hasProperty(AssetNodeTypes.AssetResource.FILENAME) && StringUtils.isNotBlank(resourceNode.getProperty(AssetNodeTypes.AssetResource.FILENAME).getString())) {
91 fileName = resourceNode.getProperty(AssetNodeTypes.AssetResource.FILENAME).getString();
92 }
93 }
94 return fileName;
95 }
96
97 public static void setAssetPropertyName(Item item, Node assetNode, String fileName) throws RepositoryException {
98
99 if (item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME) == null ||
100 item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME).getValue() == null ||
101 StringUtils.isBlank(item.getItemProperty(AssetNodeTypes.Asset.ASSET_NAME).getValue().toString())) {
102 assetNode.setProperty(AssetNodeTypes.Asset.ASSET_NAME, fileName);
103 }
104 }
105
106
107
108
109 public static String generateUniqueNodeNameForAsset(final Node node, String newNodeName) throws RepositoryException {
110 newNodeName = StringUtils.substringBeforeLast(newNodeName, ".");
111 return Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
112 }
113
114
115 }