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

io.aubay.fase.maven.plugin.FaseRow Maven / Gradle / Ivy

There is a newer version: 0.3.7
Show newest version
package io.aubay.fase.maven.plugin;

/*-
 * #%L
 * fase-maven-plugin Maven Plugin
 * %%
 * Copyright (C) 2018 - 2019 Aubay
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU 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 Public License for more details.
 * 
 * You should have received a copy of the GNU General Public
 * License along with this program.  If not, see
 * .
 * #L%
 */

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import io.aubay.fase.maven.plugin.FaseTable.ColumnName;
import io.aubay.fase.maven.plugin.data.spi.AbstractDataTransformer;
import io.aubay.fase.maven.plugin.data.spi.DataTransformerFactory;

/**
 * 
 * Classe de definition d'une ligne d'une FaseTable
 * Contient les donnees a charger pour le remplacement de l'Examples
 * 
 * @author elegeleux
 *
 */
public class FaseRow {

	
	private EnumMap values = new EnumMap<>(FaseTable.ColumnName.class);
	private List headers = new ArrayList<>();
	private List> rows = new ArrayList<>();
	private boolean dataLoaded = false;

	/**
	 * Ajoute une nouvelle colonne a cette ligne
	 * 
	 * @param column : Colonne a ajouter
	 * @param value : Valeur de la colonne 
	 */
	public void addValue(FaseTable.ColumnName column, String value) {
		this.values.put(column, value);
	}
	
	/**
	 * Renvoie la valeur de la colonne demandee
	 * 
	 * @param column : Colonne dont on veut la valeur
	 * @return La valeur de la colonne demandee
	 */
	public String getValue(FaseTable.ColumnName column) {
		return this.values.get(column);
	}
	
	
	/**
	 *Renvoie true si et seulement si la donnee a ete chargee
	 * @return : true si et seulement si la donnee a ete chargee
	 */
	public boolean isDataLoaded() {
		return this.dataLoaded;
	}
	
	/**
	 * Renvoie true si et seulement si la ligne est valide
	 * @return : true si et seulement si la ligne est valide
	 */
	public boolean isValid() {
		return containsValidPrefix()
			&& containsValidDataFile()
			&& containsValidDataFileFormat()
			&& containsValidDataFileTransformer();
	}
	
	/**
	 * Renvoie une List de String modifiable correspondant au header de donnee de la ligne
	 * 
	 * @return : une List de String modifiable correspondant au header de la ligne
	 */
	public List getHeader(){
		// A modifiable copy for GherkinUtils merge method
		return new ArrayList<>(this.headers);
	}
	
	/**
	 * Renvoie une List (lignes) de List de String (colonnes) modifiable correspondant aux lignes de donnees de la ligne
	 * 
	 * @return : une List de List de String modifiable correspondant aux lignes de donnees de la ligne
	 */
	public List> getRows(){
		// A modifiable copy for GherkinUtils merge method
		return this.rows.stream().map(ArrayList::new).collect(Collectors.toList());
	}
	
	/**
	 * Execute le chargement de la donnee
	 * 
	 * Attention : Cette methode ne valide pas que l'objet FaseRow.isValid()==true. A faire en amont
	 */
	public void loadData() {
		Optional dataTransformerOptional = DataTransformerFactory.getDataTransformer(values.get(ColumnName.DATA_FILE_TRANSFORMER), values.get(ColumnName.DATA_FILE_FORMAT));
		if(dataTransformerOptional.isPresent()){
			AbstractDataTransformer dataTransformer = dataTransformerOptional.get();
			List> data = dataTransformer.transform(this);
			if(data.size()>1) {
				this.headers = data.get(0);
				addPrefixToHeaders();
			}
			this.rows = data.subList(1, data.size());
			this.dataLoaded = true;
		}
	}

	/**
	 * Renvoie true si et seulement si la colonne PREFIX est non null
	 * @return : Renvoie true si et seulement si la colonne PREFIX est non null
	 */
	public boolean containsValidPrefix() {
		String prefixValue = this.values.get(ColumnName.PREFIX);
		return prefixValue!=null;
	}
	
	/**
	 * Renvoie true si et seulement si la colonne DATA_FILE est non null
	 * @return Renvoie true si et seulement si la colonne DATA_FILE est non null
	 */
	public boolean containsValidDataFile() {
		String dataFileValue = this.values.get(ColumnName.DATA_FILE);
		return dataFileValue!=null;
	}
	
	/**
	 * Renvoie true si et seulement si la colonne DATA_FILE_FORMAT est non null
	 * @return Renvoie true si et seulement si la colonne DATA_FILE_FORMAT est non null
	 */
	public boolean containsValidDataFileFormat() {
		String dataFileFormatValue = this.values.get(ColumnName.DATA_FILE_FORMAT);
		return dataFileFormatValue!=null;
	}
	
	/**
	 * Renvoie true si et seulement si la colonne DATA_FILE_TRANSFORMER est non null
	 * @return Renvoie true si et seulement si la colonne DATA_FILE_TRANSFORMER est non null
	 */
	public boolean containsValidDataFileTransformer() {
		String dataFileTransformerValue = this.values.get(ColumnName.DATA_FILE_TRANSFORMER);
		return dataFileTransformerValue!=null;
	}
	
	private void addPrefixToHeaders() {
		final StringBuilder prefixToAdd = new StringBuilder(this.values.get(ColumnName.PREFIX));
		if(prefixToAdd.length()!=0) {
			prefixToAdd.append(".");
		}
		this.headers = this.headers.stream().map(s -> prefixToAdd + s).collect(Collectors.toList());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy