/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.security.ui.filter; import org.eclipse.riena.navigation.IApplicationNode; import org.eclipse.riena.navigation.IModuleGroupNode; import org.eclipse.riena.navigation.IModuleNode; import org.eclipse.riena.navigation.INavigationNode; import org.eclipse.riena.navigation.ISimpleNavigationNodeListener; import org.eclipse.riena.navigation.ISubModuleNode; import org.eclipse.riena.navigation.listener.ModuleGroupNodeListener; import org.eclipse.riena.navigation.listener.ModuleNodeListener; import org.eclipse.riena.navigation.listener.NavigationTreeObserver; import org.eclipse.riena.navigation.listener.SubApplicationNodeListener; import org.eclipse.riena.navigation.listener.SubModuleNodeListener; /** * Convenience class observing the application model and delegating events to * the given {@link ISimpleNavigationNodeListener} * */ public class NodeStructureObserver { private final ISimpleNavigationNodeListener simpleListener; private NavigationTreeObserver treeObserver; private final IApplicationNode applicationNode; public NodeStructureObserver(final IApplicationNode applicationNode, final ISimpleNavigationNodeListener simpleListener) { this.applicationNode = applicationNode; this.simpleListener = simpleListener; } /** * Starts the observation of the application model */ public void start() { treeObserver = new NavigationTreeObserver(); treeObserver.addListener(new SubModuleListener()); treeObserver.addListener(new ModuleListener()); treeObserver.addListener(new ModuleGroupListener()); treeObserver.addListener(new SubApplicationListener()); treeObserver.addListenerTo(applicationNode); } /** * Stops the observation of the application model */ public void stop() { treeObserver.removeListenerFrom(applicationNode); } private void notifyAdded(final INavigationNode<?> source, final INavigationNode<?> node) { simpleListener.childAdded(source, node); } private void notifyRemoved(final INavigationNode<?> source, final INavigationNode<?> node) { simpleListener.childRemoved(source, node); } ////Delegating listeners private class SubModuleListener extends SubModuleNodeListener { @Override public void childAdded(final ISubModuleNode source, final ISubModuleNode childAdded) { notifyAdded(source, childAdded); } @Override public void childRemoved(final ISubModuleNode source, final ISubModuleNode childRemoved) { notifyRemoved(source, childRemoved); } } private class ModuleListener extends ModuleNodeListener { @Override public void childAdded(final IModuleNode source, final ISubModuleNode childAdded) { notifyAdded(source, childAdded); } @Override public void childRemoved(final IModuleNode source, final ISubModuleNode childRemoved) { notifyRemoved(source, childRemoved); }; } private class ModuleGroupListener extends ModuleGroupNodeListener { @Override public void childAdded(final org.eclipse.riena.navigation.IModuleGroupNode source, final IModuleNode childAdded) { notifyAdded(source, childAdded); }; @Override public void childRemoved(final IModuleGroupNode source, final IModuleNode childRemoved) { notifyRemoved(source, childRemoved); } } private class SubApplicationListener extends SubApplicationNodeListener { @Override public void childAdded(final org.eclipse.riena.navigation.ISubApplicationNode source, final IModuleGroupNode childAdded) { notifyAdded(source, childAdded); }; @Override public void childRemoved(final org.eclipse.riena.navigation.ISubApplicationNode source, final IModuleGroupNode childRemoved) { notifyRemoved(source, childRemoved); }; } }