Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java')
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java268
1 files changed, 0 insertions, 268 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
deleted file mode 100644
index c9b134a8c..000000000
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/util/ProjectDescriptionManager.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package org.eclipse.team.internal.ccvs.core.util;
-
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.xerces.parsers.SAXParser;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.RepositoryProvider;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.CVSException;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
-import org.eclipse.team.internal.ccvs.core.ICVSFile;
-import org.eclipse.team.internal.ccvs.core.ICVSFolder;
-import org.eclipse.team.internal.ccvs.core.Policy;
-import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * This class handles the updating of the .vcm_meta file in projects managed by the CVSTeamProvider.
- *
- * It does so by listening to deltas on the project description and the .vcm_meta file itself.
- *
- */
-public class ProjectDescriptionManager implements IResourceChangeListener {
-
- public final static IPath PROJECT_DESCRIPTION_PATH = new Path(".vcm_meta"); //$NON-NLS-1$
- public final static IPath CORE_PROJECT_DESCRIPTION_PATH = new Path(".project"); //$NON-NLS-1$
- public final static boolean UPDATE_PROJECT_DESCRIPTION_ON_LOAD = true;
-
- public static final String VCMMETA_MARKER = "org.eclipse.team.cvs.core.vcmmeta"; //$NON-NLS-1$
-
- /*
- * Read the project meta file into the provider description
- */
- public static void readProjectDescription(IProjectDescription desc, InputStream stream) throws IOException, CVSException {
- SAXParser parser = new SAXParser();
- parser.setContentHandler(new ProjectDescriptionContentHandler(desc));
- try {
- parser.parse(new InputSource(stream));
- } catch (SAXException ex) {
- throw new CVSException(IStatus.ERROR, IStatus.ERROR, Policy.bind("ProjectDescriptionManager.unableToReadDescription"), ex); //$NON-NLS-1$
- }
- }
-
- public static void writeProjectDescription(IProject project, IProgressMonitor progress) throws CVSException {
-
- // generate the new contents of the project meta file into a string
- ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
- String newContents = null;
- try {
- IProjectDescription desc = project.getDescription();
- ProjectDescriptionWriter.writeProjectDescription(desc, byteOutputStream);
- byteOutputStream.close();
- newContents = byteOutputStream.toString("UTF8"); //$NON-NLS-1$
- } catch (IOException ex) {
- throw CVSException.wrapException(project, Policy.bind("ProjectDescriptionManager.ioDescription"), ex); //$NON-NLS-1$
- } catch (CoreException ex) {
- throw CVSException.wrapException(project, Policy.bind("ProjectDescriptionManager.coreDescription"), ex); //$NON-NLS-1$
- }
-
- IFile descResource = project.getFile(PROJECT_DESCRIPTION_PATH);
- if (descResource.exists()) {
- // check if the existing contents are the same before rewriting
- String oldContents = null;
- try {
- StringBuffer stringBuffer = new StringBuffer();
- InputStream is = ((IFile) descResource).getContents();
- byte[] buf = new byte[512];
- int result = is.read(buf);
- while (result != -1) {
- stringBuffer.append(new String(buf, 0, result, "UTF8")); //$NON-NLS-1$
- result = is.read(buf);
- }
- oldContents = stringBuffer.toString();
- is.close();
- } catch (IOException ex) {
- throw CVSException.wrapException(project, Policy.bind("ProjectDescriptionManager.ioDescription"), ex); //$NON-NLS-1$
- } catch (CoreException ex) {
- throw CVSException.wrapException(project, Policy.bind("ProjectDescriptionManager.coreDescription"), ex); //$NON-NLS-1$
- }
-
- if (oldContents.equals(newContents)) {
- // the contents of the new file would be the same as the old
- return;
- }
- try {
- descResource.setContents(
- new ByteArrayInputStream(byteOutputStream.toByteArray()),
- false,
- false,
- progress);
- } catch (CoreException ex) {
- throw CVSException.wrapException(project, Policy.bind("ProjectDescriptionManager.coreDescription"), ex); //$NON-NLS-1$
- }
- } else {
- try {
- descResource.create(
- new ByteArrayInputStream(byteOutputStream.toByteArray()),
- false,
- progress);
- } catch (CoreException ex) {
- throw CVSException.wrapException(descResource, Policy.bind("ProjectDescriptionManager.coreDescription"), ex); //$NON-NLS-1$
- }
-
- }
- }
-
- /*
- * To be called whenever the project description file is believed to have changed by
- * a load/loadIfIncoming operation.
- */
- public static void updateProjectIfNecessary(IProject project, IProgressMonitor progress) throws CoreException, CVSException {
-
- IFile descResource = project.getFile(PROJECT_DESCRIPTION_PATH);
- if (descResource.exists() && UPDATE_PROJECT_DESCRIPTION_ON_LOAD) {
-
- // If a managed .project files exists, don't read the .vcm_meta
- ICVSFile coreDescResource = CVSWorkspaceRoot.getCVSFileFor(project.getFile(CORE_PROJECT_DESCRIPTION_PATH));
- if (coreDescResource.exists() && coreDescResource.isManaged()) {
- createVCMMetaMarker(descResource);
- Util.logError(Policy.bind("ProjectDescriptionManager.vcmmetaIgnored", project.getName()), null); //$NON-NLS-1$
- return;
- } else {
- ICVSFolder folder = CVSWorkspaceRoot.getCVSFolderFor(project);
- if (! folder.isCVSFolder()) {
- createVCMMetaMarker(descResource);
- Util.logError(Policy.bind("ProjectDescriptionManager.vcmmetaIgnored", project.getName()), null); //$NON-NLS-1$
- return;
- }
- }
-
- // update project description file (assuming it has changed)
- IProjectDescription desc = project.getDescription();
- DataInputStream is = null;
- try {
- is = new DataInputStream(((IFile) descResource).getContents());
- try {
- readProjectDescription(desc, is);
- } finally {
- is.close();
- }
- try {
- project.setDescription(desc, IResource.FORCE | IResource.KEEP_HISTORY, progress);
- } catch (CoreException ex) {
- // Failing to set the description is probably due to a missing nature
- // Other natures are still set
- Util.logError(Policy.bind("ProjectDescriptionManager.unableToSetDescription"), ex); //$NON-NLS-1$
- }
-
- // Make sure we are still marked as a CVS project
- if(RepositoryProvider.getProvider(project, CVSProviderPlugin.getTypeId()) == null)
- RepositoryProvider.map(project, CVSProviderPlugin.getTypeId());
-
- // Mark the .vcm_meta file with a problem marker
- if (project.getFile(CORE_PROJECT_DESCRIPTION_PATH).exists()) {
- createVCMMetaMarker(descResource);
- }
- } catch(TeamException ex) {
- Util.logError(Policy.bind("ProjectDescriptionManager.unableToReadDescription"), ex); //$NON-NLS-1$
- // something went wrong, delete the project description file
- descResource.delete(true, progress);
- } catch (IOException ex) {
- Util.logError(Policy.bind("ProjectDescriptionManager.unableToReadDescription"), ex); //$NON-NLS-1$
- // something went wrong, delete the project description file
- descResource.delete(true, progress);
- }
- }
- }
-
- /*
- * Write out the project description file.
- *
- * For now just do it. It would be nice to detect the proper conditions
- *
- */
- public static void writeProjectDescriptionIfNecessary(CVSTeamProvider provider, IResource resource, IProgressMonitor monitor) throws CVSException {
- if (resource.getType() == IResource.PROJECT || isProjectDescription(resource)) {
- IProject project = resource.getProject();
- if (project.getFile(PROJECT_DESCRIPTION_PATH).exists() /* || ! project.getFile(CORE_PROJECT_DESCRIPTION_PATH).exists() */) {
- writeProjectDescription(project, monitor);
- }
- }
- }
-
- public static boolean isProjectDescription(IResource resource) {
- return resource.getProjectRelativePath().equals(PROJECT_DESCRIPTION_PATH);
- }
-
- public void resourceChanged(IResourceChangeEvent event) {
- try {
- IResourceDelta root = event.getDelta();
- IResourceDelta[] projectDeltas = root.getAffectedChildren(IResourceDelta.CHANGED | IResourceDelta.ADDED);
- for (int i = 0; i < projectDeltas.length; i++) {
- IResourceDelta delta = projectDeltas[i];
- IResource resource = delta.getResource();
- if (resource.getType() == IResource.PROJECT) {
- IProject project = (IProject)resource;
- RepositoryProvider provider = RepositoryProvider.getProvider(project, CVSProviderPlugin.getTypeId());
- if (provider == null) continue;
- // First, check if the .vcm_meta file for the project is in the delta.
- IResourceDelta[] children = delta.getAffectedChildren(IResourceDelta.ADDED);
- boolean inSync = false;
- for (int j = 0; j < children.length; j++) {
- IResourceDelta childDelta = children[j];
- IResource childResource = childDelta.getResource();
- if (isProjectDescription(childResource))
- switch (childDelta.getKind()) {
- case IResourceDelta.REMOVED:
- writeProjectDescriptionIfNecessary((CVSTeamProvider)provider, project, Policy.monitorFor(null));
- inSync = true;
- break;
- case IResourceDelta.CHANGED:
- case IResourceDelta.ADDED:
- updateProjectIfNecessary(project, Policy.monitorFor(null));
- inSync = true;
- break;
- }
- }
- // Check if we didn't do anything above and the project description changed.
- if (! inSync && (delta.getFlags() & IResourceDelta.DESCRIPTION) != 0) {
- writeProjectDescriptionIfNecessary((CVSTeamProvider)provider, project, Policy.monitorFor(null));
- }
- }
- }
- } catch (CVSException ex) {
- Util.logError(Policy.bind("ProjectDescriptionManager.cannotUpdateDesc"), ex); //$NON-NLS-1$
- } catch (CoreException ex) {
- Util.logError(Policy.bind("ProjectDescriptionManager.cannotUpdateDesc"), ex); //$NON-NLS-1$
- }
- }
-
- protected static IMarker createVCMMetaMarker(IResource resource) {
- try {
- IMarker[] markers = resource.findMarkers(VCMMETA_MARKER, false, IResource.DEPTH_ZERO);
- if (markers.length == 1) {
- return markers[0];
- }
- IMarker marker = resource.createMarker(VCMMETA_MARKER);
- marker.setAttribute(IMarker.MESSAGE, Policy.bind("ProjectDescriptionManager.vcmmetaMarker" , resource.getName(), resource.getProject().getName())); //$NON-NLS-1$
- return marker;
- } catch (CoreException e) {
- Util.logError(Policy.bind("ProjectDescriptionManager.markerError"), e); //$NON-NLS-1$
- }
- return null;
- }
-} \ No newline at end of file

Back to the top