Package org.eclipse.core.internal.resources

Source Code of org.eclipse.core.internal.resources.SavedState

/*******************************************************************************
* Copyright (c) 2000, 2006 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.core.internal.resources;

import org.eclipse.core.internal.events.ResourceDelta;
import org.eclipse.core.internal.events.ResourceDeltaFactory;
import org.eclipse.core.internal.utils.Policy;
import org.eclipse.core.internal.watson.ElementTree;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.ISchedulingRule;

/**
* Standard implementation of the ISavedState interface.
*/
public class SavedState implements ISavedState {
  ElementTree oldTree;
  ElementTree newTree;
  SafeFileTable fileTable;
  String pluginId;
  Workspace workspace;

  SavedState(Workspace workspace, String pluginId, ElementTree oldTree, ElementTree newTree) throws CoreException {
    this.workspace = workspace;
    this.pluginId = pluginId;
    this.newTree = newTree;
    this.oldTree = oldTree;
    this.fileTable = restoreFileTable();
  }

  void forgetTrees() {
    newTree = null;
    oldTree = null;
    workspace.saveManager.clearDeltaExpiration(pluginId);
  }

  public int getSaveNumber() {
    return workspace.getSaveManager().getSaveNumber(pluginId);
  }

  protected SafeFileTable getFileTable() {
    return fileTable;
  }

  protected SafeFileTable restoreFileTable() throws CoreException {
    if (fileTable == null)
      fileTable = new SafeFileTable(pluginId);
    return fileTable;
  }

  public IPath lookup(IPath file) {
    return getFileTable().lookup(file);
  }

  public IPath[] getFiles() {
    return getFileTable().getFiles();
  }

  public void processResourceChangeEvents(IResourceChangeListener listener) {
    try {
      final ISchedulingRule rule = workspace.getRoot();
      try {
        workspace.prepareOperation(rule, null);
        if (oldTree == null || newTree == null)
          return;
        workspace.beginOperation(true);
        ResourceDelta delta = ResourceDeltaFactory.computeDelta(workspace, oldTree, newTree, Path.ROOT, -1);
        forgetTrees(); // free trees to prevent memory leak
        workspace.getNotificationManager().broadcastChanges(listener, IResourceChangeEvent.POST_BUILD, delta);
      } finally {
        workspace.endOperation(rule, false, null);
      }
    } catch (CoreException e) {
      // this is unlikely to happen, so, just log it
      Policy.log(e);
    }
  }
}
TOP

Related Classes of org.eclipse.core.internal.resources.SavedState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.