package org.bundlemaker.core.internal.modelext;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.bundlemaker.core.analysis.IResourceArtifact;
import org.bundlemaker.core.common.utils.AbstractBundleMakerExtensionRegistry;
import org.bundlemaker.core.common.utils.IBundleMakerExtensionRegistry;
import org.bundlemaker.core.project.IProjectContentEntry;
import org.bundlemaker.core.project.IProjectContentResource;
import org.bundlemaker.core.resource.IModule;
import org.bundlemaker.core.resource.IModuleResource;
import org.bundlemaker.core.spi.modext.IAnalysisModelContext;
import org.bundlemaker.core.spi.modext.IModelExtension;
import org.bundlemaker.core.spi.parser.IParsableResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
public class ModelExtFactory {
/** - */
private IBundleMakerExtensionRegistry<IModelExtension> _modelExtensionRegistry;
/**
* <p>
* Creates a new instance of type {@link ModelExtFactory}.
* </p>
*/
public ModelExtFactory() {
//
_modelExtensionRegistry = new AbstractBundleMakerExtensionRegistry<IModelExtension>(
"org.bundlemaker.core.modelextension") {
/**
* {@inheritDoc}
*/
@Override
protected IModelExtension createInstanceFromExtension(IExtension extension) throws CoreException {
//
IConfigurationElement actionElement = extension.getConfigurationElements()[0];
//
IModelExtension modelExtension = (IModelExtension) actionElement.createExecutableExtension("class");
modelExtension.initializeModelExtension();
//
return modelExtension;
}
};
//
_modelExtensionRegistry.initialize();
}
/**
* <p>
* </p>
*
* @param projectContent
* @param storedResourcesMap
*/
public void prepareStoredResourceModel(IProjectContentEntry projectContent,
Map<IProjectContentResource, ? extends IParsableResource> storedResourcesMap) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.prepareStoredResourceModel(projectContent, storedResourcesMap);
}
}
/**
* <p>
* </p>
*
* @param projectContent
* @param resourceCache
* @param newAndModifiedBinaryResources
* @param newAndModifiedSourceResources
*/
public void beforeParseResourceModel(IProjectContentEntry projectContent,
Set<? extends IProjectContentResource> newAndModifiedBinaryResources,
Set<? extends IProjectContentResource> newAndModifiedSourceResources) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.beforeParseResourceModel(projectContent, newAndModifiedBinaryResources,
newAndModifiedSourceResources);
}
}
/**
* <p>
* </p>
*
* @param projectContent
* @param resourceCache
* @param newAndModifiedBinaryResources
* @param newAndModifiedSourceResources
*/
public void afterParseResourceModel(IProjectContentEntry projectContent,
Set<? extends IProjectContentResource> newAndModifiedBinaryResources,
Set<? extends IProjectContentResource> newAndModifiedSourceResources) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.afterParseResourceModel(projectContent, newAndModifiedBinaryResources,
newAndModifiedSourceResources);
}
}
public void resourceModelSetupCompleted(IProjectContentEntry contentEntry,
Collection<IModuleResource> binaryResources,
Collection<IModuleResource> sourceResources) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.resourceModelSetupCompleted(contentEntry, binaryResources, sourceResources);
}
}
public void prepareAnalysisModel(IModule[] modules, IAnalysisModelContext context) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.prepareAnalysisModel(modules, context);
}
}
public boolean shouldAddResourceArtifact(IModuleResource resource) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
if (!modelExtension.shouldAddResourceArtifact(resource)) {
return false;
}
}
//
return true;
}
public void setupResourceArtifact(IResourceArtifact resourceArtifact, IModuleResource resource) {
//
for (IModelExtension modelExtension : _modelExtensionRegistry.getExtensionInstances()) {
modelExtension.setupResourceArtifact(resourceArtifact, resource);
}
}
/** - */
private static ModelExtFactory _modelExtFactory;
/**
* <p>
* </p>
*
* @return
*/
public static ModelExtFactory getModelExtensionFactory() {
//
if (_modelExtFactory == null) {
_modelExtFactory = new ModelExtFactory();
}
//
return _modelExtFactory;
}
public List<String> getExtensionBundleNamespaces() {
return _modelExtensionRegistry.getExtensionBundleNamespaces();
}
}