/*
* 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.CmisObject;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.ItemIterable;
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.TransientFolder;
import org.apache.chemistry.opencmis.client.api.Tree;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
/**
* Transient CMIS Folder for Nuxeo.
*/
public class NuxeoTransientFolder extends NuxeoTransientFileableObject
implements TransientFolder {
protected boolean isMarkedForDeleteTree;
protected boolean deleteTreeAllVersions;
protected UnfileObject deleteTreeUnfile;
protected boolean deleteTreeContinueOnFailure;
public NuxeoTransientFolder(NuxeoObject object) {
super(object);
}
@Override
public Document createDocument(Map<String, ?> properties,
ContentStream contentStream, VersioningState versioningState,
List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
OperationContext context) {
return ((NuxeoFolder) object).createDocument(properties, contentStream,
versioningState, policies, addAces, removeAces, context);
}
@Override
public Document createDocument(Map<String, ?> properties,
ContentStream contentStream, VersioningState versioningState) {
return ((NuxeoFolder) object).createDocument(properties, contentStream,
versioningState);
}
@Override
public Document createDocumentFromSource(ObjectId source,
Map<String, ?> properties, VersioningState versioningState,
List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
OperationContext context) {
return ((NuxeoFolder) object).createDocumentFromSource(source,
properties, versioningState, policies, addAces, removeAces,
context);
}
@Override
public Document createDocumentFromSource(ObjectId source,
Map<String, ?> properties, VersioningState versioningState) {
return ((NuxeoFolder) object).createDocumentFromSource(source,
properties, versioningState);
}
@Override
public Folder createFolder(Map<String, ?> properties,
List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
OperationContext context) {
return ((NuxeoFolder) object).createFolder(properties, policies,
addAces, removeAces, context);
}
@Override
public Folder createFolder(Map<String, ?> properties) {
return ((NuxeoFolder) object).createFolder(properties);
}
@Override
public Policy createPolicy(Map<String, ?> properties,
List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
OperationContext context) {
throw new CmisNotSupportedException();
}
@Override
public Policy createPolicy(Map<String, ?> properties) {
throw new CmisNotSupportedException();
}
@Override
public List<Tree<FileableCmisObject>> getFolderTree(int depth) {
return ((NuxeoFolder) object).getFolderTree(depth);
}
@Override
public List<Tree<FileableCmisObject>> getFolderTree(int depth,
OperationContext context) {
return ((NuxeoFolder) object).getFolderTree(depth, context);
}
@Override
public List<Tree<FileableCmisObject>> getDescendants(int depth) {
return ((NuxeoFolder) object).getDescendants(depth);
}
@Override
public List<Tree<FileableCmisObject>> getDescendants(int depth,
OperationContext context) {
return ((NuxeoFolder) object).getDescendants(depth, context);
}
@Override
public ItemIterable<CmisObject> getChildren() {
return ((NuxeoFolder) object).getChildren();
}
@Override
public ItemIterable<CmisObject> getChildren(OperationContext context) {
return ((NuxeoFolder) object).getChildren(context);
}
@Override
public boolean isRootFolder() {
return ((NuxeoFolder) object).isRootFolder();
}
@Override
public Folder getFolderParent() {
return ((NuxeoFolder) object).getFolderParent();
}
@Override
public String getPath() {
return ((NuxeoFolder) object).getPath();
}
@Override
public ItemIterable<Document> getCheckedOutDocs() {
return ((NuxeoFolder) object).getCheckedOutDocs();
}
@Override
public ItemIterable<Document> getCheckedOutDocs(OperationContext context) {
return ((NuxeoFolder) object).getCheckedOutDocs(context);
}
@Override
public List<ObjectType> getAllowedChildObjectTypes() {
return ((NuxeoFolder) object).getAllowedChildObjectTypes();
}
@Override
public void setAllowedChildObjectTypes(List<ObjectType> types) {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public void deleteTree(boolean allversions, UnfileObject unfile,
boolean continueOnFailure) {
deleteTreeAllVersions = allversions;
deleteTreeUnfile = unfile;
deleteTreeContinueOnFailure = continueOnFailure;
isMarkedForDeleteTree = true;
}
@Override
public boolean isMarkedForDelete() {
return isMarkedForDeleteTree || super.isMarkedForDelete();
}
@Override
public boolean isModified() {
return isMarkedForDeleteTree || super.isModified();
}
@Override
protected boolean saveDeletes() {
if (isMarkedForDeleteTree) {
FailedToDeleteData failed = object.service.deleteTree(
object.getRepositoryId(), getId(),
Boolean.valueOf(deleteTreeAllVersions), deleteTreeUnfile,
Boolean.valueOf(deleteTreeContinueOnFailure), null);
if (failed != null && !failed.getIds().isEmpty()) {
throw new CmisConstraintException(
"Could not delete some children: " + failed.getIds());
}
return true;
}
return super.saveDeletes();
}
@Override
public void reset() {
super.reset();
isMarkedForDeleteTree = false;
}
}