All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nuiton.csv.MyModelBuilder Maven / Gradle / Ivy

There is a newer version: 3.1
Show newest version
/*
 * #%L
 * Nuiton CSV
 * %%
 * Copyright (C) 2011 - 2012 CodeLutin
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as 
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public 
 * License along with this program.  If not, see
 * .
 * #L%
 */
package org.nuiton.csv;

import java.util.LinkedList;
import java.util.List;

/**
 * @param 
 */
public class MyModelBuilder {

    protected char separator;

    protected List> columnsForImport = new LinkedList>();

    protected List> columnsForExport = new LinkedList>();

    public BuildOrAddColumnStep newEmptyModel(char separator) {
        this.separator = separator;
        return new BuildOrAddColumnStep();
    }

    public class BuildOrAddColumnStep {

        public ChooseImportStrategyForColumnStep addColumn(String columnName) {
            return new ChooseImportStrategyForColumnStep(columnName);
        }

        public CsvModel buildModelForExport() {
            return new CsvModel(separator, (Iterable) columnsForImport, (Iterable) columnsForExport, null);
        }

        public CsvModel buildModelForImport(CsvModel.Factory emptyEFactory) {
            return new CsvModel(separator, (Iterable) columnsForImport, (Iterable) columnsForExport, (CsvModel.Factory) emptyEFactory);
        }
    }

    public class ChooseImportStrategyForColumnStep {

        protected String columnName;

        public ChooseImportStrategyForColumnStep(String columnName) {
            this.columnName = columnName;
        }

        public ChooseExportStrategyForColumnStep ignoreAtImport() {
            Column importableColumn = Column.newImportableColumn(columnName, null, null, true, false);
            return new ChooseExportStrategyForColumnStep(columnName, importableColumn);
        }

        public ChooseExportStrategyForColumnStep mandatoryAtImport(String propertyName) {
            return mandatoryAtImport(propertyName, Common.STRING);
        }

        public  ChooseExportStrategyForColumnStep mandatoryAtImport(String propertyName, ValueParser valueParser) {
            return mandatoryAtImport(valueParser, new Common.BeanProperty(propertyName));
        }

        public ChooseExportStrategyForColumnStep mandatoryAtImport(ValueSetter valueSetter) {
            return mandatoryAtImport(Common.STRING, valueSetter);
        }

        public  ChooseExportStrategyForColumnStep mandatoryAtImport(ValueParser valueParser, ValueSetter valueSetter) {
            Column importableColumn = Column.newImportableColumn(columnName, valueParser, valueSetter, false, true);
            return new ChooseExportStrategyForColumnStep(columnName, importableColumn);
        }

        public ChooseExportStrategyForColumnStep optionalAtImport(String propertyName) {
            return optionalAtImport(propertyName, Common.STRING);
        }

        public  ChooseExportStrategyForColumnStep optionalAtImport(String propertyName, ValueParser valueParser) {
            return optionalAtImport(valueParser, new Common.BeanProperty(propertyName));
        }

        public ChooseExportStrategyForColumnStep optionalAtImport(ValueSetter valueSetter) {
            return optionalAtImport(Common.STRING, valueSetter);
        }

        public  ChooseExportStrategyForColumnStep optionalAtImport(ValueParser valueParser, ValueSetter valueSetter) {
            Column importableColumn = Column.newImportableColumn(columnName, valueParser, valueSetter, false, true);
            return new ChooseExportStrategyForColumnStep(columnName, importableColumn);
        }

    }

    public class ChooseExportStrategyForColumnStep {

        protected String columnName;

        protected Column importableColumn;

        public ChooseExportStrategyForColumnStep(String columnName, Column importableColumn) {
            this.columnName = columnName;
            this.importableColumn = importableColumn;
        }

        public AddColumnStep ignoredAtExport() {
            Column exportableColumn = Column.newExportableColumn(columnName, null, null, true);
            return new AddColumnStep(importableColumn, exportableColumn);
        }

        public AddColumnStep writeAtExport(String propertyName) {
            return writeAtExport(propertyName, Common.STRING);
        }

        public AddColumnStep writeAtExport(ValueGetter valueGetter) {
            return writeAtExport(valueGetter, Common.STRING);
        }

        public  AddColumnStep writeAtExport(String propertyName, ValueFormatter valueFormatter) {
            return writeAtExport( new Common.BeanProperty(propertyName), valueFormatter);
        }

        public  AddColumnStep writeAtExport(ValueGetter valueGetter, ValueFormatter valueFormatter) {
            ExportableColumn exportableColumn = Column.newExportableColumn(columnName, valueGetter, valueFormatter, false);
            return new AddColumnStep((ImportableColumn) importableColumn, (ExportableColumn) exportableColumn);
        }
    }

    public class AddColumnStep {

        protected ImportableColumn importableColumn;

        protected ExportableColumn exportableColumn;

        public AddColumnStep(ImportableColumn importableColumn, ExportableColumn exportableColumn) {
            this.importableColumn = importableColumn;
            this.exportableColumn = exportableColumn;
        }

        public BuildOrAddColumnStep add() {
            return addIf(true);
        }

        public BuildOrAddColumnStep addIf(boolean condition) {
            if (condition) {
                columnsForImport.add((ImportableColumn) importableColumn);
                columnsForExport.add((ExportableColumn) exportableColumn);
            }
            return new BuildOrAddColumnStep();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy