Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 4c25352fcc53f7dfbd2e3fb36a4e1459ef7c9ab8 (plain) (tree)
1
2
  
                                                                           














                                                                        
                                                          


















































































                                                                                                     
                                                  






































                                                                                              
                                                  








































































                                                                                              

































































































                                                                                 
/*
 * Copyright (c) 2008-2013, 2016 Eike Stepper (Loehne, 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.revision.CDOElementProxy;
import org.eclipse.emf.cdo.common.revision.CDORevisionData;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;

import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.ref.ReferenceType;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;

/**
 * @author Eike Stepper
 */
public class ViewTest extends AbstractCDOTest
{
  public void testDeactivateWithSession() throws Exception
  {
    CDOSession session = openSession();
    assertEquals(true, LifecycleUtil.isActive(session));
    assertEquals(false, session.isClosed());

    CDOView view = session.openView();
    assertEquals(true, LifecycleUtil.isActive(view));
    assertEquals(false, view.isClosed());

    session.close();
    assertEquals(false, LifecycleUtil.isActive(session));
    assertEquals(true, session.isClosed());

    assertEquals(false, LifecycleUtil.isActive(view));
    assertEquals(true, view.isClosed());
  }

  public void testHasResource() throws Exception
  {
    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();
      transaction.createResource(getResourcePath("/test1"));
      transaction.commit();
      session.close();
    }

