| 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()); |
| } |
| } |
| } |
| } |