/*
* Copyright (C) 2013 SeqWare
*
* 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 <http://www.gnu.org/licenses/>.
*/
package net.sourceforge.seqware.pipeline.plugins.batchmetadatainjection;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import net.sourceforge.seqware.common.metadata.Metadata;
import net.sourceforge.seqware.common.model.StudyType;
import org.apache.commons.lang3.StringUtils;
/**
*
* @author mtaschuk
*/
public class LaneInfo implements Comparable<LaneInfo> {
private String laneNumber = null;
private String laneName = null;
private String laneDescription = null;
private String laneCycleDescriptor = null;
private Boolean laneSkip = false;
private String libraryStrategyAcc = null;
private String librarySourceAcc = null;
private String librarySelectionAcc = null;
private String studyTypeAcc = null;
private Set<SampleInfo> samples;
private Set<TagValueUnit> laneAttributes;
/**
* Get the value of studyTypeAcc
*
* @return the value of studyTypeAcc
*/
public String getStudyTypeAcc() {
return studyTypeAcc;
}
/**
* Set the value of studyTypeAcc
*
* @param studyTypeAcc
* new value of studyTypeAcc
*/
public void setStudyTypeAcc(int studyTypeAcc) {
this.studyTypeAcc = String.valueOf(studyTypeAcc);
}
public Set<TagValueUnit> getLaneAttributes() {
if (laneAttributes == null) {
laneAttributes = new HashSet<>();
}
return laneAttributes;
}
/**
* Adds a new lane attribute if the tag does not exist for this lane, or changes the value of an existing lane attribute.
*
* @param tag
* the key of the attribute
* @param value
* the value of the attribute
*/
public void setLaneAttribute(String tag, String value) {
TagValueUnit sa = null;
for (TagValueUnit s : getLaneAttributes()) {
if (s.getTag().equals(tag.trim())) {
sa = s;
break;
}
}
// if we are unsetting the lane attribute, remove it from the list.
if (value == null && sa != null) {
getLaneAttributes().remove(sa);
return;
}
if (sa == null) {
sa = new TagValueUnit();
getLaneAttributes().add(sa);
}
sa.setTag(tag.trim());
sa.setValue(value.trim());
}
public void setLaneAttributes(Set<TagValueUnit> laneAttributes) {
this.laneAttributes = laneAttributes;
}
/**
* Get the value of librarySelectionAcc
*
* @return the value of librarySelectionAcc
*/
public String getLibrarySelectionAcc() {
return librarySelectionAcc;
}
/**
* Set the value of librarySelectionAcc
*
* @param librarySelectionAcc
* new value of librarySelectionAcc
*/
public void setLibrarySelectionAcc(int librarySelectionAcc) {
this.librarySelectionAcc = String.valueOf(librarySelectionAcc);
}
/**
* Get the value of librarySourceAcc
*
* @return the value of librarySourceAcc
*/
public String getLibrarySourceAcc() {
return librarySourceAcc;
}
/**
* Set the value of librarySourceAcc
*
* @param librarySourceAcc
* new value of librarySourceAcc
*/
public void setLibrarySourceAcc(int librarySourceAcc) {
this.librarySourceAcc = String.valueOf(librarySourceAcc);
}
/**
* Get the value of libraryStrategyAcc
*
* @return the value of libraryStrategyAcc
*/
public String getLibraryStrategyAcc() {
return libraryStrategyAcc;
}
/**
* Set the value of libraryStrategyAcc
*
* @param libraryStrategyAcc
* new value of libraryStrategyAcc
*/
public void setLibraryStrategyAcc(int libraryStrategyAcc) {
this.libraryStrategyAcc = String.valueOf(libraryStrategyAcc);
}
/**
* Get the value of samples
*
* @return the value of samples
*/
public Set<SampleInfo> getSamples() {
if (samples == null) {
samples = new HashSet<>();
}
return samples;
}
/**
* Set the value of samples
*
* @param samples
* new value of samples
*/
public void setSamples(Set<SampleInfo> samples) {
this.samples = samples;
}
/**
* Get the value of laneSkip
*
* @return the value of laneSkip
*/
public Boolean getLaneSkip() {
return laneSkip;
}
/**
* Set the value of laneSkip
*
* @param laneSkip
* new value of laneSkip
*/
public void setLaneSkip(Boolean laneSkip) {
this.laneSkip = laneSkip;
}
/**
* Get the value of laneCycleDescriptor
*
* @return the value of laneCycleDescriptor
*/
public String getLaneCycleDescriptor() {
return laneCycleDescriptor;
}
/**
* Set the value of laneCycleDescriptor
*
* @param laneCycleDescriptor
* new value of laneCycleDescriptor
*/
public void setLaneCycleDescriptor(String laneCycleDescriptor) {
this.laneCycleDescriptor = laneCycleDescriptor;
}
/**
* Get the value of laneDescription
*
* @return the value of laneDescription
*/
public String getLaneDescription() {
return laneDescription;
}
/**
* Set the value of laneDescription
*
* @param laneDescription
* new value of laneDescription
*/
public void setLaneDescription(String laneDescription) {
this.laneDescription = laneDescription;
}
/**
* Get the value of laneName
*
* @return the value of laneName
*/
public String getLaneName() {
return laneName;
}
/**
* Set the value of laneName
*
* @param laneName
* new value of laneName
*/
public void setLaneName(String laneName) {
this.laneName = laneName;
}
/**
* Get the value of laneNumber
*
* @return the value of laneNumber
*/
public String getLaneNumber() {
return laneNumber;
}
/**
* Set the value of laneNumber, and sets the 'geo_lane' attribute.
*
* @param laneNumber
* new value of laneNumber
*/
public void setLaneNumber(String laneNumber) {
setLaneAttribute("geo_lane", laneNumber);
this.laneNumber = laneNumber;
}
@Override
public String toString() {
return "LaneInfo{" + "\n\tlaneNumber=" + laneNumber + "\n\t laneCycleDescriptor=" + laneCycleDescriptor
+ "\n\t libraryStrategyAcc=" + libraryStrategyAcc + "\n\t librarySourceAcc=" + librarySourceAcc
+ "\n\t librarySelectionAcc=" + librarySelectionAcc + "\n\t studyTypeAcc=" + studyTypeAcc + '}';
}
public void print(Appendable writer, Metadata metadata) throws IOException {
String studyTypeStr = "<null>";
if (studyTypeAcc != null && !studyTypeAcc.trim().isEmpty() && StringUtils.isNumeric(studyTypeAcc)) {
for (StudyType st : metadata.getStudyTypes()) {
if (st.getStudyTypeId().equals(Integer.parseInt(studyTypeAcc))) {
studyTypeStr = st.getName();
}
}
}
writer.append("\n\tLaneInfo {");
writer.append("\n\t\tlaneNumber=").append(laneNumber);
writer.append("\n\t\tstudyType=").append(studyTypeStr);
if (samples != null) {
for (SampleInfo si : samples) {
si.print(writer, metadata);
}
}
writer.append("\n\t}");
}
@Override
public int compareTo(LaneInfo otherLane) {
int i;
i = Integer.parseInt(this.laneNumber) - Integer.parseInt(otherLane.getLaneNumber());
if (i != 0) {
return i;
}
i = this.laneName.compareTo(otherLane.laneName);
if (i != 0) {
return i;
}
i = this.laneDescription.compareTo(otherLane.laneDescription);
return i;
}
}