Coverage Report - org.jtheque.primary.utils.web.analyzers.generic.GenericGenerator
 
Classes in this File Line Coverage Branch Coverage Complexity
GenericGenerator
0 %
0/49
0 %
0/18
2.375
 
 1  
 package org.jtheque.primary.utils.web.analyzers.generic;
 2  
 
 3  
 /*
 4  
  * This file is part of JTheque.
 5  
  *
 6  
  * JTheque is free software: you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation, either version 3 of the License.
 9  
  *
 10  
  * JTheque 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 JTheque.  If not, see <http://www.gnu.org/licenses/>.
 17  
  */
 18  
 
 19  
 import org.jdom.Element;
 20  
 import org.jtheque.core.managers.Managers;
 21  
 import org.jtheque.core.managers.log.ILoggingManager;
 22  
 import org.jtheque.core.utils.file.XMLException;
 23  
 import org.jtheque.core.utils.file.XMLReader;
 24  
 import org.jtheque.primary.utils.web.analyzers.generic.field.FieldGetter;
 25  
 import org.jtheque.primary.utils.web.analyzers.generic.field.FieldGetterFactory;
 26  
 import org.jtheque.primary.utils.web.analyzers.generic.operation.ScannerPossessor;
 27  
 import org.jtheque.primary.utils.web.analyzers.generic.transform.Transformer;
 28  
 import org.jtheque.primary.utils.web.analyzers.generic.transform.TransformerFactory;
 29  
 import org.jtheque.primary.utils.web.analyzers.generic.value.ValueGetterFactory;
 30  
 import org.jtheque.utils.io.FileUtils;
 31  
 
 32  
 import java.io.File;
 33  
 import java.util.ArrayList;
 34  
 import java.util.Collection;
 35  
 
 36  
 /**
 37  
  * A generator for generic film analyzer. This class manage the generation of parser from the xml definition file.
 38  
  *
 39  
  * @author Baptiste Wicht
 40  
  */
 41  
 public final class GenericGenerator {
 42  
         private final Collection<FieldGetter> getters;
 43  
 
 44  
         private final Pages pages;
 45  
 
 46  
         private XMLReader reader;
 47  
 
 48  
         /**
 49  
          * Construct a new GenericGenerator for an analyzer.
 50  
          *
 51  
          * @param analyzer The analyzer for which we generate.
 52  
          */
 53  
         public GenericGenerator(ScannerPossessor analyzer){
 54  0
                 super();
 55  
 
 56  0
                 ValueGetterFactory.setScannerPossessor(analyzer);
 57  
 
 58  0
                 getters = new ArrayList<FieldGetter>(10);
 59  0
                 pages = new Pages();
 60  0
         }
 61  
 
 62  
         /**
 63  
          * Generate the parser.
 64  
          *
 65  
          * @param path The path to the XML File in the current ClassLoader.
 66  
          */
 67  
         public void generate(String path){
 68  
                 try {
 69  0
                         reader = new XMLReader();
 70  0
                         reader.openURL(getClass().getClassLoader().getResource(path));
 71  
 
 72  0
                         init();
 73  0
                 } catch (XMLException e){
 74  0
                         Managers.getManager(ILoggingManager.class).getLogger(getClass()).error(e);
 75  
                 } finally {
 76  0
                         FileUtils.close(reader);
 77  0
                 }
 78  0
         }
 79  
 
 80  
         /**
 81  
          * Generate from a file.
 82  
          *
 83  
          * @param file The file to generate from.
 84  
          */
 85  
         public void generate(File file){
 86  
                 try {
 87  0
                         reader = new XMLReader();
 88  0
                         reader.openFile(file);
 89  
 
 90  0
                         init();
 91  0
                 } catch (XMLException e){
 92  0
                         Managers.getManager(ILoggingManager.class).getLogger(getClass()).error(e);
 93  
                 } finally {
 94  0
                         FileUtils.close(reader);
 95  0
                 }
 96  0
         }
 97  
 
 98  
         /**
 99  
          * Init the parser from the root of the XML File.
 100  
          *
 101  
          * @throws XMLException If an errors occurs during the parse of the XML Elements.
 102  
          */
 103  
         private void init() throws XMLException{
 104  0
                 initPages();
 105  
 
 106  0
                 for (Element currentNode : reader.getNodes("getter", reader.getRootElement())){
 107  0
                         getters.add(FieldGetterFactory.getFieldGetter(currentNode, reader));
 108  
                 }
 109  0
         }
 110  
 
 111  
         /**
 112  
          * Init the different pages.
 113  
          *
 114  
          * @throws XMLException Thrown if an errors occurs during the xml reading process.
 115  
          */
 116  
         private void initPages() throws XMLException{
 117  0
                 for (Element currentNode : reader.getNodes("pages/*", reader.getRootElement())){
 118  0
                         if ("films".equals(currentNode.getName())){
 119  0
                                 pages.setFilmsPage(getPage(currentNode));
 120  0
                         } else if ("actors".equals(currentNode.getName())){
 121  0
                                 pages.setActorsPage(getPage(currentNode));
 122  0
                         } else if ("results".equals(currentNode.getName())){
 123  0
                                 pages.setResultsPage(getPage(currentNode));
 124  
                         }
 125  
                 }
 126  0
         }
 127  
 
 128  
         /**
 129  
          * Return the page of the XML Element.
 130  
          *
 131  
          * @param element The element to search in.
 132  
          *
 133  
          * @return The Page corresponding to the element.
 134  
          *
 135  
          * @throws XMLException Thrown if an errors occurs during the xml reading process.
 136  
          */
 137  
         private Page getPage(Element element) throws XMLException{
 138  0
                 Page page = new Page();
 139  
 
 140  0
                 page.setUrl(reader.readString("url", element));
 141  0
                 page.setTransformers(new ArrayList<Transformer>(5));
 142  
 
 143  0
                 for (Element n : reader.getNodes("transformers/*", element)){
 144  0
                         Transformer transformer = TransformerFactory.getTransformer(n, reader);
 145  
 
 146  0
                         if (transformer != null){
 147  0
                                 page.getTransformers().add(transformer);
 148  
                         }
 149  0
                 }
 150  
 
 151  0
                 return page;
 152  
         }
 153  
 
 154  
         /**
 155  
          * Return the FieldGetter with the specific name.
 156  
          *
 157  
          * @param name The name of the searched getter.
 158  
          *
 159  
          * @return The FieldGetter or null if there is no FieldGetter with this name.
 160  
          */
 161  
         public FieldGetter getFieldGetter(String name){
 162  0
                 FieldGetter getter = null;
 163  
 
 164  0
                 for (FieldGetter g : getters){
 165  0
                         if (name.equals(g.getFieldName())){
 166  0
                                 getter = g;
 167  0
                                 break;
 168  
                         }
 169  
                 }
 170  
 
 171  0
                 return getter;
 172  
         }
 173  
 
 174  
         /**
 175  
          * Return all the pages of the generator.
 176  
          *
 177  
          * @return The pages of the generator.
 178  
          */
 179  
         public Pages getPages(){
 180  0
                 return pages;
 181  
         }
 182  
 }