/** * Copyright (C) 2010 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.spi.basic; import org.xcmis.spi.CmisRuntimeException; import org.xcmis.spi.ConstraintException; import org.xcmis.spi.ContentStream; import org.xcmis.spi.DocumentData; import org.xcmis.spi.FolderData; import org.xcmis.spi.InvalidArgumentException; import org.xcmis.spi.ItemsIterator; import org.xcmis.spi.NameConstraintViolationException; import org.xcmis.spi.NotSupportedException; import org.xcmis.spi.ObjectData; import org.xcmis.spi.ObjectNotFoundException; import org.xcmis.spi.PermissionService; import org.xcmis.spi.PolicyData; import org.xcmis.spi.RelationshipData; import org.xcmis.spi.Storage; import org.xcmis.spi.StorageException; import org.xcmis.spi.TypeManager; import org.xcmis.spi.TypeNotFoundException; import org.xcmis.spi.UpdateConflictException; import org.xcmis.spi.UserContext; import org.xcmis.spi.VersioningException; import org.xcmis.spi.model.AccessControlEntry; import org.xcmis.spi.model.AllowableActions; import org.xcmis.spi.model.BaseType; import org.xcmis.spi.model.ChangeEvent; import org.xcmis.spi.model.Property; import org.xcmis.spi.model.Rendition; import org.xcmis.spi.model.RepositoryInfo; import org.xcmis.spi.model.TypeDefinition; import org.xcmis.spi.model.VersioningState; import org.xcmis.spi.query.Query; import org.xcmis.spi.query.Result; import org.xcmis.spi.utils.CmisUtils; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; /** * Basic Storage impl */ public abstract class BasicStorage implements Storage { protected RepositoryInfo repositoryInfo; protected TypeManager typeManager; protected PermissionService permissionService; public BasicStorage(RepositoryInfo repositoryInfo, TypeManager typeManager, PermissionService permissionService) { this.repositoryInfo = repositoryInfo; this.typeManager = typeManager; this.permissionService = permissionService; } /** * {@inheritDoc} */ public RepositoryInfo getRepositoryInfo() { return this.repositoryInfo; } /** * {@inheritDoc} */ public AllowableActions calculateAllowableActions(ObjectData object) { UserContext ctx = UserContext.getCurrent(); AllowableActions actions = permissionService.calculateAllowableActions(object, ctx != null ? ctx.getUserId() : null, getRepositoryInfo()); return actions; } /** * {@inheritDoc} */ public String addType(TypeDefinition type) throws ConstraintException, StorageException, CmisRuntimeException { return this.typeManager.addType(type); } /** * {@inheritDoc} */ public void removeType(String typeId) throws TypeNotFoundException, ConstraintException, StorageException, CmisRuntimeException { this.typeManager.removeType(typeId); } /** * {@inheritDoc} */ public ItemsIterator<TypeDefinition> getTypeChildren(String typeId, boolean includePropertyDefinitions) throws TypeNotFoundException, CmisRuntimeException { return this.typeManager.getTypeChildren(typeId, includePropertyDefinitions); } /** * {@inheritDoc} */ public TypeDefinition getTypeDefinition(String typeId, boolean includePropertyDefinition) throws TypeNotFoundException, CmisRuntimeException { return this.typeManager.getTypeDefinition(typeId, includePropertyDefinition); } /** * {@inheritDoc} */ public DocumentData createDocument(FolderData parent, TypeDefinition typeDefinition, Map<String, Property<?>> properties, ContentStream content, List<AccessControlEntry> acl, Collection<PolicyData> policies, VersioningState versioningState) throws ConstraintException, NameConstraintViolationException, IOException, StorageException { throw new UnsupportedOperationException(); } /** * {@inheritDoc} */ public PolicyData createPolicy(FolderData parent, TypeDefinition typeDefinition, Map<String, Property<?>> properties, List<AccessControlEntry> acl, Collection<PolicyData> policies) throws ConstraintException, NameConstraintViolationException, StorageException { throw new NotSupportedException(); } /** * {@inheritDoc} */ public RelationshipData createRelationship(ObjectData source, ObjectData target, TypeDefinition typeDefinition, Map<String, Property<?>> properties, List<AccessControlEntry> acl, Collection<PolicyData> policies) throws NameConstraintViolationException, StorageException { throw new NotSupportedException(); } /** * {@inheritDoc} */ public Collection<DocumentData> getAllVersions(String versionSeriesId) throws ObjectNotFoundException { ObjectData data = getObjectById(versionSeriesId); if (data.getBaseType() == BaseType.DOCUMENT) { List<DocumentData> l = new ArrayList<DocumentData>(1); l.add((DocumentData)data); return l; } return Collections.emptySet(); } /** * {@inheritDoc} */ public ItemsIterator<ChangeEvent> getChangeLog(String changeLogToken) throws ConstraintException { throw new NotSupportedException(); } /** * {@inheritDoc} */ public ItemsIterator<DocumentData> getCheckedOutDocuments(FolderData folder, String orderBy) { return CmisUtils.emptyItemsIterator(); } /** * {@inheritDoc} */ public String getId() { return repositoryInfo.getRepositoryId(); } /** * {@inheritDoc} */ public ItemsIterator<Rendition> getRenditions(ObjectData object) { return CmisUtils.emptyItemsIterator(); } /** * {@inheritDoc} */ public ObjectData moveObject(ObjectData object, FolderData target, FolderData source) throws UpdateConflictException, VersioningException, NameConstraintViolationException, StorageException { throw new UnsupportedOperationException(); } /** * {@inheritDoc} */ public ItemsIterator<Result> query(Query query) throws InvalidArgumentException { throw new NotSupportedException(); } /** * {@inheritDoc} */ public void unfileObject(ObjectData object) { throw new NotSupportedException(); } /** * {@inheritDoc} */ public Iterator<String> getUnfiledObjectsId() throws StorageException { throw new UnsupportedOperationException(); } }