1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.ecm.webui.component.admin.metadata;
18
19 import org.exoplatform.commons.utils.LazyPageList;
20 import org.exoplatform.commons.utils.ListAccess;
21 import org.exoplatform.commons.utils.ListAccessImpl;
22 import org.exoplatform.ecm.webui.core.UIPagingGridDecorator;
23 import org.exoplatform.ecm.webui.utils.Utils;
24 import org.exoplatform.services.cms.metadata.MetadataService;
25 import org.exoplatform.web.application.ApplicationMessage;
26 import org.exoplatform.webui.config.annotation.ComponentConfig;
27 import org.exoplatform.webui.config.annotation.EventConfig;
28 import org.exoplatform.webui.core.UIApplication;
29 import org.exoplatform.webui.event.Event;
30 import org.exoplatform.webui.event.EventListener;
31
32 import javax.jcr.PathNotFoundException;
33 import javax.jcr.nodetype.NodeType;
34 import javax.jcr.nodetype.PropertyDefinition;
35 import java.util.ArrayList;
36 import java.util.Collections;
37 import java.util.List;
38
39
40
41
42
43
44
45
46 @ComponentConfig(
47 template = "app:/groovy/webui/component/admin/metadata/UIMetadataList.gtmpl",
48 events = {
49 @EventConfig(listeners = UIMetadataList.ViewActionListener.class),
50 @EventConfig(listeners = UIMetadataList.EditActionListener.class),
51 @EventConfig(listeners = UIMetadataList.DeleteActionListener.class, confirm="UIMetadataList.msg.confirm-delete")
52 }
53 )
54 public class UIMetadataList extends UIPagingGridDecorator {
55
56 final static public String INTERNAL_USE = "exo:internalUse" ;
57
58 public UIMetadataList() throws Exception {
59 getUIPageIterator().setId("MetaDataListIterator");
60 }
61
62 public void refresh(int currentPage) throws Exception {
63 ListAccess<Metadata> metaDataList = new ListAccessImpl<Metadata>(Metadata.class, getAllMetadatas());
64 LazyPageList<Metadata> pageList = new LazyPageList<Metadata>(metaDataList, getUIPageIterator().getItemsPerPage());
65 getUIPageIterator().setPageList(pageList);
66 if (currentPage > getUIPageIterator().getAvailablePage())
67 getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
68 else
69 getUIPageIterator().setCurrentPage(currentPage);
70 }
71
72 public List<Metadata> getAllMetadatas() throws Exception {
73 List<Metadata> metadatas = new ArrayList<Metadata>() ;
74 MetadataService metadataService = getApplicationComponent(MetadataService.class) ;
75 List<NodeType> nodetypes = metadataService.getAllMetadatasNodeType() ;
76 Collections.sort(nodetypes, new Utils.NodeTypeNameComparator()) ;
77 for(NodeType nt : nodetypes) {
78 Metadata mt = new Metadata() ;
79 mt.setName(nt.getName()) ;
80 mt.isTemplate(metadataService.hasMetadata(nt.getName())) ;
81 mt.setLabel(metadataService.getMetadataLabel(nt.getName()));
82 for(PropertyDefinition def : nt.getPropertyDefinitions()) {
83 if(def.getName().equals(INTERNAL_USE)) {
84 if(def.getDefaultValues() != null && def.getDefaultValues()[0].getBoolean()) {
85 mt.setInternalUse("True") ;
86 } else {
87 mt.setInternalUse("False") ;
88 }
89 metadatas.add(mt) ;
90 break;
91 }
92 }
93 }
94 return metadatas ;
95 }
96
97 public List getListMetadata() throws Exception {
98 return getUIPageIterator().getCurrentPageData() ;
99 }
100
101 static public class ViewActionListener extends EventListener<UIMetadataList> {
102 public void execute(Event<UIMetadataList> event) throws Exception {
103 UIMetadataList uiMetaList = event.getSource() ;
104 String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
105 UIMetadataManager uiManager = uiMetaList.getParent() ;
106 uiManager.removeChildById(UIMetadataManager.VIEW_METADATA_POPUP) ;
107 uiManager.initViewPopup(metadataName) ;
108 event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
109 }
110 }
111
112 static public class EditActionListener extends EventListener<UIMetadataList> {
113 public void execute(Event<UIMetadataList> event) throws Exception {
114 UIMetadataList uiMetaList = event.getSource() ;
115 String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
116 UIMetadataManager uiManager = uiMetaList.getParent() ;
117 uiManager.initPopup() ;
118 UIMetadataForm uiForm = uiManager.findFirstComponentOfType(UIMetadataForm.class) ;
119 uiForm.update(metadataName) ;
120 event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
121 }
122 }
123
124 static public class DeleteActionListener extends EventListener<UIMetadataList> {
125 public void execute(Event<UIMetadataList> event) throws Exception {
126 UIMetadataList uiMetaList = event.getSource() ;
127 String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
128 UIMetadataManager uiManager = uiMetaList.getParent() ;
129 MetadataService metadataService = uiMetaList.getApplicationComponent(MetadataService.class) ;
130 UIApplication uiApp = uiMetaList.getAncestorOfType(UIApplication.class);
131 try {
132 metadataService.removeMetadata(metadataName);
133 org.exoplatform.services.cms.impl.Utils.addEditedConfiguredData(metadataName, "ContentTemplateList",
134 "EditedConfiguredTemplateList", true);
135 } catch(PathNotFoundException ex) {
136 uiApp.addMessage(new ApplicationMessage("UIMetadataList.msg.path-not-found-exception", null, ApplicationMessage.WARNING));
137 return;
138 }
139 uiMetaList.refresh(uiMetaList.getUIPageIterator().getCurrentPage());
140 event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
141 Object[] args = {metadataName} ;
142 uiApp.addMessage(new ApplicationMessage("UIMetadataList.msg.delete-successful", args)) ;
143 }
144 }
145 public class Metadata{
146 private String name ;
147 private String internalUse ;
148 private boolean hasTemplate = false;
149 private String label;
150
151 public Metadata() {}
152
153 public String getName() { return name ;}
154 public void setName(String n) { name = n ; }
155
156 public String getInternalUse() { return internalUse ;}
157 public void setInternalUse(String inter) { internalUse = inter ; }
158
159 public boolean hasTemplate() { return hasTemplate ; }
160
161 public void isTemplate(boolean isTemplate) { hasTemplate = isTemplate ; }
162
163 public String getLabel() { return label; }
164
165 public void setLabel(String label) { this.label = label; }
166 }
167 }