/*
* Copyright 2014 Bernd Vogt and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.sourcepit.b2.model.harness;
import static org.junit.Assert.assertEquals;
import org.sourcepit.b2.model.module.AbstractModule;
import org.sourcepit.b2.model.module.AbstractReference;
import org.sourcepit.b2.model.module.BasicModule;
import org.sourcepit.b2.model.module.CompositeModule;
import org.sourcepit.b2.model.module.FeatureInclude;
import org.sourcepit.b2.model.module.FeatureProject;
import org.sourcepit.b2.model.module.FeaturesFacet;
import org.sourcepit.b2.model.module.ModuleModelFactory;
import org.sourcepit.b2.model.module.PluginInclude;
import org.sourcepit.b2.model.module.PluginProject;
import org.sourcepit.b2.model.module.PluginsFacet;
import org.sourcepit.b2.model.module.RuledReference;
import org.sourcepit.b2.model.module.SiteProject;
import org.sourcepit.b2.model.module.SitesFacet;
import org.sourcepit.b2.model.module.StrictReference;
import org.sourcepit.b2.model.module.util.Identifiable;
import org.sourcepit.common.manifest.osgi.BundleManifest;
import org.sourcepit.common.manifest.osgi.BundleManifestFactory;
public final class ModelTestHarness {
private ModelTestHarness() {
super();
}
public static PluginProject addPluginProject(BasicModule module, String facetName, String pluginId,
String pluginVersion) {
PluginsFacet pluginsFacet = module.getFacetByName(facetName);
if (pluginsFacet == null) {
pluginsFacet = createPluginsFacet(facetName);
module.getFacets().add(pluginsFacet);
}
PluginProject plugin = createPluginProject(pluginId, pluginVersion);
pluginsFacet.getProjects().add(plugin);
return plugin;
}
public static FeatureProject addFeatureProject(BasicModule module, String facetName, String featureId,
String featureVersion) {
FeaturesFacet featuresFacet = module.getFacetByName(facetName);
if (featuresFacet == null) {
featuresFacet = createFeaturesFacet(facetName);
module.getFacets().add(featuresFacet);
}
FeatureProject feature = createFeatureProject(featureId, featureVersion);
featuresFacet.getProjects().add(feature);
return feature;
}
public static SiteProject addSiteProject(BasicModule module, String facetName, String siteId) {
SitesFacet sitesFacet = module.getFacetByName(facetName);
if (sitesFacet == null) {
sitesFacet = createSitesFacet(facetName);
module.getFacets().add(sitesFacet);
}
SiteProject site = createSiteProject(siteId, module.getVersion());
sitesFacet.getProjects().add(site);
return site;
}
public static FeatureProject getFeatureProject(AbstractModule module, String id, String version) {
StrictReference ref = ModuleModelFactory.eINSTANCE.createStrictReference();
ref.setId(id);
ref.setVersion(version);
return module.resolveReference(ref, FeaturesFacet.class);
}
public static FeatureProject getFeatureProject(AbstractModule module, String id) {
return getFeatureProject(module, id, null);
}
public static CompositeModule createCompositeModule(String id) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final CompositeModule module = eFactory.createCompositeModule();
module.setId(id);
module.setVersion("1.0.0.qualifier");
module.setLayoutId("composite");
return module;
}
public static BasicModule createBasicModule(String id) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final BasicModule module = eFactory.createBasicModule();
module.setId(id);
module.setVersion("1.0.0.qualifier");
module.setLayoutId("structured");
return module;
}
public static PluginProject createPluginProject(String id, String version) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final PluginProject plugin = eFactory.createPluginProject();
plugin.setId(id);
plugin.setVersion(version);
plugin.setTestPlugin(id.endsWith(".tests"));
final BundleManifest manifest = BundleManifestFactory.eINSTANCE.createBundleManifest();
manifest.setBundleSymbolicName(id);
manifest.setBundleVersion(version);
plugin.setBundleManifest(manifest);
// fake source
plugin.setAnnotationData("java", "source.paths", "src");
return plugin;
}
public static FeatureProject createFeatureProject(String id, String version) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final FeatureProject feature = eFactory.createFeatureProject();
feature.setId(id);
feature.setVersion(version);
return feature;
}
public static SiteProject createSiteProject(String id, String version) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final SiteProject site = eFactory.createSiteProject();
site.setId(id);
site.setVersion(version);
return site;
}
public static PluginsFacet createPluginsFacet(String name) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final PluginsFacet pluginsFacet = eFactory.createPluginsFacet();
pluginsFacet.setName(name);
return pluginsFacet;
}
public static FeaturesFacet createFeaturesFacet(String name) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final FeaturesFacet featuresFacet = eFactory.createFeaturesFacet();
featuresFacet.setName(name);
return featuresFacet;
}
public static SitesFacet createSitesFacet(String name) {
final ModuleModelFactory eFactory = ModuleModelFactory.eINSTANCE;
final SitesFacet sitesFacet = eFactory.createSitesFacet();
sitesFacet.setName(name);
return sitesFacet;
}
public static void assertReference(String expectedId, String expectedVersion, AbstractReference reference) {
assertEquals(expectedId, reference.getId());
assertEquals(expectedVersion, reference.getVersion());
}
public static void assertIdentifiable(String expectedId, String expectedVersion, Identifiable identifiable) {
assertEquals(expectedId, identifiable.getId());
assertEquals(expectedVersion, identifiable.getVersion());
}
public static PluginInclude addPluginInclude(FeatureProject featureProject, PluginProject pluginProject) {
final PluginInclude pluginInclude = createPluginInclude(pluginProject.getId(), pluginProject.getVersion(), false);
featureProject.getIncludedPlugins().add(pluginInclude);
return pluginInclude;
}
private static PluginInclude createPluginInclude(String id, String version, boolean unpack) {
final PluginInclude pluginInclude = ModuleModelFactory.eINSTANCE.createPluginInclude();
pluginInclude.setId(id);
pluginInclude.setVersion(version);
pluginInclude.setUnpack(unpack);
return pluginInclude;
}
public static RuledReference addPluginRequirement(FeatureProject featureProject, String id, String version) {
final RuledReference requiredPlugin = createRuledReference(id, version);
featureProject.getRequiredPlugins().add(requiredPlugin);
return requiredPlugin;
}
public static RuledReference addFeatureRequirement(FeatureProject featureProject, String id, String version) {
final RuledReference requiredFeature = createRuledReference(id, version);
featureProject.getRequiredFeatures().add(requiredFeature);
return requiredFeature;
}
private static RuledReference createRuledReference(String id, String version) {
final RuledReference ruledReference = ModuleModelFactory.eINSTANCE.createRuledReference();
ruledReference.setId(id);
ruledReference.setVersion(version);
return ruledReference;
}
public static PluginInclude addPluginInclude(FeatureProject featureProject, String id, String version) {
final PluginInclude pluginInclude = createPluginInclude(id, version, false);
featureProject.getIncludedPlugins().add(pluginInclude);
return pluginInclude;
}
public static FeatureInclude addFeatureInclude(FeatureProject featureProject, String id, String version) {
final FeatureInclude featureInclude = createFeatureInclude(id, version);
featureProject.getIncludedFeatures().add(featureInclude);
return featureInclude;
}
private static FeatureInclude createFeatureInclude(String id, String version) {
final FeatureInclude featureInclude = ModuleModelFactory.eINSTANCE.createFeatureInclude();
featureInclude.setId(id);
featureInclude.setVersion(version);
return featureInclude;
}
}