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.ui.contentapp.browser.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.event.AdmincentralEventBus;
40 import info.magnolia.ui.api.event.ContentChangedEvent;
41 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
42 import info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
44 import info.magnolia.ui.vaadin.integration.jcr.JcrPropertyAdapter;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrPropertyItemId;
46
47 import java.util.Set;
48
49 import javax.inject.Inject;
50 import javax.inject.Named;
51 import javax.jcr.Node;
52 import javax.jcr.RepositoryException;
53
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56
57 import com.vaadin.v7.data.Item;
58 import com.vaadin.v7.data.Property;
59
60
61
62
63
64
65
66
67 @Deprecated
68 public class SaveItemPropertyAction extends AbstractAction<SaveItemPropertyActionDefinition> {
69
70 private static final Logger log = LoggerFactory.getLogger(SaveItemPropertyAction.class);
71 private final EventBus eventBus;
72 private final ContentConnector contentConnector;
73 private final Object itemId;
74 private final Object propertyId;
75 private final Property<?> propertyDataSource;
76
77 @Inject
78 public SaveItemPropertyAction(SaveItemPropertyActionDefinition definition, @Named(AdmincentralEventBus.NAME) EventBus eventBus, ContentConnector contentConnector, Object... args) {
79 super(definition);
80 this.eventBus = eventBus;
81 this.contentConnector = contentConnector;
82 this.itemId = ((Set<Object>) args[0]).iterator().next();
83 this.propertyId = args[1];
84 this.propertyDataSource = (Property<?>) args[2];
85 }
86
87 @Override
88 public void execute() throws ActionExecutionException {
89
90 Item item = contentConnector.getItem(itemId);
91
92 if (!(item instanceof JcrItemAdapter)) {
93 return;
94 }
95
96 Property itemProperty = item.getItemProperty(propertyId);
97 itemProperty.setValue(propertyDataSource.getValue());
98
99
100 if (!((JcrItemAdapter) item).hasChangedProperties()) {
101 return;
102 }
103
104 if (item instanceof AbstractJcrNodeAdapter) {
105
106 AbstractJcrNodeAdaptero/magnolia/ui/vaadin/integration/jcr/AbstractJcrNodeAdapter.html#AbstractJcrNodeAdapter">AbstractJcrNodeAdapter nodeAdapter = (AbstractJcrNodeAdapter) item;
107 try {
108
109 Node node = nodeAdapter.applyChanges();
110 node.getSession().save();
111 } catch (RepositoryException e) {
112 log.error("Could not save changes to node", e);
113 }
114
115 } else if (item instanceof JcrPropertyAdapter) {
116
117 JcrPropertyAdaptero/magnolia/ui/vaadin/integration/jcr/JcrPropertyAdapter.html#JcrPropertyAdapter">JcrPropertyAdapter propertyAdapter = (JcrPropertyAdapter) item;
118 try {
119
120 Node parent = propertyAdapter.getJcrItem().getParent();
121
122
123 propertyAdapter.applyChanges();
124 parent.getSession().save();
125
126
127 JcrPropertyItemId newItemId = propertyAdapter.getItemId();
128 eventBus.fireEvent(new ContentChangedEvent(newItemId));
129 } catch (RepositoryException e) {
130 log.error("Could not save changes to property", e);
131 }
132 }
133 }
134
135 }