MenuConfiguratorAddNodePlugin.java
/**
* Copyright (C) 2013 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.platform.common.service.plugin;
import org.exoplatform.container.component.BaseComponentPlugin;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.platform.common.service.MenuConfiguratorService;
import org.exoplatform.portal.config.model.*;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="hzekri@exoplatform.com">hzekri</a>
*/
public class MenuConfiguratorAddNodePlugin extends BaseComponentPlugin {
private ConfigurationManager configurationManager;
private MenuConfiguratorService menuConfiguratorService;
private String navPath;
private PageNode targetNav;
private String isChild;
private static final String EXTENDED_SETUP_NAVIGATION_FILE = "extended.setup.navigation.file";
private static final String TARGET_NODE_CONFIG = "target.node.config";
private static final String IS_CHILD = "isChild";
private static final Log LOG = ExoLogger.getLogger(MenuConfiguratorAddNodePlugin.class);
public MenuConfiguratorAddNodePlugin(InitParams initParams, ConfigurationManager configurationManager, MenuConfiguratorService menuConfiguratorService) {
this.configurationManager = configurationManager;
this.menuConfiguratorService = menuConfiguratorService;
if (initParams.containsKey(EXTENDED_SETUP_NAVIGATION_FILE)) {
navPath = initParams.getValueParam(EXTENDED_SETUP_NAVIGATION_FILE).getValue();
}
if (initParams.containsKey(TARGET_NODE_CONFIG)) {
targetNav = (PageNode) initParams.getObjectParam(TARGET_NODE_CONFIG).getObject();
}
if (initParams.containsKey(IS_CHILD)) {
isChild = initParams.getValueParam(IS_CHILD).getValue();
}
}
public void execute() {
NavigationFragment extendedFragment = null;
List<PageNode> setupPageNodes = menuConfiguratorService.getSetupMenuOriginalPageNodes();
if (isChild == null || isChild.isEmpty()) {
isChild = "false";
LOG.info("isChild param is not set, default value will be used");
}
if (navPath != null && !navPath.isEmpty()) {
try {
UnmarshalledObject<PageNavigation> extendedObj = ModelUnmarshaller.unmarshall(PageNavigation.class,
configurationManager.getInputStream(navPath));
PageNavigation extendedPageNav = extendedObj.getObject();
extendedFragment = extendedPageNav.getFragment();
if (targetNav == null) {
for (PageNode pageNode1 : extendedFragment.getNodes()) {
setupPageNodes.add(pageNode1);
}
} else {
if (!(targetNav.getName() == null || targetNav.getPageReference() == null
|| targetNav.getName().isEmpty() || targetNav.getPageReference().isEmpty())) {
boolean addedNav = insertExtendedNodes(setupPageNodes, targetNav, isChild, extendedFragment);
if (addedNav == false) {
LOG.warn("Navigation with path " + navPath + " not added : target node not found");
}
} else {
LOG.warn("Navigation with path " + navPath + " not added : Both name and pageReference should be specified for the target node" );
}
}
} catch (Exception E) {
LOG.error("Can not load or read the file with path " + navPath + " Please check the path or the file structure ", E);
}
} else {
LOG.warn("Path for extended setup navigation file not mentioned");
}
}
private boolean insertExtendedNodes(List<PageNode> setupPageNodes, PageNode targetNavigation, String isChild, NavigationFragment frag) {
boolean isFound = false;
for (PageNode pageNode : setupPageNodes) {
if (pageNode.getName().equals(targetNavigation.getName())
&& pageNode.getPageReference().equals(targetNavigation.getPageReference())) {
if (isChild.equals("true")) {
List<PageNode> L = pageNode.getChildren();
if (L == null) {
L = new ArrayList();
}
for (PageNode pageNode1 : frag.getNodes()) {
L.add(pageNode1);
}
pageNode.setChildren((ArrayList<PageNode>) L);
} else {
if (!(isChild.equals("false"))) {
LOG.warn("isChild param should be set to true or false");
}
int i = setupPageNodes.indexOf(pageNode);
for (PageNode pageNode1 : frag.getNodes()) {
i++;
setupPageNodes.add(i, pageNode1);
}
}
isFound = true;
break;
}
List<PageNode> L = pageNode.getChildren();
if (L != null) {
isFound = insertExtendedNodes(L, targetNavigation, isChild, frag);
if (isFound) {
break;
}
}
}
return isFound;
}
}