/*******************************************************************************
* Copyright (c) 2016 Weasis Team and others.
* 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.codec;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.Tag;
import org.weasis.core.api.gui.util.Filter;
import org.weasis.core.api.util.StringUtil;
import org.weasis.dicom.codec.macro.HierachicalSOPInstanceReference;
import org.weasis.dicom.codec.macro.KODocumentModule;
import org.weasis.dicom.codec.macro.SOPInstanceReferenceAndMAC;
import org.weasis.dicom.codec.macro.SeriesAndInstanceReference;
public class AbstractKOSpecialElement extends DicomSpecialElement {
protected Map<String, Map<String, SOPInstanceReferenceAndMAC>> sopInstanceReferenceMapBySeriesUID;
protected Map<String, Map<String, SeriesAndInstanceReference>> seriesAndInstanceReferenceMapByStudyUID;
protected Map<String, HierachicalSOPInstanceReference> hierachicalSOPInstanceReferenceByStudyUID;
public AbstractKOSpecialElement(DicomMediaIO mediaIO) {
super(mediaIO);
}
@Override
protected void initLabel() {
/*
* DICOM PS 3.3 - 2011 - C.17.3 SR Document Content Module
*
* Concept Name Code Sequence: mandatory when type is CONTAINER or the root content item.
*/
StringBuilder buf = new StringBuilder(getLabelPrefix());
Attributes dicom = ((DicomMediaIO) mediaIO).getDicomObject();
Attributes item = dicom.getNestedDataset(Tag.ContentSequence);
if (item != null) {
buf.append(item.getString(Tag.TextValue));
}
label = buf.toString();
}
public Set<String> getReferencedStudyInstanceUIDSet() {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
return hierachicalSOPInstanceReferenceByStudyUID.keySet();
}
public boolean containsStudyInstanceUIDReference(String studyInstanceUIDReference) {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
return hierachicalSOPInstanceReferenceByStudyUID.containsKey(studyInstanceUIDReference);
}
public Set<String> getReferencedSeriesInstanceUIDSet(String studyUID) {
if (seriesAndInstanceReferenceMapByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyUID);
return seriesAndInstanceReferenceBySeriesUID != null
? seriesAndInstanceReferenceMapByStudyUID.get(studyUID).keySet() : null;
}
public Set<String> getReferencedSeriesInstanceUIDSet() {
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
return sopInstanceReferenceMapBySeriesUID.keySet();
}
public boolean containsSeriesInstanceUIDReference(String seriesInstanceUIDReference) {
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
return sopInstanceReferenceMapBySeriesUID.containsKey(seriesInstanceUIDReference);
}
public Set<String> getReferencedSOPInstanceUIDSet() {
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
Set<String> referencedSOPInstanceUIDSet = new LinkedHashSet<>();
for (Map<String, SOPInstanceReferenceAndMAC> sopInstanceReference : sopInstanceReferenceMapBySeriesUID
.values()) {
referencedSOPInstanceUIDSet.addAll(sopInstanceReference.keySet());
}
return referencedSOPInstanceUIDSet;
}
public Set<String> getReferencedSOPInstanceUIDSet(String seriesUID) {
if (seriesUID == null) {
return getReferencedSOPInstanceUIDSet();
}
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesUID);
return sopInstanceReferenceBySOPInstanceUID != null ? sopInstanceReferenceBySOPInstanceUID.keySet() : null;
}
public Map<String, SOPInstanceReferenceAndMAC> getReferencedSOPInstanceUIDObject(String seriesUID) {
if (seriesUID == null) {
return null;
}
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
return sopInstanceReferenceMapBySeriesUID.get(seriesUID);
}
public boolean containsSopInstanceUIDReference(String seriesInstanceUID, String sopInstanceUIDReference) {
Set<String> sopInstanceUIDSet = getReferencedSOPInstanceUIDSet(seriesInstanceUID);
return (sopInstanceUIDSet != null && sopInstanceUIDSet.contains(sopInstanceUIDReference));
}
public boolean containsSopInstanceUIDReference(String sopInstanceUIDReference) {
return containsSopInstanceUIDReference(null, sopInstanceUIDReference);
}
public boolean isEmpty() {
if (sopInstanceReferenceMapBySeriesUID == null) {
updateHierachicalSOPInstanceReference();
}
return sopInstanceReferenceMapBySeriesUID.isEmpty();
}
/**
* Extract all the hierarchical SOP Instance References from the CurrentRequestedProcedureEvidences of the root
* DicomObject into the dedicated Maps. These collections are used to improve access performance for data queries.
*
* @note This method should be called only once since any call to add/remove methods should keep in sync with the
* CurrentRequestedProcedureEvidences of the root DicomObject
*/
protected void updateHierachicalSOPInstanceReference() {
init();
Attributes dcmItems = getMediaReader().getDicomObject();
if (dcmItems != null) {
Collection<HierachicalSOPInstanceReference> referencedStudySequence =
HierachicalSOPInstanceReference.toHierachicalSOPInstanceReferenceMacros(
dcmItems.getSequence(Tag.CurrentRequestedProcedureEvidenceSequence));
if (referencedStudySequence != null) {
boolean sopInstanceExist = false;
for (HierachicalSOPInstanceReference studyRef : referencedStudySequence) {
Collection<SeriesAndInstanceReference> referencedSeriesSequence = studyRef.getReferencedSeries();
if (referencedSeriesSequence == null) {
continue;
}
String studyUID = studyRef.getStudyInstanceUID();
for (SeriesAndInstanceReference serieRef : referencedSeriesSequence) {
Collection<SOPInstanceReferenceAndMAC> referencedSOPInstanceSequence =
serieRef.getReferencedSOPInstances();
if (referencedSOPInstanceSequence == null) {
continue;
}
String seriesUID = serieRef.getSeriesInstanceUID();
for (SOPInstanceReferenceAndMAC sopRef : referencedSOPInstanceSequence) {
String sopInstanceUID = sopRef.getReferencedSOPInstanceUID();
if (!StringUtil.hasText(sopInstanceUID)) {
continue;
}
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesUID);
if (sopInstanceReferenceBySOPInstanceUID == null) {
sopInstanceReferenceBySOPInstanceUID = new LinkedHashMap<>();
sopInstanceReferenceMapBySeriesUID.put(seriesUID, sopInstanceReferenceBySOPInstanceUID);
}
sopInstanceReferenceBySOPInstanceUID.put(sopInstanceUID, sopRef);
sopInstanceExist = true;
}
if (sopInstanceExist) {
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyUID);
if (seriesAndInstanceReferenceBySeriesUID == null) {
seriesAndInstanceReferenceBySeriesUID = new LinkedHashMap<>();
seriesAndInstanceReferenceMapByStudyUID.put(studyUID,
seriesAndInstanceReferenceBySeriesUID);
}
seriesAndInstanceReferenceBySeriesUID.put(seriesUID, serieRef);
}
}
if (sopInstanceExist) {
hierachicalSOPInstanceReferenceByStudyUID.put(studyUID, studyRef);
}
}
}
}
}
private void init() {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
hierachicalSOPInstanceReferenceByStudyUID = new LinkedHashMap<>();
}
if (seriesAndInstanceReferenceMapByStudyUID == null) {
seriesAndInstanceReferenceMapByStudyUID = new LinkedHashMap<>();
}
if (sopInstanceReferenceMapBySeriesUID == null) {
sopInstanceReferenceMapBySeriesUID = new LinkedHashMap<>();
}
}
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean addKeyObject(DicomImageElement dicomImage) {
String studyInstanceUID = TagD.getTagValue(this, Tag.StudyInstanceUID, String.class);
String seriesInstanceUID = TagD.getTagValue(this, Tag.SeriesInstanceUID, String.class);
String sopInstanceUID = TagD.getTagValue(this, Tag.SOPInstanceUID, String.class);
String sopClassUID = TagD.getTagValue(this, Tag.SOPClassUID, String.class);
return addKeyObject(studyInstanceUID, seriesInstanceUID, sopInstanceUID, sopClassUID);
}
public boolean addKeyObject(String studyInstanceUID, String seriesInstanceUID, String sopInstanceUID,
String sopClassUID) {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
// Get the SOPInstanceReferenceMap for this seriesUID
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesInstanceUID);
if (sopInstanceReferenceBySOPInstanceUID == null) {
// the seriesUID is not referenced, create a new SOPInstanceReferenceMap
sopInstanceReferenceMapBySeriesUID.put(seriesInstanceUID,
sopInstanceReferenceBySOPInstanceUID = new LinkedHashMap<>());
} else if (sopInstanceReferenceBySOPInstanceUID.containsKey(sopInstanceUID)) {
// the sopInstanceUID is already referenced, skip the job
return false;
}
// Create the new SOPInstanceReferenceAndMAC and add to the SOPInstanceReferenceMap
SOPInstanceReferenceAndMAC referencedSOP = new SOPInstanceReferenceAndMAC();
referencedSOP.setReferencedSOPInstanceUID(sopInstanceUID);
referencedSOP.setReferencedSOPClassUID(sopClassUID);
sopInstanceReferenceBySOPInstanceUID.put(sopInstanceUID, referencedSOP);
// Get the SeriesAndInstanceReferenceMap for this studyUID
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyInstanceUID);
if (seriesAndInstanceReferenceBySeriesUID == null) {
// the studyUID is not referenced, create a new one SeriesAndInstanceReferenceMap
seriesAndInstanceReferenceMapByStudyUID.put(studyInstanceUID,
seriesAndInstanceReferenceBySeriesUID = new LinkedHashMap<>());
}
// Get the SeriesAndInstanceReference for this seriesUID
SeriesAndInstanceReference referencedSerie = seriesAndInstanceReferenceBySeriesUID.get(seriesInstanceUID);
if (referencedSerie == null) {
// the seriesUID is not referenced, create a new SeriesAndInstanceReference
referencedSerie = new SeriesAndInstanceReference();
referencedSerie.setSeriesInstanceUID(seriesInstanceUID);
seriesAndInstanceReferenceBySeriesUID.put(seriesInstanceUID, referencedSerie);
}
// Update the current SeriesAndInstanceReference with the referencedSOPInstance Sequence
List<SOPInstanceReferenceAndMAC> referencedSOPInstances =
new ArrayList<>(sopInstanceReferenceBySOPInstanceUID.values());
referencedSerie.setReferencedSOPInstances(referencedSOPInstances);
// Get the HierachicalSOPInstanceReference for this studyUID
HierachicalSOPInstanceReference hierachicalDicom =
hierachicalSOPInstanceReferenceByStudyUID.get(studyInstanceUID);
if (hierachicalDicom == null) {
// the studyUID is not referenced, create a new one HierachicalSOPInstanceReference
hierachicalDicom = new HierachicalSOPInstanceReference();
hierachicalDicom.setStudyInstanceUID(studyInstanceUID);
hierachicalSOPInstanceReferenceByStudyUID.put(studyInstanceUID, hierachicalDicom);
}
// Update the current HierachicalSOPInstance with the referencedSeries Sequence
List<SeriesAndInstanceReference> referencedSeries =
new ArrayList<>(seriesAndInstanceReferenceBySeriesUID.values());
hierachicalDicom.setReferencedSeries(referencedSeries);
// Update the CurrentRequestedProcedureEvidences for the root dcmItems
Attributes dcmItems = getMediaReader().getDicomObject();
List<HierachicalSOPInstanceReference> referencedStudies =
new ArrayList<>(hierachicalSOPInstanceReferenceByStudyUID.values());
new KODocumentModule(dcmItems).setCurrentRequestedProcedureEvidences(referencedStudies);
return true;
}
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean addKeyObjects(String studyInstanceUID, String seriesInstanceUID, Collection<String> sopInstanceUIDs,
String sopClassUID) {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
// Get the SOPInstanceReferenceMap for this seriesUID
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesInstanceUID);
boolean newReferenceAdded = false;
for (String sopInstanceUID : sopInstanceUIDs) {
if (sopInstanceReferenceBySOPInstanceUID == null) {
// the seriesUID is not referenced, create a new SOPInstanceReferenceMap
sopInstanceReferenceBySOPInstanceUID = new LinkedHashMap<>();
sopInstanceReferenceMapBySeriesUID.put(seriesInstanceUID, sopInstanceReferenceBySOPInstanceUID);
} else if (sopInstanceReferenceBySOPInstanceUID.containsKey(sopInstanceUID)) {
// the sopInstanceUID is already referenced, keep continue
continue;
}
// Create the new SOPInstanceReferenceAndMAC and add to the SOPInstanceReferenceMap
SOPInstanceReferenceAndMAC referencedSOP = new SOPInstanceReferenceAndMAC();
referencedSOP.setReferencedSOPInstanceUID(sopInstanceUID);
referencedSOP.setReferencedSOPClassUID(sopClassUID);
sopInstanceReferenceBySOPInstanceUID.put(sopInstanceUID, referencedSOP);
newReferenceAdded = true;
}
if (!newReferenceAdded) {
return false; // UID's parameters were already referenced , skip the job
}
// Get the SeriesAndInstanceReferenceMap for this studyUID
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyInstanceUID);
if (seriesAndInstanceReferenceBySeriesUID == null) {
// the studyUID is not referenced, create a new one SeriesAndInstanceReferenceMap
seriesAndInstanceReferenceBySeriesUID = new LinkedHashMap<>();
seriesAndInstanceReferenceMapByStudyUID.put(studyInstanceUID, seriesAndInstanceReferenceBySeriesUID);
}
// Get the SeriesAndInstanceReference for this seriesUID
SeriesAndInstanceReference referencedSerie = seriesAndInstanceReferenceBySeriesUID.get(seriesInstanceUID);
if (referencedSerie == null) {
// the seriesUID is not referenced, create a new SeriesAndInstanceReference
referencedSerie = new SeriesAndInstanceReference();
referencedSerie.setSeriesInstanceUID(seriesInstanceUID);
seriesAndInstanceReferenceBySeriesUID.put(seriesInstanceUID, referencedSerie);
}
// Update the current SeriesAndInstanceReference with the referencedSOPInstance Sequence
List<SOPInstanceReferenceAndMAC> referencedSOPInstances =
new ArrayList<>(sopInstanceReferenceBySOPInstanceUID.values());
referencedSerie.setReferencedSOPInstances(referencedSOPInstances);
// Get the HierachicalSOPInstanceReference for this studyUID
HierachicalSOPInstanceReference hierachicalDicom =
hierachicalSOPInstanceReferenceByStudyUID.get(studyInstanceUID);
if (hierachicalDicom == null) {
// the studyUID is not referenced, create a new one HierachicalSOPInstanceReference
hierachicalDicom = new HierachicalSOPInstanceReference();
hierachicalDicom.setStudyInstanceUID(studyInstanceUID);
hierachicalSOPInstanceReferenceByStudyUID.put(studyInstanceUID, hierachicalDicom);
}
// Update the current HierachicalSOPInstance with the referencedSeries Sequence
List<SeriesAndInstanceReference> referencedSeries =
new ArrayList<>(seriesAndInstanceReferenceBySeriesUID.values());
hierachicalDicom.setReferencedSeries(referencedSeries);
// Update the CurrentRequestedProcedureEvidences for the root dcmItems
Attributes dcmItems = getMediaReader().getDicomObject();
List<HierachicalSOPInstanceReference> referencedStudies =
new ArrayList<>(hierachicalSOPInstanceReferenceByStudyUID.values());
new KODocumentModule(dcmItems).setCurrentRequestedProcedureEvidences(referencedStudies);
return true;
}
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean removeKeyObject(DicomImageElement dicomImage) {
String studyInstanceUID = TagD.getTagValue(this, Tag.StudyInstanceUID, String.class);
String seriesInstanceUID = TagD.getTagValue(this, Tag.SeriesInstanceUID, String.class);
String sopInstanceUID = TagD.getTagValue(this, Tag.SOPInstanceUID, String.class);
return removeKeyObject(studyInstanceUID, seriesInstanceUID, sopInstanceUID);
}
public boolean removeKeyObject(String studyInstanceUID, String seriesInstanceUID, String sopInstanceUID) {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
// Get the SeriesAndInstanceReferenceMap for this studyUID
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyInstanceUID);
// Get the SOPInstanceReferenceMap for this seriesUID
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesInstanceUID);
if (sopInstanceReferenceBySOPInstanceUID == null || seriesAndInstanceReferenceBySeriesUID == null
|| sopInstanceReferenceBySOPInstanceUID.remove(sopInstanceUID) == null) {
// UID's parameters were not referenced, skip the job
return false;
}
if (sopInstanceReferenceBySOPInstanceUID.isEmpty()) {
sopInstanceReferenceMapBySeriesUID.remove(seriesInstanceUID);
seriesAndInstanceReferenceBySeriesUID.remove(seriesInstanceUID);
if (seriesAndInstanceReferenceBySeriesUID.isEmpty()) {
seriesAndInstanceReferenceMapByStudyUID.remove(studyInstanceUID);
hierachicalSOPInstanceReferenceByStudyUID.remove(studyInstanceUID);
} else {
// Get the HierachicalSOPInstanceReference for this studyUID
HierachicalSOPInstanceReference hierachicalDicom =
hierachicalSOPInstanceReferenceByStudyUID.get(studyInstanceUID);
// Update the current HierachicalSOPInstance with the referencedSeries Sequence
List<SeriesAndInstanceReference> referencedSeries =
new ArrayList<>(seriesAndInstanceReferenceBySeriesUID.values());
hierachicalDicom.setReferencedSeries(referencedSeries);
}
} else {
// Get the SeriesAndInstanceReference for this seriesUID
SeriesAndInstanceReference referencedSeries = seriesAndInstanceReferenceBySeriesUID.get(seriesInstanceUID);
// Update the current SeriesAndInstanceReference with the referencedSOPInstance Sequence
List<SOPInstanceReferenceAndMAC> referencedSOPInstances =
new ArrayList<>(sopInstanceReferenceBySOPInstanceUID.values());
referencedSeries.setReferencedSOPInstances(referencedSOPInstances);
}
// Update the CurrentRequestedProcedureEvidences for the root dcmItems
Attributes dcmItems = getMediaReader().getDicomObject();
List<HierachicalSOPInstanceReference> referencedStudies = null;
if (!hierachicalSOPInstanceReferenceByStudyUID.isEmpty()) {
referencedStudies = new ArrayList<>(hierachicalSOPInstanceReferenceByStudyUID.values());
}
new KODocumentModule(dcmItems).setCurrentRequestedProcedureEvidences(referencedStudies);
return true;
}
//
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean removeKeyObjects(String studyInstanceUID, String seriesInstanceUID,
Collection<String> sopInstanceUIDs) {
if (hierachicalSOPInstanceReferenceByStudyUID == null) {
updateHierachicalSOPInstanceReference();
}
// Get the SeriesAndInstanceReferenceMap for this studyUID
Map<String, SeriesAndInstanceReference> seriesAndInstanceReferenceBySeriesUID =
seriesAndInstanceReferenceMapByStudyUID.get(studyInstanceUID);
// Get the SOPInstanceReferenceMap for this seriesUID
Map<String, SOPInstanceReferenceAndMAC> sopInstanceReferenceBySOPInstanceUID =
sopInstanceReferenceMapBySeriesUID.get(seriesInstanceUID);
if (sopInstanceReferenceBySOPInstanceUID == null || seriesAndInstanceReferenceBySeriesUID == null) {
return false;
}
boolean referenceRemoved = false;
for (String sopInstanceUID : sopInstanceUIDs) {
if (sopInstanceReferenceBySOPInstanceUID.remove(sopInstanceUID) != null) {
referenceRemoved = true;
}
}
if (!referenceRemoved) {
return false; // UID's parameters were not referenced, skip the job
}
if (!sopInstanceReferenceBySOPInstanceUID.isEmpty()) {
// Get the SeriesAndInstanceReference for this seriesUID
SeriesAndInstanceReference referencedSeries = seriesAndInstanceReferenceBySeriesUID.get(seriesInstanceUID);
// Update the current SeriesAndInstanceReference with the referencedSOPInstance Sequence
List<SOPInstanceReferenceAndMAC> referencedSOPInstances =
new ArrayList<>(sopInstanceReferenceBySOPInstanceUID.values());
referencedSeries.setReferencedSOPInstances(referencedSOPInstances);
} else {
sopInstanceReferenceMapBySeriesUID.remove(seriesInstanceUID);
seriesAndInstanceReferenceBySeriesUID.remove(seriesInstanceUID);
if (!seriesAndInstanceReferenceBySeriesUID.isEmpty()) {
// Get the HierachicalSOPInstanceReference for this studyUID
HierachicalSOPInstanceReference hierachicalDicom =
hierachicalSOPInstanceReferenceByStudyUID.get(studyInstanceUID);
// Update the current HierachicalSOPInstance with the referencedSeries Sequence
List<SeriesAndInstanceReference> referencedSeries =
new ArrayList<>(seriesAndInstanceReferenceBySeriesUID.values());
hierachicalDicom.setReferencedSeries(referencedSeries);
} else {
seriesAndInstanceReferenceMapByStudyUID.remove(studyInstanceUID);
hierachicalSOPInstanceReferenceByStudyUID.remove(studyInstanceUID);
}
}
// Update the CurrentRequestedProcedureEvidences for the root dcmItems
Attributes dcmItems = getMediaReader().getDicomObject();
List<HierachicalSOPInstanceReference> referencedStudies = null;
if (!hierachicalSOPInstanceReferenceByStudyUID.isEmpty()) {
referencedStudies = new ArrayList<>(hierachicalSOPInstanceReferenceByStudyUID.values());
}
new KODocumentModule(dcmItems).setCurrentRequestedProcedureEvidences(referencedStudies);
return true;
}
// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public Filter<DicomImageElement> getSOPInstanceUIDFilter() {
return new Filter<DicomImageElement>() {
@Override
public boolean passes(DicomImageElement dicom) {
String seriesInstanceUID = TagD.getTagValue(dicom, Tag.SeriesInstanceUID, String.class);
if (dicom == null || seriesInstanceUID == null) {
return false;
}
String sopInstanceUID = TagD.getTagValue(dicom, Tag.SOPInstanceUID, String.class);
Set<String> referencedSOPInstanceUIDSet = getReferencedSOPInstanceUIDSet(seriesInstanceUID);
return referencedSOPInstanceUIDSet == null ? false
: referencedSOPInstanceUIDSet.contains(sopInstanceUID);
}
};
}
public String getDocumentTitle() {
Attributes dcmItems = getMediaReader().getDicomObject();
if (dcmItems != null) {
Attributes item = dcmItems.getNestedDataset(Tag.ConceptNameCodeSequence);
if (item != null) {
return item.getString(Tag.CodeMeaning, null);
}
}
return null;
}
}