View Javadoc
1   /*
2    * Copyright (C) 2003-2009 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.explorer.control.action;
18  
19  import java.util.Arrays;
20  import java.util.List;
21  
22  import javax.jcr.Node;
23  
24  import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer;
25  import org.exoplatform.ecm.webui.component.explorer.control.UIActionBar;
26  import org.exoplatform.ecm.webui.component.explorer.control.filter.CanRemoveNodeFilter;
27  import org.exoplatform.ecm.webui.component.explorer.control.filter.CanSetPropertyFilter;
28  import org.exoplatform.ecm.webui.component.explorer.control.filter.HasPublicationLifecycleFilter;
29  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsCheckedOutFilter;
30  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsDocumentFilter;
31  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsNotEditingDocumentFilter;
32  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsNotLockedFilter;
33  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsNotRootNodeFilter;
34  import org.exoplatform.ecm.webui.component.explorer.control.filter.IsNotIgnoreVersionNodeFilter;
35  import org.exoplatform.ecm.webui.component.explorer.control.listener.UIActionBarActionListener;
36  import org.exoplatform.ecm.webui.component.explorer.popup.admin.UIActivePublication;
37  import org.exoplatform.ecm.webui.component.explorer.popup.admin.UIPublicationManager;
38  import org.exoplatform.services.ecm.publication.PublicationPresentationService;
39  import org.exoplatform.services.ecm.publication.PublicationService;
40  import org.exoplatform.services.ecm.publication.plugins.webui.UIPublicationLogList;
41  import org.exoplatform.webui.config.annotation.ComponentConfig;
42  import org.exoplatform.webui.config.annotation.EventConfig;
43  import org.exoplatform.webui.core.UIComponent;
44  import org.exoplatform.webui.core.UIContainer;
45  import org.exoplatform.webui.core.UIPopupComponent;
46  import org.exoplatform.webui.core.UIPopupContainer;
47  import org.exoplatform.webui.event.Event;
48  import org.exoplatform.webui.ext.filter.UIExtensionFilter;
49  import org.exoplatform.webui.ext.filter.UIExtensionFilters;
50  import org.exoplatform.webui.form.UIForm;
51  
52  /**
53   * Created by The eXo Platform SAS
54   * Author : eXoPlatform
55   *          nicolas.filotto@exoplatform.com
56   * 6 mai 2009
57   */
58  @ComponentConfig(
59       events = {
60         @EventConfig(listeners = ManagePublicationsActionComponent.ManagePublicationsActionListener.class)
61       }
62   )
63  public class ManagePublicationsActionComponent extends UIComponent {
64  
65    private static final List<UIExtensionFilter> FILTERS = Arrays.asList(new UIExtensionFilter[] {
66        new HasPublicationLifecycleFilter(),
67        new IsDocumentFilter("UIActionBar.msg.manage-publication.not-supported-nodetype"),
68        new IsNotRootNodeFilter("UIActionBar.msg.cannot-enable-publication-rootnode"),
69        new CanSetPropertyFilter("UIActionBar.msg.access-denied"),
70        new IsNotLockedFilter(),
71        new IsNotIgnoreVersionNodeFilter(),
72        new IsNotEditingDocumentFilter(),
73        new IsCheckedOutFilter()});
74  
75    @UIExtensionFilters
76    public List<UIExtensionFilter> getFilters() {
77      return FILTERS;
78    }
79  
80    public static class ManagePublicationsActionListener extends UIActionBarActionListener<ManagePublicationsActionComponent> {
81      public void processEvent(Event<ManagePublicationsActionComponent> event) throws Exception {
82        UIActionBar uiActionBar = event.getSource().getAncestorOfType(UIActionBar.class);
83        UIJCRExplorer uiExplorer = uiActionBar.getAncestorOfType(UIJCRExplorer.class);
84        UIPopupContainer UIPopupContainer = uiExplorer.getChild(UIPopupContainer.class);
85        Node currentNode = uiExplorer.getCurrentNode();
86        uiExplorer.setIsHidePopup(false);
87        PublicationService publicationService = uiActionBar.getApplicationComponent(PublicationService.class);
88        PublicationPresentationService publicationPresentationService = uiActionBar.
89            getApplicationComponent(PublicationPresentationService.class);
90        if (!publicationService.isNodeEnrolledInLifecycle(currentNode)) {
91          UIActivePublication activePublication = uiActionBar.createUIComponent(UIActivePublication.class,null,null);
92          if(publicationService.getPublicationPlugins().size() == 1) {
93            activePublication.setRendered(false);
94            uiExplorer.addChild(activePublication);
95            String lifecycleName = publicationService.getPublicationPlugins().keySet().iterator().next();
96            activePublication.enrolNodeInLifecycle(currentNode,lifecycleName,event.getRequestContext());
97            return;
98          }
99          activePublication.setRendered(true);
100         activePublication.refresh(activePublication.getUIPageIterator().getCurrentPage());
101         UIPopupContainer.activate(activePublication, 600, 300);
102         event.getRequestContext().addUIComponentToUpdateByAjax(UIPopupContainer);
103         return;
104       }
105       UIContainer cont = uiActionBar.createUIComponent(UIContainer.class, null, null);
106       UIForm uiForm = publicationPresentationService.getStateUI(currentNode, cont);
107       if (uiForm instanceof UIPopupComponent) {
108         //This is special case for wcm want to more than 2 tabs in PublicationManager
109         //The uiForm in this case should be a UITabPane or UIFormTabPane and need be a UIPopupComponent
110         UIPopupContainer.activate(uiForm, 700, 500);
111       } else {
112         UIPublicationManager uiPublicationManager =
113           uiExplorer.createUIComponent(UIPublicationManager.class, null, null);
114         uiPublicationManager.addChild(uiForm);
115         uiPublicationManager.addChild(UIPublicationLogList.class, null, null).setRendered(false);
116         UIPublicationLogList uiPublicationLogList =
117           uiPublicationManager.getChild(UIPublicationLogList.class);
118         UIPopupContainer.activate(uiPublicationManager, 700, 500);
119         uiPublicationLogList.setNode(currentNode);
120         uiPublicationLogList.updateGrid();
121       }
122       event.getRequestContext().addUIComponentToUpdateByAjax(UIPopupContainer);
123    }
124   }
125 }