blob: 9775d42fd5f0ef68f37a189033e929b7318b1da7 [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
* Stefan Winkler - 271444: [DB] Multiple refactorings bug 271444
*/
package org.eclipse.emf.cdo.server.db.mapping;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionHandler;
import org.eclipse.emf.cdo.server.IStoreAccessor;
import org.eclipse.emf.cdo.server.IStoreAccessor.QueryXRefsContext;
import org.eclipse.emf.cdo.server.db.IDBStoreAccessor;
import org.eclipse.emf.cdo.spi.common.commit.CDOChangeSetSegment;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.net4j.db.ddl.IDBTable;
import org.eclipse.net4j.util.ImplementationError;
import org.eclipse.net4j.util.om.monitor.OMMonitor;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import java.sql.PreparedStatement;
import java.util.List;
import java.util.Set;
/**
* Basic interface for class mappings.
*
* @author Eike Stepper
* @author Stefan Winkler
* @since 2.0
*/
public interface IClassMapping
{
/**
* @since 3.0
*/
public EClass getEClass();
/**
* Returns all DB tables which are used by this class and all its contained features.
*
* @return a collection of all tables of this class and all its contained features.
* @since 3.0
*/
public List<IDBTable> getDBTables();
/**
* Get the mapping of the many-valued feature.
*
* @param feature
* the feature for which the mapping should be returned. <code>feature.isMany()</code> has to be
* <code>true</code>.
* @return the list mapping corresponding to the feature.
*/
public IListMapping getListMapping(EStructuralFeature feature);
/**
* @since 3.0
*/
public List<IListMapping> getListMappings();
/**
* @since 4.0
*/
public List<ITypeMapping> getValueMappings();
/**
* Read a revision. The branch and timestamp to be read are derived from the branchPoint which is set to the Revision.
* Note that non-audit stores only support {@link CDOBranchPoint#UNSPECIFIED_DATE} and non-branching stores only
* support the main branch.
*
* @param accessor
* the accessor to use.
* @param revision
* the revision object into which the data should be read. The revision has to be have its ID set to the
* requested object's ID. The version is ignored, as the version parameter is used to determine the version
* to be read.
* @param listChunk
* the chunk size to read attribute lists.
* @return <code>true</code>, if the revision has been found and read correctly. <code>false</code> if the revision
* could not be found. In this case, the content of <code>revision</code> is undefined.
*/
public boolean readRevision(IDBStoreAccessor accessor, InternalCDORevision revision, int listChunk);
/**
* Write the revision data to the database.
*
* @param accessor
* the accessor to use.
* @param revision
* the revision to write.
* @param mapType
* <code>true</code> if the type of the object is supposed to be mapped, <code>false</code> otherwise.
* @param revise
* <code>true</code> if the previous revision is supposed to be revised, <code>false</code> otherwise.
* @param monitor
* the monitor to indicate progress.
* @since 4.0
*/
public void writeRevision(IDBStoreAccessor accessor, InternalCDORevision revision, boolean mapType, boolean revise,
OMMonitor monitor);
/**
* Detaches (deletes) a CDO object leaving a "ghost" revision behind.
*
* @param accessor
* the accessor to use.
* @param id
* the id to revise.
* @param version
* the last valid version.
* @param timeStamp
* the timestamp of detach.
* @param monitor
* the monitor to indicate progress.
* @since 3.0
*/
public void detachObject(IDBStoreAccessor accessor, CDOID id, int version, CDOBranch branch, long timeStamp,
OMMonitor monitor);
/**
* Create a prepared statement which returns all IDs of instances of the corresponding class.
*
* @param accessor
* the accessor to use to create the statement
* @return the prepared statement ready to be executed using <code>result.executeQuery()</code>.
* @since 3.0
*/
public PreparedStatement createObjectIDStatement(IDBStoreAccessor accessor);
/**
* Create a prepared statement which returns all IDs of instances of the corresponding class.
*
* @param accessor
* the accessor to use to create the statement
* @param folderId
* the ID of the containing folder. <code>0</code> means none.
* @param name
* the name of the resource node to look up
* @param exactMatch
* if <code>true</code>, <code>name</code> must match exactly, otherwise all resource nodes starting with
* <code>name</code> are returned.
* @param branchPoint
* a branchPoint (branch and timestamp). A timestamp in the past if past versions should be looked up. In
* case of no audit support, this must be {@link CDORevision#UNSPECIFIED_DATE}. In case of non branching
* support the branch id must be equal to {@link CDOBranch#MAIN_BRANCH_ID}.
* @return the prepared statement ready to be executed using <code>result.executeQuery()</code>.
* @throws ImplementationError
* if called on a mapping which does not map an <code>EClass instanceof CDOResourceNode</code>.
* @since 3.0
*/
public PreparedStatement createResourceQueryStatement(IDBStoreAccessor accessor, CDOID folderId, String name,
boolean exactMatch, CDOBranchPoint branchPoint);
/**
* Passes all revisions of the store to the {@link CDORevisionHandler handler} if <b>all</b> of the following
* conditions are met:
* <ul>
* <li>The <code>branch</code> parameter is <code>null</code> or equal to <code>revision.getBranch()</code>.
* <li>The <code>timeStamp</code> parameter is {@link CDOBranchPoint#UNSPECIFIED_DATE} or equal to
* <code>revision.getTimeStamp()</code>.
* </ul>
*
* @see IMappingStrategy#handleRevisions(IDBStoreAccessor, org.eclipse.emf.ecore.EClass, CDOBranch, long, boolean,
* CDORevisionHandler)
* @since 4.0
*/
public void handleRevisions(IDBStoreAccessor accessor, CDOBranch branch, long timeStamp, boolean exactTime,
CDORevisionHandler handler);
/**
* Returns a set of CDOIDs that have at least one revision in any of the passed branches and time ranges.
* DetachedCDORevisions must also be considered!
*
* @see IStoreAccessor#readChangeSet(OMMonitor, CDOChangeSetSegment...)
* @since 3.0
*/
public Set<CDOID> readChangeSet(IDBStoreAccessor accessor, CDOChangeSetSegment[] segments);
/**
* Retrieve cross-references from DB
*
* @param idString
* a string of the form "(id1, id2, id3, ...)" which can be used directly in SQL to form the where-part
* "SELECT * FROM foobar WHERE foobar.target IN [idString]".
* @see IStoreAccessor#queryXRefs(QueryXRefsContext)
* @since 4.0
*/
public boolean queryXRefs(IDBStoreAccessor accessor, QueryXRefsContext context, String idString);
}