/*
* 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.ObjectType;
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.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.eclipse.ecr.opencmis.impl.server.NuxeoObjectData;
/**
* Live local CMIS Document, which is backed by a Nuxeo document.
*/
public class NuxeoDocument extends NuxeoFileableObject implements Document {
public NuxeoDocument(NuxeoSession session, NuxeoObjectData data,
ObjectType type) {
super(session, data, type);
}
@Override
public TransientDocument getTransientDocument() {
return (TransientDocument) getAdapter(TransientDocument.class);
}
@Override
public void cancelCheckOut() {
service.cancelCheckOut(getId());
}
@Override
public ObjectId checkIn(boolean major, Map<String, ?> properties,
ContentStream contentStream, String checkinComment) {
String verId = service.checkIn(getId(), major, properties, type,
contentStream, checkinComment);
return session.createObjectId(verId);
}
@Override
public ObjectId checkIn(boolean major, Map<String, ?> properties,
ContentStream contentStream, String checkinComment,
List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
// TODO policies, addAces, removeAces
return checkIn(major, properties, contentStream, checkinComment);
}
@Override
public ObjectId checkOut() {
String pwcId = service.checkOut(getId());
return session.createObjectId(pwcId);
}
@Override
public NuxeoDocument copy(ObjectId target) {
return copy(target, null, null, null, null, null,
session.getDefaultContext());
}
@Override
public NuxeoDocument copy(ObjectId target, Map<String, ?> properties,
VersioningState versioningState, List<Policy> policies,
List<Ace> addACEs, List<Ace> removeACEs, OperationContext context) {
if (target == null || target.getId() == null) {
throw new CmisInvalidArgumentException("Invalid target: " + target);
}
if (context == null) {
context = session.getDefaultContext();
}
NuxeoObjectData newData = service.copy(getId(), target.getId(),
properties, type, versioningState, policies, addACEs,
removeACEs, context);
return (NuxeoDocument) session.getObjectFactory().convertObject(
newData, context);
}
@Override
public void deleteAllVersions() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public NuxeoDocument deleteContentStream() {
ObjectId objectId = deleteContentStream(true);
return (NuxeoDocument) session.getObject(objectId);
}
@Override
public ObjectId deleteContentStream(boolean refresh) {
Holder<String> objectIdHolder = new Holder<String>(getId());
String changeToken = getPropertyValue(PropertyIds.CHANGE_TOKEN);
Holder<String> changeTokenHolder = new Holder<String>(changeToken);
service.deleteContentStream(getRepositoryId(), objectIdHolder,
changeTokenHolder, null);
String objectId = objectIdHolder.getValue(); // never null
return session.createObjectId(objectId);
}
@Override
public List<Document> getAllVersions() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public List<Document> getAllVersions(OperationContext context) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public String getCheckinComment() {
return getPropertyValue(PropertyIds.CHECKIN_COMMENT);
}
@Override
public ContentStream getContentStream() {
return getContentStream(null);
}
@Override
public ContentStream getContentStream(String streamId) {
try {
return service.getContentStream(getRepositoryId(), getId(),
streamId, null, null, null);
} catch (CmisConstraintException e) {
return null;
}
}
@Override
public String getContentStreamFileName() {
return getPropertyValue(PropertyIds.CONTENT_STREAM_FILE_NAME);
}
@Override
public String getContentStreamId() {
return getPropertyValue(PropertyIds.CONTENT_STREAM_ID);
}
@Override
public long getContentStreamLength() {
Long length = getPropertyValue(PropertyIds.CONTENT_STREAM_LENGTH);
return length == null ? -1 : length.longValue();
}
@Override
public String getContentStreamMimeType() {
return getPropertyValue(PropertyIds.CONTENT_STREAM_MIME_TYPE);
}
@Override
public Document getObjectOfLatestVersion(boolean major) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public Document getObjectOfLatestVersion(boolean major,
OperationContext context) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public String getVersionLabel() {
return getPropertyValue(PropertyIds.VERSION_LABEL);
}
@Override
public String getVersionSeriesCheckedOutBy() {
return getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY);
}
@Override
public String getVersionSeriesCheckedOutId() {
return getPropertyValue(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID);
}
@Override
public String getVersionSeriesId() {
return getPropertyValue(PropertyIds.VERSION_SERIES_ID);
}
@Override
public Boolean isImmutable() {
return getPropertyValue(PropertyIds.IS_IMMUTABLE);
}
@Override
public Boolean isLatestMajorVersion() {
return getPropertyValue(PropertyIds.IS_LATEST_MAJOR_VERSION);
}
@Override
public Boolean isLatestVersion() {
return getPropertyValue(PropertyIds.IS_LATEST_VERSION);
}
@Override
public Boolean isMajorVersion() {
return getPropertyValue(PropertyIds.IS_MAJOR_VERSION);
}
@Override
public Boolean isVersionSeriesCheckedOut() {
return getPropertyValue(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT);
}
@Override
public Document setContentStream(ContentStream contentStream,
boolean overwrite) {
ObjectId objectId = setContentStream(contentStream, overwrite, true);
return (NuxeoDocument) session.getObject(objectId);
}
@Override
public ObjectId setContentStream(ContentStream contentStream,
boolean overwrite, boolean refresh) {
Holder<String> objectIdHolder = new Holder<String>(getId());
String changeToken = getPropertyValue(PropertyIds.CHANGE_TOKEN);
Holder<String> changeTokenHolder = new Holder<String>(changeToken);
service.setContentStream(getRepositoryId(), objectIdHolder,
Boolean.valueOf(overwrite), changeTokenHolder, contentStream,
null);
String objectId = objectIdHolder.getValue(); // never null
return session.createObjectId(objectId);
}
}