/* * $Id$ * * Copyright 2009-2013 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.formats.importer; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import omero.model.Fileset; import omero.model.IObject; import omero.model.Pixels; /** * Simple event base-class used by {@link IObservable} and {@link IObserver} * implementations. * * @since Beta4.1 */ public class ImportEvent { // enums for GROUP_SET types public static final int GROUP_PUBLIC = 0; public static final int GROUP_COLLAB_READ = 1; public static final int GROUP_COLLAB_READ_LINK = 2; public static final int GROUP_PRIVATE = 3; public static final int GROUP_SYSTEM = 4; public String toLog() { return getClass().getSimpleName(); } // Base classes public static class COUNT_EVENT extends ImportEvent { public final String shortName; public final Integer index; public final Integer numDone; public final Integer total; COUNT_EVENT(String shortName, Integer index, Integer numDone, Integer total) { this.shortName = shortName; this.index = index; this.numDone = numDone; this.total = total; } } public static class PROGRESS_EVENT extends ImportEvent { public final int index; public final ImportContainer container; public final IObject target; public final Long pixId; public final int series; public final ImportSize size; public final Integer numDone; public final Integer total; public PROGRESS_EVENT(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total) { this.index = index; this.container = container; this.target = target; this.pixId = pixId; this.series = series; this.size = size; this.numDone = numDone; this.total= total; } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(super.toLog()); sb.append(" "); return sb.toString(); } } public static class POST_UPLOAD_EVENT extends PROGRESS_EVENT { public final Long logFileId; public POST_UPLOAD_EVENT(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long logFileId) { super(index, container, target, pixId, series, size, numDone, total); this.logFileId = logFileId; } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(super.toLog()); sb.append(String.format("Step: %d of %d Logfile: %d", numDone, total, logFileId)); return sb.toString(); } } public static class FILE_UPLOAD_EVENT extends ImportEvent { public final String filename; public final int fileIndex; public final int fileTotal; public final Long uploadedBytes; public final Long contentLength; public final Exception exception; FILE_UPLOAD_EVENT(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { this.filename = filename; this.fileIndex = fileIndex; this.fileTotal = fileTotal; this.uploadedBytes = uploadedBytes; this.contentLength = contentLength; this.exception = exception; } } // Data-less events public static class ADD extends ImportEvent { } public static class ERRORS_PENDING extends ImportEvent { } public static class ERRORS_COMPLETE extends ImportEvent { } public static class ERRORS_FAILED extends ImportEvent { } public static class REIMPORT extends ImportEvent { } public static class LOGGED_IN extends ImportEvent { } public static class LOGGED_OUT extends ImportEvent { } // file-upload events public static class FILE_UPLOAD_STARTED extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_STARTED(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILE_UPLOAD_BYTES extends FILE_UPLOAD_EVENT { public Long timeLeft; public FILE_UPLOAD_BYTES(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Long timeLeft, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); this.timeLeft = timeLeft; } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(super.toLog()); sb.append(String.format(" uploaded: %d of: %d bytes (ETA: %s)", uploadedBytes, contentLength, msToString(timeLeft))); return sb.toString(); } private String msToString(long millis) { return String.format("%d' %d\"", TimeUnit.MILLISECONDS.toMinutes(millis), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)) ); } } public static class FILE_UPLOAD_COMPLETE extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_COMPLETE(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILE_UPLOAD_FAILED extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_FAILED(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILE_UPLOAD_ERROR extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_ERROR(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILESET_EXCLUSION extends FILE_UPLOAD_EVENT { public FILESET_EXCLUSION(String filename, int fileIndex, int fileTotal) { super(filename, fileIndex, fileTotal, 0l, 0l, null); } } public static class FILESET_UPLOAD_PREPARATION extends FILE_UPLOAD_EVENT { public FILESET_UPLOAD_PREPARATION(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILESET_UPLOAD_START extends FILE_UPLOAD_EVENT { public FILESET_UPLOAD_START(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILESET_UPLOAD_END extends FILE_UPLOAD_EVENT { public final String[] srcFiles; public final List<String> checksums; public final Map<Integer, String> failingChecksums; public FILESET_UPLOAD_END(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, String[] srcFiles, List<String> checksums, Map<Integer, String> failingChecksums, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); this.srcFiles = srcFiles; this.checksums = checksums; this.failingChecksums = failingChecksums; } } public static class FILE_UPLOAD_FINISHED extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_FINISHED(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } public static class FILE_UPLOAD_CANCELLED extends FILE_UPLOAD_EVENT { public FILE_UPLOAD_CANCELLED(String filename, int fileIndex, int fileTotal, Long uploadedBytes, Long contentLength, Exception exception) { super(filename, fileIndex, fileTotal, uploadedBytes, contentLength, exception); } } // misc-events public static class DEBUG_SEND extends ImportEvent { public final boolean sendFiles; public final boolean sendLogs; public DEBUG_SEND(boolean sendFiles, boolean sendLogs) { this.sendFiles = sendFiles; this.sendLogs = sendLogs; } } public static class IMPORT_STEP extends ImportEvent { public final int step; public final int series; public final int seriesCount; public IMPORT_STEP(int step, int series, int seriesCount) { this.step = step; this.series = series; this.seriesCount = seriesCount; } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(super.toLog()); sb.append(" "); sb.append(String.format("Image: %d Series: %d Total Series: %d", step, series, seriesCount)); return sb.toString(); } } public static class IMPORT_SUMMARY extends ImportEvent { public final long importTime; public final int errorCount; public IMPORT_SUMMARY(long importTime, int errorCount) { this.importTime = importTime; this.errorCount = errorCount; } } // count-events public static class LOADING_IMAGE extends COUNT_EVENT { public LOADING_IMAGE(String shortName, Integer index, Integer numDone, Integer total) { super(shortName, index, numDone, total); } @Override public String toLog() { return String.format("%s: %s", super.toLog(), shortName); } } public static class LOADED_IMAGE extends COUNT_EVENT { public LOADED_IMAGE(String shortName, Integer index, Integer numDone, Integer total) { super(shortName, index, numDone, total); } @Override public String toLog() { return String.format("%s: %s", super.toLog(), shortName); } } // // Progress-based events: these are used by the FileQueueTable (and others) // to know which file index is currently in which state. They should // possibly // be moved closer to the classes using them. // public static class BEGIN_POST_PROCESS extends PROGRESS_EVENT { public BEGIN_POST_PROCESS(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class END_POST_PROCESS extends PROGRESS_EVENT { public END_POST_PROCESS(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class BEGIN_SAVE_TO_DB extends PROGRESS_EVENT { public BEGIN_SAVE_TO_DB(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class END_SAVE_TO_DB extends PROGRESS_EVENT { public END_SAVE_TO_DB(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class DATASET_STORED extends PROGRESS_EVENT { public DATASET_STORED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total) { super(index, container, target, pixId, series, size, numDone, total); } } public static class DATA_STORED extends PROGRESS_EVENT { public DATA_STORED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class IMPORT_ARCHIVING extends PROGRESS_EVENT { public IMPORT_ARCHIVING(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class IMPORT_OVERLAYS extends PROGRESS_EVENT { public IMPORT_OVERLAYS(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } public static class IMPORT_PROCESSING extends PROGRESS_EVENT { public IMPORT_PROCESSING(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size) { super(index, container, target, pixId, series, size, null, null); } } // These extra PROGRESS_EVENT classes are added to allow some meaningful // event reporting under FS rather than abusing the ones above public static class IMPORT_STARTED extends POST_UPLOAD_EVENT { public IMPORT_STARTED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(String.format(" Logfile: %d", logFileId)); return sb.toString(); } } public static class METADATA_IMPORTED extends POST_UPLOAD_EVENT { public METADATA_IMPORTED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } } public static class THUMBNAILS_GENERATED extends POST_UPLOAD_EVENT { public THUMBNAILS_GENERATED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } } public static class PIXELDATA_PROCESSED extends POST_UPLOAD_EVENT { public PIXELDATA_PROCESSED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } } public static class METADATA_PROCESSED extends POST_UPLOAD_EVENT { public METADATA_PROCESSED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } } public static class OBJECTS_RETURNED extends POST_UPLOAD_EVENT { public OBJECTS_RETURNED(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, Integer numDone, Integer total, Long fsId) { super(index, container, target, pixId, series, size, numDone, total, fsId); } } public static class IMPORT_DONE extends PROGRESS_EVENT { public final List<Pixels> pixels; public final Fileset fileset; public final List<IObject> objects; public IMPORT_DONE(int index, ImportContainer container, IObject target, Long pixId, int series, ImportSize size, List<Pixels> pixels, Fileset fileset, List<IObject> objects) { super(index, container, target, pixId, series, size, null, null); this.pixels = pixels; this.fileset = fileset; this.objects = objects; } @Override public String toLog() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(String.format(" Imported file: %s", container.getFile().getAbsolutePath())); return sb.toString(); } } }