StickyViewManager32.java :  » IDE-Eclipse » ui-workbench » org » eclipse » ui » internal » Java Open Source

Java Open Source » IDE Eclipse » ui workbench 
ui workbench » org » eclipse » ui » internal » StickyViewManager32.java
/*******************************************************************************
 * Copyright (c) 2007 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 ******************************************************************************/

package org.eclipse.ui.internal;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.views.IStickyViewDescriptor;
import org.eclipse.ui.views.IViewRegistry;

/**
 * @since 3.3
 *
 */
class StickyViewManager32 implements IStickyViewManager {

  // a mapping of perspectives to a set of stickyviews that have been activated in that perspective.
  // this map is persisted across sessions
  private Map stickyPerspectives = new HashMap(7);
  
  private IWorkbenchPage page;
  
  public StickyViewManager32(IWorkbenchPage page) {
    this.page = page;
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#remove(java.lang.String)
   */
  public void remove(String pespectiveId) {
    stickyPerspectives.remove(pespectiveId);
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#add(java.lang.String, java.util.Set)
   */
  public void add(String pespectiveId, Set stickyViewList) {
    stickyPerspectives.put(pespectiveId, stickyViewList);
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#clear()
   */
  public void clear() {
    stickyPerspectives.clear();
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#update(org.eclipse.ui.IWorkbenchPage, org.eclipse.ui.internal.Perspective, org.eclipse.ui.internal.Perspective)
   */
  public void update(Perspective oldPersp, Perspective newPersp) {
    if (newPersp != null && oldPersp != null) {
      Set activatedStickyViewsInThisPerspective = (Set) stickyPerspectives
          .get(newPersp.getDesc().getId());
      if (activatedStickyViewsInThisPerspective == null) {
        activatedStickyViewsInThisPerspective = new HashSet(7);
        stickyPerspectives.put(newPersp.getDesc().getId(),
            activatedStickyViewsInThisPerspective);
      }
      IViewRegistry viewReg = WorkbenchPlugin.getDefault()
          .getViewRegistry();
      IStickyViewDescriptor[] stickyDescs = viewReg.getStickyViews();
      for (int i = 0; i < stickyDescs.length; i++) {
        final String viewId = stickyDescs[i].getId();
        try {
          // show a sticky view if it was in the last perspective and hasn't already been activated in this one
          if (oldPersp.findView(viewId) != null
              && !activatedStickyViewsInThisPerspective
                  .contains(viewId)) {
            page.showView(viewId, null, IWorkbenchPage.VIEW_CREATE);
            activatedStickyViewsInThisPerspective.add(viewId);
          }
        } catch (PartInitException e) {
          WorkbenchPlugin
              .log(
                  "Could not open view :" + viewId, new Status(IStatus.ERROR, WorkbenchPlugin.PI_WORKBENCH, IStatus.ERROR, "Could not open view :" + viewId, e)); //$NON-NLS-1$ //$NON-NLS-2$
        }
      }
    }
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#save(org.eclipse.ui.IMemento)
   */
  public void save(IMemento memento) {
    IMemento stickyState = memento.createChild(IWorkbenchConstants.TAG_STICKY_STATE);
    Iterator itr = stickyPerspectives.entrySet().iterator();
    while (itr.hasNext()) {
      Map.Entry entry = (Map.Entry) itr.next();
      String perspectiveId = (String) entry.getKey();
      Set activatedViewIds = (Set) entry.getValue();
      IMemento perspectiveState = stickyState.createChild(
          IWorkbenchConstants.TAG_PERSPECTIVE, perspectiveId);
      for (Iterator i = activatedViewIds.iterator(); i.hasNext();) {
        String viewId = (String) i.next();
        perspectiveState.createChild(IWorkbenchConstants.TAG_VIEW,
            viewId);
      }
    }
  }

  /* (non-Javadoc)
   * @see org.eclipse.ui.internal.IStickyViewManager#restore(org.eclipse.ui.IMemento)
   */
  public void restore(IMemento memento) {
    // restore the sticky activation state
    IMemento stickyState = memento
        .getChild(IWorkbenchConstants.TAG_STICKY_STATE);

    if (stickyState != null) {
      IMemento[] stickyPerspMems = stickyState
          .getChildren(IWorkbenchConstants.TAG_PERSPECTIVE);
      for (int i = 0; i < stickyPerspMems.length; i++) {
        String perspectiveId = stickyPerspMems[i].getID();
        Set viewState = new HashSet(7);
        stickyPerspectives.put(perspectiveId, viewState);
        IMemento[] viewStateMementos = stickyPerspMems[i]
            .getChildren(IWorkbenchConstants.TAG_VIEW);
        for (int j = 0; j < viewStateMementos.length; j++) {
          viewState.add(viewStateMementos[j].getID());
        }
      }
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.