Skip to content

Commit

Permalink
Mica source plugin could be an Initialisable
Browse files Browse the repository at this point in the history
  • Loading branch information
ymarcon committed Jan 24, 2023
1 parent dd227ef commit ecccc4c
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<StudyTableSourceService> serviceOptional = pluginsService.getStudyTableSourceServices().stream()
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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:"))
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand All @@ -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);

}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit ecccc4c

Please sign in to comment.