/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) 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:
* Florent Guillaume
*/
package org.eclipse.ecr.opencmis.impl.client;
import java.util.List;
import java.util.Map;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.OperationContext;
import org.apache.chemistry.opencmis.client.api.Policy;
import org.apache.chemistry.opencmis.client.api.TransientDocument;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
/**
* Transient CMIS Document for Nuxeo.
*/
public class NuxeoTransientDocument extends NuxeoTransientFileableObject
implements TransientDocument {
protected ContentStream contentStream;
protected boolean contentStreamOverwrite;
protected boolean contentStreamUpdated;
public NuxeoTransientDocument(NuxeoObject object) {
super(object);
}
@Override
public boolean isModified() {
return contentStreamUpdated || super.isModified();
}
@Override
public void deleteAllVersions() {
delete(true);
}
@Override
public ContentStream getContentStream() {
if (contentStreamUpdated) {
return contentStream;
}
return ((NuxeoDocument) object).getContentStream();
}
@Override
public ContentStream getContentStream(String streamId) {
if (streamId == null) {
return getContentStream();
}
return ((NuxeoDocument) object).getContentStream(streamId);
}
@Override
public void setContentStream(ContentStream contentStream, boolean overwrite) {
this.contentStream = contentStream;
this.contentStreamOverwrite = overwrite;
contentStreamUpdated = true;
}
@Override
public void deleteContentStream() {
this.contentStream = null;
contentStreamUpdated = true;
}
@Override
public Document getObjectOfLatestVersion(boolean major) {
return ((NuxeoDocument) object).getObjectOfLatestVersion(major);
}
@Override
public Document getObjectOfLatestVersion(boolean major,
OperationContext context) {
return ((NuxeoDocument) object).getObjectOfLatestVersion(major, context);
}
@Override
public List<Document> getAllVersions() {
return ((NuxeoDocument) object).getAllVersions();
}
@Override
public List<Document> getAllVersions(OperationContext context) {
return ((NuxeoDocument) object).getAllVersions(context);
}
@Override
public Document copy(ObjectId targetFolderId) {
return ((NuxeoDocument) object).copy(targetFolderId);
}
@Override
public Document copy(ObjectId targetFolderId, Map<String, ?> properties,
VersioningState versioningState, List<Policy> policies,
List<Ace> addACEs, List<Ace> removeACEs, OperationContext context) {
return ((NuxeoDocument) object).copy(targetFolderId, properties,
versioningState, policies, addACEs, removeACEs, context);
}
@Override
public Boolean isImmutable() {
return ((NuxeoDocument) object).isImmutable();
}
@Override
public Boolean isLatestVersion() {
return ((NuxeoDocument) object).isLatestVersion();
}
@Override
public Boolean isMajorVersion() {
return ((NuxeoDocument) object).isMajorVersion();
}
@Override
public Boolean isLatestMajorVersion() {
return ((NuxeoDocument) object).isLatestMajorVersion();
}
@Override
public String getVersionLabel() {
return ((NuxeoDocument) object).getVersionLabel();
}
@Override
public String getVersionSeriesId() {
return ((NuxeoDocument) object).getVersionSeriesId();
}
@Override
public Boolean isVersionSeriesCheckedOut() {
return ((NuxeoDocument) object).isVersionSeriesCheckedOut();
}
@Override
public String getVersionSeriesCheckedOutBy() {
return ((NuxeoDocument) object).getVersionSeriesCheckedOutBy();
}
@Override
public String getVersionSeriesCheckedOutId() {
return ((NuxeoDocument) object).getVersionSeriesCheckedOutId();
}
@Override
public String getCheckinComment() {
return ((NuxeoDocument) object).getCheckinComment();
}
@Override
public long getContentStreamLength() {
if (contentStreamUpdated) {
return contentStream == null ? -1 : contentStream.getLength();
}
return ((NuxeoDocument) object).getContentStreamLength();
}
@Override
public String getContentStreamMimeType() {
if (contentStreamUpdated) {
return contentStream == null ? null : contentStream.getMimeType();
}
return ((NuxeoDocument) object).getContentStreamMimeType();
}
@Override
public String getContentStreamFileName() {
if (contentStreamUpdated) {
return contentStream == null ? null : contentStream.getFileName();
}
return ((NuxeoDocument) object).getContentStreamFileName();
}
@Override
public String getContentStreamId() {
return ((NuxeoDocument) object).getContentStreamId();
}
@Override
public ObjectId checkIn(boolean major, String checkinComment) {
ObjectId objectId = ((NuxeoDocument) object).checkIn(major, properties,
contentStream, checkinComment);
reset();
return objectId;
}
@Override
public ObjectId save() {
if (saveDeletes()) {
reset();
return null;
}
if (contentStreamUpdated) {
((NuxeoDocument) object).setContentStream(contentStream,
contentStreamOverwrite);
}
return super.save(); // update properties, reset
}
@Override
public void reset() {
super.reset();
contentStream = null;
contentStreamOverwrite = false;
contentStreamUpdated = false;
}
}