001: /*
002: * Copyright 2004 Outerthought bvba and Schaubroeck nv
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.outerj.daisy.repository.test;
017:
018: import org.outerj.daisy.repository.*;
019: import org.outerj.daisy.repository.acl.*;
020: import org.outerj.daisy.repository.schema.RepositorySchema;
021: import org.outerj.daisy.repository.schema.FieldType;
022: import org.outerj.daisy.repository.schema.PartType;
023: import org.outerj.daisy.repository.schema.DocumentType;
024: import org.outerj.daisy.repository.user.UserManager;
025: import org.outerj.daisy.repository.user.Role;
026: import org.outerj.daisy.repository.user.User;
027:
028: import java.util.GregorianCalendar;
029: import java.math.BigDecimal;
030:
031: public class TestContentCreator {
032: public void run(RepositoryManager repositoryManager)
033: throws Exception {
034: Repository testuserRepository = repositoryManager
035: .getRepository(new Credentials("testuser", "testuser"));
036: testuserRepository.switchRole(Role.ADMINISTRATOR);
037:
038: // Create a role and two users
039: UserManager userManger = testuserRepository.getUserManager();
040: Role role = userManger.getRole("User", false);
041:
042: User user1 = userManger.createUser("user1");
043: user1.addToRole(role);
044: user1.setDefaultRole(role);
045: user1.setFirstName("User1First");
046: user1.setLastName("User1Last");
047: user1.setPassword("user1");
048: user1.save();
049:
050: User user2 = userManger.createUser("user2");
051: user2.addToRole(role);
052: user2.setDefaultRole(role);
053: user2.setFirstName("User2");
054: user2.setLastName("User2Last");
055: user2.setPassword("user2");
056: user2.save();
057:
058: // Create two document types
059: RepositorySchema schema = testuserRepository
060: .getRepositorySchema();
061:
062: FieldType fieldType1 = schema.createFieldType("field1",
063: ValueType.STRING);
064: fieldType1.save();
065: FieldType fieldType2 = schema.createFieldType("field2",
066: ValueType.LONG);
067: fieldType2.setAclAllowed(true);
068: fieldType2.save();
069:
070: PartType partType1 = schema.createPartType("part1", "text/xml");
071: partType1.setDaisyHtml(true);
072: partType1.save();
073:
074: DocumentType documentType1 = schema
075: .createDocumentType("doctype1");
076: documentType1.addFieldType(fieldType1, false);
077: documentType1.addFieldType(fieldType2, false);
078: documentType1.addPartType(partType1, false);
079: documentType1.save();
080:
081: DocumentType documentType2 = schema
082: .createDocumentType("doctype2");
083: documentType2.addFieldType(fieldType1, false);
084: documentType2.addFieldType(fieldType2, false);
085: documentType2.addPartType(partType1, false);
086: documentType2.save();
087:
088: // Create two collections
089: CollectionManager collectionManager = testuserRepository
090: .getCollectionManager();
091: DocumentCollection collection1 = collectionManager
092: .createCollection("collection1");
093: collection1.save();
094: DocumentCollection collection2 = collectionManager
095: .createCollection("collection2");
096: collection2.save();
097:
098: // Create the ACL
099:
100: // everyone can do everything, except:
101: // documentType = 'doctype2' -> user1 denied
102: // collection = 'collection2' -> user2 denied except if fieldType2 = 34
103:
104: AccessManager accessManager = testuserRepository
105: .getAccessManager();
106: Acl acl = accessManager.getStagingAcl();
107:
108: AclObject aclObject;
109: AclEntry aclEntry;
110:
111: aclObject = acl.createNewObject("true");
112: aclEntry = aclObject
113: .createNewEntry(AclSubjectType.EVERYONE, -1);
114: aclEntry.set(AclPermission.READ, AclActionType.GRANT);
115: aclEntry.set(AclPermission.WRITE, AclActionType.GRANT);
116: aclEntry.set(AclPermission.PUBLISH, AclActionType.GRANT);
117: aclEntry.set(AclPermission.DELETE, AclActionType.GRANT);
118: aclObject.add(aclEntry);
119: acl.add(aclObject);
120:
121: aclObject = acl.createNewObject("documentType = 'doctype2'");
122: aclEntry = aclObject.createNewEntry(AclSubjectType.USER, user1
123: .getId());
124: aclEntry.set(AclPermission.READ, AclActionType.DENY);
125: aclEntry.set(AclPermission.WRITE, AclActionType.DENY);
126: aclEntry.set(AclPermission.PUBLISH, AclActionType.DENY);
127: aclEntry.set(AclPermission.DELETE, AclActionType.DENY);
128: aclObject.add(aclEntry);
129: acl.add(aclObject);
130:
131: aclObject = acl
132: .createNewObject("InCollection('collection2') and ($field2 != 34 or $field2 is null)");
133: aclEntry = aclObject.createNewEntry(AclSubjectType.USER, user2
134: .getId());
135: aclEntry.set(AclPermission.READ, AclActionType.DENY);
136: aclEntry.set(AclPermission.WRITE, AclActionType.DENY);
137: aclEntry.set(AclPermission.PUBLISH, AclActionType.DENY);
138: aclEntry.set(AclPermission.DELETE, AclActionType.DENY);
139: aclObject.add(aclEntry);
140: acl.add(aclObject);
141:
142: acl.save();
143: accessManager.copyStagingToLive();
144:
145: // Create some documents as user1
146: Repository user1Repository = repositoryManager
147: .getRepository(new Credentials("user1", "user1"));
148:
149: Document document1 = user1Repository.createDocument(
150: "Document1", documentType1.getId());
151: String searchableContent = "<html><body>Effect van de langtermijnrente op het coca cola gebruik bij verzamelaars van postzegels.</body></html>";
152: document1.setPart(partType1.getId(), "text/xml",
153: searchableContent.getBytes("UTF-8"));
154: document1.addToCollection(collection1);
155: document1.save();
156:
157: Document document2 = user1Repository.createDocument(
158: "Document2", documentType1.getId());
159: String contentWithLink = "<html><body><a href='daisy:"
160: + document1.getId() + "'/></body></html>";
161: document2.setPart(partType1.getId(), "text/xml",
162: contentWithLink.getBytes("UTF-8"));
163: document2.addToCollection(collection1);
164: document2.save();
165:
166: Document document3 = user1Repository.createDocument(
167: "Document3", documentType1.getId());
168: document3.setPrivate(true);
169: document3.addToCollection(collection1);
170: document3.save();
171:
172: Document document4 = user1Repository.createDocument(
173: "Document4", documentType1.getId());
174: document4.setField("field1", "something-X");
175: document4.addToCollection(collection2);
176: document4.save();
177:
178: // Create some documents as user2
179: Repository user2Repository = repositoryManager
180: .getRepository(new Credentials("user2", "user2"));
181:
182: Document document5 = user2Repository.createDocument(
183: "Document5", documentType1.getId());
184: document5.setField("field1", "something-X");
185: document5.addToCollection(collection1);
186: document5.save();
187:
188: Document document6 = user2Repository.createDocument(
189: "Document6", documentType2.getId());
190: document6.setField("field2", new Long(34));
191: document6.addToCollection(collection2);
192: document6.save();
193:
194: // Make a documetn that belongs to two collections
195: DocumentCollection collection3 = collectionManager
196: .createCollection("collection3");
197: collection3.save();
198: DocumentCollection collection4 = collectionManager
199: .createCollection("collection4");
200: collection4.save();
201:
202: Document document7 = user2Repository.createDocument(
203: "Document7", documentType1.getId());
204: document7.addToCollection(collection3);
205: document7.addToCollection(collection4);
206: document7.save();
207:
208: //
209: // Make some documents / document type that uses the various data types
210: //
211:
212: FieldType stringField1 = schema.createFieldType("StringField1",
213: ValueType.STRING);
214: stringField1.save();
215: FieldType dateField1 = schema.createFieldType("DateField1",
216: ValueType.DATE);
217: dateField1.save();
218: FieldType dateTimeField1 = schema.createFieldType(
219: "DateTimeField1", ValueType.DATETIME);
220: dateTimeField1.save();
221: FieldType decimalField1 = schema.createFieldType(
222: "DecimalField1", ValueType.DECIMAL);
223: decimalField1.save();
224: FieldType doubleField1 = schema.createFieldType("DoubleField1",
225: ValueType.DOUBLE);
226: doubleField1.save();
227: FieldType longField1 = schema.createFieldType("LongField1",
228: ValueType.LONG);
229: longField1.save();
230: FieldType linkField1 = schema.createFieldType("LinkField1",
231: ValueType.LINK);
232: linkField1.save();
233: FieldType linkField2 = schema.createFieldType("LinkField2",
234: ValueType.LINK, true);
235: linkField2.save();
236:
237: DocumentType documentType3 = schema
238: .createDocumentType("doctype3");
239: documentType3.addFieldType(stringField1, false);
240: documentType3.addFieldType(dateField1, false);
241: documentType3.addFieldType(dateTimeField1, false);
242: documentType3.addFieldType(decimalField1, false);
243: documentType3.addFieldType(doubleField1, false);
244: documentType3.addFieldType(longField1, false);
245: documentType3.addFieldType(linkField1, false);
246: documentType3.addFieldType(linkField2, false);
247: documentType3.save();
248:
249: User user3 = userManger.createUser("user3");
250: user3.setPassword("user3");
251: user3.setFirstName("User3First");
252: user3.setLastName("User3Last");
253: user3.addToRole(role);
254: user3.setDefaultRole(role);
255: user3.save();
256:
257: DocumentCollection collection5 = collectionManager
258: .createCollection("collection5");
259: collection5.save();
260:
261: Repository user3Repository = repositoryManager
262: .getRepository(new Credentials("user3", "user3"));
263:
264: Document document8 = user3Repository.createDocument(
265: "Document8", documentType3.getId());
266: document8.setField(stringField1.getId(), "hello");
267: GregorianCalendar calendar = new GregorianCalendar(2004, 11, 6,
268: 0, 0, 0); // month is zero-based
269: document8.setField(dateField1.getId(), calendar.getTime());
270: calendar = new GregorianCalendar(2004, 9, 14, 12, 13, 14);
271: document8.setField(dateTimeField1.getId(), calendar.getTime());
272: document8.setField(decimalField1.getId(), new BigDecimal(
273: 678.94321));
274: document8.setField(doubleField1.getId(), new Double(123.456d));
275: document8.setField(longField1.getId(), new Long(1978L));
276: document8.setField(linkField1.getId(),
277: new VariantKey("2", 1, 1));
278: document8.setField(linkField2.getId(), new VariantKey[] {
279: new VariantKey("2", 1, 1),
280: new VariantKey("666", -1, -1) });
281: document8.addToCollection(collection5);
282: document8.save();
283:
284: Document document9 = user3Repository.createDocument(
285: "Document9", documentType3.getId());
286: calendar = new GregorianCalendar(2004, 11, 10, 0, 0, 0); // month is zero-based
287: document9.setField(dateField1.getId(), calendar.getTime());
288: document9.addToCollection(collection5);
289: document9.save();
290:
291: Document document10 = user3Repository.createDocument(
292: "Document10", documentType3.getId());
293: document10.setField(longField1.getId(), new Long(1985L));
294: document10.addToCollection(collection5);
295: document10.save();
296:
297: Document document11 = user3Repository.createDocument(
298: "Document11", documentType3.getId());
299: document11.setField(stringField1.getId(), "another hello");
300: document11.setField(longField1.getId(), new Long(1990L));
301: document11.addToCollection(collection5);
302: document11.setCustomField("xyz", "123");
303: document11.save();
304:
305: Document document12 = user3Repository.createDocument(
306: "Document12", documentType3.getId());
307: document12.save();
308: document12.setNewVersionState(VersionState.DRAFT);
309: document12.setField(stringField1.getId(), "boe");
310: document12.save();
311:
312: Document document13 = user3Repository.createDocument(
313: "Document13", documentType3.getId());
314: document13.setField(stringField1.getId(), "ba");
315: document13.setRetired(true);
316: document13.save();
317:
318: }
319:
320: public void createAdditionalDocumentsForHierarchicalFieldTests(
321: RepositoryManager repositoryManager) throws Exception {
322: Repository repository = repositoryManager
323: .getRepository(new Credentials("testuser", "testuser"));
324: repository.switchRole(Role.ADMINISTRATOR);
325: RepositorySchema schema = repository.getRepositorySchema();
326:
327: FieldType hierField1 = schema.createFieldType("HierField1",
328: ValueType.STRING, false, true);
329: hierField1.save();
330: FieldType hierField2 = schema.createFieldType("HierField2",
331: ValueType.LINK, true, true);
332: hierField2.save();
333:
334: DocumentType documentType = schema
335: .createDocumentType("HierTestDocType");
336: documentType.addFieldType(hierField1, false);
337: documentType.addFieldType(hierField2, false);
338: documentType.save();
339:
340: {
341: Document document = repository.createDocument("Document20",
342: documentType.getId());
343: document.setField("HierField1", new HierarchyPath(
344: new Object[] { "Aaa", "Bee", "Cee", "Dee" }));
345: document.save();
346: }
347:
348: {
349: Document document = repository.createDocument("Document21",
350: documentType.getId());
351: document.setField("HierField1", new HierarchyPath(
352: new Object[] { "Aaa", "Bee", "Cee", "Dee" }));
353: document.save();
354: }
355:
356: {
357: Document document = repository.createDocument("Document22",
358: documentType.getId());
359: document.setField("HierField1", new HierarchyPath(
360: new Object[] { "Aaa", "Bee", "Cee" }));
361: document.save();
362: }
363:
364: {
365: Document document = repository.createDocument("Document23",
366: documentType.getId());
367: document.setField("HierField1", new HierarchyPath(
368: new Object[] { "X", "Y" }));
369: document.save();
370: }
371:
372: {
373: Document document = repository.createDocument("Document30",
374: documentType.getId());
375: document.setField("HierField2", new Object[] {
376: new HierarchyPath(new Object[] {
377: new VariantKey("1000-DSYTEST", 1, 1),
378: new VariantKey("1001-DSYTEST", 1, 1) }),
379: new HierarchyPath(new Object[] { new VariantKey(
380: "1002-DSYTEST", 1, 1) }) });
381: document.save();
382: }
383:
384: {
385: Document document = repository.createDocument("Document30",
386: documentType.getId());
387: document.setField("HierField2", new Object[] {
388: new HierarchyPath(new Object[] {
389: new VariantKey("1005-DSYTEST", 1, 1),
390: new VariantKey("1006-DSYTEST", 1, 1) }),
391: new HierarchyPath(new Object[] { new VariantKey(
392: "1007-DSYTEST", 1, 1) }) });
393: document.save();
394: }
395:
396: {
397: Document document = repository.createDocument("Document30",
398: documentType.getId());
399: document.setField("HierField2", new Object[] {
400: new HierarchyPath(new Object[] {
401: new VariantKey("1005-DSYTEST", 1, 1),
402: new VariantKey("1006-DSYTEST", 1, 1) }),
403: new HierarchyPath(new Object[] { new VariantKey(
404: "1007-DSYTEST", 1, 1) }),
405: new HierarchyPath(new Object[] {
406: new VariantKey("1009-DSYTEST", 1, 1),
407: new VariantKey("1010-DSYTEST", 1, 1),
408: new VariantKey("1009-DSYTEST", 1, 1) }) });
409: document.save();
410: }
411: }
412:
413: }
|