blob: d97d29b13ebe3780a002ff85d01f45538bb6d013 [file] [log] [blame]
/*
* Copyright (c) 2010-2013, 2015 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.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
*/
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);
}
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);
}
public void testExportBlob() throws Exception
{
InputStream blobStream = null;
try
{
blobStream = OM.BUNDLE.getInputStream("uml2/Ecore.uml");
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);
}
public void testExportClob() throws Exception
{
InputStream clobStream = null;
try
{
clobStream = OM.BUNDLE.getInputStream("uml2/Ecore.uml");
CDOClob clob = new CDOClob(new InputStreamReader(clobStream));
File file = getModel3Factory().createFile();
file.setName("Ecore.uml");
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);
}
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);
}
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);
}
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);
}
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(getResourcePath("/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")
@CleanRepositoriesBefore(reason = "Inactive repository required")
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
useAfterImport("repo2");
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
public void testImportBlob() throws Exception
{
InputStream blobStream = null;
try
{
blobStream = OM.BUNDLE.getInputStream("uml2/Ecore.uml");
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
public void testImportClob() throws Exception
{
InputStream clobStream = null;
try
{
clobStream = OM.BUNDLE.getInputStream("uml2/Ecore.uml");
CDOClob clob = new CDOClob(new InputStreamReader(clobStream));
File file = getModel3Factory().createFile();
file.setName("Ecore.uml");
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
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);
InternalRepository repo2 = getRepository("repo2", false);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
CDOServerImporter.XML importer = new CDOServerImporter.XML(repo2);
importer.importRepository(bais);
}
@CleanRepositoriesBefore(reason = "Inactive repository required")
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);
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);
}
}