package org.weasis.acquire.explorer;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import javax.swing.SwingWorker;
import org.dcm4che3.util.UIDUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.weasis.acquire.explorer.dicom.Transform2Dicom;
import org.weasis.core.api.gui.util.AppProperties;
import org.weasis.core.api.util.FileUtil;
/**
* Do the process of convert to JPEG and dicomize given image collection to a temporary folder. All the job is done
* outside of the EDT instead of setting AcquireImageStatus change. But, full process progression can still be listened
* with propertyChange notification of this workerTask.
*
* @version $Rev$ $Date$
*/
public class DicomizeTask extends SwingWorker<File, AcquireImageInfo> {
private static final Logger LOGGER = LoggerFactory.getLogger(DicomizeTask.class);
private final Collection<AcquireImageInfo> toDicomize;
public DicomizeTask(Collection<AcquireImageInfo> toDicomize) {
this.toDicomize = Objects.requireNonNull(toDicomize);
}
@Override
protected File doInBackground() throws Exception {
File exportDirDicom =
FileUtil.createTempDir(AppProperties.buildAccessibleTempDirectory("tmp", "dicomize", "dcm")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
File exportDirImage =
FileUtil.createTempDir(AppProperties.buildAccessibleTempDirectory("tmp", "dicomize", "img")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
final int nbImageToProcess = toDicomize.size();
int nbImageProcessed = 0;
try {
Transform2Dicom.buildStudySeriesDate(toDicomize, AcquireManager.GLOBAL);
String seriesInstanceUID = UIDUtils.createUID(); // Global series for all PR
for (AcquireImageInfo imageInfo : toDicomize) {
if (!Transform2Dicom.dicomize(imageInfo, exportDirDicom, exportDirImage, seriesInstanceUID)) {
FileUtil.recursiveDelete(exportDirDicom);
return null;
}
setProgress(++nbImageProcessed * 100 / nbImageToProcess);
publish(imageInfo);
}
} catch (Exception ex) {
LOGGER.error("Dicomize process", ex); //$NON-NLS-1$
FileUtil.recursiveDelete(exportDirDicom);
return null;
} finally {
FileUtil.recursiveDelete(exportDirImage);
}
return exportDirDicom;
}
@Override
protected void process(List<AcquireImageInfo> chunks) {
chunks.stream().forEach(AcquireImageInfo.changeStatus(AcquireImageStatus.SUBMITTED));
}
}