    CDOSession session = openSession();
    CDOView view = session.openView();
    assertEquals(true, view.hasResource(getResourcePath("/test1")));
    assertEquals(false, view.hasResource(getResourcePath("/test2")));
    session.close();
  }

  public void testIsObjectRegisteredWithNull() throws Exception
  {
    CDOSession session = openSession();
    CDOView view = session.openView();
    assertEquals(false, view.isObjectRegistered(null));
    session.close();
  }

  public void testGetOrCreateResource() throws Exception
  {
    String id;
    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();
      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
      transaction.commit();
      id = resource.cdoID().toString();
      session.close();
    }

    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    assertEquals(id, transaction.getOrCreateResource(getResourcePath("/test1")).cdoID().toString());
    assertNotSame(id, transaction.getOrCreateResource(getResourcePath("/test2")).cdoID().toString());
    session.close();
  }

  @Requires(IRepositoryConfig.CAPABILITY_CHUNKING)
  public void testUniqueResourceContents() throws Exception
  {
    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();
      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
      EList<EObject> contents = resource.getContents();
      for (int i = 0; i < 100; i++)
      {
        Company company = getModel1Factory().createCompany();
        company.setName("Company " + i);
        contents.add(company);
      }

      transaction.commit();
      session.close();
    }

    CDOSession session = openSession();
    session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(2, 2));

    CDOTransaction transaction = session.openTransaction();

    CDOResource resource = transaction.getResource(getResourcePath("/test1"));
    EList<EObject> contents = resource.getContents();
    for (int i = 100; i < 110; i++)
    {
      Company company = getModel1Factory().createCompany();
      company.setName("Company " + i);
      contents.add(company);
    }

    CDORevisionData revision = resource.cdoRevision().data();
    EStructuralFeature contentsFeature = EresourcePackage.eINSTANCE.getCDOResource_Contents();
    assertEquals(true, revision.get(contentsFeature, 99) instanceof CDOElementProxy);
    assertEquals(false, revision.get(contentsFeature, 100) instanceof CDOElementProxy);
    session.close();
  }

  @Requires(IRepositoryConfig.CAPABILITY_CHUNKING)
  public void testNonUniqueResourceContents() throws Exception
  {
    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();
      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
      EList<EObject> contents = resource.getContents();
      for (int i = 0; i < 100; i++)
      {
        Company company = getModel1Factory().createCompany();
        company.setName("Company " + i);
        contents.add(company);
      }

      transaction.commit();
      session.close();
    }

    CDOSession session = openSession();
    session.options().setCollectionLoadingPolicy(CDOUtil.createCollectionLoadingPolicy(2, 2));

    CDOTransaction transaction = session.openTransaction();

    CDOResource resource = transaction.getResource(getResourcePath("/test1"));
    EList<EObject> contents = resource.getContents();
    for (int i = 100; i < 110; i++)
    {
      Company company = getModel1Factory().createCompany();
      company.setName("Company " + i);
      contents.add(company);
    }

    CDORevisionData revision = resource.cdoRevision().data();
    EStructuralFeature contentsFeature = EresourcePackage.eINSTANCE.getCDOResource_Contents();
    assertEquals(false, revision.get(contentsFeature, 0) instanceof CDOElementProxy);
    assertEquals(false, revision.get(contentsFeature, 1) instanceof CDOElementProxy);
    assertEquals(true, revision.get(contentsFeature, 2) instanceof CDOElementProxy);
    assertEquals(true, revision.get(contentsFeature, 99) instanceof CDOElementProxy);
    assertEquals(false, revision.get(contentsFeature, 100) instanceof CDOElementProxy);
    session.close();
  }

  public void testExternalResourceSet() throws Exception
  {
    {
      ResourceSet resourceSet = new ResourceSetImpl();
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction(resourceSet);
      transaction.createResource(getResourcePath("/test1"));
      transaction.commit();
      session.close();
    }

    CDOSession session = openSession();
    CDOView view = session.openView();
    assertEquals(true, view.hasResource(getResourcePath("/test1")));
    assertEquals(false, view.hasResource(getResourcePath("/test2")));
    session.close();
  }

  public void testContextify() throws Exception
  {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
    transaction.commit();

    CDOView view = session.openView();
    CDOResource resource2 = view.getObject(resource);
    assertEquals(getResourcePath("/test1"), resource2.getPath());
    session.close();
  }

  public void testContextifyDifferentRepository() throws Exception
  {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
    transaction.commit();

    getRepository("repo2");
    CDOSession session2 = openSession("repo2");
    CDOView view = session2.openView();

    try
    {
      view.getObject(resource);
      fail("IllegalArgumentException expected");
    }
    catch (IllegalArgumentException success)
    {
    }
    finally
    {
      session.close();
      session2.close();
    }
  }

  public void testContextifySameRepository() throws Exception
  {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    CDOResource resource = transaction.createResource(getResourcePath("/test1"));
    transaction.commit();

    CDOSession session2 = openSession();
    CDOView view = session2.openView();

    CDOResource object = view.getObject(resource);
    assertNotSame(resource, object);
    assertEquals(resource.cdoID(), object.cdoID());

    session.close();
    session2.close();
  }

  public void testCacheReferences() throws Exception
  {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();
    transaction.createResource(getResourcePath("/my/test1"));
    transaction.commit();

    transaction.createResource(getResourcePath("/my/test2"));
    transaction.createResource(getResourcePath("/my/test3"));
    transaction.createResource(getResourcePath("/my/test4"));
    transaction.createResource(getResourcePath("/my/test5"));

    boolean done;
    done = transaction.options().setCacheReferenceType(ReferenceType.SOFT);
    assertEquals(false, done);

    done = transaction.options().setCacheReferenceType(null);
    assertEquals(false, done);

    done = transaction.options().setCacheReferenceType(ReferenceType.STRONG);
    assertEquals(true, done);

    done = transaction.options().setCacheReferenceType(ReferenceType.SOFT);
    assertEquals(true, done);

    done = transaction.options().setCacheReferenceType(ReferenceType.WEAK);
    assertEquals(true, done);

    done = transaction.options().setCacheReferenceType(null);
    assertEquals(true, done);

    session.close();
  }

  public void testViewNotifiesDeactivation()
  {
    CDOSession session = openSession();
    CDOView view = session.openView();

    final boolean[] deactivated = { false };
    view.addListener(new LifecycleEventAdapter()
    {
      @Override
      protected void onDeactivated(ILifecycle lifecycle)
      {
        deactivated[0] = true;
      }
    });

    view.close();
    assertEquals(true, deactivated[0]);
    session.close();
  }
}

Back to the top