blob: 1c6ff1510bbc7fa252c656a7b5c4a5d29a29726e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
import java.util.List;
import org.apache.chemistry.opencmis.commons.data.Acl;
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
import org.apache.chemistry.opencmis.commons.server.CallContext;
import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Policy;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
public class InMemoryServiceValidatorImpl extends BaseServiceValidatorImpl {
public InMemoryServiceValidatorImpl(StoreManager sm) {
super(sm);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkStandardParameters(java.lang.String, java.lang.String)
*/
@Override
protected StoredObject checkStandardParameters(String repositoryId, String objectId) {
StoredObject so = super.checkStandardParameters(repositoryId, objectId);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkStandardParametersAllowNull(java.lang.String, java.lang.String)
*/
@Override
protected StoredObject checkStandardParametersAllowNull(String repositoryId, String objectId) {
StoredObject so = super.checkStandardParametersAllowNull(repositoryId, objectId);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkExistingObjectId
* (org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore,
* java.lang.String)
*/
@Override
protected StoredObject checkExistingObjectId(ObjectStore objStore, String objectId) {
StoredObject so = super.checkExistingObjectId(objStore, objectId);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkParams(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
protected StoredObject[] checkParams(String repositoryId, String objectId1, String objectId2) {
StoredObject[] sos = super.checkParams(repositoryId, objectId1, objectId2);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getRepositoryInfos
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getRepositoryInfos(CallContext context, ExtensionsData extension) {
super.getRepositoryInfos(context, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getRepositoryInfo
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getRepositoryInfo(CallContext context, String repositoryId, ExtensionsData extension) {
super.getRepositoryInfo(context, repositoryId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getTypeChildren
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getTypeChildren(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
super.getTypeChildren(context, repositoryId, typeId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getTypeDescendants
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getTypeDescendants(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
super.getTypeDescendants(context, repositoryId, typeId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getTypeDefinition
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getTypeDefinition(CallContext context, String repositoryId, String typeId, ExtensionsData extension) {
super.getTypeDefinition(context, repositoryId, typeId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getChildren(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getChildren(CallContext context, String repositoryId, String folderId,
ExtensionsData extension) {
StoredObject so = super.getChildren(context, repositoryId, folderId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getDescendants(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getDescendants(CallContext context, String repositoryId, String folderId,
ExtensionsData extension) {
StoredObject so = super.getDescendants(context, repositoryId, folderId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getFolderTree(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getFolderTree(CallContext context, String repositoryId, String folderId,
ExtensionsData extension) {
StoredObject so = super.getFolderTree(context, repositoryId, folderId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getObjectParents
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getObjectParents(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.getObjectParents(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getFolderParent
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getFolderParent(CallContext context, String repositoryId, String folderId,
ExtensionsData extension) {
StoredObject so = super.getFolderParent(context, repositoryId, folderId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getCheckedOutDocs
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getCheckedOutDocs(CallContext context, String repositoryId, String folderId,
ExtensionsData extension) {
StoredObject so = super.getCheckedOutDocs(context, repositoryId, folderId, extension);
if (null != so) {
checkReadAccess(repositoryId, context.getUsername(), so);
}
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #createDocument(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject createDocument(CallContext context, String repositoryId, String folderId,
List<String> policyIds, ExtensionsData extension) {
StoredObject folder = super.createDocument(context, repositoryId, folderId, policyIds, extension);
if (null != folder) {
checkWriteAccess(repositoryId, context.getUsername(), folder);
}
return folder;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #createDocumentFromSource
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject createDocumentFromSource(CallContext context, String repositoryId, String sourceId,
String folderId, List<String> policyIds, ExtensionsData extension) {
StoredObject source = super.createDocumentFromSource(context, repositoryId, sourceId, folderId, policyIds,
extension);
checkWriteAccess(repositoryId, context.getUsername(), source);
return source;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #createFolder(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject createFolder(CallContext context, String repositoryId, String folderId, List<String> policyIds,
ExtensionsData extension) {
StoredObject parentFolder = super.createFolder(context, repositoryId, folderId, policyIds, extension);
checkWriteAccess(repositoryId, context.getUsername(), parentFolder);
return parentFolder;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #createRelationship
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] createRelationship(CallContext context, String repositoryId, String sourceId,
String targetId, List<String> policyIds, ExtensionsData extension) {
StoredObject[] sos = super.createRelationship(context, repositoryId, sourceId, targetId, policyIds, extension);
checkReadAccess(repositoryId, context.getUsername(), sos[0]);
checkReadAccess(repositoryId, context.getUsername(), sos[1]);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #createPolicy(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject createPolicy(CallContext context, String repositoryId, String folderId, Acl addAces,
Acl removeAces, List<String> policyIds, ExtensionsData extension) {
if (policyIds != null && policyIds.size() > 0) {
throw new CmisConstraintException("Applying policies to policies is not supported.");
}
if (folderId != null && folderId.length() > 0) {
throw new CmisConstraintException("Policies cannot be created in folders.");
}
if (addAces != null || removeAces != null) {
throw new CmisConstraintException("ACLs on policies are not suported.");
}
super.createPolicy(context, repositoryId, null, null, null, null, extension);
return null;
}
@Override
public StoredObject createItem(CallContext context, String repositoryId, Properties properties, String folderId,
List<String> policyIds, Acl addAces, Acl removeAces, ExtensionsData extension) {
StoredObject folder = super.createItem(context, repositoryId, properties, folderId, policyIds, addAces,
removeAces, extension);
if (null != folder) {
checkWriteAccess(repositoryId, context.getUsername(), folder);
}
return folder;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getAllowableActions
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getAllowableActions(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.getAllowableActions(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getObject(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getObject(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
StoredObject so = super.getObject(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getProperties(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getProperties(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.getProperties(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getRenditions(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getRenditions(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.getRenditions(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getObjectByPath
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getObjectByPath(CallContext context, String repositoryId, String path,
ExtensionsData extension) {
StoredObject so = super.getObjectByPath(context, repositoryId, path, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getContentStream
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getContentStream(CallContext context, String repositoryId, String objectId, String streamId,
ExtensionsData extension) {
StoredObject so = super.getContentStream(context, repositoryId, objectId, streamId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #updateProperties
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject updateProperties(CallContext context, String repositoryId, Holder<String> objectId,
ExtensionsData extension) {
StoredObject so = super.updateProperties(context, repositoryId, objectId, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #moveObject(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] moveObject(CallContext context, String repositoryId, Holder<String> objectId,
String targetFolderId, String sourceFolderId, ExtensionsData extension) {
StoredObject[] sos = super.moveObject(context, repositoryId, objectId, targetFolderId, sourceFolderId,
extension);
checkReadAccess(repositoryId, context.getUsername(), sos[0]);
checkReadAccess(repositoryId, context.getUsername(), sos[1]);
checkWriteAccess(repositoryId, context.getUsername(), sos[2]);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #deleteObject(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.Boolean,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject deleteObject(CallContext context, String repositoryId, String objectId, Boolean allVersions,
ExtensionsData extension) {
StoredObject so = super.deleteObject(context, repositoryId, objectId, allVersions, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #deleteTree(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.Boolean,
* org.apache.chemistry.opencmis.commons.enums.UnfileObject,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject deleteTree(CallContext context, String repositoryId, String folderId, Boolean allVersions,
UnfileObject unfileObjects, ExtensionsData extension) {
StoredObject so = super.deleteTree(context, repositoryId, folderId, allVersions, unfileObjects, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #setContentStream
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* java.lang.Boolean,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject setContentStream(CallContext context, String repositoryId, Holder<String> objectId,
Boolean overwriteFlag, ExtensionsData extension) {
StoredObject so = super.setContentStream(context, repositoryId, objectId, overwriteFlag, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #deleteContentStream
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject deleteContentStream(CallContext context, String repositoryId, Holder<String> objectId,
ExtensionsData extension) {
StoredObject so = super.deleteContentStream(context, repositoryId, objectId, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkOut(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData,
* org.apache.chemistry.opencmis.commons.spi.Holder)
*/
@Override
public StoredObject checkOut(CallContext context, String repositoryId, Holder<String> objectId,
ExtensionsData extension, Holder<Boolean> contentCopied) {
StoredObject so = super.checkOut(context, repositoryId, objectId, extension, contentCopied);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #cancelCheckOut(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject cancelCheckOut(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.cancelCheckOut(context, repositoryId, objectId, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #checkIn(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject checkIn(CallContext context, String repositoryId, Holder<String> objectId, Acl addAces,
Acl removeAces, List<String> policyIds, ExtensionsData extension) {
StoredObject so = super.checkIn(context, repositoryId, objectId, addAces, removeAces, policyIds, extension);
if (null != addAces || null != removeAces) {
throw new CmisInvalidArgumentException(
"version specific ACLs are not supported, addAces and removeAces must be null.");
}
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getObjectOfLatestVersion
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getObjectOfLatestVersion(CallContext context, String repositoryId, String objectId,
String versionSeriesId, ExtensionsData extension) {
StoredObject so = super.getObjectOfLatestVersion(context, repositoryId, objectId, versionSeriesId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getPropertiesOfLatestVersion
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getPropertiesOfLatestVersion(CallContext context, String repositoryId, String objectId,
String versionSeriesId, ExtensionsData extension) {
StoredObject so = super.getPropertiesOfLatestVersion(context, repositoryId, objectId, versionSeriesId,
extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getAllVersions(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getAllVersions(CallContext context, String repositoryId, String objectId,
String versionSeriesId, ExtensionsData extension) {
StoredObject so = super.getAllVersions(context, repositoryId, objectId, versionSeriesId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #query(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void query(CallContext context, String repositoryId, ExtensionsData extension) {
super.query(context, repositoryId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getContentChanges
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public void getContentChanges(CallContext context, String repositoryId, ExtensionsData extension) {
super.getContentChanges(context, repositoryId, extension);
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #addObjectToFolder
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] addObjectToFolder(CallContext context, String repositoryId, String objectId, String folderId,
Boolean allVersions, ExtensionsData extension) {
StoredObject[] sos = super.addObjectToFolder(context, repositoryId, objectId, folderId, allVersions, extension);
checkReadAccess(repositoryId, context.getUsername(), sos[0]);
checkWriteAccess(repositoryId, context.getUsername(), sos[1]);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #removeObjectFromFolder
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] removeObjectFromFolder(CallContext context, String repositoryId, String objectId,
String folderId, ExtensionsData extension) {
StoredObject[] sos = super.removeObjectFromFolder(context, repositoryId, objectId, folderId, extension);
checkWriteAccess(repositoryId, context.getUsername(), sos[0]);
if (null != folderId) {
checkWriteAccess(repositoryId, context.getUsername(), sos[1]);
}
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getObjectRelationships
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.enums.RelationshipDirection,
* java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getObjectRelationships(CallContext context, String repositoryId, String objectId,
RelationshipDirection relationshipDirection, String typeId, ExtensionsData extension) {
StoredObject so = super.getObjectRelationships(context, repositoryId, objectId, relationshipDirection, typeId,
extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getAcl(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getAcl(CallContext context, String repositoryId, String objectId, ExtensionsData extension) {
StoredObject so = super.getAcl(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #applyAcl(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.enums.AclPropagation,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject applyAcl(CallContext context, String repositoryId, String objectId,
AclPropagation aclPropagation, ExtensionsData extension) {
StoredObject so = super.applyAcl(context, repositoryId, objectId, aclPropagation, extension);
checkAllAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #applyPolicy(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] applyPolicy(CallContext context, String repositoryId, String policyId, String objectId,
ExtensionsData extension) {
StoredObject[] sos = super.applyPolicy(context, repositoryId, policyId, objectId, extension);
if (!(sos[0] instanceof Policy)) {
throw new CmisInvalidArgumentException("applyPolicy failed, " + policyId + " is not a policy id");
}
if (sos[1] instanceof Policy) {
throw new CmisInvalidArgumentException("applyPolicy failed, " + objectId
+ " is a policy id. Applying policies to policies is not supported.");
}
checkAllAccess(repositoryId, context.getUsername(), sos[1]);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #removePolicy(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject[] removePolicy(CallContext context, String repositoryId, String policyId, String objectId,
ExtensionsData extension) {
StoredObject[] sos = super.removePolicy(context, repositoryId, policyId, objectId, extension);
checkAllAccess(repositoryId, context.getUsername(), sos[1]);
return sos;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #getAppliedPolicies
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject getAppliedPolicies(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.getAppliedPolicies(context, repositoryId, objectId, extension);
checkReadAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #create(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject create(CallContext context, String repositoryId, String folderId, ExtensionsData extension) {
StoredObject so = super.create(context, repositoryId, folderId, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #deleteObjectOrCancelCheckOut
* (org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String,
* org.apache.chemistry.opencmis.commons.data.ExtensionsData)
*/
@Override
public StoredObject deleteObjectOrCancelCheckOut(CallContext context, String repositoryId, String objectId,
ExtensionsData extension) {
StoredObject so = super.deleteObjectOrCancelCheckOut(context, repositoryId, objectId, extension);
checkWriteAccess(repositoryId, context.getUsername(), so);
return so;
}
/*
* (non-Javadoc)
*
* @see
* org.apache.chemistry.opencmis.inmemory.server.BaseServiceValidatorImpl
* #applyAcl(org.apache.chemistry.opencmis.commons.server.CallContext,
* java.lang.String, java.lang.String)
*/
@Override
public StoredObject applyAcl(CallContext context, String repositoryId, String objectId) {
StoredObject so = super.applyAcl(context, repositoryId, objectId);
checkAllAccess(repositoryId, context.getUsername(), so);
return so;
}
@Override
public void createType(CallContext callContext, String repositoryId, TypeDefinition type, ExtensionsData extension) {
super.createType(callContext, repositoryId, type, extension);
}
@Override
public TypeDefinition updateType(CallContext callContext, String repositoryId, TypeDefinition type,
ExtensionsData extension) {
throw new CmisNotSupportedException("Updating a type definition is not supported.");
}
@Override
public TypeDefinition deleteType(CallContext callContext, String repositoryId, String typeId,
ExtensionsData extension) {
return super.deleteType(callContext, repositoryId, typeId, extension);
}
private ObjectStoreImpl getObjectStore(String repositoryId) {
return (ObjectStoreImpl) fStoreManager.getObjectStore(repositoryId);
}
private void checkReadAccess(String repositoryId, String principalId, StoredObject so) {
getObjectStore(repositoryId).checkReadAccess(principalId, so);
}
private void checkWriteAccess(String repositoryId, String principalId, StoredObject so) {
getObjectStore(repositoryId).checkWriteAccess(principalId, so);
}
private void checkAllAccess(String repositoryId, String principalId, StoredObject so) {
getObjectStore(repositoryId).checkAllAccess(principalId, so);
}
}