KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > publisher > serverimpl > resolving > ResolveDefinitionBuilder


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc 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 JavaDoc e) { logger.error("Error closing InputStream in finally.", e); }
55         }
56     }
57
58     public ResolveDefinition build(InputStream is, String JavaDoc 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 JavaDoc 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 JavaDoc expressionString = whens[i].getTest();
77             PredicateExpression expression = null;
78             try {
79                 expression = queryManager.parsePredicateExpression(expressionString);
80             } catch (QueryException e) {
81                 String JavaDoc message = "Error parsing expression in mapping file for \"" + pubReqSetName + "\": " + expression;
82                 throw new PublisherException(message, e);
83             }
84             String JavaDoc publisherRequestName = whens[i].getUse();
85             resolveDefinition.addRule(expressionString, expression, publisherRequestName);
86         }
87
88         return resolveDefinition;
89     }
90 }
91
Popular Tags