blob: 129bf06309928cef8089fe7456d9ce47e8263886 [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.internal.workspace;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDProvider;
import org.eclipse.emf.cdo.common.protocol.CDODataInput;
import org.eclipse.emf.cdo.common.protocol.CDODataOutput;
import org.eclipse.emf.cdo.common.revision.CDOListFactory;
import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageRegistry;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.server.InternalRepository;
import org.eclipse.emf.cdo.spi.workspace.InternalCDOWorkspace;
import org.eclipse.emf.cdo.spi.workspace.InternalCDOWorkspaceBase;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
/**
* @author Eike Stepper
*/
public abstract class AbstractCDOWorkspaceBase implements InternalCDOWorkspaceBase
{
private InternalCDOWorkspace workspace;
private Set<CDOID> ids;
protected AbstractCDOWorkspaceBase()
{
}
public void init(InternalCDOWorkspace workspace)
{
this.workspace = workspace;
}
public final InternalCDOWorkspace getWorkspace()
{
return workspace;
}
public final synchronized Set<CDOID> getIDs()
{
if (ids == null)
{
ids = doGetIDs();
}
return ids;
}
@Deprecated
public final void updateAfterCommit(CDOTransaction transaction)
{
throw new UnsupportedOperationException();
}
public final synchronized void registerChangedOrDetachedObject(InternalCDORevision revision)
{
getIDs().add(revision.getID());
doRegisterChangedOrDetachedObject(revision);
}
public final synchronized void registerAddedAndDetachedObject(InternalCDORevision revision)
{
doRegisterAddedAndDetachedObject(revision);
deregisterObject(revision.getID());
}
public final synchronized void registerAddedObject(CDOID id)
{
getIDs().add(id);
doRegisterAddedObject(id);
}
public final synchronized void deregisterObject(CDOID id)
{
if (ids != null)
{
ids.remove(id);
}
doDeregisterObject(id);
}
public final synchronized void clear()
{
ids = new HashSet<CDOID>();
doClear();
}
public final synchronized boolean isEmpty()
{
return getIDs().isEmpty();
}
public final synchronized boolean containsID(CDOID id)
{
return getIDs().contains(id);
}
protected CDODataInput createCDODataInput(ExtendedDataInputStream edis) throws IOException
{
InternalCDOPackageRegistry packageRegistry = workspace.getLocalRepository().getPackageRegistry(false);
InternalCDOBranchManager branchManager = workspace.getLocalRepository().getBranchManager();
CDORevisionFactory revisionFactory = CDORevisionFactory.DEFAULT;
CDOListFactory listFactory = CDOListFactory.DEFAULT;
return CDOCommonUtil.createCDODataInput(edis, packageRegistry, branchManager, null, revisionFactory, listFactory,
null);
}
protected CDODataOutput createCDODataOutput(ExtendedDataOutputStream edos)
{
InternalRepository localRepository = workspace.getLocalRepository();
InternalCDOPackageRegistry packageRegistry = localRepository.getPackageRegistry(false);
CDOIDProvider idProvider = CDOIDProvider.NOOP;
return CDOCommonUtil.createCDODataOutput(edos, packageRegistry, idProvider, localRepository);
}
protected abstract void doClear();
protected abstract Set<CDOID> doGetIDs();
protected abstract void doRegisterChangedOrDetachedObject(InternalCDORevision revision);
protected abstract void doRegisterAddedAndDetachedObject(InternalCDORevision revision);
protected abstract void doRegisterAddedObject(CDOID id);
protected abstract void doDeregisterObject(CDOID id);
}