package net.sourceforge.solexatools.util;
import java.util.List;
import java.util.Set;
import net.sourceforge.seqware.common.model.Experiment;
import net.sourceforge.seqware.common.model.IUS;
import net.sourceforge.seqware.common.model.Processing;
import net.sourceforge.seqware.common.model.Registration;
import net.sourceforge.seqware.common.model.Sample;
import net.sourceforge.seqware.common.model.Study;
import net.sourceforge.seqware.common.util.Log;
/**
* <p>
* StudyHtmlUtil class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class StudyHtmlUtil {
/** Constant <code>TYPE_TREE="st"</code> */
public static final String TYPE_TREE = "st";
/**
* <p>
* getHtml.
* </p>
*
* @param obj
* a {@link java.lang.Object} object.
* @param registration
* a {@link net.sourceforge.seqware.common.model.Registration} object.
* @param listStudyNodeId
* a {@link java.util.List} object.
* @param treeType
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getHtml(Object obj, Registration registration, List<String> listStudyNodeId, String treeType) {
String html = "";
if (obj instanceof Study) {
html = getAllHtml((Study) obj, registration, false, treeType); // getStydyHtml((Study)obj, registration, null);
}
if (obj instanceof Experiment) {
html = getAllHtml((Experiment) obj, registration, null, false, treeType);
}
if (obj instanceof Sample) {
html = getAllHtml((Sample) obj, registration, null, 0, listStudyNodeId, true, false, false, treeType);
}
if (obj instanceof IUS) {
html = getAllHtml((IUS) obj, registration, null, 1, listStudyNodeId, false, false, treeType);
}
if (obj instanceof Processing) {
html = getAllHtml((Processing) obj, registration, null, 0, listStudyNodeId, true, false, treeType);
}
return html;
}
/**
* <p>
* getFileHtml.
* </p>
*
* @param proc
* a {@link net.sourceforge.seqware.common.model.Processing} object.
* @param registration
* a {@link net.sourceforge.seqware.common.model.Registration} object.
* @param listStudyNodeId
* a {@link java.util.List} object.
* @param treeType
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getFileHtml(Processing proc, Registration registration, List<String> listStudyNodeId, String treeType) {
return getAllHtml(proc, registration, null, 1, listStudyNodeId, true, true, treeType);
}
private static String getAllHtml(Study study, Registration registration, boolean isOpenProc, String treeType) {
return NodeHtmlUtil.getStydyHtml(study, registration, null, isOpenProc, treeType);
}
private static String getParentId(Integer currPosId, List<String> listNodeId) {
// currPosId = currPosId + 1;
return listNodeId.get(currPosId);
}
private static String getAllHtml(Experiment experiment, Registration registration, String openingNodeId, boolean isOpenProc,
String treeType) {
String childHtml = NodeHtmlUtil.getExperimentHtml(experiment, registration, TYPE_TREE, openingNodeId, isOpenProc, treeType);
String parentHtml = NodeHtmlUtil.getStydyHtml(experiment.getStudy(), registration,
Constant.EXPERIMENT_PREFIX + experiment.getExperimentId(), false, treeType);
String parentId = Constant.EXPERIMENT_PREFIX + experiment.getExperimentId();
return NodeHtmlUtil.pasteHtmlIntoParentNode(childHtml, parentHtml, parentId, true);
}
private static String getAllHtml(Sample sample, Registration registration, String openingNodeId, Integer currPosId,
List<String> listNodeId, boolean isFirstCall, boolean isViewCurrentNode, boolean isOpenProc, String treeType) {
currPosId++;
String id = getParentId(currPosId, listNodeId);
// openingNodeId = getParentId(currPosId - 1, listNodeId);
Log.info("Sample All Html. Parent id = " + id);
if (id.indexOf("exp_") != -1 && !isViewCurrentNode) {
Log.info(" - Experiment HTML");
// boolean isOpenSample = !isFirstCall;
Experiment experiment = sample.getExperiment();
if (experiment == null) {
return "";
}
openingNodeId = getParentId(currPosId - 1, listNodeId);
return getAllHtml(experiment, registration, openingNodeId, false, treeType);
} else {
Log.info(" - Sample HTML");
Sample currSample;
if (isFirstCall) {
currSample = sample;
} else {
currSample = getParentSample(sample, Constant.getId(id));
openingNodeId = getParentId(currPosId - 1, listNodeId);
if (currSample == null) {
return "";
}
}
// openingNodeId = getParentId(currPosId-1, listNodeId);
Log.info(" -> openingNodeId = " + openingNodeId);
String childHtml = NodeHtmlUtil.getSampleHtml(currSample, registration, TYPE_TREE, openingNodeId, false, false, treeType);
String parentHtml = getAllHtml(currSample, registration, id/* openingNodeId */, currPosId, listNodeId, false,
isViewCurrentNode, isOpenProc, treeType);
String parentId = Constant.SAMPLE_PREFIX + currSample.getSampleId();
return NodeHtmlUtil.pasteHtmlIntoParentNode(childHtml, parentHtml, parentId, true);
}
}
/**
* <p>
* getAllHtml.
* </p>
*
* @param processing
* a {@link net.sourceforge.seqware.common.model.Processing} object.
* @param registration
* a {@link net.sourceforge.seqware.common.model.Registration} object.
* @param openingNodeId
* a {@link java.lang.String} object.
* @param currPosId
* a {@link java.lang.Integer} object.
* @param listNodeId
* a {@link java.util.List} object.
* @param isFirstCall
* a boolean.
* @param isViewCurrentNode
* a boolean.
* @param treeType
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getAllHtml(Processing processing, Registration registration, String openingNodeId, Integer currPosId,
List<String> listNodeId, boolean isFirstCall, boolean isViewCurrentNode, String treeType) {
// Log.info(" -- Show Processing -- ");
currPosId++;
String id = getParentId(currPosId, listNodeId);
if (id.indexOf("wfr_") != -1) {
currPosId++;
id = getParentId(currPosId, listNodeId);
}
Log.info("Proc All Html. Parent id = " + id);
if (id.indexOf("study_") != -1 && !isViewCurrentNode) {
Log.info("Proc Study HTML");
boolean isOpenProc = !isFirstCall;
Study study = getParentStudy(processing, Constant.getId(id));
if (study == null) {
return "";
}
return getAllHtml(study, registration, isOpenProc, treeType);
} else if (id.indexOf("exp_") != -1 && !isViewCurrentNode) {
Log.info("Proc EXPERIMENT HTML");
Experiment experiment = getParentExperiment(processing, Constant.getId(id));
if (experiment == null) {
return "";
}
return getAllHtml(experiment, registration, openingNodeId, !isFirstCall, treeType);
} else if (id.indexOf("sam_") != -1 && !isViewCurrentNode) {
Log.info("Proc Sample HTML");
Sample sample = getParentSample(processing, Constant.getId(id));
if (sample == null) {
return "";
}
currPosId--;
return getAllHtml(sample, registration, openingNodeId, currPosId, listNodeId, true, isViewCurrentNode, false, treeType);
} else if (id.indexOf("ius_") != -1 && !isViewCurrentNode) {
Log.info("Proc IUS HTML");
IUS ius = getParentIUS(processing, Constant.getId(id));
if (ius == null) {
return "";
}
return getAllHtml(ius, registration, openingNodeId, currPosId, listNodeId, !isFirstCall, true, treeType);
} else {
Processing currProc;
if (isFirstCall) {
currProc = processing;
} else {
currProc = getParentProcessing(processing, Constant.getId(id));
if (currProc == null) {
return "";
}
openingNodeId = getParentId(currPosId - 1, listNodeId);
if (openingNodeId.indexOf("wfr_") != -1) {
openingNodeId = getParentId(currPosId - 2, listNodeId);
}
}
Log.info(" -> openingNodeId Proc = " + openingNodeId);
String childHtml = NodeHtmlUtil.getProcessingHtml(currProc, registration, TYPE_TREE, openingNodeId, treeType);
String parentHtml = getAllHtml(currProc, registration, /* currProc.getProcessingId().toString() */id, currPosId, listNodeId,
false, false, treeType);
String parentId = Constant.PROCESSING_PREFIX + currProc.getProcessingId();
return NodeHtmlUtil.pasteHtmlIntoParentNode(childHtml, parentHtml, parentId, true);
}
}
/**
* <p>
* getAllHtml.
* </p>
*
* @param ius
* a {@link net.sourceforge.seqware.common.model.IUS} object.
* @param registration
* a {@link net.sourceforge.seqware.common.model.Registration} object.
* @param openingNodeId
* a {@link java.lang.String} object.
* @param currPosId
* a {@link java.lang.Integer} object.
* @param listNodeId
* a {@link java.util.List} object.
* @param isOpenProc
* a boolean.
* @param isVisibleProc
* a boolean.
* @param treeType
* a {@link java.lang.String} object.
* @return a {@link java.lang.String} object.
*/
public static String getAllHtml(IUS ius, Registration registration, String openingNodeId, Integer currPosId, List<String> listNodeId,
boolean isOpenProc, boolean isVisibleProc, String treeType) {
Log.info(" - IUS HTML, openingNodeId = " + getParentId(currPosId, listNodeId));
String childHtml = NodeHtmlUtil.getIUSHtml(ius, registration, TYPE_TREE, Constant.PROCESSING_PREFIX + openingNodeId, isOpenProc,
isVisibleProc, treeType);
String parentHtml = getAllHtml(ius.getSample(), registration, Constant.IUS_PREFIX + ius.getIusId(), currPosId, listNodeId, true,
false, isOpenProc, treeType);
String parentId = Constant.IUS_PREFIX + ius.getIusId();
return NodeHtmlUtil.pasteHtmlIntoParentNode(childHtml, parentHtml, parentId, true);
}
private static Study getParentStudy(Processing processing, Integer parentId) {
Study parentStudy = null;
Set<Study> studies = processing.getStudies();
for (Study s : studies) {
if (parentId.equals(s.getStudyId())) {
parentStudy = s;
}
}
return parentStudy;
}
private static Experiment getParentExperiment(Processing processing, Integer parentId) {
Experiment parentExperiment = null;
Set<Experiment> experiments = processing.getExperiments();
for (Experiment ex : experiments) {
if (parentId.equals(ex.getExperimentId())) {
parentExperiment = ex;
}
}
return parentExperiment;
}
private static Sample getParentSample(Sample sample, Integer parentId) {
Sample parentSample = null;
Set<Sample> samples = sample.getParents();
for (Sample s : samples) {
if (parentId.equals(s.getSampleId())) {
parentSample = s;
}
}
return parentSample;
}
private static Sample getParentSample(Processing processing, Integer parentId) {
Sample parentSample = null;
Set<Sample> samples = processing.getSamples();
for (Sample s : samples) {
if (parentId.equals(s.getSampleId())) {
parentSample = s;
}
}
return parentSample;
}
private static IUS getParentIUS(Processing processing, Integer parentId) {
IUS parentIUS = null;
Set<IUS> ius = processing.getIUS();
for (IUS i : ius) {
if (parentId.equals(i.getIusId())) {
parentIUS = i;
}
}
return parentIUS;
}
private static Processing getParentProcessing(Processing processing, Integer parentId) {
Processing parentProcessing = null;
Set<Processing> processings = processing.getParents();
for (Processing p : processings) {
if (parentId.equals(p.getProcessingId())) {
parentProcessing = p;
}
}
return parentProcessing;
}
}