1 16 package org.outerj.daisy.publisher.serverimpl.resolving; 17 18 import org.outerj.daisy.publisher.PublisherException; 19 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 20 import org.outerj.daisy.repository.Repository; 21 import org.outerj.daisy.repository.query.QueryManager; 22 import org.outerj.daisy.repository.query.PredicateExpression; 23 import org.outerj.daisy.repository.query.QueryException; 24 import org.outerx.daisy.x10Publishermapping.PublisherMappingDocument; 25 import org.apache.xmlbeans.XmlOptions; 26 import org.apache.avalon.framework.logger.Logger; 27 28 import java.io.*; 29 30 public class ResolveDefinitionBuilder { 31 private Repository repository; 32 private Logger logger; 33 34 public ResolveDefinitionBuilder(Repository repository, Logger logger) { 35 this.repository = repository; 36 this.logger = logger; 37 } 38 39 public ResolveDefinition build(File mappingFile, String pubReqSetName) throws PublisherException { 40 if (!mappingFile.exists()) { 41 throw new PublisherException("Mapping file does not exist at " + mappingFile.getAbsolutePath()); 42 } 43 44 InputStream is = null; 45 try { 46 try { 47 is = new BufferedInputStream(new FileInputStream(mappingFile)); 48 } catch (FileNotFoundException e) { 49 throw new PublisherException("Error accessing publisher request mapping.", e); 50 } 51 return build(is, pubReqSetName); 52 } finally { 53 if (is != null) 54 try { is.close(); } catch (Exception e) { logger.error("Error closing InputStream in finally.", e); } 55 } 56 } 57 58 public ResolveDefinition build(InputStream is, String pubReqSetName) throws PublisherException { 59 PublisherMappingDocument mappingDocument; 60 try { 61 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 62 mappingDocument = PublisherMappingDocument.Factory.parse(is, xmlOptions); 63 } catch (Exception e) { 64 throw new PublisherException("Error parsing publisher request mapping.", e); 65 } 66 67 if (!mappingDocument.validate()) { 68 throw new PublisherException("Mapping file for \"" + pubReqSetName + "\" does not conform to schema."); 69 } 70 71 ResolveDefinition resolveDefinition = new ResolveDefinition(); 72 73 QueryManager queryManager = repository.getQueryManager(); 74 PublisherMappingDocument.PublisherMapping.When[] whens = mappingDocument.getPublisherMapping().getWhenArray(); 75 for (int i = 0; i < whens.length; i++) { 76 String expressionString = whens[i].getTest(); 77 PredicateExpression expression = null; 78 try { 79 expression = queryManager.parsePredicateExpression(expressionString); 80 } catch (QueryException e) { 81 String message = "Error parsing expression in mapping file for \"" + pubReqSetName + "\": " + expression; 82 throw new PublisherException(message, e); 83 } 84 String publisherRequestName = whens[i].getUse(); 85 resolveDefinition.addRule(expressionString, expression, publisherRequestName); 86 } 87 88 return resolveDefinition; 89 } 90 } 91 | Popular Tags |