blob: a94202dc8c80e090d23eddadd45e69b3a0c1f453 [file] [log] [blame]
/**
* Copyright (c) 2004 - 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.cdo.server;
import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOID.ObjectType;
import org.eclipse.net4j.util.om.monitor.ProgressDistributor;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
/**
* @author Eike Stepper
* @apiviz.landmark
* @apiviz.has {@link IStore.ChangeFormat}
* @apiviz.has {@link IStore.RevisionTemporality}
* @apiviz.has {@link IStore.RevisionParallelism}
* @apiviz.uses {@link IStoreAccessor} - - creates
*/
public interface IStore
{
/**
* @since 2.0
*/
public IRepository getRepository();
/**
* @since 2.0
*/
public String getType();
/**
* @since 3.0
*/
public Set<CDOID.ObjectType> getObjectIDTypes();
/**
* @since 4.0
*/
public CDOID createObjectID(String val);
/**
* @since 2.0
*/
public Set<ChangeFormat> getSupportedChangeFormats();
/**
* @since 2.0
*/
public Set<RevisionTemporality> getSupportedRevisionTemporalities();
/**
* @since 2.0
*/
public Set<RevisionParallelism> getSupportedRevisionParallelisms();
/**
* @since 2.0
*/
public RevisionTemporality getRevisionTemporality();
/**
* @since 2.0
*/
public RevisionParallelism getRevisionParallelism();
/**
* Returns <code>true</code>if this store was activated for the first time, <code>false</code> otherwise.
*
* @since 4.0
*/
public boolean isFirstStart();
/**
* Returns the store creation time.
*
* @since 2.0
*/
public long getCreationTime();
/**
* Returns the id of the last branch that has been created in this store.
*
* @since 3.0
*/
public int getLastBranchID();
/**
* Returns the id of the last local branch that has been created in this store.
*
* @since 3.0
*/
public int getLastLocalBranchID();
/**
* Returns the time stamp of the last successful commit operation.
*
* @since 3.0
*/
public long getLastCommitTime();
/**
* Returns the time stamp of the last successful commit operation to a non-local {@link CDOBranch branch}.
*
* @since 3.0
*/
public long getLastNonLocalCommitTime();
/**
* Returns a map filled with the property entries for the requested property <code>names</code> if names is not
* <code>null</code> and not {@link Collection#isEmpty() empty}, all existing property entries otherwise.
*
* @since 4.0
*/
public Map<String, String> getPersistentProperties(Set<String> names);
/**
* @since 4.0
*/
public void setPersistentProperties(Map<String, String> properties);
/**
* @since 4.0
*/
public void removePersistentProperties(Set<String> names);
/**
* Returns a reader that can be used to read from this store in the context of the given session.
*
* @param session
* The session that should be used as a context for read access or <code>null</code>. The store implementor
* is free to interpret and use the session in a manner suitable for him or ignore it at all. It is meant
* only as a hint. Implementor can use it as a key into a cache and/or register a
* {@link org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter LifecycleEventAdapter} with it to intercept
* cleanup on session close. Note however that the session can be <code>null</code>, for example during
* startup of the server while the repositories are initialized but before any user session has been opened.
* @return a reader that can be used to read from this store in the context of the given session, never
* <code>null</code>.
* @since 2.0
*/
public IStoreAccessor getReader(ISession session);
/**
* Returns a writer that can be used to write to this store in the context of the given view. The given view is always
* marked as a transaction.
*
* @param transaction
* The view that must be used as a context for write access. The store implementor is free to interpret and
* use the view in a manner suitable for him or ignore it at all. It is meant only as a hint. Implementor can
* use it as a key into a cache and/or register a
* {@link org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter LifecycleEventAdapter} with it to intercept
* cleanup on view close.
* @return a writer that can be used to write to this store in the context of the given view, never <code>null</code>.
* @since 2.0
*/
public IStoreAccessor getWriter(ITransaction transaction);
/**
* @since 2.0
*/
public ProgressDistributor getIndicatingCommitDistributor();
/**
* @author Eike Stepper
* @since 2.0
*/
public enum ChangeFormat
{
REVISION, DELTA
}
/**
* @author Eike Stepper
* @since 2.0
*/
public enum RevisionTemporality
{
NONE, AUDITING
}
/**
* @author Eike Stepper
* @since 2.0
*/
public enum RevisionParallelism
{
NONE, BRANCHING
}
/**
* A marker interface for {@link IStore stores} that can handle {@link CDOID IDs} assigned by a
* {@link IDGenerationLocation#CLIENT client}, typically {@link ObjectType#UUID UUIDs}.
*
* @author Eike Stepper
* @since 4.1
* @apiviz.exclude
*/
public interface CanHandleClientAssignedIDs
{
}
}