1 16 package org.outerj.daisy.books.store; 17 18 import org.outerj.daisy.books.store.impl.XmlUtil; 19 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 20 import org.outerx.daisy.x10Bookstoremeta.BookAclDocument; 21 import org.apache.xmlbeans.XmlOptions; 22 23 import java.io.InputStream ; 24 import java.io.Reader ; 25 26 29 public class BookAclBuilder { 30 public static BookAcl build(InputStream is) throws Exception { 31 try { 32 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 33 BookAclDocument aclDocument = BookAclDocument.Factory.parse(is, xmlOptions); 34 return build(aclDocument); 35 } finally { 36 if (is != null) 37 is.close(); 38 } 39 } 40 41 public static BookAcl build(Reader reader) throws Exception { 42 try { 43 BookAclDocument aclDocument = BookAclDocument.Factory.parse(reader); 44 return build(aclDocument); 45 } finally { 46 if (reader != null) 47 reader.close(); 48 } 49 } 50 51 public static BookAcl build(BookAclDocument aclDocument) throws Exception { 52 String errors = XmlUtil.validate(aclDocument); 53 if (errors != null) 54 throw new Exception ("The ACL XML is not valid according to its XML Schema, encountered errors: " + errors); 55 56 BookAclDocument.BookAcl.BookAclEntry[] entriesXml = aclDocument.getBookAcl().getBookAclEntryArray(); 57 BookAclEntry[] entries = new BookAclEntry[entriesXml.length]; 58 for (int i = 0; i < entriesXml.length; i++) { 59 BookAclSubjectType subjectType = BookAclSubjectType.fromString(entriesXml[i].getSubjectType().toString()); 60 BookAclActionType readPermission = BookAclActionType.fromString(entriesXml[i].getPermRead().toString()); 61 BookAclActionType managePermission = BookAclActionType.fromString(entriesXml[i].getPermManage().toString()); 62 entries[i] = new BookAclEntry(subjectType, entriesXml[i].getSubjectValue(), readPermission, managePermission); 63 } 64 65 return new BookAcl(entries); 66 } 67 } 68 | Popular Tags |