blob: 83d2f13a41852c09f778a3ebfdaed94ea3334518 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 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.ecp.cdo.internal.core;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.workspace.CDOWorkspace;
import org.eclipse.emf.cdo.workspace.CDOWorkspaceConfiguration;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecp.core.util.ECPUtil;
import org.eclipse.emf.ecp.spi.core.InternalProject;
/**
* @author Eike Stepper
*/
public final class CDOProjectData {
private final InternalProject project;
private CDOWorkspace workspace;
private CDOTransaction transaction;
private CDOResource rootResource;
public CDOProjectData(InternalProject project) {
this.project = project;
}
public InternalProject getProject() {
return project;
}
public synchronized CDOWorkspace getWorkspace() {
if (workspace == null) {
CDOWorkspaceConfiguration config = createWorkspaceConfiguration();
workspace = config.open();
}
return workspace;
}
public synchronized CDOWorkspace checkoutWorkspace() {
CDOWorkspaceConfiguration config = createWorkspaceConfiguration();
return workspace = config.checkout();
}
public synchronized CDOTransaction getTransaction() {
if (transaction == null) {
ResourceSet resourceSet = project.getEditingDomain().getResourceSet();
transaction = getWorkspace().openTransaction(resourceSet);
}
return transaction;
}
public synchronized CDOResource getRootResource() {
if (rootResource == null) {
rootResource = getTransaction().getRootResource();
}
return rootResource;
}
public void dispose() {
if (rootResource != null) {
rootResource = null;
}
if (transaction != null) {
transaction.close();
transaction = null;
}
if (workspace != null) {
workspace.close();
workspace = null;
}
}
private CDOWorkspaceConfiguration createWorkspaceConfiguration() {
CDOProvider provider = (CDOProvider) ECPUtil.getResolvedElement(project.getProvider());
return provider.createWorkspaceConfiguration(project);
}
}