package org.exoplatform.portal.mop.management.operations.navigation; import java.util.LinkedHashSet; import java.util.Set; import org.exoplatform.portal.mop.SiteKey; import org.exoplatform.portal.mop.navigation.NavigationContext; import org.exoplatform.portal.mop.navigation.NavigationService; import org.exoplatform.portal.mop.navigation.NodeContext; import org.gatein.management.api.exceptions.ResourceNotFoundException; import org.gatein.management.api.operation.OperationContext; import org.gatein.management.api.operation.ResultHandler; import org.gatein.management.api.operation.model.ReadResourceModel; import org.gatein.mop.api.workspace.Navigation; /** * @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a> * @version $Revision$ */ public class NavigationReadResource extends AbstractNavigationOperationHandler { @Override protected void execute(OperationContext operationContext, ResultHandler resultHandler, Navigation defaultNavigation) { SiteKey siteKey = getSiteKey(defaultNavigation.getSite()); String navUri = operationContext.getAddress().resolvePathTemplate("nav-uri"); NavigationService navigationService = operationContext.getRuntimeContext().getRuntimeComponent(NavigationService.class); NavigationContext navigation = navigationService.loadNavigation(siteKey); Set<String> children = new LinkedHashSet<String>(); NodeContext<NodeContext<?>> node = NavigationUtils.loadNode(navigationService, navigation, navUri); if (node == null) { throw new ResourceNotFoundException("Navigation node not found for navigation uri '" + navUri + "'"); } for (NodeContext child : node.getNodes()) { children.add(child.getName()); } ReadResourceModel model = new ReadResourceModel("Navigation nodes available at this resource.", children); resultHandler.completed(model); } }