/*******************************************************************************
* Copyright (c) 2006-2009
* Software Technology Group, Dresden University of Technology
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Software Technology Group - TU Dresden, Germany
* - initial API and implementation
******************************************************************************/
package org.reuseware.coconut.roundtrip.test;
import java.io.IOException;
import java.util.Collections;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.Assert;
import org.reuseware.coconut.compositionprogram.CompositionLink;
import org.reuseware.coconut.compositionprogram.CompositionProgram;
import org.reuseware.coconut.compositionprogram.CompositionprogramFactory;
import org.reuseware.coconut.compositionprogram.FragmentInstance;
import org.reuseware.coconut.compositionprogram.PhysicalCompositionProgram;
import org.reuseware.coconut.compositionprogram.PortInstance;
import org.reuseware.coconut.compositionprogram.util.CompositionProgramUtil;
import org.reuseware.coconut.fragment.Fragment;
import org.reuseware.coconut.fragment.FragmentFactory;
import org.reuseware.coconut.repository.resource.ReuseResources;
public class ComponentsCreator {
public static final String PATH_TO_INPUT_DIR = "./input/";
public static final String PATH_TO_COMPARE_DIR = PATH_TO_INPUT_DIR + "compare/";
public static final String WORKING_DIR_NAME = "work";
public static final String OUTPUT_DIR_NAME = "out";
public static final String PATH_TO_WORKING_DIR = "./" + WORKING_DIR_NAME + "/";
public static final String PATH_TO_OUTPUT_DIR = "./" + OUTPUT_DIR_NAME + "/";
public static final String PATH_TO_WORKING_REPOSITORY_DIR = PATH_TO_WORKING_DIR + "repository/";
public static final String PATH_TO_OUTPUT_REPOSITORY_DIR = PATH_TO_OUTPUT_DIR + "repository/";
public static final String REPOSITORY_UFI = "repository";
public static final String JAVA_TARGET_1 = "Target1.java";
public static final String JAVA_TARGET_2 = "Target2.java";
private static final String COMPOSED = "composed";
public static final String UFI_TARGET1 = REPOSITORY_UFI + "/" + JAVA_TARGET_1;
public static final String UFI_TARGET2 = REPOSITORY_UFI + "/" + JAVA_TARGET_2;
public static final String JAVA_COMPOSED_1 = "Composed1.java";
public static final String JAVA_COMPOSED_2 = "Composed2.java";
private static final String COMPOSED_UFI = REPOSITORY_UFI + "/" + COMPOSED;
public static final String UFI_COMPOSED_1 = COMPOSED_UFI + "/" + JAVA_COMPOSED_1;
public static final String UFI_COMPOSED_2 = COMPOSED_UFI + "/" + JAVA_COMPOSED_2;
public static final String JAVA_SOURCE_1 = "Source1.java";
public static final String JAVA_SOURCE_2 = "Source2.java";
public static final String JAVA_SOURCE_3 = "Source3.java";
public static final String JAVA_SOURCE_4 = "Source4.java";
public static final String UFI_SOURCE_1 = REPOSITORY_UFI + "/" + JAVA_SOURCE_1;
public static final String UFI_SOURCE_2 = REPOSITORY_UFI + "/" + JAVA_SOURCE_2;
public static final String UFI_SOURCE_3 = REPOSITORY_UFI + "/" + JAVA_SOURCE_3;
private static final String REUSEWARE = ReuseResources.REUSEWARE_SCHEME;
public static final String REUSEWARE_UFI_SOURCE_1 = REUSEWARE + REPOSITORY_UFI + "/" + JAVA_SOURCE_1;
public static final String REUSEWARE_UFI_SOURCE_2 = REUSEWARE + REPOSITORY_UFI + "/" + JAVA_SOURCE_2;
public static final String REUSEWARE_UFI_SOURCE_3 = REUSEWARE + REPOSITORY_UFI + "/" + JAVA_SOURCE_3;
public void saveCompositionProgram(CompositionProgram cp,
String location) {
ResourceSet resourceSet = new ResourceSetImpl();
Resource newFile = resourceSet.createResource(URI
.createFileURI(location));
newFile.getContents().clear();
newFile.getContents().add(cp);
try {
newFile.save(Collections.EMPTY_MAP);
} catch (IOException e) {
e.printStackTrace();
}
}
public CompositionProgram createCompositionProgram1() {
PhysicalCompositionProgram cp = CompositionprogramFactory.eINSTANCE
.createPhysicalCompositionProgram();
FragmentInstance source1 = CompositionProgramUtil
.createFragmentInstance(createSource(JAVA_SOURCE_1, UFI_SOURCE_1,
"Prototype_Fragment1"), cp);
FragmentInstance source2 = CompositionProgramUtil
.createFragmentInstance(createSource(JAVA_SOURCE_2, UFI_SOURCE_2,
"Prototype_Fragment2"), cp);
FragmentInstance targetFragment = CompositionProgramUtil
.createFragmentInstance(createTarget(JAVA_TARGET_1, UFI_TARGET1,
"Hook_Fragment1", "Hook_Fragment2"), cp);
targetFragment.setTarget(true);
targetFragment.setTargetUFIAsString(UFI_COMPOSED_1);
EList<PortInstance> ports1 = source1.getPortInstances();
Assert.assertEquals(1, ports1.size());
EList<PortInstance> ports2 = source2.getPortInstances();
Assert.assertEquals(1, ports2.size());
EList<PortInstance> targetPorts = targetFragment.getPortInstances();
Assert.assertEquals(2, targetPorts.size());
createCompositionLink(cp, ports1.get(0), targetPorts.get(0));
createCompositionLink(cp, ports2.get(0), targetPorts.get(1));
return cp;
}
public CompositionProgram createCompositionProgram2() {
PhysicalCompositionProgram cp = CompositionprogramFactory.eINSTANCE
.createPhysicalCompositionProgram();
FragmentInstance targetFragment = org.reuseware.coconut.compositionprogram.util.CompositionProgramUtil
.createFragmentInstance(createTarget(JAVA_TARGET_2,
UFI_TARGET2, "Hook_Fragment1",
"Hook_Fragment2"), cp);
targetFragment.setTarget(true);
targetFragment.setTargetUFIAsString(UFI_COMPOSED_2);
FragmentInstance source1 = org.reuseware.coconut.compositionprogram.util.CompositionProgramUtil
.createFragmentInstance(createSource(JAVA_SOURCE_3, UFI_SOURCE_3,
"Prototype_Fragment1"), cp);
FragmentInstance source2 = org.reuseware.coconut.compositionprogram.util.CompositionProgramUtil
.createFragmentInstance(createSource(JAVA_SOURCE_2, UFI_SOURCE_2,
"Prototype_Fragment2"), cp);
EList<PortInstance> source1Ports = source1.getPortInstances();
EList<PortInstance> source2Ports = source2.getPortInstances();
EList<PortInstance> targetPorts = targetFragment.getPortInstances();
createCompositionLink(cp, source1Ports.get(0), targetPorts.get(0));
createCompositionLink(cp, source2Ports.get(0), targetPorts.get(1));
cp.getFragmentInstances().add(targetFragment);
cp.getFragmentInstances().add(source1);
cp.getFragmentInstances().add(source2);
return cp;
}
private void createCompositionLink(CompositionProgram cp, PortInstance p1,
PortInstance s1p) {
CompositionLink l1 = CompositionprogramFactory.eINSTANCE.createCompositionLink();
l1.setSource(p1);
l1.setTarget(s1p);
l1.match();
cp.getCompositionLinks().add(l1);
}
private Fragment createTarget(String name, String ufi,
String portname1, String portname2) {
Fragment target = FragmentFactory.eINSTANCE.createPhysicalFragment();
target.setIDAsString(ufi);
return target;
}
private Fragment createSource(String name, String ufi,
String PortInstancename) {
Fragment sourceFragment = FragmentFactory.eINSTANCE
.createPhysicalFragment();
sourceFragment.setIDAsString(ufi);
return sourceFragment;
}
}