Package org.bladerunnerjs.aliasing.aliases

Source Code of org.bladerunnerjs.aliasing.aliases.AliasesReader

package org.bladerunnerjs.aliasing.aliases;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;

import javax.xml.stream.Location;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;

import org.bladerunnerjs.aliasing.AliasException;
import org.bladerunnerjs.aliasing.AliasNameIsTheSameAsTheClassException;
import org.bladerunnerjs.aliasing.AliasOverride;
import org.bladerunnerjs.aliasing.IncompleteAliasException;
import org.bladerunnerjs.aliasing.SchemaConverter;
import org.bladerunnerjs.aliasing.SchemaCreationException;
import org.bladerunnerjs.model.exception.request.ContentFileProcessingException;
import org.bladerunnerjs.utility.UnicodeReader;
import org.bladerunnerjs.utility.XmlStreamReaderFactory;
import org.codehaus.stax2.XMLStreamReader2;
import org.codehaus.stax2.validation.XMLValidationSchema;
import org.codehaus.stax2.validation.XMLValidationSchemaFactory;

import com.ctc.wstx.msv.RelaxNGSchemaFactory;

public class AliasesReader {
  private static final XMLValidationSchema aliasesSchema;
 
  static {
    XMLValidationSchemaFactory schemaFactory = new RelaxNGSchemaFactory();
   
    try
    {
      aliasesSchema = schemaFactory.createSchema(SchemaConverter.convertToRng("org/bladerunnerjs/model/aliasing/aliases.rnc"));
    }
    catch (XMLStreamException | SchemaCreationException e)
    {
      throw new RuntimeException(e);
    }
  }
 
  public static AliasesData read(File aliasesFile, String defaultFileCharacterEncoding) throws ContentFileProcessingException {
    AliasesData aliasesData = new AliasesData();
    aliasesData.aliasOverrides = new ArrayList<>();
    aliasesData.groupNames = new ArrayList<>();
   
    if(aliasesFile.exists()) {
      try(Reader fileReader = new UnicodeReader(aliasesFile, defaultFileCharacterEncoding)) {
        XMLStreamReader2 streamReader = XmlStreamReaderFactory.createReader(fileReader, aliasesSchema);
       
        while(streamReader.hasNext()) {
          if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT) {
            switch(streamReader.getLocalName()) {
              case "aliases":
                processAliases(streamReader, aliasesData);
                break;
             
              case "alias":
                processAlias(streamReader, aliasesData, aliasesFile);
                break;
            }
          }
         
          streamReader.next();
        }
      }
      catch (XMLStreamException e) {
        Location location = e.getLocation();
       
        throw new ContentFileProcessingException(aliasesFile, location.getLineNumber(), location.getColumnNumber(), e);
      }
      catch (IOException | AliasException e) {
        throw new ContentFileProcessingException(aliasesFile, e);
      }
    }
   
    return aliasesData;
  }
 
  private static void processAliases(XMLStreamReader2 streamReader, AliasesData aliasesData) {
    aliasesData.scenario = streamReader.getAttributeValue(null, "useScenario");
   
    String useGroups = streamReader.getAttributeValue(null, "useGroups");
    if(useGroups != null) {
      aliasesData.groupNames = Arrays.asList(useGroups.split(" "));
    }
  }
 
  private static void processAlias(XMLStreamReader2 streamReader, AliasesData aliasesData, File aliasesFile) throws AliasException {
    String aliasName = streamReader.getAttributeValue(null, "name");
    String aliasClass = streamReader.getAttributeValue(null, "class");
   
    if (aliasName.equals(aliasClass)) {
      throw new AliasNameIsTheSameAsTheClassException(aliasesFile, aliasName);
    }
   
    if((aliasClass == null) || (aliasClass.equals(""))) {
      throw new IncompleteAliasException(aliasesFile, aliasName);
    }
   
    aliasesData.aliasOverrides.add(new AliasOverride(aliasName, aliasClass));
  }
}
TOP

Related Classes of org.bladerunnerjs.aliasing.aliases.AliasesReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.