From fa4ec73cb8fc566861c278fb66e18c548c7cf027 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Wed, 20 Aug 2003 20:55:27 +0000 Subject: [PATCH] finish up target manager/target --- .../eclipse/cdt/make/core/IMakeTarget.java | 2 - ...tProvider.java => IMakeTargetManager.java} | 4 +- .../eclipse/cdt/make/core/MakeCorePlugin.java | 39 ++++- .../cdt/make/internal/core/MakeTarget.java | 81 +++++---- ...etProvider.java => MakeTargetManager.java} | 158 ++++++++++++++---- .../make/internal/core/ProjectTargets.java | 57 +++---- 6 files changed, 224 insertions(+), 117 deletions(-) rename build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/{IMakeTargetProvider.java => IMakeTargetManager.java} (93%) rename build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/{MakeTargetProvider.java => MakeTargetManager.java} (52%) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java index 7435b4cbcba..db4b7414a0b 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java @@ -19,8 +19,6 @@ public interface IMakeTarget { String getName(); String getTargetBuilderID(); - String getBuilderID(); - boolean isStopOnError(); void setStopOnError(boolean stopOnError); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java similarity index 93% rename from build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetProvider.java rename to build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java index a7809c718f9..ff59cd2303e 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java @@ -14,13 +14,15 @@ import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; -public interface IMakeTargetProvider { +public interface IMakeTargetManager { IMakeTarget addTarget(IContainer container, String targetBuilderID, String targetName) throws CoreException; void removeTarget(IMakeTarget target) throws CoreException; void renameTarget(IMakeTarget target, String name) throws CoreException; IMakeTarget[] getTargets(IContainer container) throws CoreException; IProject[] getTargetBuilderProjects() throws CoreException; + + String getBuilderID(String targetBuilderID); void addListener(IMakeTargetListener listener); void removeListener(IMakeTargetListener listener); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java index 46b6492c1b7..c5ae3db4dc3 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java @@ -10,6 +10,7 @@ ***********************************************************************/ package org.eclipse.cdt.make.core; +import java.lang.reflect.InvocationTargetException; import java.text.MessageFormat; import java.util.Map; import java.util.MissingResourceException; @@ -17,19 +18,22 @@ import java.util.ResourceBundle; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.make.internal.core.BuildInfoFactory; -import org.eclipse.cdt.make.internal.core.MakeTargetProvider; +import org.eclipse.cdt.make.internal.core.MakeTargetManager; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPluginDescriptor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.Status; /** * The main plugin class to be used in the desktop. */ public class MakeCorePlugin extends Plugin { - private IMakeTargetProvider fTargetProvider; + private MakeTargetManager fTargetManager; public static final String OLD_BUILDER_ID = "org.eclipse.cdt.core.cbuilder"; //$NON-NLS-1$ //The shared instance. private static MakeCorePlugin plugin; @@ -56,6 +60,21 @@ public class MakeCorePlugin extends Plugin { return plugin; } + public static void log(Throwable e) { + if (e instanceof InvocationTargetException) + e = ((InvocationTargetException) e).getTargetException(); + IStatus status = null; + if (e instanceof CoreException) + status = ((CoreException) e).getStatus(); + else + status = new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.OK, e.getMessage(), e); + log(status); + } + + public static void log(IStatus status) { + ResourcesPlugin.getPlugin().getLog().log(status); + } + /** * Returns the string from the plugin's resource bundle, * or 'key' if not found. @@ -120,10 +139,18 @@ public class MakeCorePlugin extends Plugin { return BuildInfoFactory.create(args, builderID); } - public IMakeTargetProvider getTargetProvider() { - if ( fTargetProvider == null) { - fTargetProvider = new MakeTargetProvider(); + public IMakeTargetManager getTargetProvider() { + if ( fTargetManager == null) { + fTargetManager = new MakeTargetManager(); + fTargetManager.startup(); + } + return fTargetManager; + } + public void shutdown() throws CoreException { + super.shutdown(); + if ( fTargetManager != null) { + fTargetManager.shutdown(); + fTargetManager = null; } - return fTargetProvider; } } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java index 5db37fb2e35..cca69afa675 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java @@ -8,94 +8,93 @@ ***********************************************************************/ package org.eclipse.cdt.make.internal.core; +import java.util.HashMap; + +import org.eclipse.cdt.make.core.IMakeBuilderInfo; import org.eclipse.cdt.make.core.IMakeTarget; +import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; public class MakeTarget implements IMakeTarget { - private boolean bDirty; + private String buildArguments; + private IPath buildCommand; + private boolean isDefaultBuildCmd; + private boolean isStopOnError; + private String name; + private String targetBuilderID; + private IContainer container; - MakeTarget(IContainer container, String targetBuilderID, String targetName) { - // dinglis-TODO Auto-generated constructor stub + MakeTarget(IContainer container, String targetBuilderID, String name) { + this.container = container; + this.targetBuilderID = targetBuilderID; + this.name = name; } void setName(String name) { - // dinglis-TODO Auto-generated method stub - } - - void setContainer(IContainer container) { - // dinglis-TODO Auto-generated method stub + this.name = name; } public String getName() { - // dinglis-TODO Auto-generated method stub - return null; + return name; } public String getTargetBuilderID() { - // dinglis-TODO Auto-generated method stub - return null; - } - - public String getBuilderID() { - // dinglis-TODO Auto-generated method stub - return null; + return targetBuilderID; } public boolean isStopOnError() { - // dinglis-TODO Auto-generated method stub - return false; + return isStopOnError; } public void setStopOnError(boolean stopOnError) { - // dinglis-TODO Auto-generated method stub - + isStopOnError = stopOnError; } public boolean isDefaultBuildCmd() { - // dinglis-TODO Auto-generated method stub - return false; + return isDefaultBuildCmd; } public void setUseDefaultBuildCmd(boolean useDefault) { - // dinglis-TODO Auto-generated method stub - + isDefaultBuildCmd = useDefault; } public IPath getBuildCommand() { - // dinglis-TODO Auto-generated method stub - return null; + return buildCommand; } public void setBuildCommand(IPath command) { - // dinglis-TODO Auto-generated method stub - + buildCommand = command; } public String getBuildArguments() { - // dinglis-TODO Auto-generated method stub - return null; + return buildArguments; } public void setBuildArguments(String arguments) { - // dinglis-TODO Auto-generated method stub - + buildArguments = arguments; } public IContainer getContainer() { - // dinglis-TODO Auto-generated method stub - return null; + return container; } public void build(IProgressMonitor monitor) throws CoreException { - // dinglis-TODO Auto-generated method stub - - } - - public boolean isDirty() { - return bDirty; + IProject project = container.getProject(); + String builderID = MakeCorePlugin.getDefault().getTargetProvider().getBuilderID(targetBuilderID); + HashMap infoMap = new HashMap(); + IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(infoMap, builderID); + info.setBuildArguments(buildArguments); + info.setBuildCommand(buildCommand); + info.setUseDefaultBuildCmd(isDefaultBuildCmd); + info.setStopOnError(isStopOnError); + info.setFullBuildEnable(true); + info.setFullBuildTarget(buildArguments); + project.build(IncrementalProjectBuilder.FULL_BUILD, builderID, infoMap, monitor); } } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java similarity index 52% rename from build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetProvider.java rename to build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java index 9c4694b7a04..6c513b250de 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java @@ -11,21 +11,27 @@ package org.eclipse.cdt.make.internal.core; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.IOException; import java.util.HashMap; import java.util.Vector; import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.core.IMakeTargetListener; -import org.eclipse.cdt.make.core.IMakeTargetProvider; +import org.eclipse.cdt.make.core.IMakeTargetManager; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeTargetEvent; import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IContainer; 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.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; @@ -36,56 +42,59 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeListener { - private static String TARGET_BUILD_EXT = MakeCorePlugin.getUniqueIdentifier() + ".MakeTargetBuilder"; //$NON-NLS-1$ +public class MakeTargetManager implements IMakeTargetManager, IResourceChangeListener { + private static String TARGET_BUILD_EXT = "MakeTargetBuilder"; //$NON-NLS-1$ private ListenerList listeners = new ListenerList(); private HashMap projectMap = new HashMap(); private HashMap builderMap; + private Vector fProjects = new Vector(); - public MakeTargetProvider() { + public MakeTargetManager() { } public IMakeTarget addTarget(IContainer container, String targetBuilderID, String targetName) throws CoreException { if (container instanceof IWorkspaceRoot) { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetProvider.add_to_workspace_root"), null)); //$NON-NLS-1$ + throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.add_to_workspace_root"), null)); //$NON-NLS-1$ } - ProjectTargets projectTargets = (ProjectTargets)projectMap.get(container.getProject()); + ProjectTargets projectTargets = (ProjectTargets) projectMap.get(container.getProject()); if (projectTargets == null) { projectTargets = readTargets(container.getProject()); } MakeTarget target = new MakeTarget(container, targetBuilderID, targetName); projectTargets.add(target); + writeTargets(projectTargets); notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_ADD, target)); return target; } public void removeTarget(IMakeTarget target) throws CoreException { IProject project = target.getContainer().getProject(); - ProjectTargets projectTargets = (ProjectTargets)projectMap.get(project); + ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project); if (projectTargets == null) { projectTargets = readTargets(project); } projectTargets.remove(target); + writeTargets(projectTargets); notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_REMOVED, target)); } public void renameTarget(IMakeTarget target, String name) throws CoreException { IProject project = target.getContainer().getProject(); - ProjectTargets projectTargets = (ProjectTargets)projectMap.get(project); + ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project); if (projectTargets == null) { projectTargets = readTargets(project); } - if (!projectTargets.contains((MakeTarget)target)) { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetProvider.target_exists"), null)); //$NON-NLS-1$ + if (!projectTargets.contains((MakeTarget) target)) { + throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$ } - ((MakeTarget)target).setName(name); - projectTargets.setDirty(); + ((MakeTarget) target).setName(name); + writeTargets(projectTargets); notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_CHANGED, target)); } public IMakeTarget[] getTargets(IContainer container) throws CoreException { - ProjectTargets projectTargets = (ProjectTargets)projectMap.get(container.getProject()); + ProjectTargets projectTargets = (ProjectTargets) projectMap.get(container.getProject()); if (projectTargets == null) { projectTargets = readTargets(container.getProject()); } @@ -93,23 +102,32 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL } public IProject[] getTargetBuilderProjects() throws CoreException { - Vector tProj = new Vector(); - IProject project[] = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - for (int i = 0; i < project.length; i++) { - IProjectDescription description = project[i].getDescription(); - ICommand builder[] = description.getBuildSpec(); - for (int j = 0; j < builder.length; j++) { - if (builderMap.containsValue(builder[j].getBuilderName())) { - tProj.add(project[i]); - break; - } + return (IProject[]) fProjects.toArray(new IProject[fProjects.size()]); + } + + protected boolean hasTargetBuilder(IProject project) throws CoreException { + IProjectDescription description = project.getDescription(); + ICommand builder[] = description.getBuildSpec(); + for (int j = 0; j < builder.length; j++) { + if (builderMap.containsValue(builder[j].getBuilderName())) { + return true; } } - return (IProject[])tProj.toArray(new IProject[tProj.size()]); + return false; } public void startup() { initializeBuilders(); + IProject project[] = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + for (int i = 0; i < project.length; i++) { + try { + if (hasTargetBuilder(project[i])) { + fProjects.add(project[i]); + break; + } + } catch (CoreException e) { + } + } ResourcesPlugin.getWorkspace().addResourceChangeListener(this); } @@ -118,17 +136,86 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL } public void resourceChanged(IResourceChangeEvent event) { - // dinglis-TODO listen for project that add/remove a target type builder + IResourceDelta delta = event.getDelta(); + if (delta != null) { + try { + delta.accept(new MakeTargetVisitor()); + } catch (CoreException e) { + MakeCorePlugin.log(e); + } + } + } - protected void writeTargets(ProjectTargets projectTargets) { + class MakeTargetVisitor implements IResourceDeltaVisitor { + /** + * @see IResourceDeltaVisitor#visit(IResourceDelta) + */ + public boolean visit(IResourceDelta delta) { + if (delta == null) { + return false; + } + IResource resource = delta.getResource(); + if (resource.getType() == IResource.PROJECT) { + IProject project = (IProject) resource; + int flags = delta.getFlags(); + int deltaKind = delta.getKind(); + if (deltaKind == IResourceDelta.ADDED) { + try { + if (hasTargetBuilder(project)) { + fProjects.add(project); + notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_ADDED, project)); + } + } catch (CoreException e) { + } + } else if (deltaKind == IResourceDelta.REMOVED) { + if (fProjects.contains(project)) { + fProjects.remove(project); + notifyListeners(new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); + } + } else if (deltaKind == IResourceDelta.CHANGED) { + try { + if (0 != (flags & IResourceDelta.DESCRIPTION)) { + if (fProjects.contains(project) && !hasTargetBuilder(project)) { + fProjects.remove(project); + notifyListeners( + new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); + } else if (!fProjects.contains(project) && hasTargetBuilder(project)) { + fProjects.add(project); + notifyListeners( + new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_ADDED, project)); + } + } + if (0 != (flags & IResourceDelta.OPEN)) { + if (!project.isOpen() && fProjects.contains(project)) { + fProjects.remove(project); + notifyListeners( + new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_REMOVED, project)); + } else if (project.isOpen() && hasTargetBuilder(project) && !fProjects.contains(project)) { + fProjects.add(project); + notifyListeners( + new MakeTargetEvent(MakeTargetManager.this, MakeTargetEvent.PROJECT_ADDED, project)); + } + } + } catch (CoreException e) { + } + } + return false; + } + return resource instanceof IWorkspaceRoot; + } + } + protected void writeTargets(ProjectTargets projectTargets) throws CoreException { IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(projectTargets.getProject().getName()); File targetFile = targetFilePath.toFile(); try { - FileOutputStream file = new FileOutputStream(targetFile); - } catch (Exception e) { + projectTargets.saveTargets(file); + } catch (IOException e) { + throw new CoreException( + new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error writing target file", e)); } + } protected ProjectTargets readTargets(IProject project) throws CoreException { @@ -136,8 +223,10 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL File targetFile = targetFilePath.toFile(); if (targetFile.exists()) { try { - return new ProjectTargets(project, targetFile); - } catch (Exception e) { + return new ProjectTargets(project, new FileInputStream(targetFile)); + } catch (FileNotFoundException e) { + throw new CoreException( + new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error reading target file", e)); } } return new ProjectTargets(project); @@ -145,8 +234,7 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL protected void initializeBuilders() { builderMap = new HashMap(); - - IExtensionPoint point = MakeCorePlugin.getDefault().getDescriptor().getExtensionPoint(MakeTargetProvider.TARGET_BUILD_EXT); + IExtensionPoint point = MakeCorePlugin.getDefault().getDescriptor().getExtensionPoint(MakeTargetManager.TARGET_BUILD_EXT); IExtension[] ext = point.getExtensions(); for (int i = 0; i < ext.length; i++) { IConfigurationElement[] element = ext[i].getConfigurationElements(); @@ -163,7 +251,7 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL protected void notifyListeners(MakeTargetEvent event) { Object[] list = listeners.getListeners(); for (int i = 0; i < list.length; i++) { - ((IMakeTargetListener)list[i]).targetChanged(event); + ((IMakeTargetListener) list[i]).targetChanged(event); } } @@ -174,4 +262,8 @@ public class MakeTargetProvider implements IMakeTargetProvider, IResourceChangeL public void removeListener(IMakeTargetListener listener) { listeners.remove(listeners); } + + public String getBuilderID(String targetBuilderID) { + return (String) builderMap.get(targetBuilderID); + } } \ No newline at end of file diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java index aad1de1813a..3ae94bd5fef 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java @@ -1,9 +1,8 @@ package org.eclipse.cdt.make.internal.core; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.HashMap; @@ -34,22 +33,21 @@ public class ProjectTargets { private static String BUILD_TARGET_ELEMENT = "buildTargets"; //$NON-NLS-1$ private static String TARGET_ELEMENT = "target"; //$NON-NLS-1$ - private boolean isDirty; private HashMap targetMap = new HashMap(); private IProject project; - + public ProjectTargets(IProject project) { this.project = project; } - public ProjectTargets(IProject project, File targetFile) throws CoreException { + public ProjectTargets(IProject project, InputStream input) throws CoreException { Document document = null; - try { - FileInputStream file = new FileInputStream(targetFile); + try { DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - document = parser.parse(file); + document = parser.parse(input); } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error reading target file", e)); + throw new CoreException( + new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, "Error reading target file", e)); } Node node = document.getFirstChild(); if (node.getNodeName().equals(BUILD_TARGET_ELEMENT)) { @@ -103,17 +101,17 @@ public class ProjectTargets { } public IMakeTarget[] get(IContainer container) { - ArrayList list = (ArrayList)targetMap.get(container); + ArrayList list = (ArrayList) targetMap.get(container); if (list != null) { - return (IMakeTarget[])list.toArray(new IMakeTarget[list.size()]); + return (IMakeTarget[]) list.toArray(new IMakeTarget[list.size()]); } return new IMakeTarget[0]; } - + public void add(MakeTarget target) throws CoreException { - ArrayList list = (ArrayList)targetMap.get(target.getContainer()); + ArrayList list = (ArrayList) targetMap.get(target.getContainer()); if (list != null && list.contains(target)) { - throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetProvider.target_exists"), null)); //$NON-NLS-1$ + throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.target_exists"), null)); //$NON-NLS-1$ } if (list == null) { list = new ArrayList(); @@ -123,7 +121,7 @@ public class ProjectTargets { } public boolean contains(MakeTarget target) { - ArrayList list = (ArrayList)targetMap.get(target.getContainer()); + ArrayList list = (ArrayList) targetMap.get(target.getContainer()); if (list != null && list.contains(target)) { return true; } @@ -131,7 +129,7 @@ public class ProjectTargets { } public void remove(IMakeTarget target) { - ArrayList list = (ArrayList)targetMap.get(target.getContainer()); + ArrayList list = (ArrayList) targetMap.get(target.getContainer()); if (list != null && !list.contains(target)) { return; } @@ -141,35 +139,26 @@ public class ProjectTargets { } } - public void setDirty() { - isDirty = true; - } - - public boolean isDirty() { - return isDirty; - } - public IProject getProject() { return project; } - - protected String getAsXML() throws IOException { + + protected Document getAsXML() throws IOException { Document doc = new DocumentImpl(); Element configRootElement = doc.createElement(BUILD_TARGET_ELEMENT); doc.appendChild(configRootElement); - return serializeDocument(doc); + return doc; } - - protected String serializeDocument(Document doc) throws IOException { - ByteArrayOutputStream s = new ByteArrayOutputStream(); + + public void saveTargets(OutputStream output) throws IOException { + Document doc = getAsXML(); OutputFormat format = new OutputFormat(); format.setIndenting(true); + format.setPreserveSpace(true); format.setLineSeparator(System.getProperty("line.separator")); //$NON-NLS-1$ Serializer serializer = - SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(s, "UTF8"), format); + SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(output, "UTF8"), format); serializer.asDOMSerializer().serialize(doc); - return s.toString("UTF8"); //$NON-NLS-1$ } - }