1 /* 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 */ 21 package org.apache.chemistry.opencmis.commons.server; 22 23 24 import java.util.List; 25 26 import org.apache.chemistry.opencmis.commons.data.Acl; 27 import org.apache.chemistry.opencmis.commons.data.ContentStream; 28 import org.apache.chemistry.opencmis.commons.data.ExtensionsData; 29 import org.apache.chemistry.opencmis.commons.data.Properties; 30 import org.apache.chemistry.opencmis.commons.enums.AclPropagation; 31 import org.apache.chemistry.opencmis.commons.enums.VersioningState; 32 import org.apache.chemistry.opencmis.commons.spi.AclService; 33 import org.apache.chemistry.opencmis.commons.spi.DiscoveryService; 34 import org.apache.chemistry.opencmis.commons.spi.MultiFilingService; 35 import org.apache.chemistry.opencmis.commons.spi.NavigationService; 36 import org.apache.chemistry.opencmis.commons.spi.ObjectService; 37 import org.apache.chemistry.opencmis.commons.spi.PolicyService; 38 import org.apache.chemistry.opencmis.commons.spi.RelationshipService; 39 import org.apache.chemistry.opencmis.commons.spi.RepositoryService; 40 import org.apache.chemistry.opencmis.commons.spi.VersioningService; 41 42 /** 43 * OpenCMIS server interface. 44 * 45 * <p> 46 * <em> 47 * See CMIS 1.0 specification for details on the operations, parameters, 48 * exceptions and the domain model. 49 * </em> 50 * </p> 51 * 52 * <p> 53 * This interface adds a few more operations to the operation set defined by 54 * CMIS to address binding specific requirements. 55 * </p> 56 */ 57 public interface CmisService extends RepositoryService, NavigationService, ObjectService, VersioningService, 58 DiscoveryService, MultiFilingService, RelationshipService, AclService, PolicyService { 59 60 /** 61 * Creates a new document, folder or policy. 62 * 63 * The property "cmis:objectTypeId" defines the type and implicitly the base 64 * type. 65 * 66 * @param repositoryId 67 * the identifier for the repository 68 * @param properties 69 * the property values that MUST be applied to the newly created 70 * object 71 * @param folderId 72 * <em>(optional)</em> if specified, the identifier for the 73 * folder that MUST be the parent folder for the newly created 74 * object 75 * @param contentStream 76 * <em>(optional)</em> if the object to create is a document 77 * object, the content stream that MUST be stored for the newly 78 * created document object 79 * @param versioningState 80 * <em>(optional)</em> if the object to create is a document 81 * object, it specifies what the versioning state of the newly 82 * created object MUST be (default is 83 * {@link VersioningState#MAJOR}) 84 * @param policies 85 * <em>(optional)</em> a list of policy IDs that MUST be applied 86 * to the newly created object 87 * @param addAces 88 * <em>(optional)</em> a list of ACEs that MUST be added to the 89 * newly created object, either using the ACL from 90 * <code>folderId</code> if specified, or being applied if no 91 * <code>folderId</code> is specified 92 * @param removeAces 93 * <em>(optional)</em> a list of ACEs that MUST be removed from 94 * the newly created object, either using the ACL from 95 * <code>folderId</code> if specified, or being ignored if no 96 * <code>folderId</code> is specified 97 */ 98 String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream, 99 VersioningState versioningState, List<String> policies, ExtensionsData extension); 100 101 /** 102 * Deletes an object or cancels a check out. 103 * 104 * For the Web Services binding this is always an object deletion. For the 105 * AtomPub it depends on the referenced object. If it is a checked out 106 * document then the check out must be canceled. If the object is not a 107 * checked out document then the object must be deleted. 108 * 109 * @param repositoryId 110 * the identifier for the repository 111 * @param objectId 112 * the identifier for the object 113 * @param allVersions 114 * <em>(optional)</em> If <code>true</code> then delete all 115 * versions of the document, otherwise delete only the document 116 * object specified (default is <code>true</code>) 117 */ 118 void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions, 119 ExtensionsData extension); 120 121 /** 122 * Applies a new ACL to an object. 123 * 124 * Since it is not possible to transmit an "add ACL" and a "remove ACL" via 125 * AtomPub, the merging has to be done the client side. The ACEs provided 126 * here is supposed to the new complete ACL. 127 * 128 * @param repositoryId 129 * the identifier for the repository 130 * @param objectId 131 * the identifier for the object 132 * @param aces 133 * the ACEs that should replace the current ACL of the object 134 * @param aclPropagation 135 * <em>(optional)</em> specifies how ACEs should be handled 136 * (default is {@link AclPropagation#REPOSITORYDETERMINED}) 137 */ 138 Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation); 139 140 /** 141 * Returns the {@link ObjectInfo} of the given object id or 142 * <code>null</code> if no object info exists. 143 * 144 * Only AtomPub requests will require object infos. 145 * 146 * @param repositoryId 147 * the identifier for the repository 148 * @param objectId 149 * the identifier for the object 150 */ 151 ObjectInfo getObjectInfo(String repositoryId, String objectId); 152 153 /** 154 * Signals that this object will not be used anymore and resources can 155 * released. 156 */ 157 void close(); 158 }