/* * 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.folksonomy; import org.exoplatform.commons.utils.LazyPageList; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.commons.utils.ListAccessImpl; import org.exoplatform.ecm.webui.component.admin.UIECMAdminPortlet; import org.exoplatform.ecm.webui.core.UIPagingGrid; import org.exoplatform.services.cms.folksonomy.NewFolksonomyService; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import javax.jcr.Node; import java.util.ArrayList; import java.util.List; /** * Created by The eXo Platform SARL * Author : Dang Van Minh * minh.dang@exoplatform.com * Jan 11, 2007 * 2:55:47 PM */ @ComponentConfig(template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl", events = { @EventConfig(listeners = UITagStyleList.EditActionListener.class), @EventConfig(listeners = UITagStyleList.RemoveActionListener.class, confirm = "UIFolksonomyManager.msg.confirm-delete"), @EventConfig(listeners = UITagStyleList.AddStyleActionListener.class) }) public class UITagStyleList extends UIPagingGrid { final static String RANGE_PROP = "exo:styleRange" ; final static String HTML_STYLE_PROP = "exo:htmlStyle" ; private static String[] BEAN_FIELD = {"name", "documentRange", "tagHTML"} ; private static String[] ACTIONS = {"Edit", "Remove"} ; public UITagStyleList() throws Exception { getUIPageIterator().setId("TagStyleIterator") ; configure("name", BEAN_FIELD, ACTIONS) ; } public String[] getActions() { return new String[] {"AddStyle"} ; } public void refresh(int currentPage) throws Exception { List<TagStyleData> tagStyleList = new ArrayList<TagStyleData>() ; NewFolksonomyService newFolksonomyService = getApplicationComponent(NewFolksonomyService.class) ; String repository = getAncestorOfType(UIECMAdminPortlet.class).getPreferenceRepository() ; String workspace = getAncestorOfType(UIECMAdminPortlet.class).getDMSSystemWorkspace(repository); TagStyleData tagStyleData = null ; for (Node node : newFolksonomyService.getAllTagStyle(workspace)) { tagStyleData = new TagStyleData(node.getName(), getRangeOfStyle(node), getHtmlStyleOfStyle(node)); tagStyleList.add(tagStyleData); } ListAccess<TagStyleData> tagStyleListAccess = new ListAccessImpl<TagStyleData>(TagStyleData.class, tagStyleList); LazyPageList<TagStyleData> dataPageList = new LazyPageList<TagStyleData>(tagStyleListAccess, getUIPageIterator().getItemsPerPage()); getUIPageIterator().setPageList(dataPageList); getUIPageIterator().setTotalItems(tagStyleList.size()); if (currentPage > getUIPageIterator().getAvailablePage()) getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage()); else getUIPageIterator().setCurrentPage(currentPage); } public String getRangeOfStyle(Node tagStyle) throws Exception { return tagStyle.getProperty(RANGE_PROP).getValue().getString() ; } public String getHtmlStyleOfStyle(Node tagStyle) throws Exception { return tagStyle.getProperty(HTML_STYLE_PROP).getValue().getString() ; } static public class TagStyleData { private String tagName_ ; private String documentRange_ ; private String tagHTML_ ; public TagStyleData(String tagName, String documentRange, String tagHTML) { tagName_ = tagName ; documentRange_ = documentRange ; tagHTML_ = tagHTML ; } public String getName() { return tagName_ ; } public String getDocumentRange() { return documentRange_ ; } public String getTagHTML() { return tagHTML_ ; } } static public class EditActionListener extends EventListener<UITagStyleList> { public void execute(Event<UITagStyleList> event) throws Exception { UITagStyleList uiTagStyleList = event.getSource(); UITagManager uiManager = uiTagStyleList.getParent(); String selectedName = event.getRequestContext().getRequestParameter(OBJECTID); Node selectedTagStyle = uiManager.getSelectedTagStyle(selectedName); uiManager.initTaggingFormPopup(selectedTagStyle); event.getRequestContext().addUIComponentToUpdateByAjax(uiManager); } } static public class AddStyleActionListener extends EventListener<UITagStyleList> { public void execute(Event<UITagStyleList> event) throws Exception { UITagStyleList uiTagStyleList = event.getSource(); UITagManager uiManager = uiTagStyleList.getParent(); uiManager.initTaggingFormPopup(null); event.getRequestContext().addUIComponentToUpdateByAjax(uiManager); } } static public class RemoveActionListener extends EventListener<UITagStyleList> { public void execute(Event<UITagStyleList> event) throws Exception { UITagStyleList uiTagStyleList = event.getSource(); UITagManager uiManager = uiTagStyleList.getParent(); String selectedName = event.getRequestContext().getRequestParameter(OBJECTID); Node selectedTagStyle = uiManager.getSelectedTagStyle(selectedName); Node parentNode = selectedTagStyle.getParent(); selectedTagStyle.remove(); parentNode.getSession().save(); org.exoplatform.services.cms.impl.Utils.addEditedConfiguredData(selectedName, "TagStyle", "EditedConfiguredTagStyle", true); uiTagStyleList.refresh(uiTagStyleList.getUIPageIterator().getCurrentPage()); event.getRequestContext().addUIComponentToUpdateByAjax(uiManager); } } }