Search in sources :

Example 1 with AbstractFileStoreURIPortObject

use of com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject in project GenericKnimeNodes by genericworkflownodes.

the class ListZipLoopEndNodeModel method execute.

@Override
protected PortObject[] execute(PortObject[] inObjects, ExecutionContext exec) {
    if (!(getLoopStartNode() instanceof LoopStartNodeTerminator)) {
        throw new IllegalStateException("Loop End is not connected" + " to matching/corresponding Loop Start node. You" + " are trying to create an infinite loop!");
    }
    if (!m_loopStarted) {
        // first time we are getting to this: create container
        m_incomingPortObjects = new ArrayList<List<IURIPortObject>>(PORT_COUNT);
        m_bufferedContainers = new BufferedDataContainer[PORT_COUNT];
        for (int i = 0; i < PORT_COUNT; ++i) {
            // create data container
            m_bufferedContainers[i] = exec.createDataContainer(createPseudoSpec());
            // create container to collect the incoming port objects
            m_incomingPortObjects.add(new ArrayList<IURIPortObject>());
        }
        m_loopStarted = true;
    }
    for (int i = 0; i < PORT_COUNT; i++) {
        if (inObjects[i] == null) {
            // skip unconnected ports
            continue;
        }
        IURIPortObject po = (IURIPortObject) inObjects[i];
        // some data we need
        int currentIteration = peekFlowVariableInt("currentIteration");
        if (po.getURIContents().size() > 1) {
            LOGGER.warn(String.format("More then one incoming object at port %d. The outgoing port will only hold the first one.", i));
        }
        // collect port object for later use
        m_incomingPortObjects.get(i).add(po);
        // AbstractFileStoreURIPortObject
        if (po instanceof AbstractFileStoreURIPortObject) {
            PortObjectHandlerCell pfsc = new PortObjectHandlerCell((AbstractFileStoreURIPortObject) po);
            String rowKey = String.format("Row_%d_%d", i, currentIteration);
            m_bufferedContainers[i].addRowToTable(new DefaultRow(rowKey, pfsc));
        }
    }
    // check if this is the last iteration
    if (((LoopStartNodeTerminator) getLoopStartNode()).terminateLoop()) {
        FileStoreReferenceURIPortObject[] portObjects = new FileStoreReferenceURIPortObject[PORT_COUNT];
        for (int i = 0; i < PORT_COUNT; i++) {
            // assign collected uris to new portobject
            portObjects[i] = FileStoreReferenceURIPortObject.create(m_incomingPortObjects.get(i));
            // close the container
            m_bufferedContainers[i].close();
        }
        m_loopStarted = false;
        return portObjects;
    } else {
        continueLoop();
        return new PortObject[PORT_COUNT];
    }
}
Also used : PortObjectHandlerCell(com.genericworkflownodes.knime.base.data.port.PortObjectHandlerCell) AbstractFileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject) IURIPortObject(org.knime.core.data.uri.IURIPortObject) FileStoreReferenceURIPortObject(com.genericworkflownodes.knime.base.data.port.FileStoreReferenceURIPortObject) LoopStartNodeTerminator(org.knime.core.node.workflow.LoopStartNodeTerminator) ArrayList(java.util.ArrayList) List(java.util.List) DefaultRow(org.knime.core.data.def.DefaultRow) FileStoreReferenceURIPortObject(com.genericworkflownodes.knime.base.data.port.FileStoreReferenceURIPortObject) AbstractFileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject) IURIPortObject(org.knime.core.data.uri.IURIPortObject) PortObject(org.knime.core.node.port.PortObject)

Example 2 with AbstractFileStoreURIPortObject

use of com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject in project GenericKnimeNodes by genericworkflownodes.

the class PortToFileStoreNodeModel method execute.

/**
 * {@inheritDoc}
 */
@Override
protected PortObject[] execute(final PortObject[] inData, final ExecutionContext exec) throws Exception {
    IURIPortObject input = (IURIPortObject) inData[0];
    DataContainer dc = exec.createDataContainer(createSpec());
    /**
     * Files that are not yet managed by KNIME (e.g. when they come from an InputFiles node) come as URIPortObject
     * and must be copied into a FileStore to be handled properly.
     * Other files already have a file store and can be put into a <code>PortObjectHandlerCell</code>.
     */
    if (input instanceof AbstractFileStoreURIPortObject) {
        PortObjectHandlerCell cell = new PortObjectHandlerCell((AbstractFileStoreURIPortObject) input);
        dc.addRowToTable(new DefaultRow(new RowKey("files"), cell));
    } else {
        FileStore fs = exec.createFileStore("files");
        fs.getFile().mkdirs();
        for (URIContent uc : input.getURIContents()) {
            String filename = Paths.get(uc.getURI()).getFileName().toString();
            if (!filename.endsWith(uc.getExtension())) {
                filename = filename.concat(".").concat(uc.getExtension());
            }
            // TODO: Report progress
            Files.copy(Paths.get(uc.getURI()), Paths.get(fs.getFile().toURI()).resolve(filename));
            AbstractFileStoreURIPortObject portObject = new FileStoreURIPortObject(fs);
            portObject.registerFile(filename);
            PortObjectHandlerCell cell = new PortObjectHandlerCell(portObject);
            dc.addRowToTable(new DefaultRow(new RowKey(filename), cell));
        }
    }
    dc.close();
    return new PortObject[] { (BufferedDataTable) dc.getTable() };
}
Also used : FileStore(org.knime.core.data.filestore.FileStore) DataContainer(org.knime.core.data.container.DataContainer) PortObjectHandlerCell(com.genericworkflownodes.knime.base.data.port.PortObjectHandlerCell) AbstractFileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject) AbstractFileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject) FileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.FileStoreURIPortObject) RowKey(org.knime.core.data.RowKey) IURIPortObject(org.knime.core.data.uri.IURIPortObject) BufferedDataTable(org.knime.core.node.BufferedDataTable) DefaultRow(org.knime.core.data.def.DefaultRow) AbstractFileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject) URIPortObject(org.knime.core.data.uri.URIPortObject) IURIPortObject(org.knime.core.data.uri.IURIPortObject) PortObject(org.knime.core.node.port.PortObject) FileStoreURIPortObject(com.genericworkflownodes.knime.base.data.port.FileStoreURIPortObject) URIContent(org.knime.core.data.uri.URIContent)

Aggregations

AbstractFileStoreURIPortObject (com.genericworkflownodes.knime.base.data.port.AbstractFileStoreURIPortObject)2 PortObjectHandlerCell (com.genericworkflownodes.knime.base.data.port.PortObjectHandlerCell)2 DefaultRow (org.knime.core.data.def.DefaultRow)2 IURIPortObject (org.knime.core.data.uri.IURIPortObject)2 PortObject (org.knime.core.node.port.PortObject)2 FileStoreReferenceURIPortObject (com.genericworkflownodes.knime.base.data.port.FileStoreReferenceURIPortObject)1 FileStoreURIPortObject (com.genericworkflownodes.knime.base.data.port.FileStoreURIPortObject)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 RowKey (org.knime.core.data.RowKey)1 DataContainer (org.knime.core.data.container.DataContainer)1 FileStore (org.knime.core.data.filestore.FileStore)1 URIContent (org.knime.core.data.uri.URIContent)1 URIPortObject (org.knime.core.data.uri.URIPortObject)1 BufferedDataTable (org.knime.core.node.BufferedDataTable)1 LoopStartNodeTerminator (org.knime.core.node.workflow.LoopStartNodeTerminator)1