Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DeploymentProviderManager.java')
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DeploymentProviderManager.java447
1 files changed, 0 insertions, 447 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DeploymentProviderManager.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DeploymentProviderManager.java
deleted file mode 100644
index 018c8a860..000000000
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DeploymentProviderManager.java
+++ /dev/null
@@ -1,447 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.internal.core;
-
-import java.io.*;
-import java.util.*;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.ILock;
-import org.eclipse.team.core.*;
-import org.eclipse.team.internal.core.registry.DeploymentProviderDescriptor;
-import org.eclipse.team.internal.core.registry.DeploymentProviderRegistry;
-import org.eclipse.team.internal.core.Policy;
-
-public class DeploymentProviderManager implements IDeploymentProviderManager, IResourceChangeListener {
-
- // key for remembering if state has been loaded for a project
- private final static QualifiedName STATE_LOADED_KEY = new QualifiedName("org.eclipse.team.core.deployment", "state_restored_key"); //$NON-NLS-1$ //$NON-NLS-2$
-
- // {project -> list of Mapping}
- private Map mappings = new HashMap(5);
-
- // registry for deployment provider extensions
- private DeploymentProviderRegistry registry;
-
- // lock to ensure that map/unmap and getProvider support concurrency
- private static final ILock mappingLock = Platform.getJobManager().newLock();
-
- // persistence constants
- private final static String CTX_PROVIDERS = "deploymentProviders"; //$NON-NLS-1$
- private final static String CTX_PROVIDER = "provider"; //$NON-NLS-1$
- private final static String CTX_ID = "id"; //$NON-NLS-1$
- private final static String CTX_PATH = "container_path"; //$NON-NLS-1$
- private final static String CTX_PROVIDER_DATA = "data"; //$NON-NLS-1$
- private final static String FILENAME = ".deployments"; //$NON-NLS-1$
-
- static class Mapping {
- private DeploymentProviderDescriptor descriptor;
- private DeploymentProvider provider;
- private IContainer container;
- private IMemento savedState;
-
- Mapping(DeploymentProviderDescriptor descriptor, IContainer container) {
- this.descriptor = descriptor;
- this.container = container;
- }
- public DeploymentProvider getProvider() throws TeamException {
- if(provider == null) {
- try {
- this.provider = descriptor.createProvider();
- this.provider.setContainer(container);
- this.provider.restoreState(savedState);
- this.savedState = null;
- } catch (CoreException e) {
- throw TeamException.asTeamException(e);
- }
- }
- return provider;
- }
- public void setProvider(DeploymentProvider provider) {
- this.provider = provider;
- this.savedState = null;
- }
- public IContainer getContainer() {
- return container;
- }
- public DeploymentProviderDescriptor getDescription() {
- return descriptor;
- }
- public void setProviderState(IMemento savedState) {
- this.savedState = savedState;
- }
- }
-
- public DeploymentProviderManager() {
- registry = new DeploymentProviderRegistry();
- }
-
- public void map(IContainer container, DeploymentProvider deploymentProvider) throws TeamException {
- try {
- mappingLock.acquire();
- if (!deploymentProvider.isMultipleMappingsSupported()) {
- // don't allow is overlapping deployment providers of the same type
- checkOverlapping(container, deploymentProvider.getID());
- }
-
- // extension point descriptor must exist
- DeploymentProviderDescriptor descriptor = registry.find(deploymentProvider.getID());
- if(descriptor == null) {
- throw new TeamException(Policy.bind("DeploymentProviderManager.10", deploymentProvider.getID())); //$NON-NLS-1$
- }
-
- // create the new mapping
- Mapping m = internalMap(container, descriptor);
- m.setProvider(deploymentProvider);
- deploymentProvider.setContainer(container);
- deploymentProvider.init();
-
- saveState(container.getProject());
- // TODO: what kind of event is generated when one is mapped?
- } finally {
- mappingLock.release();
- }
- }
-
- public void unmap(IContainer container, DeploymentProvider teamProvider) throws TeamException {
- try {
- mappingLock.acquire();
- IProject project = container.getProject();
- List projectMaps = internalGetMappings(container);
- Mapping[] m = internalGetMappingsFor(container, teamProvider.getID());
- for (int i = 0; i < m.length; i++) {
- Mapping mapping = m[i];
- if (mapping.getProvider() == teamProvider) {
- projectMaps.remove(mapping);
- if(projectMaps.isEmpty()) {
- mappings.remove(project);
- }
- }
- }
-
- // dispose of provider
- teamProvider.dispose();
- saveState(container.getProject());
-
- // TODO: what kind of event is sent when unmapped?
- } finally {
- mappingLock.release();
- }
- }
-
- public DeploymentProvider[] getMappings(IResource resource) {
- List projectMappings = internalGetMappings(resource);
- String fullPath = resource.getFullPath().toString();
- List result = new ArrayList();
- if(projectMappings != null) {
- for (Iterator it = projectMappings.iterator(); it.hasNext();) {
- Mapping m = (Mapping) it.next();
- if(fullPath.startsWith(m.getContainer().getFullPath().toString())) {
- try {
- // lazy initialize of provider must be supported
- // TODO: It is possible that the provider has been unmap concurrently
- result.add(m.getProvider());
- } catch (CoreException e) {
- TeamPlugin.log(e);
- }
- }
- }
- }
- return (DeploymentProvider[]) result.toArray(new DeploymentProvider[result.size()]);
- }
-
- public DeploymentProvider[] getMappings(IResource resource, String id) {
- Mapping[] m = internalGetMappingsFor(resource, id);
- List result = new ArrayList();
- for (int i = 0; i < m.length; i++) {
- Mapping mapping = m[i];
- try {
- // lazy initialize of provider must be supported
- // TODO: It is possible that the provider has been unmap concurrently
- result.add(mapping.getProvider());
- } catch (TeamException e) {
- TeamPlugin.log(e);
- }
- }
-
- DeploymentProvider[] providers = (DeploymentProvider[]) result.toArray(new DeploymentProvider[result.size()]);
- // Ensure that multiple providers are not mapped if it is not supported
- // by the provider type. This could occur if the deployment configuration
- // was loaded from a repository or modified manually
- if (providers.length > 1 && !providers[0].isMultipleMappingsSupported()) {
- // Log and ignore all but one of the mappings
- TeamPlugin.log(IStatus.WARNING, Policy.bind("DeploymentProviderManager.12", resource.getFullPath().toString(), id), null); //$NON-NLS-1$
- return new DeploymentProvider[] { providers[0] };
- }
- return providers;
- }
-
- public boolean getMappedTo(IResource resource, String id) {
- return internalGetMappingsFor(resource, id).length > 0;
- }
-
- private void checkOverlapping(IContainer container, String id) throws TeamException {
- List projectMappings = internalGetMappings(container);
- String fullPath = container.getFullPath().toString();
- if(projectMappings != null) {
- for (Iterator it = projectMappings.iterator(); it.hasNext();) {
- Mapping m = (Mapping) it.next();
- String first = m.getContainer().getFullPath().toString();
- if(fullPath.startsWith(first) || first.startsWith(fullPath)) {
- if (m.getDescription().getId().equals(id)) {
- throw new TeamException(Policy.bind("DeploymentProviderManager.13", container.getFullPath().toString(), m.getDescription().getId())); //$NON-NLS-1$
- }
- }
- }
- }
- }
-
- private Mapping internalMap(IContainer container, DeploymentProviderDescriptor description) {
- Mapping newMapping = new Mapping(description, container);
- return internalMap(container, newMapping);
- }
-
- private Mapping internalMap(IContainer container, Mapping newMapping) {
- IProject project = container.getProject();
- List projectMaps = (List)mappings.get(project);
- if(projectMaps == null) {
- projectMaps = new ArrayList();
- mappings.put(project, projectMaps);
- }
- projectMaps.add(newMapping);
- return newMapping;
- }
-
- /*
- * Loads all the mappings associated with the resource's project.
- */
- private List internalGetMappings(IResource resource) {
- try {
- mappingLock.acquire();
- IProject project = resource.getProject();
- List m = (List)mappings.get(project);
- try {
- if(project.getSessionProperty(STATE_LOADED_KEY) != null) {
- return m;
- }
- Mapping[] projectMappings = loadMappings(project);
- for (int i = 0; i < projectMappings.length; i++) {
- Mapping mapping = projectMappings[i];
- internalMap(mapping.getContainer(), mapping);
- }
-
- project.setSessionProperty(STATE_LOADED_KEY, new Object());
- } catch (TeamException e) {
- } catch (CoreException e) {
- }
- return (List)mappings.get(project);
- } finally {
- mappingLock.release();
- }
- }
-
- private Mapping[] internalGetMappingsFor(IResource resource, String id) {
- List projectMappings = internalGetMappings(resource);
- List result = new ArrayList();
- String fullPath = resource.getFullPath().toString();
- if(projectMappings != null) {
- for (Iterator it = projectMappings.iterator(); it.hasNext();) {
- Mapping m = (Mapping) it.next();
- // mapping can be initialize without having provider loaded yet!
- if(m.getDescription().getId().equals(id) && fullPath.startsWith(m.getContainer().getFullPath().toString())) {
- result.add(m);
- }
- }
- }
- return (Mapping[]) result.toArray(new Mapping[result.size()]);
- }
-
- /**
- * Saves a file containing the list of participant ids that are registered with this
- * manager. Each participant is also given the chance to save it's state.
- */
- private void saveState(IProject project) throws TeamException {
- File file = getNonsharedSettingsFile(project);
- try {
- XMLMemento xmlMemento = XMLMemento.createWriteRoot(CTX_PROVIDERS);
- List providers = (List)mappings.get(project);
- if(providers == null) {
- if (file.exists()) {
- file.delete();
- }
- } else {
- for (Iterator it2 = providers.iterator(); it2.hasNext(); ) {
- Mapping mapping = (Mapping) it2.next();
- IMemento node = xmlMemento.createChild(CTX_PROVIDER);
- node.putString(CTX_ID, mapping.getDescription().getId());
- node.putString(CTX_PATH, mapping.getContainer().getProjectRelativePath().toString());
- mapping.getProvider().saveState(node.createChild(CTX_PROVIDER_DATA));
- }
- Writer writer = new BufferedWriter(new FileWriter(file));
- try {
- xmlMemento.save(writer);
- } finally {
- writer.close();
- }
- }
- } catch (IOException e) {
- throw new TeamException(Policy.bind("DeploymentProviderManager.15", project.getName()), e); //$NON-NLS-1$
- } catch(CoreException ce) {
- throw TeamException.asTeamException(ce);
- }
- }
-
- /**
- * @param project
- * @return
- */
- private File getNonsharedSettingsFile(IProject project) {
- IPath metaPath = project.getPluginWorkingLocation(TeamPlugin.getPlugin().getDescriptor());
- metaPath = metaPath.append(FILENAME);
- File file = metaPath.toFile();
- return file;
- }
-
- /*
- * Load the mappings for the given project and return them.
- */
- private Mapping[] loadMappings(IProject project) throws TeamException, CoreException {
- File file = getNonsharedSettingsFile(project);
- if(! file.exists()) {
- // The file may have been deleted before our delta listener was loaded.
- // If there are any deployments stored in the meta data area, dispose of them
- // TODO: See if there were any before and dispose of them
- return new Mapping[0];
- }
- Reader reader;
- try {
- reader = new BufferedReader(new FileReader(file));
- } catch (FileNotFoundException e) {
- return new Mapping[0];
- }
- return loadMappings(project, reader);
- }
-
- private Mapping[] loadMappings(IProject project, Reader reader) throws TeamException {
- try {
- IMemento memento = XMLMemento.createReadRoot(reader);
- IMemento[] providers = memento.getChildren(CTX_PROVIDER);
- List projectMappings = new ArrayList();
- for (int i = 0; i < providers.length; i++) {
- IMemento memento2 = providers[i];
- String id = memento2.getString(CTX_ID);
- IPath location = new Path(memento2.getString(CTX_PATH));
-
- if(! project.exists(location)) {
- TeamPlugin.log(IStatus.ERROR, Policy.bind("DeploymentProviderManager.16", location.toString(), project.getName()), null); //$NON-NLS-1$
- }
- IResource resource = location.isEmpty() ? (IContainer)project : project.findMember(location);
- if (resource.getType() == IResource.FILE) {
- TeamPlugin.log(IStatus.ERROR, Policy.bind("DeploymentProviderManager.17", location.toString(), project.getName()), null); //$NON-NLS-1$
- }
- IContainer container = (IContainer)resource;
- DeploymentProviderDescriptor desc = registry.find(id);
- if(desc != null) {
- Mapping m = new Mapping(desc, container);
- m.setProviderState(memento2.getChild(CTX_PROVIDER_DATA));
- projectMappings.add(m);
- } else {
- TeamPlugin.log(IStatus.ERROR, Policy.bind("SynchronizeManager.9", id), null); //$NON-NLS-1$
- }
- }
- return (Mapping[]) projectMappings.toArray(new Mapping[projectMappings.size()]);
- } finally {
- try {
- reader.close();
- } catch (IOException e) {
- // ignore
- }
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.IDeploymentProviderManager#getDeploymentProviderRoots(java.lang.String)
- */
- public IResource[] getDeploymentProviderRoots(String id) {
- IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- Set roots = new HashSet();
- for (int i = 0; i < projects.length; i++) {
- IProject project = projects[i];
- List mappings = internalGetMappings(project);
- if (mappings != null) {
- for (Iterator iter = mappings.iterator(); iter.hasNext();) {
- Mapping mapping = (Mapping) iter.next();
- if (id == null || mapping.getDescription().getId().equals(id)) {
- roots.add(mapping.getContainer());
- }
- }
- }
- }
- return (IResource[]) roots.toArray(new IResource[roots.size()]);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
- */
- public void resourceChanged(IResourceChangeEvent event) {
- processDelta(event.getDelta());
- }
-
- private void processDelta(IResourceDelta delta) {
- IResource resource = delta.getResource();
- int kind = delta.getKind();
-
- if (resource.getType() == IResource.PROJECT) {
- // Handle a deleted project
- if (((kind & IResourceDelta.REMOVED) != 0)) {
- handleProjectRemoval((IProject)resource);
- return;
- }
- // Handle a closed project
- if ((delta.getFlags() & IResourceDelta.OPEN) != 0 && !((IProject) resource).isOpen()) {
- handleProjectClose((IProject)resource);
- return;
- }
- }
-
- if (((kind & IResourceDelta.REMOVED) != 0) && (resource.getType() == IResource.FOLDER)) {
- handleFolderRemoval((IFolder)resource);
- }
-
- // Handle changed children
- IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED | IResourceDelta.REMOVED | IResourceDelta.ADDED);
- for (int i = 0; i < affectedChildren.length; i++) {
- processDelta(affectedChildren[i]);
- }
- }
-
- private void handleFolderRemoval(IFolder folder) {
- DeploymentProvider[] providers = getMappings(folder);
- for (int i = 0; i < providers.length; i++) {
- DeploymentProvider provider = providers[i];
- try {
- unmap(folder, provider);
- } catch (TeamException e) {
- TeamPlugin.log(e);
- }
- }
- }
-
- private void handleProjectClose(IProject project) {
- mappings.remove(project);
- }
-
- private void handleProjectRemoval(IProject project) {
- mappings.remove(project);
- }
-
-} \ No newline at end of file

Back to the top