/******************************************************************************* * 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.weasis.dicom.qr.manisfest.xml.TagUtil; import org.weasis.dicom.qr.manisfest.xml.XmlDescription; import org.weasis.dicom.util.StringUtil; public class Study implements XmlDescription { private final String studyInstanceUID; private String studyID = null; private String studyDescription = null; private String studyDate = null; private String studyTime = null; private String accessionNumber = null; private String referringPhysicianName = null; private final List<Series> seriesList; public Study(String studyInstanceUID) { if (studyInstanceUID == null) { throw new IllegalArgumentException("studyInstanceUID cannot be null!"); //$NON-NLS-1$ } this.studyInstanceUID = studyInstanceUID; seriesList = new ArrayList<>(); } public String getStudyInstanceUID() { return studyInstanceUID; } public String getStudyDescription() { return studyDescription; } public String getStudyDate() { return studyDate; } public String getStudyID() { return studyID; } public void setStudyID(String studyID) { this.studyID = studyID; } public String getStudyTime() { return studyTime; } public void setStudyTime(String studyTime) { this.studyTime = studyTime; } public String getReferringPhysicianName() { return referringPhysicianName; } public void setReferringPhysicianName(String referringPhysicianName) { this.referringPhysicianName = referringPhysicianName; } public void setStudyDescription(String studyDesc) { this.studyDescription = studyDesc; } public void setStudyDate(String studyDate) { this.studyDate = studyDate; } public String getAccessionNumber() { return accessionNumber; } public void setAccessionNumber(String accessionNumber) { this.accessionNumber = accessionNumber; } public void addSeries(Series s) { if (!seriesList.contains(s)) { seriesList.add(s); } } @Override public String toXml() { StringBuilder result = new StringBuilder(); if (studyInstanceUID != null) { result.append("\n<"); //$NON-NLS-1$ result.append(TagUtil.Level.STUDY); result.append(" "); //$NON-NLS-1$ TagUtil.addXmlAttribute(Tag.StudyInstanceUID, studyInstanceUID, result); TagUtil.addXmlAttribute(Tag.StudyDescription, studyDescription, result); TagUtil.addXmlAttribute(Tag.StudyDate, studyDate, result); TagUtil.addXmlAttribute(Tag.StudyTime, studyTime, result); TagUtil.addXmlAttribute(Tag.AccessionNumber, accessionNumber, result); TagUtil.addXmlAttribute(Tag.StudyID, studyID, result); TagUtil.addXmlAttribute(Tag.ReferringPhysicianName, referringPhysicianName, result); result.append(">"); //$NON-NLS-1$ Collections.sort(seriesList, new Comparator<Series>() { @Override public int compare(Series o1, Series o2) { int nubmer1 = 0; int nubmer2 = 0; try { if (StringUtil.hasText(o1.getSeriesNumber())) { nubmer1 = Integer.parseInt(o1.getSeriesNumber()); } if (StringUtil.hasText(o2.getSeriesNumber())) { nubmer2 = Integer.parseInt(o2.getSeriesNumber()); } } catch (NumberFormatException e) { // Do nothing } int rep = nubmer1 < nubmer2 ? -1 : (nubmer1 == nubmer2 ? 0 : 1); if (rep != 0) { return rep; } return o1.getSeriesInstanceUID().compareTo(o2.getSeriesInstanceUID()); } }); for (Series s : seriesList) { result.append(s.toXml()); } result.append("\n</"); //$NON-NLS-1$ result.append(TagUtil.Level.STUDY); result.append(">"); //$NON-NLS-1$ } return result.toString(); } public boolean isEmpty() { for (Series s : seriesList) { if (!s.isEmpty()) { return false; } } return true; } public Series getSeries(String uid) { for (Series s : seriesList) { if (s.getSeriesInstanceUID().equals(uid)) { return s; } } return null; } public List<Series> getSeriesList() { return seriesList; } }