/*
* Copyright 2014 DataGenerator Contributors
*
* 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.
*/
package org.finra.datagenerator.samples;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.finra.datagenerator.consumer.DataConsumer;
import org.finra.datagenerator.consumer.DataTransformer;
import org.finra.datagenerator.consumer.EquivalenceClassTransformer;
import org.finra.datagenerator.distributor.multithreaded.DefaultDistributor;
import org.finra.datagenerator.engine.Engine;
import org.finra.datagenerator.engine.scxml.SCXMLEngine;
import org.finra.datagenerator.engine.scxml.tags.CustomTagExtension;
import org.finra.datagenerator.engine.scxml.tags.InLineTransformerExtension;
import org.finra.datagenerator.samples.transformer.SampleMachineTransformer;
import org.finra.datagenerator.writer.BulkWriter;
import org.finra.datagenerator.writer.JsonWriter;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
/**
* Driver for a simple Data Generator example using the Default Distributor and a single transformer.
*/
public final class CmdLineBulkWriter {
private CmdLineBulkWriter() {
// Do nothing
}
private static final Logger log = Logger.getLogger(CmdLineBulkWriter.class);
/**
* Entry point for the example.
*
* @param args Command-line arguments for the example. To use samplemachine.xml from resources, send
* no arguments. To use other file, send a filename without xml extension).
*/
public static void main(String[] args) {
//Adding custom equivalence class generation transformer - NOTE this will get applied during graph traversal-->
//MODEL USAGE EXAMPLE: <assign name="var_out_V1_2" expr="%ssn"/> <dg:transform name="EQ"/>
Map<String, DataTransformer> transformers = new HashMap<String, DataTransformer>();
transformers.put("EQ", new EquivalenceClassTransformer());
Vector<CustomTagExtension> cte = new Vector<CustomTagExtension>();
cte.add(new InLineTransformerExtension(transformers));
Engine engine = new SCXMLEngine(cte);
//will default to samplemachine, but you could specify a different file if you choose to
InputStream is = CmdLineBulkWriter.class.getResourceAsStream("/" + (args.length == 0 ? "samplemachine" : args[0]) + ".xml");
engine.setModelByInputFileStream(is);
// Usually, this should be more than the number of threads you intend to run
engine.setBootstrapMin(1);
//Prepare the consumer with the proper writer and transformer
DataConsumer consumer = new DataConsumer();
consumer.addDataTransformer(new SampleMachineTransformer());
//Adding custom equivalence class generation transformer - NOTE this will get applied post data generation.
//MODEL USAGE EXAMPLE: <dg:assign name="var_out_V2" set="%regex([0-9]{3}[A-Z0-9]{5})"/>
consumer.addDataTransformer(new EquivalenceClassTransformer());
BulkWriter jsonWriter = new JsonWriter(System.out,
new String[]{"var_1_1", "var_1_2", "var_1_3", "var_1_4", "var_1_5", "var_1_6",
"var_2_1", "var_2_2", "var_2_3", "var_2_4", "var_2_5", "var_2_6"});
consumer.addDataWriter(jsonWriter);
//Prepare the distributor
DefaultDistributor defaultDistributor = new DefaultDistributor();
defaultDistributor.setThreadCount(1);
defaultDistributor.setDataConsumer(consumer);
Logger.getLogger("org.apache").setLevel(Level.WARN);
engine.process(defaultDistributor);
//Tells writer, it's finished processing the data
jsonWriter.finish();
}
}