blob: 9cb87a9643732449ec11487253cc8155643d8875 [file] [log] [blame]
package org.eclipse.uml2.uml.cdo.tests;
import java.io.CharArrayWriter;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.XMIResource;
import org.eclipse.net4j.util.io.IOUtil;
import org.eclipse.uml2.uml.resource.UMLResource;
/**
* @author Eike Stepper
*/
public class UMLSelfTest
extends AbstractUMLTest {
private static final boolean PERSIST_RESULTS = false;
private static final String GIT_CLONE_UML2 = System
.getProperty("git.clone.uml2").replace('\\', '/');
private static final URI GIT_URI = URI.createFileURI(GIT_CLONE_UML2);
private static final String UML_UML = GIT_CLONE_UML2
+ "/plugins/org.eclipse.uml2.uml/model/UML.uml";
private static final String UML_TEST_UML = "UMLTest.uml";
@Override
protected boolean dbScenario() {
return true;
}
public void testSelf()
throws Exception {
UMLResource umlResource = loadUMLResource(UML_UML);
EcoreUtil.resolveAll(umlResource.getResourceSet());
List<String> xmiDs = listIDs(umlResource);
URI uri = umlResource.getURI();
System.out.println(uri);
Resource cdoResource = createResource(umlResource.getContents());
saveResources();
System.out.println();
CDOSession session2 = openSession();
CDOTransaction transaction2 = session2.openTransaction();
ResourceSet cdoResourceSet = transaction2.getResourceSet();
configureUMLResourceSet(cdoResourceSet);
Resource resource2 = cdoResourceSet.getResource(cdoResource.getURI(),
true);
for (TreeIterator<EObject> it = resource2.getAllContents(); it
.hasNext();) {
EObject element = it.next();
System.out.println(element);
}
UMLResource umlResource2 = createUMLResource(UML_TEST_UML);
umlResource2.getContents().addAll(resource2.getContents());
applyIDs(umlResource2, xmiDs);
CharArrayWriter output = new CharArrayWriter();
umlResource2.save(output, null);
String umlTest = output.toString();
umlTest = removeHeader(umlTest);
umlTest = umlTest
.replace(GIT_URI + "/plugins/org.eclipse.uml2.uml/model/", "");
umlTest = umlTest.replace(GIT_URI + "/plugins/", "../../");
if (PERSIST_RESULTS) {
IOUtil.writeFile(new File(UML_TEST_UML), umlTest.getBytes());
}
String uml = IOUtil.readTextFile(new File(UML_UML));
uml = removeHeader(uml);
if (PERSIST_RESULTS) {
IOUtil.writeFile(new File("UMLExpected.uml"), uml.getBytes());
}
// allow to make this test valid on Linux and Windows.
uml = uml.replaceAll("\r\n", "\n");
umlTest = umlTest.replaceAll("\r\n", "\n");
assertEquals(uml, umlTest);
}
private static String removeHeader(String xmi) {
return xmi.replaceFirst("<xmi:XMI [^>]*>", "");
}
private static List<String> listIDs(XMIResource resource) {
List<String> ids = new ArrayList<String>();
for (TreeIterator<EObject> it = resource.getAllContents(); it
.hasNext();) {
EObject element = it.next();
String id = resource.getID(element);
if (id != null) {
ids.add(id);
}
}
return ids;
}
private static void applyIDs(XMIResource resource, List<String> ids) {
Iterator<String> idIterator = ids.iterator();
for (TreeIterator<EObject> it = resource.getAllContents(); it
.hasNext();) {
EObject element = it.next();
String id = resource.getID(element);
if (id != null) {
resource.setID(element, idIterator.next());
}
}
}
}