io.aubay.fase.maven.plugin.FaseRow Maven / Gradle / Ivy
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