private static boolean isSimilar(List<Rule> list, Series<?> s, final MediaElement media) { final MediaElement firstMedia = s.getMedia(0, null, null); if (firstMedia == null) { // no image return true; } // Not similar when the instances have different classes (even when inheriting class) if (firstMedia.getClass() != media.getClass()) { return false; } for (Rule rule : list) { if (!rule.isTagValueMatching(firstMedia, media)) { return false; } } return true; }
@Override public boolean isOpen() { Boolean open = (Boolean) getTagValue(TagW.SeriesOpen); return open == null ? false : open; }
public final int getImageIndex(E source, Filter<E> filter, Comparator<E> sort) { if (source == null) { return -1; } Iterable<E> list = getMedias(filter, sort); synchronized (this) { int index = 0; for (E e : list) { if (e == source) { return index; } index++; } } return -1; }
@Override public void setSelected(boolean selected, E selectedImage) { if (this.isSelected() != selected) { setTag(TagW.SeriesSelected, selected); Thumbnail thumb = (Thumbnail) getTagValue(TagW.Thumbnail); if (thumb != null) { thumb.repaint(); } } }
@Override public void setOpen(boolean open) { if (this.isOpen() != open) { setTag(TagW.SeriesOpen, open); Thumbnail thumb = (Thumbnail) getTagValue(TagW.Thumbnail); if (thumb != null) { thumb.repaint(); } if (!open) { resetSortedMediasMap(); } } }
@Override public void setFocused(boolean focused) { if (this.isFocused() != focused) { setTag(TagW.SeriesFocused, focused); Thumbnail thumb = (Thumbnail) getTagValue(TagW.Thumbnail); if (thumb != null) { thumb.repaint(); } } }
if (dicomSeries == null) { dicomSeries = dicomReader.buildSeries(seriesUID); dicomSeries.setTag(TagW.ExplorerModel, dicomModel); dicomSeries.setTag(TagW.ObjectToSave, Boolean.TRUE); dicomReader.writeMetaData(dicomSeries); dicomModel.addHierarchyNode(study, dicomSeries); dicomSeries.setFileSize(dicomSeries.getFileSize() + medias[0].getLength()); SeriesThumbnail t = (SeriesThumbnail) dicomSeries.getTagValue(TagW.Thumbnail); if (t == null) { t = DicomExplorer.createThumbnail(dicomSeries, dicomModel, Thumbnail.DEFAULT_SIZE); dicomSeries.setTag(TagW.Thumbnail, t); Optional.ofNullable(t).ifPresent(v -> v.repaint()); Integer splitNb = (Integer) dicomSeries.getTagValue(TagW.SplitSeriesNumber); if (splitNb != null) { dicomModel.firePropertyChange( SeriesViewerFactory plugin = UIManager.getViewerFactory(dicomSeries.getMimeType()); if (plugin != null && !(plugin instanceof MimeSystemAppFactory)) { openPlugin = false; dicomSeries.setFileSize(dicomSeries.getFileSize() + medias[0].getLength()); Thumbnail t = (Thumbnail) dicomSeries.getTagValue(TagW.Thumbnail); if (t != null) { t.repaint();
private Series splitSeries(DicomMediaIO dicomReader, Series original) { MediaSeriesGroup st = getParent(original, DicomModel.study); String seriesUID = TagD.getTagValue(original, Tag.SeriesInstanceUID, String.class); int k = 1; while (true) { String uid = "#" + k + "." + seriesUID; //$NON-NLS-1$ //$NON-NLS-2$ MediaSeriesGroup group = getHierarchyNode(st, uid); if (group == null) { break; } k++; } String uid = "#" + k + "." + seriesUID; //$NON-NLS-1$ //$NON-NLS-2$ Series s = dicomReader.buildSeries(uid); dicomReader.writeMetaData(s); Object val = original.getTagValue(TagW.SplitSeriesNumber); if (val == null) { original.setTag(TagW.SplitSeriesNumber, 1); } s.setTag(TagW.SplitSeriesNumber, k + 1); s.setTag(TagW.ExplorerModel, this); s.setTag(TagW.WadoParameters, original.getTagValue(TagW.WadoParameters)); addHierarchyNode(st, s); LOGGER.info("Series splitting: {}", s); //$NON-NLS-1$ return s; }
public synchronized void setSeries(Series newSeries) { MediaSeries<?> oldsequence = this.series; this.series = newSeries; if (oldsequence == null && newSeries == null) { return; } if (oldsequence != null && oldsequence.equals(newSeries)) { return; } closingSeries(oldsequence); if (series != null) { DicomSpecialElement s = null; List<DicomSpecialElement> specialElements = (List<DicomSpecialElement>) series.getTagValue(TagW.DicomSpecialElementList); if (specialElements != null && !specialElements.isEmpty()) { // Should have only one object by series (if more, they are split in several sub-series in dicomModel) s = specialElements.get(0); } series.setOpen(true); series.setFocused(true); series.setSelected(true, null); try { showPlayer(s); } catch (Exception e) { LOGGER.error("Build audio player", e); //$NON-NLS-1$ } } }
List<SeriesViewerFactory> plugins = UIManager.getViewerFactoryList(new String[] { series.getMimeType() }); if (!selList.contains(series)) { selList.setSelectionInterval(series, series); String mime = series.getMimeType(); for (Series s : selList) { if (!mime.equals(s.getMimeType())) { multipleMimes = true; break; if (mime.equals(s.getMimeType())) { seriesList.add(s); item5.addActionListener(e -> { SeriesViewer<?> viewer = viewerFactory.createSeriesViewer(null); MediaElement dcm = series.getMedia(MEDIA_POSITION.FIRST, null, null); DicomFieldsView.showHeaderDialog(viewer, series, dcm); }); Object splitNb = series.getTagValue(TagW.SplitSeriesNumber); if (splitNb != null && seriesList.size() > 1) { String uid = TagD.getTagValue(series, Tag.SeriesInstanceUID, String.class); }); popupMenu.add(item2); if (series.size(null) > 1) { if (series.getMedia(0, null, null) instanceof ImageElement) { popupMenu.add(new JSeparator()); JMenu menu = new JMenu(Messages.getString("DicomExplorer.build_thumb")); //$NON-NLS-1$
private void replaceSeries(DicomMediaIO dicomReader, Series original, MediaElement media) { MediaSeriesGroup st = getParent(original, DicomModel.study); String seriesUID = TagD.getTagValue(original, Tag.SeriesInstanceUID, String.class); int k = 1; while (true) { String uid = "#" + k + "." + seriesUID; //$NON-NLS-1$ //$NON-NLS-2$ MediaSeriesGroup group = getHierarchyNode(st, uid); if (group == null) { break; } k++; } String uid = "#" + k + "." + seriesUID; //$NON-NLS-1$ //$NON-NLS-2$ Series s = dicomReader.buildSeries(uid); dicomReader.writeMetaData(s); Object val = original.getTagValue(TagW.SplitSeriesNumber); if (val == null) { // -1 convention to exclude this Series original.setTag(TagW.SplitSeriesNumber, -1); } s.setTag(TagW.SplitSeriesNumber, k); s.setTag(TagW.ExplorerModel, this); s.setTag(TagW.WadoParameters, original.getTagValue(TagW.WadoParameters)); addHierarchyNode(st, s); s.addMedia(media); LOGGER.info("Replace Series: {}", s); //$NON-NLS-1$ }
this.dicomSeries.setSeriesLoader(null); DownloadManager.removeLoadSeries(this, dicomModel); new Object[] { AuditLog.MARKER_PERF, getLoadType(), dicomSeries.getTagValue(dicomSeries.getTagID()), TagD.getTagValue(dicomSeries, Tag.Modality, String.class), getImageNumber(), (long) dicomSeries.getFileSize(), getDownloadTime() }); dicomSeries.removeTag(DOWNLOAD_START_TIME); final SeriesThumbnail thumbnail = (SeriesThumbnail) dicomSeries.getTagValue(TagW.Thumbnail); || dicomSeries.getTagValue(TagW.DirectDownloadThumbnail) != null) { thumbnail.reBuildThumbnail(MediaSeries.MEDIA_POSITION.MIDDLE); } else { dicomModel.addSpecialModality(dicomSeries); List<DicomSpecialElement> list = (List<DicomSpecialElement>) dicomSeries.getTagValue(TagW.DicomSpecialElementList); if (list != null) { list.stream().filter(DicomSpecialElement.class::isInstance).map(DicomSpecialElement.class::cast) Integer splitNb = (Integer) dicomSeries.getTagValue(TagW.SplitSeriesNumber); if (splitNb != null) { dicomModel.firePropertyChange( new ObservableEvent(ObservableEvent.BasicAction.UPDATE, dicomModel, null, dicomSeries)); } else if (dicomSeries.size(null) == 0 && dicomSeries.getTagValue(TagW.DicomSpecialElementList) == null && !hasDownloadFailed()) {
seq = (Series) transferable.getTransferData(Series.sequenceDataFlavor); if (seq == null || seq.size(null) == 0) { return false; DataExplorerModel model = (DataExplorerModel) seq.getTagValue(TagW.ExplorerModel); if (seq.getMedia(0, null, null) instanceof ImageElement && model instanceof TreeModel) { TreeModel treeModel = (TreeModel) model;
private static void buildSeries(DefaultMutableTreeNode studyNode, Series<?> series) { DefaultMutableTreeNode seriesNode = new ToolTipTreeNode(series, true); List<DicomSpecialElement> specialElements = (List<DicomSpecialElement>) series.getTagValue(TagW.DicomSpecialElementList); if (specialElements != null) { for (DicomSpecialElement specialElement : specialElements) { for (MediaElement dicom : series.getMedias(null, null)) { seriesNode.add(new DefaultMutableTreeNode(dicom, false) { @Override String seriesInstanceUID = UIDUtils.createUID(); Series<?> prSeries = new DicomSeries(seriesInstanceUID); prSeries.setTag(TagD.get(Tag.SeriesNumber), TagD.getTagValue(series, Tag.SeriesNumber, Integer.class)); prSeries.setTag(TagD.get(Tag.Modality), "PR"); //$NON-NLS-1$ prSeries.setTag(TagD.get(Tag.SeriesInstanceUID), seriesInstanceUID); prSeries.setTag(TagW.ObjectToSave, Boolean.TRUE); prSeries.setTag(SourceSeriesForPR, series); prSeries.setTag(TagD.get(Tag.SeriesDescription), Optional.ofNullable(TagD.getTagValue(series, Tag.SeriesDescription, String.class)).orElse("") //$NON-NLS-1$ + " [GRAPHICS]"); //$NON-NLS-1$
protected void updateSeriesProgression(long addSize) { series.setFileSize(series.getFileSize() + addSize); GuiExecutor.instance().execute(() -> { Thumbnail thumb = (Thumbnail) series.getTagValue(TagW.Thumbnail); if (thumb != null) { thumb.repaint(); } }); }
public synchronized void setSeries(Series<?> newSeries) { MediaSeries<?> oldsequence = this.series; this.series = newSeries; if (oldsequence == null && newSeries == null) { return; } if (oldsequence != null && oldsequence.equals(newSeries)) { return; } closingSeries(oldsequence); if (series != null) { // Should have only one object by series (if more, they are split in several sub-series in dicomModel) DicomSpecialElement s = DicomModel.getFirstSpecialElement(series, DicomSpecialElement.class); displayLimitedDicomInfo(s); series.setOpen(true); series.setFocused(true); series.setSelected(true, null); } }
private boolean isSOPInstanceUIDExist(MediaSeriesGroup study, Series dicomSeries, String seriesUID, Object sopUID) { TagW sopTag = TagD.getUID(Level.INSTANCE); if (dicomSeries.hasMediaContains(sopTag, sopUID)) { return true; } Object splitNb = dicomSeries.getTagValue(TagW.SplitSeriesNumber); if (splitNb != null && study != null) { String uid = TagD.getTagValue(dicomSeries, Tag.SeriesInstanceUID, String.class); if (uid != null) { Collection<MediaSeriesGroup> seriesList = dicomModel.getChildren(study); for (Iterator<MediaSeriesGroup> it = seriesList.iterator(); it.hasNext();) { MediaSeriesGroup group = it.next(); if (dicomSeries != group && group instanceof Series) { Series s = (Series) group; if (uid.equals(TagD.getTagValue(group, Tag.SeriesInstanceUID))) { if (s.hasMediaContains(sopTag, sopUID)) { return true; } } } } } } return false; } }
private int getImageNumber() { int val = dicomSeries.size(null); Integer splitNb = (Integer) dicomSeries.getTagValue(TagW.SplitSeriesNumber); if (splitNb != null) { MediaSeriesGroup study = dicomModel.getParent(dicomSeries, DicomModel.study); if (study != null) { String uid = TagD.getTagValue(dicomSeries, Tag.SeriesInstanceUID, String.class); if (uid != null) { Collection<MediaSeriesGroup> list = dicomModel.getChildren(study); list.remove(dicomSeries); for (MediaSeriesGroup s : list) { if (s instanceof Series && uid.equals(TagD.getTagValue(s, Tag.SeriesInstanceUID))) { val += ((Series<?>) s).size(null); } } } } } return val; }
dicomSeries.setTag(seriesTag, seriesUID); dicomSeries.setTag(TagW.ExplorerModel, model); dicomSeries.setTag(TagW.WadoParameters, wadoParameters); dicomSeries.setTagNoNull(TagW.WadoTransferSyntaxUID, TagUtil.getTagAttribute(xmler, TagW.WadoTransferSyntaxUID.getKeyword(), null)); dicomSeries.setTagNoNull(TagW.WadoCompressionRate, TagUtil.getIntegerTagAttribute(xmler, TagW.WadoCompressionRate.getKeyword(), null)); dicomSeries.setTagNoNull(TagW.DirectDownloadThumbnail, TagUtil.getTagAttribute(xmler, TagW.DirectDownloadThumbnail.getKeyword(), null)); WadoParameters wado = (WadoParameters) dicomSeries.getTagValue(TagW.WadoParameters); if (wado == null) { dicomSeries.setTag(TagW.WadoParameters, wadoParameters); } else if (!wado.getBaseURL().equals(wadoParameters.getBaseURL())) { LOGGER.error("Wado parameters must be unique within a DICOM Series: {}", dicomSeries); //$NON-NLS-1$ Optional.ofNullable((SeriesInstanceList) dicomSeries.getTagValue(TagW.WadoInstanceReferenceList)) .orElseGet(SeriesInstanceList::new); dicomSeries.setTag(TagW.WadoInstanceReferenceList, seriesInstanceList);
MediaElement[] medias = reader.getMediaElement(); if (medias != null) { firstImageToDisplay = dicomSeries.size(null) == 0; if (firstImageToDisplay) { MediaSeriesGroup patient = dicomModel.getParent(dicomSeries, DicomModel.patient); dicomModel.applySplittingRules(dicomSeries, media); if (firstImageToDisplay && dicomSeries.size(null) == 0) { firstImageToDisplay = false; Thumbnail thumb = (Thumbnail) dicomSeries.getTagValue(TagW.Thumbnail); if (thumb != null) { thumb.repaint(); SeriesViewerFactory plugin = UIManager.getViewerFactory(dicomSeries.getMimeType()); if (plugin != null && !(plugin instanceof MimeSystemAppFactory)) { ViewerPluginBuilder.openSequenceInPlugin(plugin, dicomSeries, dicomModel, true, true);