From dc78d0c07e2c11431702000441a7e31f5cd904cb Mon Sep 17 00:00:00 2001 From: Yannick Marcon Date: Fri, 9 Dec 2022 10:53:13 +0100 Subject: [PATCH] Mica source plugin could be an Initialisable --- .../service/StudyTableSourceServiceRegistry.java | 15 ++++++++++----- .../obiba/mica/core/source/ExcelTableSource.java | 10 +++++----- .../obiba/mica/core/source/OpalTableSource.java | 2 +- .../mica/spi/source/StudyTableFileSource.java | 8 +++----- ...eam.java => StudyTableFileStreamProvider.java} | 5 ++++- 5 files changed, 23 insertions(+), 17 deletions(-) rename mica-spi/src/main/java/org/obiba/mica/spi/source/{StudyTableFileStream.java => StudyTableFileStreamProvider.java} (83%) diff --git a/mica-core/src/main/java/org/obiba/mica/core/service/StudyTableSourceServiceRegistry.java b/mica-core/src/main/java/org/obiba/mica/core/service/StudyTableSourceServiceRegistry.java index 81b655e428..0342e2fff0 100644 --- a/mica-core/src/main/java/org/obiba/mica/core/service/StudyTableSourceServiceRegistry.java +++ b/mica-core/src/main/java/org/obiba/mica/core/service/StudyTableSourceServiceRegistry.java @@ -16,6 +16,7 @@ import org.apache.commons.math3.util.Pair; import org.obiba.magma.NoSuchValueTableException; import org.obiba.magma.support.Disposables; +import org.obiba.magma.support.Initialisables; import org.obiba.mica.core.source.ExcelTableSource; import org.obiba.mica.core.source.OpalTableSource; import org.obiba.mica.dataset.domain.StudyDataset; @@ -92,13 +93,13 @@ private StudyTableSource makeStudyTableSourceInternal(StudyTableContext context, if (OpalTableSource.isFor(source)) { OpalTableSource tableSource = OpalTableSource.fromURN(source); tableSource.setStudyTableContext(context); - tableSource.initialise(opalService); + tableSource.setOpalService(opalService); return tableSource; } if (ExcelTableSource.isFor(source)) { ExcelTableSource tableSource = ExcelTableSource.fromURN(source); tableSource.setStudyTableContext(context); - tableSource.initialise(new AttachmentStream(context, tableSource.getPath())); + tableSource.setStudyTableFileStreamProvider(new AttachmentStreamProvider(context, tableSource.getPath())); return tableSource; } Optional serviceOptional = pluginsService.getStudyTableSourceServices().stream() @@ -108,20 +109,24 @@ private StudyTableSource makeStudyTableSourceInternal(StudyTableContext context, tableSource.setStudyTableContext(context); if (tableSource instanceof StudyTableFileSource) { StudyTableFileSource fileSource = (StudyTableFileSource)tableSource; - fileSource.initialise(new AttachmentStream(context, fileSource.getPath())); + fileSource.setStudyTableFileStreamProvider(new AttachmentStreamProvider(context, fileSource.getPath())); } + Initialisables.initialise(tableSource); return tableSource; } throw new NoSuchElementException("Missing study-table-source plugin to handle source: " + source); } - private class AttachmentStream implements StudyTableFileStream { + /** + * Get the input stream from an {@link AttachmentState} object. + */ + private class AttachmentStreamProvider implements StudyTableFileStreamProvider { private final StudyTableContext context; private final String path; - private AttachmentStream(StudyTableContext context, String path) { + private AttachmentStreamProvider(StudyTableContext context, String path) { this.context = context; this.path = path; } diff --git a/mica-core/src/main/java/org/obiba/mica/core/source/ExcelTableSource.java b/mica-core/src/main/java/org/obiba/mica/core/source/ExcelTableSource.java index 1fcc496b43..0ac4b420c9 100644 --- a/mica-core/src/main/java/org/obiba/mica/core/source/ExcelTableSource.java +++ b/mica-core/src/main/java/org/obiba/mica/core/source/ExcelTableSource.java @@ -17,7 +17,7 @@ import org.obiba.magma.support.Initialisables; import org.obiba.mica.spi.source.AbstractStudyTableSource; import org.obiba.mica.spi.source.StudyTableFileSource; -import org.obiba.mica.spi.source.StudyTableFileStream; +import org.obiba.mica.spi.source.StudyTableFileStreamProvider; import javax.validation.constraints.NotNull; import java.util.List; @@ -33,7 +33,7 @@ public class ExcelTableSource extends AbstractStudyTableSource implements StudyT private ExcelDatasource excelDatasource; - private StudyTableFileStream fileStream; + private StudyTableFileStreamProvider fileStreamProvider; public static boolean isFor(String source) { if (Strings.isNullOrEmpty(source) || !source.startsWith("urn:file:")) @@ -84,15 +84,15 @@ public String getURN() { } @Override - public void initialise(StudyTableFileStream in) { - this.fileStream = in; + public void setStudyTableFileStreamProvider(StudyTableFileStreamProvider provider) { + this.fileStreamProvider = provider; // deferred init this.initialized = false; } private void ensureInitialized() { if (!initialized) { - excelDatasource = new ExcelDatasource(path, fileStream.getInputStream()); + excelDatasource = new ExcelDatasource(path, fileStreamProvider.getInputStream()); Initialisables.initialise(excelDatasource); initialized = true; } diff --git a/mica-core/src/main/java/org/obiba/mica/core/source/OpalTableSource.java b/mica-core/src/main/java/org/obiba/mica/core/source/OpalTableSource.java index 7c740ead43..271d34ab55 100644 --- a/mica-core/src/main/java/org/obiba/mica/core/source/OpalTableSource.java +++ b/mica-core/src/main/java/org/obiba/mica/core/source/OpalTableSource.java @@ -117,7 +117,7 @@ public static String toTableName(String source) { return source.replace("urn:opal:", ""); } - public void initialise(OpalService opalService) { + public void setOpalService(OpalService opalService) { this.opalService = opalService; this.opalUrl = getContext().getStudy().getOpal(); } diff --git a/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileSource.java b/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileSource.java index a1a6d5010b..3acafcb42e 100644 --- a/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileSource.java +++ b/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileSource.java @@ -10,8 +10,6 @@ package org.obiba.mica.spi.source; -import java.io.InputStream; - /** * Study table is to be extracted from a file which path applies to the Mica's internal file system. */ @@ -25,10 +23,10 @@ public interface StudyTableFileSource extends StudyTableSource { String getPath(); /** - * Initialise the source from the given input stream that represents the file content. + * Set the accessor to the input stream that represents the file content. * - * @param in + * @param provider */ - void initialise(StudyTableFileStream in); + void setStudyTableFileStreamProvider(StudyTableFileStreamProvider provider); } diff --git a/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStream.java b/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStreamProvider.java similarity index 83% rename from mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStream.java rename to mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStreamProvider.java index 0914f2d3f4..c84477b7ec 100644 --- a/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStream.java +++ b/mica-spi/src/main/java/org/obiba/mica/spi/source/StudyTableFileStreamProvider.java @@ -12,7 +12,10 @@ import java.io.InputStream; -public interface StudyTableFileStream { +/** + * Define an accessor to a file stream. + */ +public interface StudyTableFileStreamProvider { /** * Get the Mica file input stream on demand.