/*
* Eoulsan development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public License version 2.1 or
* later and CeCILL-C. This should be distributed with the code.
* If you do not have a copy, see:
*
* http://www.gnu.org/licenses/lgpl-2.1.txt
* http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.txt
*
* Copyright for this code is held jointly by the Genomic platform
* of the Institut de Biologie de l'École normale supérieure and
* the individual authors. These should be listed in @author doc
* comments.
*
* For more information on the Eoulsan project and its aims,
* or to join the Eoulsan Google group, visit the home page
* at:
*
* http://outils.genomique.biologie.ens.fr/eoulsan
*
*/
package fr.ens.biologie.genomique.eoulsan.data;
import java.util.List;
/**
* This interface define data used by ports.
* @since 2.0
* @author Laurent Jourdren
*/
public interface Data {
/**
* Get data name.
* @return the name of the data
*/
String getName();
/**
* Get the data format of the data.
* @return a DataFormat object
*/
DataFormat getFormat();
/**
* Get the part of the data.
* @return the part of the data or -1 if data has not been split
*/
int getPart();
/**
* Get metadata about the data.
* @return a map with the metadata entries
*/
DataMetadata getMetadata();
//
// List methods
//
/**
* Test if the data is a list.
* @return true if the data is a list
*/
boolean isList();
/**
* Get the the list of data.
* @return a list even if the data is not a list
*/
List<Data> getListElements();
/**
* Get the size of the data.
* @return the number of the element of the data
*/
int size();
/**
* Test if the number of the elements of the data is equals to 0.
* @return true f the number of the elements of the data is equals to 0
*/
boolean isEmpty();
/**
* Add a data to the list of data.
* @param name name of the data
* @return the data object added to the list
*/
Data addDataToList(String name);
/**
* Add a data to the list of data.
* @param name name of the data
* @param part split part number (-1 for no part)
* @return the data object added to the list
*/
Data addDataToList(String name, int part);
//
// Files methods
//
/**
* Get the pathname for the data.
* @return a String with the pathname
*/
String getDataFilename();
/**
* Get the pathname for the data. This method works only for a multi-file
* DataFormat.
* @param fileIndex file index for multi-file data
* @return a String with the pathname
* @throws fr.ens.biologie.genomique.eoulsan.EoulsanRuntimeException if the
* DataFormat is not multi-file
*/
String getDataFilename(int fileIndex);
/**
* Get the DataFile for an input DataType and a Sample.
* @return a new DataFile object
*/
DataFile getDataFile();
/**
* Get the DataFile for an input DataType and a Sample. This method works only
* for a multi-file DataFormat.
* @param fileIndex file index for multi-file data
* @return a new DataFile object
* @throws fr.ens.biologie.genomique.eoulsan.EoulsanRuntimeException if the
* DataFormat is not multi-file
*/
DataFile getDataFile(int fileIndex);
/**
* Count the number for DataFile available for a multi-file DataFormat and a
* Sample. This method works only for a multi-file DataFormat.
* @return the number of multi-file for the DataFormat and the sample
* @throws fr.ens.biologie.genomique.eoulsan.EoulsanRuntimeException if the
* DataFormat is not multi-file
*/
int getDataFileCount();
/**
* Count the number for DataFile available for a multi-file DataFormat and a
* Sample. This method works only for a multi-file DataFormat.
* @param existingFiles if true return the number of files that really exists
* @return the number of multi-file for the DataFormat and the sample
* @throws fr.ens.biologie.genomique.eoulsan.EoulsanRuntimeException if the
* DataFormat is not multi-file
*/
int getDataFileCount(boolean existingFiles);
}