/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecm.webui.component.admin.metadata;
import org.exoplatform.commons.utils.LazyPageList;
import org.exoplatform.commons.utils.ListAccess;
import org.exoplatform.commons.utils.ListAccessImpl;
import org.exoplatform.ecm.webui.core.UIPagingGridDecorator;
import org.exoplatform.ecm.webui.utils.Utils;
import org.exoplatform.services.cms.metadata.MetadataService;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import javax.jcr.PathNotFoundException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDefinition;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Sep 19, 2006
* 11:57:24 AM
*/
@ComponentConfig(
template = "app:/groovy/webui/component/admin/metadata/UIMetadataList.gtmpl",
events = {
@EventConfig(listeners = UIMetadataList.ViewActionListener.class),
@EventConfig(listeners = UIMetadataList.EditActionListener.class),
@EventConfig(listeners = UIMetadataList.DeleteActionListener.class, confirm="UIMetadataList.msg.confirm-delete")
}
)
public class UIMetadataList extends UIPagingGridDecorator {
final static public String INTERNAL_USE = "exo:internalUse" ;
public UIMetadataList() throws Exception {
getUIPageIterator().setId("MetaDataListIterator");
}
public void refresh(int currentPage) throws Exception {
ListAccess<Metadata> metaDataList = new ListAccessImpl<Metadata>(Metadata.class, getAllMetadatas());
LazyPageList<Metadata> pageList = new LazyPageList<Metadata>(metaDataList, getUIPageIterator().getItemsPerPage());
getUIPageIterator().setPageList(pageList);
if (currentPage > getUIPageIterator().getAvailablePage())
getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
else
getUIPageIterator().setCurrentPage(currentPage);
}
public List<Metadata> getAllMetadatas() throws Exception {
List<Metadata> metadatas = new ArrayList<Metadata>() ;
MetadataService metadataService = getApplicationComponent(MetadataService.class) ;
List<NodeType> nodetypes = metadataService.getAllMetadatasNodeType() ;
Collections.sort(nodetypes, new Utils.NodeTypeNameComparator()) ;
for(NodeType nt : nodetypes) {
Metadata mt = new Metadata() ;
mt.setName(nt.getName()) ;
mt.isTemplate(metadataService.hasMetadata(nt.getName())) ;
mt.setLabel(metadataService.getMetadataLabel(nt.getName()));
for(PropertyDefinition def : nt.getPropertyDefinitions()) {
if(def.getName().equals(INTERNAL_USE)) {
if(def.getDefaultValues() != null && def.getDefaultValues()[0].getBoolean()) {
mt.setInternalUse("True") ;
} else {
mt.setInternalUse("False") ;
}
metadatas.add(mt) ;
break;
}
}
}
return metadatas ;
}
public List getListMetadata() throws Exception {
return getUIPageIterator().getCurrentPageData() ;
}
static public class ViewActionListener extends EventListener<UIMetadataList> {
public void execute(Event<UIMetadataList> event) throws Exception {
UIMetadataList uiMetaList = event.getSource() ;
String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
UIMetadataManager uiManager = uiMetaList.getParent() ;
uiManager.removeChildById(UIMetadataManager.VIEW_METADATA_POPUP) ;
uiManager.initViewPopup(metadataName) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
}
}
static public class EditActionListener extends EventListener<UIMetadataList> {
public void execute(Event<UIMetadataList> event) throws Exception {
UIMetadataList uiMetaList = event.getSource() ;
String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
UIMetadataManager uiManager = uiMetaList.getParent() ;
uiManager.initPopup() ;
UIMetadataForm uiForm = uiManager.findFirstComponentOfType(UIMetadataForm.class) ;
uiForm.update(metadataName) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
}
}
static public class DeleteActionListener extends EventListener<UIMetadataList> {
public void execute(Event<UIMetadataList> event) throws Exception {
UIMetadataList uiMetaList = event.getSource() ;
String metadataName = event.getRequestContext().getRequestParameter(OBJECTID) ;
UIMetadataManager uiManager = uiMetaList.getParent() ;
MetadataService metadataService = uiMetaList.getApplicationComponent(MetadataService.class) ;
UIApplication uiApp = uiMetaList.getAncestorOfType(UIApplication.class);
try {
metadataService.removeMetadata(metadataName);
org.exoplatform.services.cms.impl.Utils.addEditedConfiguredData(metadataName, "ContentTemplateList",
"EditedConfiguredTemplateList", true);
} catch(PathNotFoundException ex) {
uiApp.addMessage(new ApplicationMessage("UIMetadataList.msg.path-not-found-exception", null, ApplicationMessage.WARNING));
return;
}
uiMetaList.refresh(uiMetaList.getUIPageIterator().getCurrentPage());
event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
Object[] args = {metadataName} ;
uiApp.addMessage(new ApplicationMessage("UIMetadataList.msg.delete-successful", args)) ;
}
}
public class Metadata{
private String name ;
private String internalUse ;
private boolean hasTemplate = false;
private String label;
public Metadata() {}
public String getName() { return name ;}
public void setName(String n) { name = n ; }
public String getInternalUse() { return internalUse ;}
public void setInternalUse(String inter) { internalUse = inter ; }
public boolean hasTemplate() { return hasTemplate ; }
public void isTemplate(boolean isTemplate) { hasTemplate = isTemplate ; }
public String getLabel() { return label; }
public void setLabel(String label) { this.label = label; }
}
}