package org.bundlemaker.core.internal.analysis; import org.bundlemaker.core.analysis.AnalysisModelException; import org.bundlemaker.core.analysis.AnalysisModelQueries; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IGroupAndModuleContainer; import org.bundlemaker.core.analysis.IGroupArtifact; import org.bundlemaker.core.analysis.IModuleArtifact; import org.bundlemaker.core.internal.api.resource.IModifiableModularizedSystem; import org.bundlemaker.core.internal.transformation.CreateGroupTransformation; import org.bundlemaker.core.internal.transformation.CreateModuleTransformation; import org.bundlemaker.core.resource.IModule; import org.bundlemaker.core.spi.analysis.AbstractArtifactContainer; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; /** * <p> * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) */ public class GroupAndModuleContainerDelegate /** implements IGroupAndModuleContainer **/ { /** - */ private final IGroupAndModuleContainer _groupAndModuleContainer; /** * <p> * Creates a new instance of type {@link GroupAndModuleContainerDelegate}. * </p> * * @param groupAndModuleContainer */ public GroupAndModuleContainerDelegate(IGroupAndModuleContainer groupAndModuleContainer) { Assert.isNotNull(groupAndModuleContainer); Assert.isTrue(groupAndModuleContainer instanceof AbstractArtifactContainer); _groupAndModuleContainer = groupAndModuleContainer; } /** * {@inheritDoc} */ public IModuleArtifact getOrCreateModule(String qualifiedModuleName, String moduleVersion) { // asserts Assert.isNotNull(qualifiedModuleName); Assert.isNotNull(moduleVersion); // IBundleMakerArtifact rootArtifact = qualifiedModuleName.startsWith("/") ? _groupAndModuleContainer.getRoot() : _groupAndModuleContainer; // IModuleArtifact moduleArtifact = AnalysisModelQueries.getChildByPath(rootArtifact, new Path( qualifiedModuleName + "_" + moduleVersion), IModuleArtifact.class); // does it already exist? if (moduleArtifact != null) { return moduleArtifact; } // if not, we have to create it... else { // check if module already exists IPath simpleName = new Path(qualifiedModuleName); IModule resourceModule = _groupAndModuleContainer.getModularizedSystem().getModule( simpleName.lastSegment(), moduleVersion); // if (resourceModule != null) { // String classification = resourceModule.hasClassification() ? resourceModule.getClassification() .toPortableString() : ""; // throw new AnalysisModelException(String.format( "Cannot create new Module '%s_%s' in group '%s'. Module already exists within a different group ('%s').", qualifiedModuleName, moduleVersion, this._groupAndModuleContainer.getFullPath(), classification)); } // create the transformation CreateModuleTransformation.Configuration configuration = new CreateModuleTransformation.Configuration( _groupAndModuleContainer, qualifiedModuleName, moduleVersion); // CreateModuleTransformation transformation = new CreateModuleTransformation(configuration.toJsonTree()); // ((IModifiableModularizedSystem) _groupAndModuleContainer.getModularizedSystem()).applyTransformations(null, transformation); // return transformation.getModuleArtifact(); } } /** * <p> * </p> * * @param path * @return */ public IGroupArtifact getOrCreateGroup(String path) { Assert.isNotNull(path); // return getOrCreateGroup(new Path(path)); } /** * {@inheritDoc} */ public IGroupArtifact getOrCreateGroup(IPath path) { Assert.isNotNull(path); // IGroupArtifact groupArtifact = AnalysisModelQueries.getChildByPath(_groupAndModuleContainer, path, IGroupArtifact.class); // does it already exist? if (groupArtifact != null) { return groupArtifact; } // if not, we have to create it... else { // CreateGroupTransformation transformation = new CreateGroupTransformation(_groupAndModuleContainer, path); // ((IModifiableModularizedSystem) _groupAndModuleContainer.getRoot().getModularizedSystem()).applyTransformations( null, transformation); // return transformation.getGroupArtifact(); } } }