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.math.BigInteger; 22 import java.util.GregorianCalendar; 23 import java.util.List; 24 import java.util.Map; 25 26 import org.apache.chemistry.opencmis.commons.data.Acl; 27 import org.apache.chemistry.opencmis.commons.data.AllowableActions; 28 import org.apache.chemistry.opencmis.commons.data.ExtensionsData; 29 import org.apache.chemistry.opencmis.commons.data.ObjectList; 30 import org.apache.chemistry.opencmis.commons.data.PropertyData; 31 import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection; 32 import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory; 33 34 /** 35 * Stored Object interface is common part that all objects handled by CMIS 36 * (Documents, Folders, Relations, Policies, ACLs) share. Objects that implement 37 * this interface are always concrete and can live in the object store. A stored 38 * object always has an id, a name and properties. 39 * 40 * @author Jens 41 */ 42 43 public interface StoredObject { 44 45 /** 46 * Retrieve the id of this object. 47 * 48 * @return id of this object 49 */ 50 String getId(); 51 52 /** 53 * Retrieve the name of this object 54 * 55 * @return name of this object 56 */ 57 String getName(); 58 59 /** 60 * Set the name of this document. This method does not persist the object. 61 * 62 * @param name 63 * name that is assigned to this object 64 */ 65 void setName(String name); 66 67 /** 68 * Retrieve the type of this document. 69 * 70 * @return Id of the type identifying the type of this object 71 */ 72 String getTypeId(); 73 74 /** 75 * Set the type of this document. This method does not persist the object. 76 * 77 * @param type 78 * id of the type this object gets assigned. 79 */ 80 void setTypeId(String type); 81 82 /** 83 * Retrieve the user who created the document 84 * 85 * @return user who created the document. 86 */ 87 String getCreatedBy(); 88 89 /** 90 * Set the user who last modified the object. This method does not persist 91 * the object. 92 * 93 * @param createdBy 94 * user who last modified the document 95 */ 96 void setCreatedBy(String createdBy); 97 98 /** 99 * Retrieve the user who last modified the document 100 * 101 * @return user who last modified the document. 102 */ 103 String getModifiedBy(); 104 105 /** 106 * Set the user who last modified the object. This method does not persist 107 * the object. 108 * 109 * @param modifiedBy 110 * user who last modified the document 111 */ 112 void setModifiedBy(String modifiedBy); 113 114 GregorianCalendar getCreatedAt(); 115 116 /** 117 * Assign date and time when the object was created. Usually you should not 118 * call this method externally. This method does not persist the object. 119 * 120 * @param createdAt 121 * date the object was created 122 */ 123 void setCreatedAt(GregorianCalendar createdAt); 124 125 /** 126 * Retrieve date and time when the object was last modified. 127 * 128 * @return date the object was last modified 129 */ 130 GregorianCalendar getModifiedAt(); 131 132 /** 133 * Assign current date and time when the object was last modified. Usually 134 * you should not call this method externally. This method does not persist 135 * the object. 136 */ 137 void setModifiedAtNow(); 138 139 /** 140 * Get the repository id of this object where the object is stored. 141 * 142 * @return 143 */ 144 String getRepositoryId(); 145 146 /** 147 * Assign a repository where this object will be stored. This method does 148 * not persist the object. 149 * 150 * @param repositoryId 151 * id of the repository 152 */ 153 void setRepositoryId(String repositoryId); 154 155 /** 156 * Retrieve the list of properties 157 * 158 * @return 159 */ 160 Map<String, PropertyData<?>> getProperties(); 161 162 /** 163 * Assign the properties to an object. This method does not persist the 164 * object. 165 * 166 * @param props 167 * properties to be assigned 168 */ 169 void setProperties(Map<String, PropertyData<?>> props); 170 171 /** 172 * Retrieve a change token uniquely identifying the state of the object when 173 * it was persisted (used for optimistic locking) 174 * 175 * @return String identifying the change token 176 */ 177 String getChangeToken(); 178 179 /** 180 * Persist the object so that it can be later retrieved by its id. Assign an 181 * id to the object 182 */ 183 void persist(); 184 185 /** 186 * Rename an object 187 * 188 * @param newName 189 * the new name of the object 190 */ 191 void rename(String newName); 192 193 /** 194 * Create all system base properties that need to be stored with every 195 * object in the repository This method is called when a new object is 196 * created to record all of the capturing data like the creation time, 197 * creator etc. 198 * 199 * @param properties 200 * The properties passed by the client, containing, name, type, 201 * etc 202 * @param user 203 * The user creating the document 204 */ 205 void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user); 206 207 /** 208 * Update all system base properties that need to be stored with every 209 * object in the repository This method is called when an object is is 210 * updated to record all of the capturing data like the modification time, 211 * updating user etc. 212 * 213 * @param properties 214 * The properties passed by the client, containing, name, type, 215 * etc 216 * @param user 217 * The user creating the document 218 */ 219 void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user); 220 221 void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory, 222 List<String> requestedIds); 223 224 /** 225 * Set all properties which are not system properties. These are the 226 * properties as defined in Type system definition. This method is called 227 * when an object is created or updated. The implementation must ignore the 228 * system properties. 229 * 230 * @param properties 231 * Set of properties as set by the client, including system 232 * parameters 233 */ 234 void setCustomProperties(Map<String, PropertyData<?>> properties); 235 236 /** 237 * get the Acl of the stored object 238 */ 239 Acl getAcl(); 240 241 /** 242 * get the relationships of the object 243 * 244 * @param includeSubRelationshipTypes 245 * if true, relationships of a sub type will be returned as well 246 * @param relationshipDirection 247 * whether relationships where the object is the source, or the target or all 248 * are returned 249 * @param typeId 250 * the type of the relationship, may be null 251 * @param filter 252 * a property filter, "*" means all properties 253 * @param includeAllowableActions 254 * whether allowable actions should be returned 255 * @param maxItems 256 * @param skipCount 257 * @param extension 258 * @param user 259 * the id of the user calling the method 260 */ 261 ObjectList getObjectRelationships( 262 Boolean includeSubRelationshipTypes, 263 RelationshipDirection relationshipDirection, String typeId, 264 String filter, Boolean includeAllowableActions, 265 BigInteger maxItems, BigInteger skipCount, ExtensionsData extension, String user); 266 267 /* 268 * get the allowable actions of the object 269 */ 270 AllowableActions getAllowableActions(String user); 271 272 }