1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.ecm.webui.component.explorer.upload;
18
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import javax.jcr.Node;
23 import javax.jcr.Value;
24 import javax.jcr.nodetype.NodeTypeManager;
25 import javax.jcr.nodetype.PropertyDefinition;
26
27 import org.exoplatform.services.log.Log;
28 import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer;
29 import org.exoplatform.ecm.webui.form.UIDialogForm;
30 import org.exoplatform.resolver.ResourceResolver;
31 import org.exoplatform.services.cms.metadata.MetadataService;
32 import org.exoplatform.services.log.ExoLogger;
33 import org.exoplatform.webui.application.WebuiRequestContext;
34 import org.exoplatform.webui.config.annotation.ComponentConfig;
35 import org.exoplatform.webui.config.annotation.ComponentConfigs;
36 import org.exoplatform.webui.config.annotation.EventConfig;
37 import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
38 import org.exoplatform.webui.event.Event;
39 import org.exoplatform.webui.event.EventListener;
40 import org.exoplatform.webui.event.Event.Phase;
41 import org.exoplatform.webui.form.UIFormDateTimeInput;
42 import org.exoplatform.webui.form.UIFormInput;
43 import org.exoplatform.webui.form.UIFormMultiValueInputSet;
44 import org.exoplatform.webui.form.UIFormSelectBox;
45 import org.exoplatform.webui.form.UIFormStringInput;
46 import org.exoplatform.webui.form.input.UICheckBoxInput;
47
48
49
50
51
52
53
54 @ComponentConfigs( {
55 @ComponentConfig(type = UIFormMultiValueInputSet.class, id = "WYSIWYGRichTextMultipleInputset",
56 events = {
57 @EventConfig(listeners = UIDialogForm.AddActionListener.class, phase = Phase.DECODE),
58 @EventConfig(listeners = UIFormMultiValueInputSet.RemoveActionListener.class, phase = Phase.DECODE) }),
59 @ComponentConfig(lifecycle = UIFormLifecycle.class, events = {
60 @EventConfig(listeners = UIAddMetadataForm.SaveActionListener.class),
61 @EventConfig(listeners = UIAddMetadataForm.CancelActionListener.class, phase = Phase.DECODE),
62 @EventConfig(listeners = UIAddMetadataForm.AddActionListener.class, phase = Phase.DECODE),
63 @EventConfig(listeners = UIAddMetadataForm.RemoveActionListener.class, phase = Phase.DECODE) }) })
64 public class UIAddMetadataForm extends UIDialogForm {
65 private static final Log LOG = ExoLogger.getLogger(UIAddMetadataForm.class.getName());
66 private String nodeType_ ;
67 public UIAddMetadataForm() throws Exception {
68 setActions(ACTIONS) ;
69 }
70
71 public void setNodeType(String nodeType) { nodeType_ = nodeType ; }
72 public String getNodeType() { return nodeType_ ; }
73
74 public String getDialogTemplatePath() {
75 repositoryName = getAncestorOfType(UIJCRExplorer.class).getRepositoryName() ;
76 MetadataService metadataService = getApplicationComponent(MetadataService.class) ;
77 try {
78 return metadataService.getMetadataPath(nodeType_, true) ;
79 } catch (Exception e) {
80 if (LOG.isErrorEnabled()) {
81 LOG.error("Unexpected error", e);
82 }
83 }
84 return null ;
85 }
86
87 public String getTemplate() { return getDialogTemplatePath() ; }
88
89 @SuppressWarnings("unused")
90 public ResourceResolver getTemplateResourceResolver(WebuiRequestContext context, String template) {
91 return getAncestorOfType(UIJCRExplorer.class).getJCRTemplateResourceResolver() ;
92 }
93
94 @SuppressWarnings("unchecked")
95 static public class SaveActionListener extends EventListener<UIAddMetadataForm> {
96 public void execute(Event<UIAddMetadataForm> event) throws Exception {
97 UIAddMetadataForm uiForm = event.getSource();
98 UIJCRExplorer uiJCRExplorer = uiForm.getAncestorOfType(UIJCRExplorer.class) ;
99 UIUploadContainer uiUploadContainer = uiForm.getAncestorOfType(UIUploadContainer.class) ;
100 Node node = uiUploadContainer.getEditNode(uiForm.nodeType_) ;
101 NodeTypeManager ntManager = uiJCRExplorer.getSession().getWorkspace().getNodeTypeManager();
102 PropertyDefinition[] props = ntManager.getNodeType(uiForm.getNodeType()).getPropertyDefinitions();
103 List<Value> valueList = new ArrayList<Value>();
104 try {
105 for (PropertyDefinition prop : props) {
106 String name = prop.getName();
107 String inputName = uiForm.fieldNames.get(name) ;
108 if (!prop.isProtected()) {
109 int requiredType = prop.getRequiredType();
110 if (prop.isMultiple()) {
111 if (requiredType == 5) {
112 UIFormDateTimeInput uiFormDateTime = (UIFormDateTimeInput) uiForm.getUIInput(inputName);
113 valueList.add(uiJCRExplorer.getSession().getValueFactory().createValue(uiFormDateTime.getCalendar())) ;
114 node.setProperty(name, valueList.toArray(new Value[] {}));
115 } else {
116 if (((UIFormInput)uiForm.getUIInput(inputName)) instanceof UIFormSelectBox){
117 node.setProperty(name, ((UIFormSelectBox)uiForm.getUIInput(inputName)).getSelectedValues());
118 }else {
119 List<String> values=(List<String>) ((UIFormMultiValueInputSet)uiForm.getUIInput(inputName)).getValue() ;
120 node.setProperty(name, values.toArray(new String[values.size()]));
121 }
122 }
123 } else {
124 if (requiredType == 6) {
125 UIFormInput uiInput = uiForm.getUIInput(inputName) ;
126 boolean value = false;
127
128 if(uiInput instanceof UIFormSelectBox){
129 value = Boolean.parseBoolean(((UIFormSelectBox)uiInput).getValue());
130 }else if( uiInput instanceof UICheckBoxInput){
131 value = ((UICheckBoxInput)uiInput).isChecked();
132 }
133 node.setProperty(name, value);
134 } else if (requiredType == 5) {
135 UIFormDateTimeInput cal = (UIFormDateTimeInput) uiForm.getUIInput(inputName);
136 node.setProperty(name, cal.getCalendar());
137 } else if(requiredType == 1) {
138 String value = ((UIFormStringInput)uiForm.getUIInput(inputName)).getValue() ;
139 if(value == null) value = "" ;
140 node.setProperty(name, value);
141 }
142 }
143 }
144 }
145 } catch (Exception e) {
146 UIUploadManager uiUploadManager = uiUploadContainer.getParent();
147 uiUploadManager.initMetadataPopup();
148 event.getRequestContext().addUIComponentToUpdateByAjax(uiUploadManager);
149 }
150 node.save();
151 node.getSession().save();
152 uiUploadContainer.setRenderedChild(UIUploadContent.class) ;
153 uiUploadContainer.removeChild(UIAddMetadataForm.class) ;
154 event.getRequestContext().addUIComponentToUpdateByAjax(uiUploadContainer) ;
155 }
156 }
157
158 static public class CancelActionListener extends EventListener<UIAddMetadataForm> {
159 public void execute(Event<UIAddMetadataForm> event) throws Exception {
160 UIUploadContainer uiUploadContainer = event.getSource().getParent() ;
161 uiUploadContainer.removeChild(UIAddMetadataForm.class) ;
162 uiUploadContainer.setRenderedChild(UIUploadContent.class) ;
163 event.getRequestContext().addUIComponentToUpdateByAjax(uiUploadContainer) ;
164 }
165 }
166
167 static public class AddActionListener extends EventListener<UIAddMetadataForm> {
168 public void execute(Event<UIAddMetadataForm> event) throws Exception {
169 event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource().getParent()) ;
170 }
171 }
172
173 static public class RemoveActionListener extends EventListener<UIAddMetadataForm> {
174 public void execute(Event<UIAddMetadataForm> event) throws Exception {
175 event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource().getParent()) ;
176 }
177 }
178 }