/*
* Copyright (C) 2003-2010 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.wiki.webui.popup;
import org.exoplatform.container.PortalContainer;
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.UIPopupComponent;
import org.exoplatform.webui.core.UIPopupContainer;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormInputInfo;
import org.exoplatform.wiki.commons.Utils;
import org.exoplatform.wiki.mow.core.api.wiki.PageImpl;
import org.exoplatform.wiki.service.WikiPageParams;
import org.exoplatform.wiki.service.WikiService;
import org.exoplatform.wiki.tree.TreeNode;
import org.exoplatform.wiki.tree.TreeNode.TREETYPE;
import org.exoplatform.wiki.webui.UIWikiBreadCrumb;
import org.exoplatform.wiki.webui.UIWikiLocationContainer;
import org.exoplatform.wiki.webui.UIWikiPortlet;
import org.exoplatform.wiki.webui.WikiMode;
import org.exoplatform.wiki.webui.UIWikiPortlet.PopupLevel;
import org.exoplatform.wiki.webui.tree.EventUIComponent;
import org.exoplatform.wiki.webui.tree.UITreeExplorer;
import org.exoplatform.wiki.webui.tree.EventUIComponent.EVENTTYPE;
/**
* Created by The eXo Platform SAS
* Author : Lai Trung Hieu
* hieu.lai@exoplatform.com
* Aug 2, 2010
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/wiki/webui/popup/UIWikiMovePageForm.gtmpl",
events = {
@EventConfig(listeners = UIWikiMovePageForm.CloseActionListener.class),
@EventConfig(listeners = UIWikiMovePageForm.MoveActionListener.class)
}
)
public class UIWikiMovePageForm extends UIForm implements UIPopupComponent {
final static public String PAGENAME_INFO = "pageNameInfo";
final static public String LOCATION_CONTAINER = "UIWikiLocationContainer";
final static public String UITREE = "UIMoveTree";
public String MOVE = "Move";
public UIWikiMovePageForm() throws Exception {
addChild(new UIFormInputInfo(PAGENAME_INFO, PAGENAME_INFO, null));
addChild(UIWikiLocationContainer.class, null, LOCATION_CONTAINER);
UITreeExplorer uiTree = addChild(UITreeExplorer.class, null, UITREE);
EventUIComponent eventComponent = new EventUIComponent(LOCATION_CONTAINER,
UIWikiLocationContainer.CHANGE_NEWLOCATION,
EVENTTYPE.EVENT);
StringBuilder initURLSb = new StringBuilder(Utils.getCurrentRestURL());
initURLSb.append("/wiki/tree/").append(TREETYPE.ALL.toString());
StringBuilder childrenURLSb = new StringBuilder(Utils.getCurrentRestURL());
childrenURLSb.append("/wiki/tree/").append(TREETYPE.CHILDREN.toString());
uiTree.init(initURLSb.toString(), childrenURLSb.toString(), getInitParam(), eventComponent);
}
static public class CloseActionListener extends EventListener<UIWikiMovePageForm> {
public void execute(Event<UIWikiMovePageForm> event) throws Exception {
UIWikiPortlet wikiPortlet = event.getSource().getAncestorOfType(UIWikiPortlet.class);
UIPopupContainer popupContainer = wikiPortlet.getPopupContainer(PopupLevel.L1);
popupContainer.cancelPopupAction();
}
}
static public class MoveActionListener extends EventListener<UIWikiMovePageForm> {
public void execute(Event<UIWikiMovePageForm> event) throws Exception {
WikiService wservice = (WikiService) PortalContainer.getComponent(WikiService.class);
UIWikiPortlet uiWikiPortlet = event.getSource().getAncestorOfType(UIWikiPortlet.class);
UIWikiMovePageForm movePageForm = event.getSource();
UIWikiLocationContainer locationContainer = movePageForm.findFirstComponentOfType(UIWikiLocationContainer.class);
UIWikiBreadCrumb currentLocation = (UIWikiBreadCrumb) locationContainer.getChildById(UIWikiLocationContainer.CURRENT_LOCATION);
UIWikiBreadCrumb newLocation = (UIWikiBreadCrumb) locationContainer.getChildById(UIWikiLocationContainer.NEW_LOCATION);
WikiPageParams currentLocationParams = currentLocation.getPageParam();
WikiPageParams newLocationParams = newLocation.getPageParam();
if (newLocationParams==null) {
uiWikiPortlet.addMessage(new ApplicationMessage("UIWikiMovePageForm.msg.new-location-can-not-be-empty", null, ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiWikiPortlet.getUIPopupMessages()) ;
org.exoplatform.wiki.commons.Utils.redirect(currentLocationParams, uiWikiPortlet.getWikiMode());
return;
}
//If exist page same with move page name in new location
PageImpl movepage = (PageImpl) wservice.getPageById(currentLocationParams.getType(),
currentLocationParams.getOwner(),
currentLocationParams.getPageId());
PageImpl existPage = (PageImpl) wservice.getPageById(newLocationParams.getType(),
newLocationParams.getOwner(),
currentLocationParams.getPageId());
if (existPage != null && !existPage.equals(movepage)) {
uiWikiPortlet.addMessage(new ApplicationMessage("UIWikiMovePageForm.msg.same-name-in-new-location-space",
null,
ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiWikiPortlet.getUIPopupMessages());
org.exoplatform.wiki.commons.Utils.redirect(currentLocationParams, uiWikiPortlet.getWikiMode());
return;
}
wservice.movePage(currentLocationParams, newLocationParams);
UIPopupContainer popupContainer = uiWikiPortlet.getPopupContainer(PopupLevel.L1);
popupContainer.cancelPopupAction();
newLocationParams.setPageId(currentLocationParams.getPageId());
org.exoplatform.wiki.commons.Utils.redirect(newLocationParams, WikiMode.VIEW);
}
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
private String getInitParam() throws Exception {
StringBuilder sb = new StringBuilder();
String currentPath = Utils.getCurrentWikiPagePath();
sb.append("?")
.append(TreeNode.PATH)
.append("=")
.append(currentPath)
.append("&")
.append(TreeNode.CURRENT_PATH)
.append("=")
.append(currentPath);
return sb.toString();
}
}