Package com.linkedin.databus2.ggParser.staxparser

Source Code of com.linkedin.databus2.ggParser.staxparser.StaxBuilder

package com.linkedin.databus2.ggParser.staxparser;


    /*
   *
   *  *
   *  * Copyright 2013 LinkedIn Corp. All rights reserved
   *  *
   *  * Licensed under the Apache License, Version 2.0 (the "License");
   *  * you may not use this file except in compliance with the License.
   *  * You may obtain a copy of the License at
   *  *
   *  *   http://www.apache.org/licenses/LICENSE-2.0
   *  *
   *  * Unless required by applicable law or agreed to in writing,
   *  * software distributed under the License is distributed on an
   *  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   *  * KIND, either express or implied.  See the License for the
   *  * specific language governing permissions and limitations
   *  * under the License.
   *
   */

import com.linkedin.databus2.ggParser.XmlStateMachine.TransactionSuccessCallBack;
import com.linkedin.databus2.core.DatabusException;
import com.linkedin.databus2.relay.config.LogicalSourceStaticConfig;
import com.linkedin.databus2.relay.config.PhysicalSourceStaticConfig;
import com.linkedin.databus2.relay.config.ReplicationBitSetterStaticConfig;
import com.linkedin.databus2.relay.config.ReplicationBitSetterStaticConfig.MissingValueBehavior;
import com.linkedin.databus2.schemas.SchemaRegistryService;
import java.io.InputStream;
import java.util.HashMap;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.apache.log4j.Logger;


public class StaxBuilder
{
  private Logger _log;
  private InputStream _inputStream;
  private SchemaRegistryService _schemaRegistry;
  private HashMap<String, String> _tableToNamespace;
  private HashMap<String, Integer> _tableToSourceId;
  private final boolean _errorOnMissingFields;
  TransactionSuccessCallBack _transactionSuccessCallBack;
  XmlParser _parser;
  ReplicationBitSetterStaticConfig _replicationBitConfig;



  public StaxBuilder(
      SchemaRegistryService schemaRegistry,
      InputStream inputStream,
      PhysicalSourceStaticConfig pConfig,
      TransactionSuccessCallBack transactionSuccessCallBack)
      throws DatabusException, XMLStreamException
  {
    String lname = (pConfig != null) ? pConfig.getName() : "";
    String moduleName = StaxBuilder.class.getName() + ":" + lname;
    _log = Logger.getLogger(moduleName);
    _transactionSuccessCallBack = transactionSuccessCallBack;
    _inputStream = inputStream;
    _schemaRegistry = schemaRegistry;
    _errorOnMissingFields = pConfig.getErrorOnMissingFields();
    _replicationBitConfig = pConfig.getReplBitSetter();

    MissingValueBehavior mvb = _replicationBitConfig.getMissingValueBehavior();
    if(mvb != MissingValueBehavior.STOP_WITH_ERROR)
      _log.warn("ReplicationBit Setter Config is set to continue parsing and mark events as ("
                  + (mvb == MissingValueBehavior.TREAT_EVENT_LOCAL ? "local" : "replicated")
                  + ") when replication-identifier is missing !!");
   
    //Build Datastructure for table --> namespace  and table --> sourceId
    LogicalSourceStaticConfig[] sources = pConfig.getSources();
    _tableToNamespace = new HashMap<String, String>();
    _tableToSourceId = new HashMap<String, Integer>();

    if(sources.length == 0)
    {
      throw new DatabusException("No logical sources found! Nothing to capture here.");
    }

    for(int i = 0 ; i< sources.length ; i++)
    {
      String tableName = sources[i].getUri();
      int sourceId = sources[i].getId();
      String name = sources[i].getName();
      _log.info("Configuring to capture changes from table: " + tableName + " which has source id: "  + sourceId + " and name : " + name);
      _tableToNamespace.put(tableName, name);
      _tableToSourceId.put(tableName, sourceId);
    }

    //Construct the Xml parser
    XMLInputFactory factory =  XMLInputFactory.newInstance();
    factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);   //Without this the state machine might break.
    XMLStreamReader xmlStreamReader = factory.createXMLStreamReader(_inputStream);
    _parser = new XmlParser(xmlStreamReader, _schemaRegistry, _tableToNamespace, _tableToSourceId, _transactionSuccessCallBack,
                              _errorOnMissingFields, _replicationBitConfig, inputStream);
   }

  /**
   * Start processing the xml trail files. The parser is started on invoking the method.
   * @throws Exception
   */
  public void processXml()
      throws Exception
  {
    try
    {
     _parser.start();
    }
    catch (XMLStreamException e)
    {
      _log.info("Unable to parse the given xml stream because of: ",e);
      throw e;
    }
  }

  public XmlParser getParser()
  {
    return _parser;
  }
}
TOP

Related Classes of com.linkedin.databus2.ggParser.staxparser.StaxBuilder

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.