Coverage Report - org.boretti.drools.integration.drools4.implementation.DroolsSourceInterfaceImplementation
 
Classes in this File Line Coverage Branch Coverage Complexity
DroolsSourceInterfaceImplementation
70 %
28/40
80 %
8/10
7.5
 
 1  
 /*
 2  
     Drools4 Integration Helper
 3  
     Copyright (C) 2009  Mathieu Boretti mathieu.boretti@gmail.com
 4  
 
 5  
     This program is free software: you can redistribute it and/or modify
 6  
     it under the terms of the GNU General Public License as published by
 7  
     the Free Software Foundation, either version 3 of the License, or
 8  
     (at your option) any later version.
 9  
 
 10  
     This program is distributed in the hope that it will be useful,
 11  
     but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  
     GNU General Public License for more details.
 14  
 
 15  
     You should have received a copy of the GNU General Public License
 16  
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 17  
 
 18  
  */
 19  
 package org.boretti.drools.integration.drools4.implementation;
 20  
 
 21  
 import java.io.IOException;
 22  
 import java.io.InputStream;
 23  
 import java.io.InputStreamReader;
 24  
 
 25  
 import org.apache.log4j.Logger;
 26  
 import org.boretti.drools.integration.drools4.exceptions.ClassCastDroolsError;
 27  
 import org.boretti.drools.integration.drools4.exceptions.CompilationDroolsError;
 28  
 import org.boretti.drools.integration.drools4.exceptions.DroolsError;
 29  
 import org.boretti.drools.integration.drools4.exceptions.IODroolsError;
 30  
 import org.drools.RuleBase;
 31  
 import org.drools.RuleBaseFactory;
 32  
 import org.drools.compiler.PackageBuilder;
 33  
 import org.drools.compiler.PackageBuilderConfiguration;
 34  
 
 35  
 /**
 36  
  * @author mbo
 37  
  * 
 38  
  */
 39  
 class DroolsSourceInterfaceImplementation<T> extends
 40  
                 DroolsInterfaceImplementation<T> {
 41  
         
 42  4
         private static final Logger logger = Logger.getLogger(DroolsSourceInterfaceImplementation.class);
 43  
 
 44  
         public DroolsSourceInterfaceImplementation(Class<T> clazz,
 45  
                         String resourceName) {
 46  96
                 super(clazz, generateRuleBase(clazz, resourceName));
 47  80
         }
 48  
 
 49  
         private static final RuleBase generateRuleBase(Class<?> clazz,String resourceName) {
 50  96
                 RuleBase ruleBase = RuleBaseFactory.newRuleBase();
 51  
                 try {
 52  96
                         InputStream is = clazz.getResourceAsStream(resourceName);
 53  96
                         if (is==null) {
 54  8
                                 String msg = "IO Exception, resource not found";
 55  8
                                 logger.error(msg);
 56  8
                                 throw new IODroolsError(msg);
 57  
                         }
 58  88
                         InputStreamReader isr = new InputStreamReader(is);
 59  88
                         PackageBuilderConfiguration conf = new PackageBuilderConfiguration();
 60  88
                         conf.setClassLoader(clazz.getClassLoader());
 61  88
                         PackageBuilder builder = new PackageBuilder(conf);
 62  88
                         builder.addPackageFromDrl(isr);
 63  88
                         if (builder.getErrors()!=null) {
 64  88
                                 if (builder.getErrors().getErrors()!=null) {
 65  88
                                         if (builder.getErrors().getErrors().length>0) {
 66  8
                                                 StringBuffer sp = new StringBuffer();
 67  16
                                                 for(org.drools.compiler.DroolsError er :builder.getErrors().getErrors()) {
 68  8
                                                         logger.error("Drools compilation error :"+er.getMessage());
 69  8
                                                         sp.append(er.getMessage()+";\n");
 70  
                                                 }
 71  8
                                                 String msg = "Invalid Drools :"+sp.toString();
 72  8
                                                 logger.error(msg);
 73  8
                                                 throw new CompilationDroolsError(msg);
 74  
                                         }
 75  
                                 }
 76  
                         }
 77  80
                            isr.close();
 78  80
                            ruleBase.addPackage(builder.getPackage());
 79  0
                 } catch (IOException e) {
 80  0
                         String msg = "IO Exception "+e.getMessage();
 81  0
                         logger.error(msg);
 82  0
                         throw new IODroolsError(msg,e);
 83  0
                 } catch (ClassNotFoundException e) {
 84  0
                         String msg = "Class Cast Exception "+e.getMessage();
 85  0
                         logger.error(msg);
 86  0
                         throw new ClassCastDroolsError(msg,e);
 87  0
                 } catch (Exception e) {
 88  0
                         String msg = "Exception "+e.getMessage();
 89  0
                         logger.error(msg);
 90  0
                         throw new DroolsError(msg,e);
 91  80
                 }
 92  80
                 return ruleBase;
 93  
         }
 94  
 
 95  
 }