Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java')
-rw-r--r--plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java453
1 files changed, 0 insertions, 453 deletions
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
deleted file mode 100644
index e24011e31..000000000
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/integration/ResourceSetWorkbenchEditSynchronizer.java
+++ /dev/null
@@ -1,453 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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
- *******************************************************************************/
-/*
- * Created on Mar 4, 2004
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package org.eclipse.wst.common.internal.emfworkbench.integration;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.jobs.ILock;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory;
-import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
-import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
-import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jem.util.plugin.JEMUtilPlugin;
-import org.eclipse.wst.common.internal.emf.resource.ReferencedResource;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
-
-/**
- * @author schacher
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class ResourceSetWorkbenchEditSynchronizer extends ResourceSetWorkbenchSynchronizer implements IResourceDeltaVisitor {
- private static final String CLASS_EXTENSION = "class"; //$NON-NLS-1$
- private static final String JAVA_EXTENSION = "java"; //$NON-NLS-1$
- private Set recentlySavedFiles = new HashSet();
- private Map ignoredFilesCache = new HashMap();
-
- /** The emf resources to be removed from the resource set as a result of a delta */
- protected List deferredRemoveResources = new ArrayList();
- protected List deferredUnloadResources = new ArrayList();
- protected List deferredLoadResources = new ArrayList();
-
- protected List autoloadResourcesURIs = new ArrayList();
- protected List autoloadResourcesExts = new ArrayList();
-
-
- /**
- * @param aResourceSet
- * @param aProject
- */
- public ResourceSetWorkbenchEditSynchronizer(ResourceSet aResourceSet, IProject aProject) {
- super(aResourceSet, aProject);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.wst.common.internal.emfworkbench.ResourceSetWorkbenchSynchronizer#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
- */
- public void resourceChanged(IResourceChangeEvent event) {
- super.resourceChanged(event);
- try {
- acceptDelta(event);
- notifyExtendersIfNecessary();
- processDeferredResources();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- deferredRemoveResources.clear();
- deferredUnloadResources.clear();
- deferredLoadResources.clear();
- }
- }
-
- protected void processDeferredRemovedResources() {
- Resource resource = null;
- for (int i = 0; i < deferredRemoveResources.size(); i++) {
- resource = (Resource) deferredRemoveResources.get(i);
- resourceSet.getResources().remove(resource);
- resource.unload();
- }
- }
-
- protected void processDeferredUnloadedResources() {
- Resource resource = null;
- for (int i = 0; i < deferredUnloadResources.size(); i++) {
- resource = (Resource) deferredUnloadResources.get(i);
- resource.unload();
- }
- }
-
- private void processDeferredLoadResources() {
- URI uri = null;
- for (int i = 0; i < deferredLoadResources.size(); i++) {
- uri = (URI) deferredLoadResources.get(i);
- try {
- resourceSet.getResource(uri, true);
- } catch (WrappedException ex) {
- Logger.getLogger().logError(ex);
- }
-
- }
- }
-
- private ILock lock;
- private static final long delay = 30;
-
- private ILock getLock() {
- if (lock == null)
- lock = Platform.getJobManager().newLock();
- return lock;
- }
-
- private void releaseLock() {
- getLock().release();
- }
- private boolean aquireLock() throws InterruptedException{
- return getLock().acquire(delay);
- }
-
- protected void acceptDelta(final IResourceChangeEvent event) {
-
- boolean hasLocked = false;
- try {
- hasLocked = aquireLock();
- } catch (InterruptedException e) {
- Logger.getLogger().write(e);
- }
-
- try{
- final IResourceDelta delta = event.getDelta();
-
- if (ResourcesPlugin.getWorkspace().isTreeLocked()) {
- primAcceptDelta(delta, event);
- }
- else {
- IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
- public void run(IProgressMonitor monitor) throws CoreException {
- primAcceptDelta(delta, event);
- }
- };
- try {
- ResourcesPlugin.getWorkspace().run(runnable, project, IWorkspace.AVOID_UPDATE, null);
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }finally{
- if( hasLocked )
- releaseLock();
- }
- }
-
- private void primAcceptDelta(IResourceDelta delta, IResourceChangeEvent event) {
- if (delta != null) {
- try {
- delta.accept(ResourceSetWorkbenchEditSynchronizer.this);
- } catch (Exception e) {
- Logger.getLogger().logError(e);
- }
- }
- }
-
- /**
- * The project is going away so we need to cleanup ourself and the ResourceSet. TODO Need to
- * push up this code to ResourceSetWorkbenchSynchronizer in next release.
- */
- protected void release() {
- if (JEMUtilPlugin.isActivated()) {
- try {
- if (resourceSet instanceof ProjectResourceSet)
- ((ProjectResourceSet) resourceSet).release();
- } finally {
- EMFWorkbenchContextFactory.INSTANCE.removeCachedProject(getProject());
- dispose();
- }
- }
- }
-
- private void processDeferredResources() {
- processDeferredRemovedResources();
- processDeferredUnloadedResources();
- processDeferredLoadResources();
- }
-
- public boolean visit(IResourceDelta delta) {
- IResource resource = delta.getResource();
- // only respond to project changes
- if (resource != null) {
- if (resource.getType() == IResource.PROJECT) {
- IProject p = (IProject) resource;
- if (isInterrestedInProject(p)) {
- currentProjectDelta = delta;
- return true;
- }
- // added line
- currentProjectDelta = null;
- return false;
- }
- if (resource.getType() == IResource.FILE && isInterrestedInFile((IFile) resource)) {
- switch (delta.getKind()) {
- case IResourceDelta.REMOVED :
- removedResource((IFile) resource);
- break;
- case IResourceDelta.ADDED :
- addedResource((IFile) resource);
- break;
- case IResourceDelta.CHANGED :
- if ((delta.getFlags() & IResourceDelta.CONTENT) != 0)
- changedResource((IFile) resource);
- break;
- default :
- if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0 || (delta.getFlags() & IResourceDelta.MOVED_TO) != 0)
- movedResource((IFile) resource);
- break;
- }
- return false;
- }
- }
- return true;
- }
-
- /**
- * Queue up the <code>Resource</code> that corresponds to <code>aFile</code>, for removal
- * from the cache of resources.
- *
- * @post Return true if a <code>Resource</code> was queued up to be removed.
- */
- protected boolean removedResource(IFile aFile) {
- return processResource(aFile, true);
- }
-
- /**
- * Queue up the <code>Resource</code> that corresponds to <code>aFile</code>, for reload.
- *
- * @post Return true if a <code>Resource</code> was queued up to be reloaded.
- */
- protected boolean addedResource(IFile aFile) {
- boolean didProcess = false;
- Resource resource = getResource(aFile);
- if ((resource != null) || (recentlySavedFiles.contains(resource))){
- /*
- * The IFile was just added to the workspace but we have a resource
- * in memory. Need to decide if it should be unloaded.
- */
- if (resource.isModified()) {
- if (WorkbenchResourceHelper.isReferencedResource(resource)) {
- ReferencedResource refRes = (ReferencedResource) resource;
- if (refRes.shouldForceRefresh()) {
- deferredUnloadResources.add(resource);
- didProcess = true;
- }
- }
- } else {
- /*Unload if found and is not modified but inconsistent.*/
- if (resource.isLoaded() && WorkbenchResourceHelper.isReferencedResource(resource) && !WorkbenchResourceHelper.isConsistent((ReferencedResource)resource)) {
- deferredUnloadResources.add(resource);
- didProcess = true;
- }
- }
- } else {
- //Process resource as a refresh.
- URI uri = URI.createPlatformResourceURI(aFile.getFullPath().toString());
- if ((autoloadResourcesURIs.contains(uri)) || (autoloadResourcesExts.contains(aFile.getFileExtension()))) {
- deferredLoadResources.add(uri);
- didProcess = true;
- }
- }
- return didProcess;
-}
-
- protected boolean processResource(IFile aFile, boolean isRemove) {
- Resource resource = getResource(aFile);
- if ((resource != null) || (recentlySavedFiles.contains(resource))){
- if (resource.isModified()) {
- if (WorkbenchResourceHelper.isReferencedResource(resource)) {
- ReferencedResource refRes = (ReferencedResource) resource;
- if (!refRes.shouldForceRefresh())
- return false; //Do not do anything
- } else
- return false;
- }
-
- if (isRemove)
- deferredRemoveResources.add(resource);
- else if (resource.isLoaded() && WorkbenchResourceHelper.isReferencedResource(resource) && !WorkbenchResourceHelper.isConsistent((ReferencedResource)resource))
- deferredUnloadResources.add(resource);
- }
- return false;
- }
-
- /**
- * For now, do the same as if the <code>aFile</code> was removed.
- */
- protected boolean movedResource(IFile aFile) {
- return removedResource(aFile);
- }
-
- /**
- * The contents of <code>aFile</code> have changed in the Workbench and we may need to update
- * our cached resources.
- *
- * We will process this resource to be refreshed and not removed.
- *
- * @post Return true if a <code>Resource</code> was actually removed.
- */
-
- protected boolean changedResource(IFile aFile) {
- //Process resource as a refresh.
- return processResource(aFile, false);
- }
-
- protected Resource getResource(IFile aFile) {
-
- return resourceSet.getResource(URI.createPlatformResourceURI(aFile.getFullPath().toString()), false);
- }
-
-
- /**
- * This method should be called prior to writing to an IFile from a MOF resource.
- */
- public void preSave(IFile aFile) {
- if (aFile != null) {
- recentlySavedFiles.add(aFile);
- ignoredFilesCache.remove(aFile);
- }
- }
-
- /**
- * This method should be called after a preSave if the save fails
- */
- public void removeFromRecentlySavedList(IFile aFile) {
- if (aFile != null) {
- recentlySavedFiles.remove(aFile);
- ignoredFilesCache.remove(aFile);
- }
- }
-
- /**
- * This method should be called just after writing to an IFile from a MOF resource.
- *
- * @deprecated No longer needs to be called.
- */
- public void postSave(IFile aFile) {
- //TODO remove this method
- }
-
- /**
- * Return <code>true</code> if <code>aProject</code> has the projectNatureID.
- */
- protected boolean isInterrestedInProject(IProject aProject) {
- return aProject.equals(getProject());
- }
-
- /**
- * Optimized not to be not interrested in files with an extension of .java or .class or if the
- * file has just been saved by our own internal mechanism.
- */
- protected boolean isInterrestedInFile(IFile aFile) {
- String extension = aFile.getFileExtension();
- if (CLASS_EXTENSION.equals(extension) || JAVA_EXTENSION.equals(extension))
- return false;
- if (recentlySavedFiles.remove(aFile)) {
- cacheIgnored(aFile);
- return false;
- }
- return !hasIgnored(aFile);
- }
-
- /**
- * Return true if we have already ignored this <code>file</code> and that its modification
- * stamp is the same as when we processed it.
- *
- * @param file
- * @return
- */
- private boolean hasIgnored(IFile file) {
- Long cachedStamp = (Long) ignoredFilesCache.get(file);
- if (cachedStamp == null)
- return false;
- long stamp = WorkbenchResourceHelper.computeModificationStamp(file);
- return cachedStamp.longValue() == stamp;
- }
-
- /**
- * Cache the modification stamp of the <code>file</code>.
- *
- * @param file
- */
- private void cacheIgnored(IFile file) {
- long stamp = WorkbenchResourceHelper.computeModificationStamp(file);
- ignoredFilesCache.put(file, new Long(stamp));
- }
-
- public void enableAutoload(URI uri) {
- URI normalized = resourceSet.getURIConverter().normalize(uri);
- autoloadResourcesURIs.add(normalized);
- }
-
- public void disableAutoload(URI uri) {
- URI normalized = resourceSet.getURIConverter().normalize(uri);
- autoloadResourcesURIs.remove(normalized);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.wst.common.internal.emfworkbench.ResourceSetWorkbenchSynchronizer#initialize()
- */
- protected void initialize() {
- getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.POST_CHANGE);
- }
- public void enableAutoload(String extension) {
- autoloadResourcesExts.add(extension);
-
- }
- public void disableAutoload(String extension) {
- autoloadResourcesExts.remove(extension);
- }
-
- public void dispose() {
- super.dispose();
- currentProjectDelta = null;
- extenders = null;
- }
-
-}

Back to the top