/* * Copyright 2011-2012 Amazon Technologies, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://aws.amazon.com/apache2.0 * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES * OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and * limitations under the License. */ package com.amazonaws.eclipse.explorer; import java.util.Iterator; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.navigator.CommonNavigator; import org.eclipse.ui.navigator.CommonViewer; import com.amazonaws.eclipse.core.AccountAndRegionChangeListener; import com.amazonaws.eclipse.core.AwsToolkitCore; public class ResourcesView extends CommonNavigator { private static final ExplorerNodeOpenListener EXPLORER_NODE_OPEN_LISTENER = new ExplorerNodeOpenListener(); public static final AWSResourcesRootElement rootElement = new AWSResourcesRootElement(); private CommonViewer viewer; private AccountAndRegionChangeListener accountAndRegionChangeListener; @Override protected Object getInitialInput() { return rootElement; } @Override protected CommonViewer createCommonViewerObject(Composite aParent) { viewer = super.createCommonViewerObject(aParent); viewer.addOpenListener(EXPLORER_NODE_OPEN_LISTENER); viewer.setAutoExpandLevel(1); return viewer; } public void dispose() { getCommonViewer().removeOpenListener(EXPLORER_NODE_OPEN_LISTENER); if (accountAndRegionChangeListener != null) { AwsToolkitCore.getDefault().getAccountManager().removeAccountInfoChangeListener(accountAndRegionChangeListener); AwsToolkitCore.getDefault().getAccountManager().removeDefaultAccountChangeListener(accountAndRegionChangeListener); AwsToolkitCore.getDefault().removeDefaultRegionChangeListener(accountAndRegionChangeListener); } } @Override public void init(IViewSite aSite, IMemento aMemento) throws PartInitException { super.init(aSite, aMemento); accountAndRegionChangeListener = new AccountAndRegionChangeListener() { @Override public void onAccountOrRegionChange() { ContentProviderRegistry.clearAllCachedResponses(); Display.getDefault().asyncExec(new Runnable() { public void run() { viewer.refresh(); viewer.collapseAll(); } }); } }; Display.getDefault().asyncExec(new Runnable() { public void run() { AwsToolkitCore.getDefault().getAccountManager().addAccountInfoChangeListener(accountAndRegionChangeListener); AwsToolkitCore.getDefault().getAccountManager().addDefaultAccountChangeListener(accountAndRegionChangeListener); AwsToolkitCore.getDefault().addDefaultRegionChangeListener(accountAndRegionChangeListener); } }); } private static final class ExplorerNodeOpenListener implements IOpenListener { public void open(OpenEvent event) { StructuredSelection selection = (StructuredSelection)event.getSelection(); Iterator<?> i = selection.iterator(); while (i.hasNext()) { Object obj = i.next(); if (obj instanceof ExplorerNode) { ExplorerNode explorerNode = (ExplorerNode)obj; IAction openAction = explorerNode.getOpenAction(); if (openAction != null) openAction.run(); } } } } }