Skip to content

Commit

Permalink
Add group by time range. Fix deleting thumbnails
Browse files Browse the repository at this point in the history
  • Loading branch information
nroduit committed Aug 4, 2016
1 parent e3f9f83 commit 745c023
Show file tree
Hide file tree
Showing 8 changed files with 189 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Collection;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -76,7 +78,7 @@ public static AcquireImageInfo findByImage(ImageElement image) {
}

public static List<AcquireImageInfo> findbySerie(Serie serie) {
return getInstance()._findbySerie(serie);
return getAcquireImageInfoList().stream().filter(i -> i.getSerie().equals(serie)).collect(Collectors.toList());
}

public static List<Serie> getBySeries() {
Expand All @@ -85,19 +87,68 @@ public static List<Serie> getBySeries() {
}

public static Map<Serie, List<AcquireImageInfo>> groupBySeries() {
return getInstance()._groupBySeries();
return getAcquireImageInfoList().stream().collect(Collectors.groupingBy(AcquireImageInfo::getSerie));
}

public static Serie getSerie(Serie searched) {
return getInstance()._getSerie(searched);
Optional<Serie> serie = getBySeries().stream().filter(s -> s.equals(searched)).findFirst();
if (serie.isPresent()) {
return serie.get();
}
return searched;
}

public static void remove(ImageElement element) {
Optional.ofNullable(element).ifPresent(e -> getInstance().images.remove(e.getMediaURI()));
}

public static void importImages(Serie searched, List<ImageElement> selected) {
getInstance()._importImages(searched, selected);
public static void importImages(Serie searched, List<ImageElement> selected, int maxRangeInMinutes) {
Serie serie = null;

if (!Serie.Type.DATE.equals(searched.getType())) {
serie = AcquireManager.getSerie(searched);
}

for (ImageElement element : selected) {
AcquireImageInfo info = AcquireManager.findByImage(element);
if (info == null) {
continue;
}

if (Serie.Type.DATE.equals(searched.getType())) {
LocalDateTime date = TagD.dateTime(Tag.ContentDate, Tag.ContentTime, info.getImage());
Optional<Serie> ser = getBySeries().stream().filter(s -> Serie.Type.DATE.equals(s.getType())).filter(s -> {
LocalDateTime start = s.getDate();
LocalDateTime end = date;
if (end.isBefore(start)) {
start = date;
end = s.getDate();
}
Duration duration = Duration.between(start, end);
return duration.toMinutes() < maxRangeInMinutes;
}).findFirst();

serie = ser.isPresent() ? ser.get() :AcquireManager.getSerie(new Serie(date));
info.setSerie(serie);
if(ser.isPresent()){
List<AcquireImageInfo> list = findbySerie(serie);
if(list.size() > 2){
recalculateCentralTime(list);
}
}
}
else {
info.setSerie(serie);
}
}
}



private static void recalculateCentralTime(List<AcquireImageInfo> list) {
List<AcquireImageInfo> sortedList = list.stream().sorted(Comparator.comparing(i -> TagD.dateTime(Tag.ContentDate, Tag.ContentTime, i.getImage()))).collect(Collectors.toList());
AcquireImageInfo info = sortedList.get(sortedList.size() /2 );
info.getSerie().setDate(TagD.dateTime(Tag.ContentDate, Tag.ContentTime, info.getImage()));
}

public static List<ImageElement> toImageElement(List<? extends MediaElement<?>> medias) {
Expand All @@ -107,6 +158,12 @@ public static List<ImageElement> toImageElement(List<? extends MediaElement<?>>

/* ===================================== PRIVATE METHODS ===================================== */


private static List<AcquireImageInfo> getAcquireImageInfoList() {
return getInstance().images.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());

}

private AcquireImageInfo getAcquireImageInfo(ImageElement image) {
if (image == null) {
return null;
Expand Down Expand Up @@ -206,56 +263,12 @@ private void readTags(ImageElement element) {
} catch (ImageProcessingException | IOException e) {
LOGGER.error("Error when reading exif tags", e);
}
LocalDateTime dateTime = date == null ? LocalDateTime.from(Instant.ofEpochMilli(element.getLastModified()).atZone(ZoneId.systemDefault())) : TagUtil.toLocalDateTime(date);
LocalDateTime dateTime = date == null
? LocalDateTime.from(Instant.ofEpochMilli(element.getLastModified()).atZone(ZoneId.systemDefault()))
: TagUtil.toLocalDateTime(date);
element.setTagNoNull(TagD.get(Tag.ContentDate), dateTime.toLocalDate());
element.setTagNoNull(TagD.get(Tag.ContentTime), dateTime.toLocalTime());
}
}

private List<Serie> _getBySeries() {
return images.entrySet().stream().map(e -> e.getValue().getSerie()).distinct().sorted()
.collect(Collectors.toList());
}

private List<AcquireImageInfo> _getAcquireImageInfoList() {
return images.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());

}

private Map<Serie, List<AcquireImageInfo>> _groupBySeries() {
return _getAcquireImageInfoList().stream().collect(Collectors.groupingBy(AcquireImageInfo::getSerie));
}

private Serie _getSerie(Serie searched) {
Optional<Serie> serie = _getBySeries().stream().filter((s) -> s.equals(searched)).findFirst();
if (serie.isPresent()) {
return serie.get();
}
return searched;
}

public List<AcquireImageInfo> _findbySerie(Serie serie) {
return _getAcquireImageInfoList().stream().filter(i -> i.getSerie().equals(serie)).collect(Collectors.toList());
}

private void _importImages(Serie searched, List<ImageElement> selected) {
Serie serie = null;

if (!Serie.Type.DATE.equals(searched.getType())) {
serie = AcquireManager.getSerie(searched);
}

for (ImageElement element : selected) {
AcquireImageInfo info = AcquireManager.findByImage(element);
if (info == null) {
continue;
}

if (Serie.Type.DATE.equals(searched.getType())) {
LocalDateTime date = TagD.dateTime(Tag.ContentDate, Tag.ContentTime, info.getImage());
serie = AcquireManager.getSerie(new Serie(date));
}
info.setSerie(serie);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Objects;

import org.dcm4che3.data.Tag;
import org.dcm4che3.util.UIDUtils;
Expand All @@ -18,7 +19,7 @@ public enum Type {
private LocalDateTime date;

public static final Serie DEFAULT_SERIE = new Serie();
public static final Serie DATE_SERIE = new Serie(Type.DATE);
public static final Serie DATE_SERIE = new Serie(LocalDateTime.now());
public static final String DEFAULT_SERIE_NAME = "Other";

public Serie() {
Expand All @@ -37,7 +38,8 @@ public Serie(String name) {
}

public Serie(LocalDateTime date) {
this.type = Type.DATE;
Objects.requireNonNull(date);
this.type = Type.DATE;
this.date = date;
init();
}
Expand All @@ -52,6 +54,14 @@ public Type getType() {
return type;
}

public LocalDateTime getDate() {
return date;
}

public void setDate(LocalDateTime date) {
this.date = Objects.requireNonNull(date);
}

public String getDisplayName() {
switch (type) {
case NAME:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,22 @@

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import org.dcm4che3.data.Tag;
import org.weasis.acquire.explorer.AcquireImageInfo;
import org.weasis.acquire.explorer.AcquireManager;
import org.weasis.acquire.explorer.core.bean.Serie;
import org.weasis.acquire.explorer.gui.central.tumbnail.AcquireCentralTumbnailPane;
import org.weasis.base.explorer.list.IThumbnailModel;
import org.weasis.core.api.media.data.ImageElement;
import org.weasis.dicom.codec.TagD;

public class AcquireCentralImagePanel extends JPanel implements ListSelectionListener {
private static final long serialVersionUID = 1270219114006046523L;
Expand All @@ -40,7 +43,10 @@ public AcquireCentralImagePanel(AcquireTabPanel acquireTabPanel, Serie serie, Li
}

private List<ImageElement> toImageElement(List<AcquireImageInfo> list) {
return list.stream().map(e -> e.getImage()).collect(Collectors.toList());
return list.stream().map(e -> e.getImage())
.sorted(Comparator.comparing(i -> TagD.dateTime(Tag.ContentDate, Tag.ContentTime, i)))
.collect(Collectors.toList());

}

public void updateList(List<AcquireImageInfo> imageInfos) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,9 @@ public void removeElements(List<ImageElement> medias) {

public void removeElements(AcquireCentralImagePanel currentPane, List<ImageElement> medias) {
currentPane.removeElements(medias);

currentPane.revalidate();
currentPane.repaint();

if (currentPane.isEmpty()) {
remove(selected.getSerie());
serieList.revalidate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public AcquirePublishPanel() {
JMVUtils.showCenterScreen(dialog, WinUtil.getParentWindow(AcquirePublishPanel.this));
});

publishBtn.setPreferredSize(new Dimension(150, 50));
publishBtn.setPreferredSize(new Dimension(150, 40));
publishBtn.setFont(FontTools.getFont12Bold());

add(publishBtn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.weasis.acquire.explorer.AcquireManager;
import org.weasis.acquire.explorer.core.bean.Serie;
import org.weasis.acquire.explorer.gui.central.ImageGroupPane;
import org.weasis.acquire.explorer.gui.dialog.AcquireImportDialog;
import org.weasis.acquire.explorer.gui.list.AcquireThumbnailListPane;
Expand All @@ -29,7 +28,7 @@ public class ImportPanel extends JPanel {
private JButton importBtn = new JButton("Import");

public ImportPanel(AcquireThumbnailListPane<MediaElement<?>> mainPanel, ImageGroupPane centralPane) {
importBtn.setPreferredSize(new Dimension(150, 50));
importBtn.setPreferredSize(new Dimension(150, 40));
importBtn.setFont(FontTools.getFont12Bold());

importBtn.addActionListener(new ActionListener() {
Expand All @@ -39,9 +38,6 @@ public void actionPerformed(ActionEvent e) {
if (!selected.isEmpty()) {
AcquireImportDialog dialog = new AcquireImportDialog(mainPanel, selected);
JMVUtils.showCenterScreen(dialog, WinUtil.getParentWindow(mainPanel));
} else {
// TODO do nothing?
AcquireManager.importImages(Serie.DEFAULT_SERIE, selected);
}
}
});
Expand Down
Loading

0 comments on commit 745c023

Please sign in to comment.