package org.archstudio.bna.builder;
import java.util.Map;
import java.util.Set;
import org.archstudio.utils.eclipse.PDEUtils;
import org.archstudio.utils.eclipse.WorkspaceExtensionRegistry;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
public class ThingIncrementalProjectBuilder extends IncrementalProjectBuilder {
private static final IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry();
private static final IExtensionRegistry workspaceRegistry = new WorkspaceExtensionRegistry();
public ThingIncrementalProjectBuilder() {
}
@Override
protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
IResourceDelta delta = getDelta(getProject());
if (delta != null) {
IResourceDelta pluginDelta = delta.findMember(getProject().getFile("plugin.xml").getProjectRelativePath());
if (pluginDelta == null) {
return null;
}
}
Set<String> bundles = Sets.newHashSet();
Map<String, IConfigurationElement> facets = Maps.newHashMap();
Map<String, IConfigurationElement> things = Maps.newHashMap();
for (IConfigurationElement c : workspaceRegistry
.getConfigurationElementsFor("org.archstudio.bna.thingdefinition")) {
bundles.add(c.getContributor().getName());
for (IConfigurationElement f : PDEUtils.getConfigurationElements(c, "Facet")) {
facets.put(f.getAttribute("name"), f);
}
for (IConfigurationElement t : PDEUtils.getConfigurationElements(c, "Thing")) {
things.put(t.getAttribute("name"), t);
}
}
for (IConfigurationElement c : pluginRegistry
.getConfigurationElementsFor("org.archstudio.bna.thingdefinition")) {
if (!bundles.contains(c.getContributor().getName())) {
for (IConfigurationElement f : PDEUtils.getConfigurationElements(c, "Facet")) {
facets.put(f.getAttribute("name"), f);
}
for (IConfigurationElement t : PDEUtils.getConfigurationElements(c, "Thing")) {
things.put(t.getAttribute("name"), t);
}
}
}
for (IConfigurationElement c : workspaceRegistry
.getConfigurationElementsFor("org.archstudio.bna.thingdefinition")) {
if (c.getContributor().getName().equals(getProject().getName())) {
Generator.generatePackage(getProject(), new Mappings(facets, things), c);
}
}
return null;
}
}