437197 : remove references to internal plexusbuildapi classes

Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
index a64ae85..6de085e 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/filtering/ResourceFilteringBuildParticipant.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Sonatype, Inc.
+ * Copyright (c) 2008-2014 Sonatype, Inc.
  * 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
@@ -9,11 +9,12 @@
 package org.eclipse.m2e.wtp.internal.filtering;
 
 
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.maven.execution.MavenExecutionRequest;
@@ -21,6 +22,7 @@
 import org.apache.maven.lifecycle.MavenExecutionPlan;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.Scanner;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.codehaus.plexus.util.xml.Xpp3DomUtils;
@@ -35,14 +37,9 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.m2e.core.MavenPlugin;
 import org.eclipse.m2e.core.embedder.IMaven;
-import org.eclipse.m2e.core.internal.IMavenConstants;
 import org.eclipse.m2e.core.internal.MavenPluginActivator;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.AbstractEclipseBuildContext;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.AbstractEclipseBuildContext.Message;
-import org.eclipse.m2e.core.internal.builder.plexusbuildapi.EclipseBuildContext;
 import org.eclipse.m2e.core.project.IMavenProjectFacade;
 import org.eclipse.m2e.core.project.IMavenProjectRegistry;
 import org.eclipse.m2e.core.project.ResolverConfiguration;
@@ -67,10 +64,7 @@
   
   private static final Logger LOG = LoggerFactory.getLogger(ResourceFilteringBuildParticipant.class );
 
-  //Need to duplicate org.eclipse.m2e.core.internal.builder.MavenBuilder.BUILD_CONTEXT_KEY since it's not accessible 
-  private static final QualifiedName BUILD_CONTEXT_KEY = new QualifiedName(IMavenConstants.PLUGIN_ID, "BuildContext"); //$NON-NLS-1$
-  
-  private EclipseBuildContext forceCopyBuildContext; 
+  private CleanBuildContext forceCopyBuildContext; 
   
   @Override
   public Set<IProject> build(int kind, IProgressMonitor monitor) throws Exception {
@@ -94,11 +88,8 @@
       List<String> filters = configuration.getFilters();
       if (changeRequiresForcedCopy(facade, filters, delta)) {
         LOG.info(NLS.bind(Messages.ResourceFilteringBuildParticipant_Changed_Resources_Require_Clean_Build,project.getName()));
-        Map<String, Object> contextState = new HashMap<String, Object>();
-        project.setSessionProperty(BUILD_CONTEXT_KEY, contextState);
         //String id = "" + "-" + getClass().getName();
-        forceCopyBuildContext = new EclipseBuildContext(project, contextState);
-        forceCopyBuildContext.setCurrentBuildParticipantId(getBuildParticipantId());
+        forceCopyBuildContext = new CleanBuildContext(oldBuildContext);
         ThreadBuildContext.setThreadBuildContext(forceCopyBuildContext);
       }
       if (forceCopyBuildContext != null || hasResourcesChanged(facade, delta, resources)) {
@@ -117,31 +108,8 @@
     return null;
   }
 
-  /**
-   * Workaround to retrieve the buildParticipantId that is not exposed by AbstractEclipseBuildContext
-   */
-  private String getBuildParticipantId() {
-    BuildContext originalContext = super.getBuildContext();
-    String id = "org.apache.maven.plugins:maven-resources:copy-resources:::-"+getClass().getName();  //$NON-NLS-1$
-    if (originalContext != null && (originalContext instanceof AbstractEclipseBuildContext)) {
-      //That allows us to avoid doing some introspection
-      AbstractEclipseBuildContext eclipseContext = ((AbstractEclipseBuildContext)originalContext); 
-      Map<String, List<Message>> map = eclipseContext.getMessages();
-      if (map == null || map.isEmpty()) {
-        eclipseContext.addMessage(null, 0, 0, "dummy", 0, null); //$NON-NLS-1$
-        //adding a message initializes the map 
-        map = eclipseContext.getMessages();
-        id = map.keySet().iterator().next();
-        map.clear();
-      } else {
-        id = map.keySet().iterator().next();
-      }
-    }
-    return id;
-  }
-
   @Override
-protected BuildContext getBuildContext() {
+  protected BuildContext getBuildContext() {
      return (forceCopyBuildContext == null)?super.getBuildContext() : forceCopyBuildContext;
   }
 
@@ -477,5 +445,81 @@
     return loadedParent; 
   }
   
-  
+
+  private static class CleanBuildContext implements BuildContext {
+
+	private BuildContext originalContext;
+
+	CleanBuildContext(BuildContext originalContext) {
+		this.originalContext = originalContext;
+	}
+	  
+	public boolean hasDelta(String relpath) {
+		return true;
+	}
+
+	public boolean hasDelta(File file) {
+		return true;
+	}
+
+	public boolean hasDelta(List relpaths) {
+		return true;
+	}
+
+	public void refresh(File file) {
+		originalContext.refresh(file);
+	}
+
+	public OutputStream newFileOutputStream(File file) throws IOException {
+		return originalContext.newFileOutputStream(file);
+	}
+
+	public Scanner newScanner(File basedir) {
+		return originalContext.newScanner(basedir);
+	}
+
+	public Scanner newDeleteScanner(File basedir) {
+		return originalContext.newDeleteScanner(basedir);
+	}
+
+	public Scanner newScanner(File basedir, boolean ignoreDelta) {
+		return originalContext.newScanner(basedir, ignoreDelta);
+	}
+
+	public boolean isIncremental() {
+		return false;
+	}
+
+	public void setValue(String key, Object value) {
+		originalContext.setValue(key, value);
+	}
+
+	public Object getValue(String key) {
+		return originalContext.getValue(key);
+	}
+
+	public void addWarning(File file, int line, int column, String message,
+			Throwable cause) {
+		originalContext.addWarning(file, line, column, message, cause);
+	}
+
+	public void addError(File file, int line, int column, String message,
+			Throwable cause) {
+		originalContext.addError(file, line, column, message, cause);
+	}
+
+	public void addMessage(File file, int line, int column, String message,
+			int severity, Throwable cause) {
+		originalContext.addMessage(file, line, column, message, severity, cause);
+	}
+
+	public void removeMessages(File file) {
+		originalContext.removeMessages(file);
+	}
+
+	public boolean isUptodate(File target, File source) {
+		return false;
+	}
+
+  }
 }