| /** |
| * 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); |
| } |