| /* |
| * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.emf.cdo.tests; |
| |
| import org.eclipse.emf.cdo.common.lob.CDOBlob; |
| import org.eclipse.emf.cdo.common.lob.CDOClob; |
| import org.eclipse.emf.cdo.eresource.CDOResource; |
| import org.eclipse.emf.cdo.server.CDOServerExporter; |
| import org.eclipse.emf.cdo.server.CDOServerImporter; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.spi.server.InternalRepository; |
| import org.eclipse.emf.cdo.tests.bundle.OM; |
| import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.CleanRepositoriesBefore; |
| import org.eclipse.emf.cdo.tests.model1.Customer; |
| import org.eclipse.emf.cdo.tests.model1.PurchaseOrder; |
| import org.eclipse.emf.cdo.tests.model1.SalesOrder; |
| import org.eclipse.emf.cdo.tests.model3.File; |
| import org.eclipse.emf.cdo.tests.model3.Image; |
| import org.eclipse.emf.cdo.tests.model3.Point; |
| import org.eclipse.emf.cdo.tests.model3.Polygon; |
| import org.eclipse.emf.cdo.tests.model5.Doctor; |
| import org.eclipse.emf.cdo.tests.model5.TestFeatureMap; |
| import org.eclipse.emf.cdo.transaction.CDOTransaction; |
| import org.eclipse.emf.cdo.util.CommitException; |
| import org.eclipse.emf.cdo.view.CDOView; |
| |
| import org.eclipse.net4j.util.io.IOUtil; |
| |
| 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.xmi.impl.XMIResourceFactoryImpl; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.InputStream; |
| import java.io.InputStreamReader; |
| import java.util.Date; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| @CleanRepositoriesBefore |
| public class BackupTest extends AbstractCDOTest |
| { |
| @Override |
| protected void doSetUp() throws Exception |
| { |
| disableConsole(); |
| super.doSetUp(); |
| skipStoreWithoutRawAccess(); |
| } |
| |
| @Override |
| protected void doTearDown() throws Exception |
| { |
| disableConsole(); |
| super.doTearDown(); |
| } |
| |
| public void testExport() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(createCustomer("Eike")); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportDate() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder(); |
| purchaseOrder.setDate(new Date(1234567)); |
| resource.getContents().add(purchaseOrder); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportBlob() throws Exception |
| { |
| InputStream blobStream = null; |
| |
| try |
| { |
| blobStream = OM.BUNDLE.getInputStream("copyright.txt"); |
| CDOBlob blob = new CDOBlob(blobStream); |
| |
| Image image = getModel3Factory().createImage(); |
| image.setWidth(320); |
| image.setHeight(200); |
| image.setData(blob); |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(image); |
| transaction.commit(); |
| } |
| finally |
| { |
| IOUtil.close(blobStream); |
| } |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportClob() throws Exception |
| { |
| InputStream clobStream = null; |
| |
| try |
| { |
| clobStream = OM.BUNDLE.getInputStream("copyright.txt"); |
| CDOClob clob = new CDOClob(new InputStreamReader(clobStream)); |
| |
| File file = getModel3Factory().createFile(); |
| file.setName("copyright.txt"); |
| file.setData(clob); |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(file); |
| transaction.commit(); |
| } |
| finally |
| { |
| IOUtil.close(clobStream); |
| } |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportCustomDataType() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(createPoligon(new Point(1, 2), new Point(3, 1), new Point(4, 5))); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportFeatureMap() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| |
| addFeatureMap(resource); |
| |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| public void testExportExternalReference() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| |
| ResourceSet resourceSet = transaction.getResourceSet(); |
| Customer customer = initExtResource(resourceSet); |
| |
| SalesOrder salesOrder = getModel1Factory().createSalesOrder(); |
| salesOrder.setCustomer(customer); |
| resource.getContents().add(salesOrder); |
| |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| } |
| |
| private void useAfterImport(String repoName) throws CommitException |
| { |
| CDOSession session2 = openSession(repoName); |
| CDOTransaction transaction2 = session2.openTransaction(); |
| |
| // Read all repo contents |
| TreeIterator<EObject> iter = transaction2.getRootResource().getAllContents(); |
| while (iter.hasNext()) |
| { |
| iter.next(); |
| } |
| |
| // Add content from a new package |
| CDOResource resource = transaction2.createResource("/r1"); |
| resource.getContents().add(getModel3Factory().createPolygon()); |
| transaction2.commit(); |
| |
| session2.close(); |
| } |
| |
| /** |
| * TODO |
| * {@link org.eclipse.emf.cdo.server.IStoreAccessor.Raw#rawStore(org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision, org.eclipse.net4j.util.om.monitor.OMMonitor) |
| * rawStore()} is not adequate with range-based list mappings because they need deltas! |
| */ |
| @Skips("DB.ranges") |
| public void testImport() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| Customer eike = createCustomer("Eike"); |
| resource.getContents().add(eike); |
| resource.getContents().add(createCustomer("Jos")); |
| resource.getContents().add(createCustomer("Simon")); |
| transaction.commit(); |
| SalesOrder salesOrder = createSalesOrder(eike); |
| salesOrder.getOrderDetails().add(getModel1Factory().createOrderDetail()); |
| resource.getContents().add(salesOrder); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| |
| useAfterImport("repo2"); |
| } |
| |
| public void testImportDate() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| PurchaseOrder purchaseOrder = getModel1Factory().createPurchaseOrder(); |
| purchaseOrder.setDate(new Date(1234567)); |
| resource.getContents().add(purchaseOrder); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| } |
| |
| public void testImportBlob() throws Exception |
| { |
| InputStream blobStream = null; |
| |
| try |
| { |
| blobStream = OM.BUNDLE.getInputStream("copyright.txt"); |
| CDOBlob blob = new CDOBlob(blobStream); |
| |
| Image image = getModel3Factory().createImage(); |
| image.setWidth(320); |
| image.setHeight(200); |
| image.setData(blob); |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(image); |
| transaction.commit(); |
| } |
| finally |
| { |
| IOUtil.close(blobStream); |
| } |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| } |
| |
| public void testImportClob() throws Exception |
| { |
| InputStream clobStream = null; |
| |
| try |
| { |
| clobStream = OM.BUNDLE.getInputStream("copyright.txt"); |
| CDOClob clob = new CDOClob(new InputStreamReader(clobStream)); |
| |
| File file = getModel3Factory().createFile(); |
| file.setName("copyright.txt"); |
| file.setData(clob); |
| |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(file); |
| transaction.commit(); |
| } |
| finally |
| { |
| IOUtil.close(clobStream); |
| } |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| } |
| |
| public void testImportCustomDataType() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| resource.getContents().add(createPoligon(new Point(1, 2), new Point(3, 1), new Point(4, 5))); |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| } |
| |
| public void testImportFeatureMap() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| |
| addFeatureMap(resource); |
| |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| } |
| |
| public void testImportExternalReference() throws Exception |
| { |
| CDOSession session = openSession(); |
| CDOTransaction transaction = session.openTransaction(); |
| CDOResource resource = transaction.createResource(getResourcePath("/res1")); |
| |
| ResourceSet resourceSet = transaction.getResourceSet(); |
| Customer customer = initExtResource(resourceSet); |
| |
| SalesOrder salesOrder = getModel1Factory().createSalesOrder(); |
| salesOrder.setCustomer(customer); |
| resource.getContents().add(salesOrder); |
| |
| transaction.commit(); |
| session.close(); |
| |
| InternalRepository repo1 = getRepository(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1); |
| exporter.exportRepository(baos); |
| System.out.println(baos.toString()); |
| |
| InternalRepository repo2 = getRepository("repo2", false); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); |
| CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2); |
| importer.importRepository(bais); |
| |
| CDOSession session2 = openSession("repo2"); |
| CDOView view2 = session2.openView(); |
| CDOResource resource2 = view2.getResource(getResourcePath("/res1")); |
| |
| ResourceSet resourceSet2 = view2.getResourceSet(); |
| initExtResource(resourceSet2); |
| |
| SalesOrder salesOrder2 = (SalesOrder)resource2.getContents().get(0); |
| Customer customer2 = salesOrder2.getCustomer(); |
| System.out.println(customer2); |
| } |
| |
| private Customer initExtResource(ResourceSet resourceSet) |
| { |
| resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); |
| Resource extResource = resourceSet.createResource(URI.createURI("ext.xmi")); |
| |
| Customer customer = getModel1Factory().createCustomer(); |
| extResource.getContents().add(customer); |
| return customer; |
| } |
| |
| private Customer createCustomer(String name) |
| { |
| Customer customer = getModel1Factory().createCustomer(); |
| customer.setName(name); |
| return customer; |
| } |
| |
| private SalesOrder createSalesOrder(Customer customer) |
| { |
| SalesOrder salesOrder = getModel1Factory().createSalesOrder(); |
| salesOrder.setId(4711); |
| salesOrder.setCustomer(customer); |
| return salesOrder; |
| } |
| |
| private Polygon createPoligon(Point... points) |
| { |
| Polygon polygon = getModel3Factory().createPolygon(); |
| for (Point point : points) |
| { |
| polygon.getPoints().add(point); |
| } |
| |
| return polygon; |
| } |
| |
| private void addFeatureMap(CDOResource resource) |
| { |
| Doctor doctor1 = getModel5Factory().createDoctor(); |
| Doctor doctor2 = getModel5Factory().createDoctor(); |
| |
| resource.getContents().add(doctor1); |
| resource.getContents().add(doctor2); |
| |
| TestFeatureMap featureMap = getModel5Factory().createTestFeatureMap(); |
| featureMap.getPeople().add(getModel5Package().getTestFeatureMap_Doctors(), doctor1); |
| featureMap.getPeople().add(getModel5Package().getTestFeatureMap_Doctors(), doctor2); |
| |
| resource.getContents().add(featureMap); |
| } |
| } |