View Javadoc
1   /*
2    * Copyright (C) 2003-2007 eXo Platform SAS.
3    *
4    * This program is free software; you can redistribute it and/or
5    * modify it under the terms of the GNU Affero General Public License
6    * as published by the Free Software Foundation; either version 3
7    * of the License, or (at your option) any later version.
8    *
9    * This program is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU General Public License
15   * along with this program; if not, see<http://www.gnu.org/licenses/>.
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   * Created by The eXo Platform SARL
41   * Author : Dang Van Minh
42   *          minh.dang@exoplatform.com
43   * Sep 19, 2006
44   * 11:57:24 AM
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 }