/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.core;
import java.util.Set;
/**
* The repository of resource revisions.
*
* @author Frank Shaka <frank@xmind.net>
*/
public interface IRevisionRepository extends IAdaptable, IWorkbookComponent {
/**
* Gets the revision manager with corresponding resource ID. If no revision
* manager is related to the specified resource ID, a new one will be
* created with the specified content type.
*
* @param resourceId
* the ID of the resource
* @param contentType
* the content type of the resource, see {@link IRevision} for
* all available content types
* @return the corresponding revision manager with the specified resource ID
* @throws IllegalArgumentException
* if <code>resourceId</code> is null
* @see IRevision
* @see IRevisionManager
*/
IRevisionManager getRevisionManager(String resourceId, String contentType);
/**
* Gets the revision manager with corresponding resource ID. If no revision
* manager is related to the specified resource ID, <code>null</code> will
* be returned.
*
* @param resourceId
* the ID of the resource
* @return the registered revision manager with the specified resource ID,
* or <code>null</code> if not found
* @throws IllegalArgumentException
* if <code>resourceId</code> is null
* @see IRevision
* @see IRevisionManager
*/
IRevisionManager getRegisteredRevisionManager(String resourceId);
/**
* Replaces the current revision manager of the specified resource with the
* given one. If <code>null</code> is used as the new revision manager,
* there will be no revision manager registered related to the specified
* resource, and a new revision manager will be created upon next call to
* {@link #getRevisionManager(String, String)}. Removed revision manager
* will not be saved.
*
* @param resourceId
* the ID of a resource
* @param manager
* the new revision manager to use for the specified resource, or
* <code>null</code> to remove the current one
* @throws IllegalArgumentException
* if <code>resourceId</code> is null, or <code>manager</code>
* belongs to another workbook or can not be recognized
* @see IRevision
* @see IRevisionManager
*/
void setRevisionManager(String resourceId, IRevisionManager manager);
/**
* Returns a set of resource IDs that has corresponding revision managers
* registered. If no revision manager is found, an empty set will be
* returned. If a resource's revision manager has been set to
* <code>null</code> using
* {@link #setRevisionManager(String, IRevisionManager)}, that resource's ID
* will not be included.
*
* @return a set of resource IDs
* @see IRevisionManager
*/
Set<String> getRegisteredResourceIds();
}