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.client.api;
20
21 import java.util.List;
22 import java.util.Map;
23
24 import org.apache.chemistry.opencmis.commons.data.Ace;
25 import org.apache.chemistry.opencmis.commons.data.ContentStream;
26 import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
27 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
28
29 /**
30 * CMIS folder interface.
31 *
32 * @cmis 1.0
33 */
34 public interface Folder extends FileableCmisObject, FolderProperties {
35
36 /**
37 * Returns the object type as a folder type.
38 *
39 * @return the folder type
40 *
41 * @throws ClassCastException
42 * if the object type is not a folder type
43 *
44 * @cmis 1.0
45 */
46 FolderType getFolderType();
47
48 // object service
49
50 /**
51 * Creates a new document in this folder.
52 *
53 * The stream in {@code contentStream} is consumed but not closed by this
54 * method.
55 *
56 * @return the new document object or {@code null} if the parameter
57 * {@code context} was set to {@code null}
58 *
59 * @cmis 1.0
60 */
61 Document createDocument(Map<String, ?> properties, ContentStream contentStream, VersioningState versioningState,
62 List<Policy> policies, List<Ace> addAces, List<Ace> removeAces, OperationContext context);
63
64 /**
65 * Creates a new document in this folder.
66 *
67 * The stream in {@code contentStream} is consumed but not closed by this
68 * method.
69 *
70 * @return the new document object
71 *
72 * @cmis 1.0
73 */
74 Document createDocument(Map<String, ?> properties, ContentStream contentStream, VersioningState versioningState);
75
76 /**
77 * Creates a new document from a source document in this folder.
78 *
79 * @return the new document object or {@code null} if the parameter
80 * {@code context} was set to {@code null}
81 *
82 * @cmis 1.0
83 */
84 Document createDocumentFromSource(ObjectId source, Map<String, ?> properties, VersioningState versioningState,
85 List<Policy> policies, List<Ace> addAces, List<Ace> removeAces, OperationContext context);
86
87 /**
88 * Creates a new document from a source document in this folder.
89 *
90 * @return the new document object
91 *
92 * @cmis 1.0
93 */
94 Document createDocumentFromSource(ObjectId source, Map<String, ?> properties, VersioningState versioningState);
95
96 /**
97 * Creates a new subfolder in this folder.
98 *
99 * @return the new folder object or {@code null} if the parameter
100 * {@code context} was set to {@code null}
101 *
102 * @cmis 1.0
103 */
104 Folder createFolder(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
105 OperationContext context);
106
107 /**
108 * Creates a new subfolder in this folder.
109 *
110 * @return the new folder object
111 *
112 * @cmis 1.0
113 */
114 Folder createFolder(Map<String, ?> properties);
115
116 /**
117 * Creates a new policy in this folder.
118 *
119 * @return the new policy object or {@code null} if the parameter
120 * {@code context} was set to {@code null}
121 *
122 * @cmis 1.0
123 */
124 Policy createPolicy(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
125 OperationContext context);
126
127 /**
128 * Creates a new item in this folder.
129 *
130 * @return the new item object
131 *
132 * @cmis 1.1
133 */
134 Item createItem(Map<String, ?> properties);
135
136 /**
137 * Creates a new item in this folder.
138 *
139 * @return the new item object or {@code null} if the parameter
140 * {@code context} was set to {@code null}
141 *
142 * @cmis 1.1
143 */
144 Item createItem(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
145 OperationContext context);
146
147 /**
148 * Creates a new policy in this folder.
149 *
150 * @return the new policy object
151 *
152 * @cmis 1.0
153 */
154 Policy createPolicy(Map<String, ?> properties);
155
156 /**
157 * Deletes this folder and all subfolders.
158 *
159 * @return a list of object IDs which failed to be deleted
160 *
161 * @cmis 1.0
162 */
163 List<String> deleteTree(boolean allversions, UnfileObject unfile, boolean continueOnFailure);
164
165 // navigation service
166
167 /**
168 * Gets the folder tree starting with this folder.
169 *
170 * @cmis 1.0
171 */
172 List<Tree<FileableCmisObject>> getFolderTree(int depth);
173
174 /**
175 * Gets the folder tree starting with this folder using the given
176 * {@link OperationContext}.
177 *
178 * @cmis 1.0
179 */
180 List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext context);
181
182 /**
183 * Gets the folder descendants starting with this folder.
184 *
185 * @cmis 1.0
186 */
187 List<Tree<FileableCmisObject>> getDescendants(int depth);
188
189 /**
190 * Gets the folder descendants starting with this folder using the given
191 * {@link OperationContext}.
192 *
193 * @cmis 1.0
194 */
195 List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext context);
196
197 /**
198 * Returns the children of this folder.
199 *
200 * @cmis 1.0
201 */
202 ItemIterable<CmisObject> getChildren();
203
204 /**
205 * Returns the children of this folder using the given
206 * {@link OperationContext}.
207 *
208 * @cmis 1.0
209 */
210 ItemIterable<CmisObject> getChildren(OperationContext context);
211
212 /**
213 * Returns if the folder is the root folder.
214 *
215 * @return {@code true} if the folder is the root folder, {@code false}
216 * otherwise
217 *
218 * @cmis 1.0
219 */
220 boolean isRootFolder();
221
222 /**
223 * Gets the parent folder object.
224 *
225 * @return the parent folder object or {@code null} if the folder is the
226 * root folder.
227 *
228 * @cmis 1.0
229 */
230 Folder getFolderParent();
231
232 /**
233 * Returns the path of the folder.
234 *
235 * @return the absolute folder path
236 *
237 * @cmis 1.0
238 */
239 String getPath();
240
241 /**
242 * Returns all checked out documents in this folder.
243 *
244 * @cmis 1.0
245 */
246 ItemIterable<Document> getCheckedOutDocs();
247
248 /**
249 * Returns all checked out documents in this folder using the given
250 * {@link OperationContext}.
251 *
252 * @cmis 1.0
253 */
254 ItemIterable<Document> getCheckedOutDocs(OperationContext context);
255 }