/*******************************************************************************
* Copyright (c) 2014 Weasis Team.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nicolas Roduit - initial API and implementation
*******************************************************************************/
package org.weasis.dicom.qr.manisfest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.dcm4che3.data.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.weasis.dicom.qr.manisfest.xml.TagUtil;
import org.weasis.dicom.qr.manisfest.xml.XmlDescription;
public class Series implements XmlDescription {
private static final Logger LOGGER = LoggerFactory.getLogger(Series.class);
private final String seriesInstanceUID;
private String seriesDescription = null;
private final ArrayList<SOPInstance> sopInstancesList;
private String modality = null;
private String seriesNumber = null;
private String wadoTransferSyntaxUID = null;
// Image quality within the range 1 to 100, 100 being the best quality.
private int wadoCompression = 0;
private String thumbnail = null;
public Series(String seriesInstanceUID) {
if (seriesInstanceUID == null) {
throw new IllegalArgumentException("seriesInstanceUID is null"); //$NON-NLS-1$
}
this.seriesInstanceUID = seriesInstanceUID;
sopInstancesList = new ArrayList<>();
}
public String getSeriesInstanceUID() {
return seriesInstanceUID;
}
public String getSeriesDescription() {
return seriesDescription;
}
public String getSeriesNumber() {
return seriesNumber;
}
public void setSeriesNumber(String seriesNumber) {
this.seriesNumber = seriesNumber == null ? null : seriesNumber.trim();
}
public String getWadoTransferSyntaxUID() {
return wadoTransferSyntaxUID;
}
public void setWadoTransferSyntaxUID(String wadoTransferSyntaxUID) {
this.wadoTransferSyntaxUID = wadoTransferSyntaxUID;
}
public int getWadoCompression() {
return wadoCompression;
}
public void setWadoCompression(int wadoCompression) {
this.wadoCompression = wadoCompression > 100 ? 100 : wadoCompression < 0 ? 0 : wadoCompression;
}
public void setWadoCompression(String wadoCompression) {
try {
setWadoCompression(Integer.parseInt(wadoCompression));
} catch (NumberFormatException e) {
LOGGER.warn("Invalid compression value: {}", wadoCompression); //$NON-NLS-1$
}
}
public void setSeriesDescription(String s) {
seriesDescription = s == null ? "" : s; //$NON-NLS-1$
}
public void addSOPInstance(SOPInstance s) {
if (s != null) {
sopInstancesList.add(s);
}
}
public String getModality() {
return modality;
}
public void setModality(String modality) {
this.modality = modality;
}
public String getThumbnail() {
return thumbnail;
}
public void setThumbnail(String thumbnail) {
this.thumbnail = thumbnail;
}
public List<SOPInstance> getSopInstancesList() {
return sopInstancesList;
}
public void sortByInstanceNumber() {
Collections.sort(sopInstancesList, new Comparator<SOPInstance>() {
@Override
public int compare(SOPInstance o1, SOPInstance o2) {
int nubmer1 = 0;
int nubmer2 = 0;
try {
nubmer1 = Integer.parseInt(o1.getInstanceNumber());
nubmer2 = Integer.parseInt(o2.getInstanceNumber());
} catch (NumberFormatException e) {
// Do nothing
}
return nubmer1 < nubmer2 ? -1 : (nubmer1 == nubmer2 ? 0 : 1);
}
});
}
@Override
public String toXml() {
StringBuilder result = new StringBuilder();
if (seriesInstanceUID != null) {
result.append("\n<"); //$NON-NLS-1$
result.append(TagUtil.Level.SERIES);
result.append(" "); //$NON-NLS-1$
TagUtil.addXmlAttribute(Tag.SeriesInstanceUID, seriesInstanceUID, result);
TagUtil.addXmlAttribute(Tag.SeriesDescription, seriesDescription, result);
TagUtil.addXmlAttribute(Tag.SeriesNumber, seriesNumber, result);
TagUtil.addXmlAttribute(Tag.Modality, modality, result);
TagUtil.addXmlAttribute(TagUtil.DirectDownloadThumbnail, thumbnail, result);
TagUtil.addXmlAttribute(TagUtil.WadoTransferSyntaxUID, wadoTransferSyntaxUID, result);
TagUtil.addXmlAttribute(TagUtil.WadoCompressionRate,
wadoCompression < 1 ? null : Integer.toString(wadoCompression), result);
result.append(">"); //$NON-NLS-1$
sortByInstanceNumber();
for (SOPInstance s : sopInstancesList) {
result.append(s.toXml());
}
result.append("\n</"); //$NON-NLS-1$
result.append(TagUtil.Level.SERIES);
result.append(">"); //$NON-NLS-1$
}
return result.toString();
}
public boolean isEmpty() {
return sopInstancesList.isEmpty();
}
}