/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.core;
import java.io.IOException;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.jboss.tools.common.el.core.resolver.TypeInfoCollector;
import org.jboss.tools.seam.internal.core.SeamProject;
import org.jboss.tools.seam.internal.core.SeamResourceVisitor;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
import org.jboss.tools.seam.internal.core.scanner.java.JavaScanner;
import org.jboss.tools.seam.internal.core.scanner.lib.LibraryScanner;
import org.jboss.tools.seam.internal.core.scanner.xml.XMLScanner;
public class SeamCoreBuilder extends IncrementalProjectBuilder {
public static String BUILDER_ID = "org.jboss.tools.seam.core.seambuilder"; //$NON-NLS-1$
/**
* @see org.eclipse.core.resource.InternalProjectBuilder#build(int,
* java.util.Map, org.eclipse.core.runtime.IProgressMonitor)
*/
protected IProject[] build(int kind, Map args, IProgressMonitor monitor)
throws CoreException {
SeamProject seamProject = (SeamProject)SeamCorePlugin.getSeamProject(getProject(), false);
SeamResourceVisitor resourceVisitor = new SeamResourceVisitor(seamProject);
long begin = System.currentTimeMillis();
seamProject.postponeFiring();
try {
seamProject.build();
TypeInfoCollector.cleanCache();
IResourceDelta delta = getDelta(getProject());
if ((seamProject.hasNoStorage() && !seamProject.isBuilt()) || delta == null ) {
//Resource visitor filters project members to be processed
getProject().accept(resourceVisitor);
} else {
delta.accept(resourceVisitor);
}
long end = System.currentTimeMillis();
seamProject.fullBuildTime += end - begin;
// try {
// //It is important to save results of build right after the build is done.
// //Otherwise, at Eclipse restart, the results can be lost.
// seamProject.store();
// } catch (IOException e) {
// SeamCorePlugin.getDefault().logError(e);
// }
seamProject.setBuilt(true);
seamProject.postBuild();
} finally {
seamProject.fireChanges();
}
// Check if we need to return something here instead of null
return null;
}
/**
* Access to xml scanner for test.
* @return
*/
public static IFileScanner createXMLScanner() {
return new XMLScanner();
}
/**
* Access to java scanner for test.
* @return
*/
public static IFileScanner createJavaScanner() {
return new JavaScanner();
}
/**
* Access to library scanner for test.
* @return
*/
public static IFileScanner createLibraryScanner() {
return new LibraryScanner();
}
protected void clean(IProgressMonitor monitor) throws CoreException {
((SeamProject)SeamCorePlugin.getSeamProject(getProject(), false)).clean();
}
}