/* * Copyright (c) 2017 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package magma; import java.io.File; import java.io.IOException; import org.obiba.magma.MagmaEngine; import org.obiba.magma.ValueTable; import org.obiba.magma.datasource.csv.CsvDatasource; import org.obiba.magma.datasource.excel.ExcelDatasource; import org.obiba.magma.datasource.generated.GeneratedValueTable; import org.obiba.magma.js.MagmaJsExtension; import org.obiba.magma.support.DatasourceCopier; import org.obiba.magma.support.DatasourceParsingException; import org.obiba.magma.support.Disposables; import org.obiba.magma.support.Initialisables; import org.obiba.magma.support.MultithreadedDatasourceCopier; import com.google.common.collect.Sets; /** * Invoke as {@code java -cp jars magma.DataGenerator -i dictionary.xlsx -o output-file.csv -n qty} where {@code qty} is * the number of rows to generate. */ @SuppressWarnings("UseOfSystemOutOrSystemErr") public class DataGenerator { private static final int DEFAULT_NB_ENTITIES = 500; private DataGenerator() { } @SuppressWarnings({ "OverlyLongMethod", "PMD.NcssMethodCount" }) public static void main(String... args) throws IOException { Integer number = DEFAULT_NB_ENTITIES; String outputFileName = "output.csv"; String inputFileName = "input.xlsx"; for(int i = 0; i < args.length; i++) { if("-n".equalsIgnoreCase(args[i])) { number = Integer.parseInt(args[++i]); } else if("-o".equalsIgnoreCase(args[i])) { outputFileName = args[++i]; } else if("-i".equalsIgnoreCase(args[i])) { inputFileName = args[++i]; } } File inputFile = new File(inputFileName); if(!inputFile.exists()) { System.err.println(String.format("Input file %s does not exist.", inputFileName)); return; } File outputFile = new File(outputFileName); if(outputFile.exists() && !outputFile.delete()) { System.err.println(String.format("Cannot delete output file %s.", outputFile)); return; } if(!outputFile.createNewFile()) { System.err.println(String.format("Cannot create output file %s.", outputFile)); return; } new MagmaEngine().extend(new MagmaJsExtension()); ExcelDatasource eds = new ExcelDatasource("input", inputFile); Initialisables.initialise(eds); ValueTable table = eds.getValueTables().iterator().next(); CsvDatasource target = new CsvDatasource("target"); target.addValueTable(table, outputFile); try { Initialisables.initialise(target); } catch(DatasourceParsingException e) { e.printList(); return; } ValueTable generated = new GeneratedValueTable(null, Sets.newLinkedHashSet(table.getVariables()), number); MultithreadedDatasourceCopier.Builder.newCopier() .withCopier(DatasourceCopier.Builder.newCopier().dontCopyMetadata()).from(generated).to(target) .as(table.getName()).build().copy(); Disposables.dispose(eds, target); } }