package org.bundlemaker.core.itestframework.simple_artifact_model; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.bundlemaker.core.analysis.AnalysisCore; import org.bundlemaker.core.analysis.AnalysisModelQueries; import org.bundlemaker.core.analysis.IAnalysisModelConfiguration; import org.bundlemaker.core.analysis.IAnalysisModelModifiedListener; import org.bundlemaker.core.analysis.IAnalysisModelVisitor; import org.bundlemaker.core.analysis.IBundleMakerArtifact; import org.bundlemaker.core.analysis.IDependency; import org.bundlemaker.core.analysis.IGroupArtifact; import org.bundlemaker.core.analysis.IModuleArtifact; import org.bundlemaker.core.analysis.IPackageArtifact; import org.bundlemaker.core.analysis.IResourceArtifact; import org.bundlemaker.core.analysis.IRootArtifact; import org.bundlemaker.core.resource.IModularizedSystem; import org.junit.Assert; /** * <p> * * <pre> * Root : SimpleArtifactModelTest * Group : group1 * Group : group2 * Module : SimpleArtifactModelTest_1.0.0 * Package : de * Package : test * Resource : Klasse.class * Type : Klasse * Resource : Test.class * Type : Test * </pre> * * </p> * * @author Gerd Wütherich (gerd@gerd-wuetherich.de) * */ public class SimpleArtifactModel { /** - */ private IRootArtifact _rootArtifact; /** - */ private IModuleArtifact _jre_Artifact; /** - */ private IModuleArtifact _module_Artifact; /** - */ private IModuleArtifact _velocity_module_Artifact; /** - */ private IGroupArtifact _group2_Artifact; /** - */ private IGroupArtifact _group1_Artifact; /** - */ private IResourceArtifact _klasse_Resource; /** - */ private IResourceArtifact _test_Resource; /** - */ private IPackageArtifact _test_Package; /** - */ private IPackageArtifact _de_Package; /** - */ private IModularizedSystem _modularizedSystem; /** - */ private int _modifiedNotificationCount; /** * <p> * Creates a new instance of type {@link SimpleArtifactModel}. * </p> * * @param modularizedSystem * @param configuration */ public SimpleArtifactModel(IModularizedSystem modularizedSystem, IAnalysisModelConfiguration configuration) { // Assert.assertNotNull(modularizedSystem); Assert.assertNotNull(configuration); _modularizedSystem = modularizedSystem; _rootArtifact = createArtifactModel(modularizedSystem, configuration); _module_Artifact = assertSimpleArtifactModule(_rootArtifact); _jre_Artifact = assertJreArtifactModule(_rootArtifact); _velocity_module_Artifact = AnalysisModelQueries.getModuleArtifact(_rootArtifact, "velocity", "1.5"); _group1_Artifact = assertGroupArtifact(_rootArtifact, "group1"); _group2_Artifact = assertGroupArtifact(_rootArtifact, "group1/group2"); _klasse_Resource = assertResourceArtifact(_module_Artifact, "Klasse"); _test_Resource = assertResourceArtifact(_module_Artifact, "Test"); _test_Package = assertPackageArtifact(_module_Artifact, "de.test"); _de_Package = assertPackageArtifact(_module_Artifact, "de"); // _rootArtifact.addAnalysisModelModifiedListener(new IAnalysisModelModifiedListener() { @Override public void analysisModelModified() { _modifiedNotificationCount++; } }); } public int getModifiedNotificationCount() { return _modifiedNotificationCount; } public IModuleArtifact getJreArtifact() { return _jre_Artifact; } public IRootArtifact getRootArtifact() { return _rootArtifact; } public IModuleArtifact getMainModuleArtifact() { return _module_Artifact; } public IModuleArtifact getVelocityModuleArtifact() { return _velocity_module_Artifact; } public IGroupArtifact getGroup2Artifact() { return _group2_Artifact; } public IGroupArtifact getGroup1Artifact() { return _group1_Artifact; } public IResourceArtifact getKlasseResource() { return _klasse_Resource; } public IResourceArtifact getTestResource() { return _test_Resource; } public IPackageArtifact getDePackage() { return _de_Package; } /** * <p> * </p> * * @return */ public IPackageArtifact getTestPackage() { return _test_Package; } /** * <p> * </p> * * @return */ public List<IDependency> getDependenciesTo(IBundleMakerArtifact from, IBundleMakerArtifact... to) { // test dependencies List<IDependency> deps = new LinkedList<IDependency>(from.getDependenciesTo(to)); // Collections.sort(deps, new Comparator<IDependency>() { public int compare(IDependency o1, IDependency o2) { return o1.toString().compareTo(o2.toString()); } }); // return deps; } /** * <p> * </p> * * @param module_Artifact * @param string * @return */ private IPackageArtifact assertPackageArtifact(IModuleArtifact moduleArtifact, String qualifiedName) { IPackageArtifact result = AnalysisModelQueries.findPackageArtifactByQualifiedName(moduleArtifact, qualifiedName); Assert.assertNotNull(result); return result; } /** * <p> * </p> * * @param rootArtifact * @param qualifiedName * @return */ protected IGroupArtifact assertGroupArtifact(IBundleMakerArtifact rootArtifact, String qualifiedName) { IGroupArtifact result = AnalysisModelQueries.findGroupArtifactByQualifiedName(rootArtifact, qualifiedName); Assert.assertNotNull(qualifiedName, result); return result; } /** * <p> * </p> * * @param rootArtifact * @param resourceName * @return */ protected IResourceArtifact assertResourceArtifact(IBundleMakerArtifact rootArtifact, final String resourceNamePrefix) { // create the result array final List<IResourceArtifact> result = new LinkedList<IResourceArtifact>(); // visit rootArtifact.accept(new IAnalysisModelVisitor.Adapter() { @Override public boolean visit(IResourceArtifact resourceArtifact) { // if (resourceArtifact.getName().startsWith(resourceNamePrefix)) { result.add(resourceArtifact); } // return true; } }); // assert equals Assert.assertEquals(String.format("Expected exactly one resource with name prefix '%s'.", resourceNamePrefix), 1, result.size()); // return result.get(0); } /** * <p> * </p> * * @param rootArtifact * @return */ private IModuleArtifact assertSimpleArtifactModule(IBundleMakerArtifact rootArtifact) { // get the module IModuleArtifact moduleArtifact = AnalysisModelQueries.getModuleArtifact(rootArtifact, _modularizedSystem.getName(), "1.0.0"); // assert assertNode(moduleArtifact, IModuleArtifact.class, _modularizedSystem.getName() + "_1.0.0"); assertNode(moduleArtifact.getParent(), IGroupArtifact.class, "group2"); assertNode(moduleArtifact.getParent().getParent(), IGroupArtifact.class, "group1"); return moduleArtifact; } private IModuleArtifact assertJreArtifactModule(final IRootArtifact rootArtifact) { final IModuleArtifact[] result = new IModuleArtifact[1]; // rootArtifact.accept(new IAnalysisModelVisitor.Adapter() { @Override public boolean visit(IModuleArtifact moduleArtifact) { // if (rootArtifact.getModularizedSystem().getExecutionEnvironment().equals(moduleArtifact.getAssociatedModule())) { result[0] = moduleArtifact; } return false; } }); // Assert.assertNotNull(result[0]); // return result[0]; } /** * <p> * </p> * * @param node * @param type * @param nodeName */ protected void assertNode(IBundleMakerArtifact node, Class<?> type, String nodeName) { Assert.assertTrue(String.format("Node '%s' has to be assignable from %s", node, type), type.isAssignableFrom(node.getClass())); Assert.assertEquals(nodeName, node.getName()); Assert.assertNotNull(node.getParent()); } /** * <p> * </p> * * @return */ private IRootArtifact createArtifactModel(IModularizedSystem modularizedSystem, IAnalysisModelConfiguration configuration) { IRootArtifact rootArtifact = AnalysisCore.getAnalysisModel(modularizedSystem, configuration).getRoot(); Assert.assertNotNull(rootArtifact); // Assert.assertEquals(4, rootArtifact.getChildren().size()); // assert JRE Assert.assertNotNull(AnalysisModelQueries.getJreModuleArtifact(rootArtifact)); // return the result return rootArtifact; } public void assertGroupCount(int expectedCount) { // create the result list final List<IGroupArtifact> result = new LinkedList<IGroupArtifact>(); // accept the visitor getRootArtifact().accept(new IAnalysisModelVisitor.Adapter() { @Override public boolean visit(IGroupArtifact groupArtifact) { result.add(groupArtifact); return super.visit(groupArtifact); } }); // if (result.size() != expectedCount) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder .append(String.format("Expected %s groups, but found %s: %s\n", expectedCount, result.size(), result)); for (Iterator iterator = result.iterator(); iterator.hasNext();) { IGroupArtifact iGroupArtifact = (IGroupArtifact) iterator.next(); stringBuilder.append(String.format("%s", iGroupArtifact.getQualifiedName())); if (iterator.hasNext()) { stringBuilder.append("\n"); } } Assert.fail(stringBuilder.toString()); } } }