1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.apache.chemistry.opencmis.inmemory.storedobj.api; 20 21 import java.util.List; 22 import java.util.Map; 23 24 import org.apache.chemistry.opencmis.commons.data.Acl; 25 import org.apache.chemistry.opencmis.commons.data.ContentStream; 26 import org.apache.chemistry.opencmis.commons.data.PropertyData; 27 import org.apache.chemistry.opencmis.commons.enums.AclPropagation; 28 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; 29 import org.apache.chemistry.opencmis.commons.enums.VersioningState; 30 31 /** 32 * @author Jens 33 * 34 * This is the interface an implementation must provide to store any 35 * kind of CMIS objects. The ObjectStore is the topmost container of all 36 * CMIS object that get persisted. It is comparable to a file system, 37 * one object store exists per repository id. The object store allows 38 * access objects by an id. In addition a object can be retrieved by 39 * path. Typically the object store owns the list of object ids and 40 * maintains the path hierarchy. 41 */ 42 public interface ObjectStore { 43 44 /** 45 * Get the root folder of this object store 46 * 47 * @return the root folder of this store 48 */ 49 Folder getRootFolder(); 50 51 /** 52 * return an object by path. 53 * 54 * @param path 55 * the path to the object 56 * @return the stored object with this path 57 */ 58 StoredObject getObjectByPath(String path, String user); 59 60 /** 61 * get an object by its id 62 * 63 * @param folderId 64 * the id of the object 65 * @return the object identified by this id 66 */ 67 StoredObject getObjectById(String folderId); 68 69 /** 70 * Deletes an object from the store. For a folders the folder must be empty. 71 * 72 * @param objectId 73 * @param user 74 * @param allVersions is TRUE all version of the document are deleted, otherwise just this one 75 */ 76 void deleteObject(String objectId, Boolean allVersions, String user); 77 78 /** 79 * Create a document as initial step. The document is created but still 80 * temporary It is not yet persisted and does not have an id yet. After this 81 * call additional actions can take place (like assigning properties and a 82 * type) before it is persisted. 83 * 84 * @param name 85 * name of the document 86 * @param propMap 87 * map of properties 88 * @param user 89 * the user who creates the document 90 * @param folder 91 * the parent folder 92 * @param addACEs 93 * aces that are added 94 * @param removeACEs 95 * aces that are removed 96 * @return document object 97 */ 98 Document createDocument(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder, 99 Acl addACEs, Acl removeACEs); 100 101 102 /** 103 * Create a folder as initial step. The folder is created but still 104 * temporary It is not yet persisted and does not have an id yet. After this 105 * call additional actions can take place (like assigning properties and a 106 * type) before it is persisted. 107 * 108 * @param name 109 * name of the folder 110 * @param propMap 111 * map of properties 112 * @param user 113 * the user who creates the document 114 * @param folder 115 * the parent folder 116 * @param addACEs 117 * aces that are added 118 * @param removeACEs 119 * aces that are removed 120 * @return folder object 121 */ 122 Folder createFolder(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder, 123 Acl addACEs, Acl removeACEs); 124 125 /** 126 * Create a document that supports versions as initial step. The document is 127 * created but still temporary. It is not yet persisted and does not have an 128 * id yet. After this call additional actions can take place (like assigning 129 * properties and a type) before it is persisted. 130 * 131 * @param name 132 * name of the document 133 * * @param propMap 134 * map of properities 135 * @param user 136 * the user who creates the document 137 * @param folder 138 * the parent folder 139 * @param addACEs 140 * aces that are added 141 * @param removeACEs 142 * aces that are removed 143 * @return versioned document object 144 */ 145 DocumentVersion createVersionedDocument(String name, 146 Map<String, PropertyData<?>> propMap, String user, Folder folder, 147 Acl addACEs, Acl removeACEs, ContentStream contentStream, VersioningState versioningState); 148 149 /** 150 * Clear repository and remove all data. 151 */ 152 void clear(); 153 154 /** 155 * For statistics: return the number of objects contained in the system 156 * @return 157 * number of stored objects 158 */ 159 long getObjectCount(); 160 161 /** 162 * Create a relationship. The relationship is 163 * created but still temporary. It is not yet persisted and does not have an 164 * id yet. After this call additional actions can take place (like assigning 165 * properties and a type) before it is persisted. 166 * 167 * @param sourceObject 168 * source of the relationship 169 * @param targetObject 170 * target of the relationship 171 * @param propMap 172 * map of properities 173 * @param user 174 * the user who creates the document 175 * @param folder 176 * the parent folder 177 * @param addACEs 178 * aces that are added 179 * @param removeACEs 180 * aces that are removed 181 * @return versioned document object 182 */ 183 StoredObject createRelationship(StoredObject sourceObject, StoredObject targetObject, 184 Map<String, PropertyData<?>> propMap, 185 String user, Acl addACEs, Acl removeACEs); 186 187 /** 188 * Return a list of all documents that are checked out in the repository. 189 * 190 * @param orderBy 191 * orderBy specification according to CMIS spec. 192 * @param user 193 * user id of user calling 194 * @param includeRelationships 195 * if true include all relationships in the response 196 * @return list of checked out documents in the repository 197 */ 198 List<StoredObject> getCheckedOutDocuments(String orderBy, String user, IncludeRelationships includeRelationships); 199 200 /** 201 * Apply a ACLs by relative adding and removing a list of ACEs to/from an object 202 * 203 * @param so 204 * object where ACLs are applied 205 * @param addAces 206 * list of ACEs to be added 207 * @param removeAces 208 * list of ACEs to be removed 209 * @param aclPropagation 210 * enum value how to propagate ACLs to child objects 211 * @return 212 * new ACL of object 213 */ 214 Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces, AclPropagation aclPropagation, String principalId); 215 216 /** 217 * Apply a ACLs by setting a new list of ACEs to an object 218 * 219 * @param so 220 * object where ACLs are applied 221 * @param aces 222 * list of ACEs to be applied 223 * @param aclPropagation 224 * enum value how to propagate ACLs to child objects 225 * @return 226 * new ACL of object 227 */ 228 Acl applyAcl(StoredObject so, Acl aces, AclPropagation aclPropagation, String principalId); 229 230 /** 231 * Check if this store contains any object with the given type id 232 * 233 * @param typeId 234 * id of type definition to check 235 * @return 236 * true if at least one object in the store has the given type, false 237 * if no objects exist having this type 238 */ 239 boolean isTypeInUse(String typeId); 240 }