/*******************************************************************************
* Copyright (c) 2013 aegif.
*
* This file is part of NemakiWare.
*
* NemakiWare is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* NemakiWare is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public Licensealong with NemakiWare. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* linzhixing(https://github.com/linzhixing) - initial API and implementation
******************************************************************************/
package jp.aegif.nemaki.businesslogic;
import java.math.BigInteger;
import java.util.List;
import jp.aegif.nemaki.model.Acl;
import jp.aegif.nemaki.model.Archive;
import jp.aegif.nemaki.model.AttachmentNode;
import jp.aegif.nemaki.model.Change;
import jp.aegif.nemaki.model.Content;
import jp.aegif.nemaki.model.Document;
import jp.aegif.nemaki.model.Folder;
import jp.aegif.nemaki.model.Item;
import jp.aegif.nemaki.model.Policy;
import jp.aegif.nemaki.model.Relationship;
import jp.aegif.nemaki.model.Rendition;
import jp.aegif.nemaki.model.VersionSeries;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.enums.ChangeType;
import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.server.CallContext;
import org.apache.chemistry.opencmis.commons.spi.Holder;
public interface ContentService {
// ///////////////////////////////////////
// Content
// ///////////////////////////////////////
/**
* @param repositoryId TODO
* @param content
* @return
*/
public boolean isRoot(String repositoryId, Content content);
public boolean isTopLevel(String repositoryId, Content content);
/**
* Check if any object of a type exists
* @param repositoryId TODO
* @param objectTypeId
* @return
*/
boolean existContent(String repositoryId, String objectTypeId);
/**
* Get a content(without type-specified)
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Content getContent(String repositoryId, String objectId);
/**
* Get a fileable content by path
* @param repositoryId TODO
* @param path
*
* @return
*/
Content getContentByPath(String repositoryId, String path);
/**
* Get the parent folder
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Folder getParent(String repositoryId, String objectId);
/**
* Get children under a folder
* @param repositoryId TODO
* @param objectId
*
* @return
*/
List<Content> getChildren(String repositoryId, String folderId);
/**
* Get a document
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Document getDocument(String repositoryId, String objectId);
/**
* Get the latest version document of a given versionSeries
* @param repositoryId TODO
* @param versionSeriesId
*
* @return
*/
Document getDocumentOfLatestVersion(String repositoryId, String versionSeriesId);
/**
* Get the latest version major document of a given versionSeries
* @param repositoryId TODO
* @param versionSeriesId
*
* @return
*/
Document getDocumentOfLatestMajorVersion(String repositoryId, String versionSeriesId);
/**
* Get all versions of a document
* @param callContext TODO
* @param repositoryId TODO
* @param versionSeriesId
* @return
*/
List<Document> getAllVersions(CallContext callContext, String repositoryId, String versionSeriesId);
/**
* Get checkout documents in a folder
* @param repositoryId TODO
* @param folderId
* @param orderBy
* @param extension
*
* @return
*/
List<Document> getCheckedOutDocs(String repositoryId, String folderId,
String orderBy, ExtensionsData extension);
/**
* Get a version series
* @param repositoryId TODO
* @param document
* @return
*/
VersionSeries getVersionSeries(String repositoryId, Document document);
/**
* Get a version series
* @param repositoryId TODO
* @param versionSeriesId
*
* @return
*/
VersionSeries getVersionSeries(String repositoryId, String versionSeriesId);
/**
* Get a folder
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Folder getFolder(String repositoryId, String objectId);
/**
* Get a path string
* @param repositoryId TODO
* @param content
*
* @return
*/
String calculatePath(String repositoryId, Content content);
/**
* Get a relationship
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Relationship getRelationship(String repositoryId, String objectId);
/**
* Search relationships by the edge node
* @param repositoryId TODO
* @param objectId
* @param relationshipDirection
*
* @return
*/
List<Relationship> getRelationsipsOfObject(String repositoryId,
String objectId, RelationshipDirection relationshipDirection);
/**
* Get a policy
* @param repositoryId TODO
* @param objectId
*
* @return
*/
Policy getPolicy(String repositoryId, String objectId);
/**
* Get an item
* @param repositoryId TODO
* @param objectId
* @return
*/
Item getItem(String repositoryId, String objectId);
/**
* Create a document
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param parentFolder
* @param contentStream
* @param versioningState
* @param versionSeriesId
* @return
*/
Document createDocument(CallContext callContext, String repositoryId,
Properties properties, Folder parentFolder,
ContentStream contentStream, VersioningState versioningState, String versionSeriesId);
/**
* Copy a document
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param target
* @param original
* @param versioningState
* @param policies
* @param addAces
* @param removeAces
* @return
*/
Document createDocumentFromSource(CallContext callContext,
String repositoryId, Properties properties, Folder target,
Document original, VersioningState versioningState,
List<String> policies,
org.apache.chemistry.opencmis.commons.data.Acl addAces, org.apache.chemistry.opencmis.commons.data.Acl removeAces);
/**
* Copy a document setting new content stream
*
* @param callContext
* @param repositoryId TODO
* @param original
* @param contentStream
* @return
*/
Document createDocumentWithNewStream(CallContext callContext,
String repositoryId, Document original, ContentStream contentStream);
Document replacePwc(CallContext callContext, String repositoryId, Document original, ContentStream contentStream);
/**
* Check out and create PWC
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param extension
* @return
*/
Document checkOut(CallContext callContext, String repositoryId,
String objectId, ExtensionsData extension);
/**
* Cancel checking out
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param extension
*/
void cancelCheckOut(CallContext callContext, String repositoryId,
String objectId, ExtensionsData extension);
/**
* Check in and delete PWC
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param major
* @param properties
* @param contentStream
* @param checkinComment
* @param policies
* @param addAces
* @param removeAces
* @param extension
* @return
*/
Document checkIn(CallContext callContext, String repositoryId,
Holder<String> objectId, Boolean major, Properties properties,
ContentStream contentStream, String checkinComment,
List<String> policies,
org.apache.chemistry.opencmis.commons.data.Acl addAces,
org.apache.chemistry.opencmis.commons.data.Acl removeAces, ExtensionsData extension);
/**
* Create a folder
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param parentFolder
* @return
*/
Folder createFolder(CallContext callContext, String repositoryId,
Properties properties, Folder parentFolder);
/**
* Create a relationship
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param policies
* @param addAces
* @param removeAces
* @param extension
* @return
*/
Relationship createRelationship(CallContext callContext,
String repositoryId, Properties properties,
List<String> policies,
org.apache.chemistry.opencmis.commons.data.Acl addAces,
org.apache.chemistry.opencmis.commons.data.Acl removeAces, ExtensionsData extension);
/**
* Create a policy
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param policies
* @param addAces
* @param removeAces
* @param extension
* @return
*/
Policy createPolicy(CallContext callContext, String repositoryId,
Properties properties,
List<String> policies,
org.apache.chemistry.opencmis.commons.data.Acl addAces,
org.apache.chemistry.opencmis.commons.data.Acl removeAces, ExtensionsData extension);
/**
* Create an item
* @param callContext
* @param repositoryId TODO
* @param properties
* @param folderId
* @param policies
* @param addAces
* @param removeAces
* @param extension
* @return
*/
Item createItem(CallContext callContext, String repositoryId,
Properties properties, String folderId, List<String> policies,
org.apache.chemistry.opencmis.commons.data.Acl addAces, org.apache.chemistry.opencmis.commons.data.Acl removeAces, ExtensionsData extension);
/**
* Update a content(for general-purpose)
* @param repositoryId TODO
* @param content
*
* @return
*/
Content update(String repositoryId, Content content);
/**
* Update properties of a content
*
* @param callContext
* @param repositoryId TODO
* @param properties
* @param content
* @return
*/
Content updateProperties(CallContext callContext, String repositoryId,
Properties properties, Content content);
/**
* Move a content
* @param callContext TODO
* @param repositoryId TODO
* @param content
* @param target
*/
void move(CallContext callContext, String repositoryId, Content content, Folder target);
/**
* Apply a policy from a content
*
* @param callContext
* @param repositoryId TODO
* @param policyId
* @param objectId
* @param extension
*/
void applyPolicy(CallContext callContext, String repositoryId, String policyId,
String objectId, ExtensionsData extension);
/**
* Remove a policy from a content
*
* @param callContext
* @param repositoryId TODO
* @param policyId
* @param objectId
* @param extension
*/
void removePolicy(CallContext callContext, String repositoryId,
String policyId, String objectId, ExtensionsData extension);
List<Policy> getAppliedPolicies(String repositoryId, String objectId, ExtensionsData extension);
/**
* Delete a content(for general-purpose)
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param deletedWithParent
*/
void delete(CallContext callContext, String repositoryId,
String objectId, Boolean deletedWithParent);
/**
* Delete a document (and also its versions)
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param allVersions
* @param deleteWithParent
*/
void deleteDocument(CallContext callContext, String repositoryId,
String objectId, Boolean allVersions, Boolean deleteWithParent);
/**
* Delete an attachment node
*
* @param callContext
* @param repositoryId TODO
* @param attachmentId
*/
void deleteAttachment(CallContext callContext, String repositoryId, String attachmentId);
/**
* Delete content stream
* @param callContext
* @param repositoryId TODO
* @param objectId
*/
void deleteContentStream(CallContext callContext, String repositoryId, Holder<String> objectId);
/**
* Delete a whole folder tree
*
* @param context
* @param repositoryId TODO
* @param folderId
* @param allVersions
* @param continueOnFailure
* @param deletedWithParent
* @return TODO
* @throws Exception
*/
List<String> deleteTree(CallContext context, String repositoryId, String folderId,
Boolean allVersions, Boolean continueOnFailure, Boolean deletedWithParent);
// ///////////////////////////////////////
// Attachment
// ///////////////////////////////////////
/**
* Get an attachment
* @param repositoryId TODO
* @param attachmentId
*
* @return
*/
AttachmentNode getAttachment(String repositoryId, String attachmentId);
/**
* Get an attachment without stream
* @param repositoryId TODO
* @param attachmentId
*
* @return
*/
AttachmentNode getAttachmentRef(String repositoryId, String attachmentId);
/**
*
*
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param changeToken
* @param contentStream
* @param isLastChunk
* @param extension
*/
void appendAttachment(CallContext callContext, String repositoryId, Holder<String> objectId,
Holder<String> changeToken, ContentStream contentStream,
boolean isLastChunk, ExtensionsData extension);
/**
* Get a rendition
* @param repositoryId TODO
* @param streamId
*
* @return
*/
Rendition getRendition(String repositoryId, String streamId);
/**
* Get renditions of a content
* @param repositoryId TODO
* @param objectId
*
* @return
*/
List<Rendition> getRenditions(String repositoryId, String objectId);
// ///////////////////////////////////////
// Acl
// ///////////////////////////////////////
public Acl calculateAcl(String repositoryId, Content content);
public Boolean getAclInheritedWithDefault(String repositoryId, Content content);
// ///////////////////////////////////////
// Change event
// ///////////////////////////////////////
/**
* Get a change event
* @param repositoryId TODO
* @param changeTokenId
*
* @return
*/
Change getChangeEvent(String repositoryId, String changeTokenId);
/**
* Get latest change events in the change log
* @param repositoryId TODO
* @param context
* @param changeLogToken
* @param includeProperties
* @param filter
* @param includePolicyIds
* @param includeAcl
* @param maxItems
* @param extension
*
* @return
*/
List<Change> getLatestChanges(String repositoryId,
CallContext context, Holder<String> changeLogToken,
Boolean includeProperties, String filter, Boolean includePolicyIds,
Boolean includeAcl, BigInteger maxItems, ExtensionsData extension);
/**
* Get the latest change token in the repository
* @param repositoryId TODO
*
* @return
*/
String getLatestChangeToken(String repositoryId);
// ///////////////////////////////////////
// Archive
// ///////////////////////////////////////
/**
* Get all archives in the repository
* @param repositoryId TODO
*
* @return
*/
List<Archive> getAllArchives(String repositoryId);
/**
* Get an archive
* @param repositoryId TODO
* @param archiveId
*
* @return
*/
Archive getArchive(String repositoryId, String archiveId);
/**
* Get an archive by its original content's id
* @param repositoryId TODO
* @param archiveId
*
* @return
*/
Archive getArchiveByOriginalId(String repositoryId, String archiveId);
/**
* Create an archive of a content
*
* @param callContext
* @param repositoryId TODO
* @param objectId
* @param deletedWithParent
* @return
*/
Archive createArchive(CallContext callContext, String repositoryId,
String objectId, Boolean deletedWithParent);
/**
* Create an archive of an attachment
*
* @param callContext
* @param repositoryId TODO
* @param attachmentId
* @return
*/
Archive createAttachmentArchive(CallContext callContext, String repositoryId, String attachmentId);
/**
* Restore a content from an archive
* @param repositoryId TODO
* @param archiveId
*/
void restoreArchive(String repositoryId, String archiveId);
/**
* Write change event
* @param callContext
* @param repositoryId TODO
* @param content
* @param acl
* @param changeType
*/
String writeChangeEvent(CallContext callContext, String repositoryId, Content content,
Acl acl, ChangeType changeType);
}