Skip to content

Commit

Permalink
ImgreaderTable code cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
gab1one committed Sep 11, 2017
1 parent a75c9da commit f9cc77a
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,16 @@
package org.knime.knip.io.nodes.imgreader2.readfrominput;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

import net.imglib2.img.ImgFactory;
import net.imglib2.img.array.ArrayImgFactory;
import net.imglib2.img.cell.CellImgFactory;
import net.imglib2.img.planar.PlanarImgFactory;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;

import org.knime.core.data.DataColumnSpec;
import org.knime.core.data.DataColumnSpecCreator;
import org.knime.core.data.DataRow;
Expand Down Expand Up @@ -79,13 +85,6 @@
import org.knime.knip.io.nodes.imgreader2.ColumnCreationMode;
import org.knime.knip.io.nodes.imgreader2.MetadataMode;

import net.imglib2.img.ImgFactory;
import net.imglib2.img.array.ArrayImgFactory;
import net.imglib2.img.cell.CellImgFactory;
import net.imglib2.img.planar.PlanarImgFactory;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;

/**
* This Node reads images.
*
Expand Down Expand Up @@ -127,9 +126,9 @@ public ImgReaderTableNodeModel() {
}

@Override
protected DataTableSpec[] configure(DataTableSpec[] inSpecs) throws InvalidSettingsException {
protected DataTableSpec[] configure(final DataTableSpec[] inSpecs) throws InvalidSettingsException {

int imgIdx = getPathColIdx(inSpecs[0]);
final int imgIdx = getPathColIdx(inSpecs[0]);
if (-1 == imgIdx) {
throw new InvalidSettingsException("A string column must be selected!");
}
Expand All @@ -138,32 +137,28 @@ protected DataTableSpec[] configure(DataTableSpec[] inSpecs) throws InvalidSetti
}

@Override
protected BufferedDataTable[] execute(BufferedDataTable[] inData, ExecutionContext exec) throws Exception {
protected BufferedDataTable[] execute(final BufferedDataTable[] inData, final ExecutionContext exec)
throws Exception {

// boolean for exceptions and file format
final AtomicBoolean encounteredExceptions = new AtomicBoolean(false);

int imgIdx = getPathColIdx(inData[0].getDataTableSpec());
ReadImgTableFunction<T> rifp = createImgTableFunction(exec, inData[0].getDataTableSpec(),
final int imgIdx = getPathColIdx(inData[0].getDataTableSpec());
final ReadImgTableFunction<T> rifp = createImgTableFunction(exec, inData[0].getDataTableSpec(),
Long.valueOf(inData[0].size()).intValue());

BufferedDataContainer bdc = exec.createDataContainer(getOutspec(inData[0].getDataTableSpec(), imgIdx));

Iterator<DataRow> iterator = inData[0].iterator();
while (iterator.hasNext()) {
rifp.apply(iterator.next()).forEachOrdered(dataRow -> {
final BufferedDataContainer bdc = exec.createDataContainer(getOutspec(inData[0].getDataTableSpec(), imgIdx));

for (final DataRow x : inData[0]) {
rifp.apply(x).forEachOrdered(dataRow -> {
if (dataRow.getSecond().isPresent()) {
encounteredExceptions.set(true);
LOGGER.warn("Encountered exception while reading image: " + dataRow.getFirst().getKey()
+ "! view log for more info.");
LOGGER.debug("Encountered exception while reading image:", dataRow.getSecond().get());
}

bdc.addRowToTable(dataRow.getFirst());

});

exec.checkCanceled();
}

Expand All @@ -186,14 +181,15 @@ public StreamableOperator createStreamableOperator(final PartitionInfo partition
final PortObjectSpec[] inSpecs) throws InvalidSettingsException {
return new StreamableOperator() {
@Override
public void runFinal(PortInput[] inputs, PortOutput[] outputs, ExecutionContext exec) throws Exception {
RowInput in = (RowInput) inputs[0];
RowOutput out = (RowOutput) outputs[0];
public void runFinal(final PortInput[] inputs, final PortOutput[] outputs, final ExecutionContext exec)
throws Exception {
final RowInput in = (RowInput) inputs[0];
final RowOutput out = (RowOutput) outputs[0];

// boolean for exceptions and file format
final AtomicBoolean encounteredExceptions = new AtomicBoolean(false);

ReadImgTableFunction<T> readImgFunction = createImgTableFunction(exec, in.getDataTableSpec(), 1);
final ReadImgTableFunction<T> readImgFunction = createImgTableFunction(exec, in.getDataTableSpec(), 1);

DataRow row;
while ((row = in.poll()) != null) {
Expand All @@ -207,7 +203,7 @@ public void runFinal(PortInput[] inputs, PortOutput[] outputs, ExecutionContext

try {
out.push(result.getFirst());
} catch (Exception exc) {
} catch (final Exception exc) {
encounteredExceptions.set(true);
LOGGER.warn("Couldn't push row " + result.getFirst().getKey() + " into output stream.");
LOGGER.debug("Encountered exception when trying to push result: ", exc);
Expand Down Expand Up @@ -237,21 +233,22 @@ public OutputPortRole[] getOutputPortRoles() {
return new OutputPortRole[] { OutputPortRole.DISTRIBUTED };
}

private DataTableSpec getOutspec(DataTableSpec spec, int imgIdx) {
MetadataMode metadataMode = EnumUtils.valueForName(m_metadataModeModel.getStringValue(), MetadataMode.values());
private DataTableSpec getOutspec(final DataTableSpec spec, final int imgIdx) {
final MetadataMode metadataMode = EnumUtils.valueForName(m_metadataModeModel.getStringValue(),
MetadataMode.values());

boolean readImage = (metadataMode == MetadataMode.NO_METADATA || metadataMode == MetadataMode.APPEND_METADATA)
? true : false;
boolean readMetadata = (metadataMode == MetadataMode.APPEND_METADATA
final boolean readImage = (metadataMode == MetadataMode.NO_METADATA
|| metadataMode == MetadataMode.APPEND_METADATA) ? true : false;
final boolean readMetadata = (metadataMode == MetadataMode.APPEND_METADATA
|| metadataMode == MetadataMode.METADATA_ONLY) ? true : false;

DataTableSpec outSpec;
// new table
ColumnCreationMode columnCreationMode = ColumnCreationMode.fromString(m_colCreationMode.getStringValue());
final ColumnCreationMode columnCreationMode = ColumnCreationMode.fromString(m_colCreationMode.getStringValue());
if (columnCreationMode == ColumnCreationMode.NEW_TABLE) {

DataColumnSpec imgSpec = new DataColumnSpecCreator("Image", ImgPlusCell.TYPE).createSpec();
DataColumnSpec omeSpec = new DataColumnSpecCreator("OME-XML Metadata", XMLCell.TYPE).createSpec();
final DataColumnSpec imgSpec = new DataColumnSpecCreator("Image", ImgPlusCell.TYPE).createSpec();
final DataColumnSpec omeSpec = new DataColumnSpecCreator("OME-XML Metadata", XMLCell.TYPE).createSpec();

if (readImage && readMetadata) {
outSpec = new DataTableSpec(imgSpec, omeSpec);
Expand All @@ -265,14 +262,14 @@ private DataTableSpec getOutspec(DataTableSpec spec, int imgIdx) {
// append
else if (columnCreationMode == ColumnCreationMode.APPEND) {

DataColumnSpec imgSpec = new DataColumnSpecCreator(
final DataColumnSpec imgSpec = new DataColumnSpecCreator(
DataTableSpec.getUniqueColumnName(spec, "Image" + m_colSuffix.getStringValue()), ImgPlusCell.TYPE)
.createSpec();
DataColumnSpec omeSpec = new DataColumnSpecCreator(
final DataColumnSpec omeSpec = new DataColumnSpecCreator(
DataTableSpec.getUniqueColumnName(spec, "OME-XML Metadata" + m_colSuffix.getStringValue()),
XMLCell.TYPE).createSpec();

List<DataColumnSpec> list = new ArrayList<>();
final List<DataColumnSpec> list = new ArrayList<>();
for (int i = 0; i < spec.getNumColumns(); i++) {
list.add(spec.getColumnSpec(i));
}
Expand All @@ -290,14 +287,14 @@ else if (columnCreationMode == ColumnCreationMode.APPEND) {
}
// replace
else if (columnCreationMode == ColumnCreationMode.REPLACE) {
DataColumnSpec imgSpec = new DataColumnSpecCreator(
final DataColumnSpec imgSpec = new DataColumnSpecCreator(
DataTableSpec.getUniqueColumnName(spec, "Image" + m_colSuffix.getStringValue()), ImgPlusCell.TYPE)
.createSpec();
DataColumnSpec omeSpec = new DataColumnSpecCreator(
final DataColumnSpec omeSpec = new DataColumnSpecCreator(
DataTableSpec.getUniqueColumnName(spec, "OME-XML Metadata" + m_colSuffix.getStringValue()),
XMLCell.TYPE).createSpec();

List<DataColumnSpec> list = new ArrayList<>();
final List<DataColumnSpec> list = new ArrayList<>();
for (int i = 0; i < spec.getNumColumns(); i++) {
list.add(spec.getColumnSpec(i));
}
Expand Down Expand Up @@ -338,15 +335,16 @@ private int getPathColIdx(final DataTableSpec inSpec) throws InvalidSettingsExce
return imgColIndex;
}

private ReadImgTableFunction<T> createImgTableFunction(ExecutionContext exec, DataTableSpec inSpec, int rowCount)
throws InvalidSettingsException {
private ReadImgTableFunction<T> createImgTableFunction(final ExecutionContext exec, final DataTableSpec inSpec,
final int rowCount) throws InvalidSettingsException {

int imgIdx = getPathColIdx(inSpec);
final int imgIdx = getPathColIdx(inSpec);

MetadataMode metadataMode = EnumUtils.valueForName(m_metadataModeModel.getStringValue(), MetadataMode.values());
boolean readImage = (metadataMode == MetadataMode.NO_METADATA || metadataMode == MetadataMode.APPEND_METADATA)
? true : false;
boolean readMetadata = (metadataMode == MetadataMode.APPEND_METADATA
final MetadataMode metadataMode = EnumUtils.valueForName(m_metadataModeModel.getStringValue(),
MetadataMode.values());
final boolean readImage = (metadataMode == MetadataMode.NO_METADATA
|| metadataMode == MetadataMode.APPEND_METADATA) ? true : false;
final boolean readMetadata = (metadataMode == MetadataMode.APPEND_METADATA
|| metadataMode == MetadataMode.METADATA_ONLY) ? true : false;

// create ImgFactory
Expand All @@ -372,7 +370,7 @@ private ReadImgTableFunction<T> createImgTableFunction(ExecutionContext exec, Da
}

// create image function
ReadImgTableFunction<T> rifp = new ReadImgTableFunction<>(exec, rowCount, m_planeSelect, readImage,
final ReadImgTableFunction<T> rifp = new ReadImgTableFunction<>(exec, rowCount, m_planeSelect, readImage,
readMetadata, m_readAllMetaDataModel.getBooleanValue(), m_checkFileFormat.getBooleanValue(),
m_isGroupFiles.getBooleanValue(), seriesSelectionFrom, seriesSelectionTo, imgFac,
ColumnCreationMode.fromString(m_colCreationMode.getStringValue()), imgIdx,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.knime.knip.io.nodes.imgreader2.readfrominput;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.InvalidPathException;
Expand All @@ -13,6 +12,11 @@
import java.util.stream.IntStream;
import java.util.stream.Stream;

import net.imglib2.img.Img;
import net.imglib2.img.ImgFactory;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;

import org.knime.core.data.DataCell;
import org.knime.core.data.DataRow;
import org.knime.core.data.RowKey;
Expand All @@ -26,11 +30,6 @@
import org.knime.knip.io.nodes.imgreader2.ColumnCreationMode;
import org.knime.knip.io.nodes.imgreader2.URLUtil;

import net.imglib2.img.Img;
import net.imglib2.img.ImgFactory;
import net.imglib2.type.NativeType;
import net.imglib2.type.numeric.RealType;

/**
* {@link Function} to read an {@link Img}, OME-XML Metadata or both from a file
* path.
Expand Down Expand Up @@ -68,10 +67,8 @@ public Stream<Pair<DataRow, Optional<Throwable>>> apply(DataRow input) {
String path;
int numSeries;
try {
URI uri = URLUtil.encode(t);
URL url = uri.toURL();

// check if its an internet address;
URL url = URLUtil.encode(t).toURL();
// check if its an remote address;
if (url.getProtocol().equalsIgnoreCase("HTTP") || url.getProtocol().equalsIgnoreCase("FTP")
|| url.getProtocol().equalsIgnoreCase("HTTPS")) {
path = url.toURI().toString();
Expand Down Expand Up @@ -115,9 +112,6 @@ public Stream<Pair<DataRow, Optional<Throwable>>> apply(DataRow input) {
* @param readFiles
* the {@link List} of read {@link Img}s, with {@link Optional}
* {@link Exception}s.
* @param columnSelectionMode
* the column selection mode see
* {@link ImgReaderTableNodeModel#COL_CREATION_MODES}
* @param inputColumnIndex
* the column index of the path.
* @return a {@link Stream} with the output {@link DataRow}s.
Expand Down

0 comments on commit f9cc77a

Please sign in to comment.