Search in sources :

Example 6 with AttributeDataType

use of org.cytoscape.tableimport.internal.util.AttributeDataType in project cytoscape-impl by cytoscape.

the class ImportTablePanel method getNetworkTableMappingParameters.

public NetworkTableMappingParameters getNetworkTableMappingParameters() throws Exception {
    final String sourceName = getPreviewPanel().getSourceName();
    final String[] attrNames = getPreviewPanel().getAttributeNames();
    final SourceColumnSemantic[] types = getPreviewPanel().getTypes();
    if (!isAttributeNamesValid(attrNames, types))
        return null;
    final SourceColumnSemantic[] typesCopy = Arrays.copyOf(types, types.length);
    final AttributeDataType[] dataTypes = getPreviewPanel().getDataTypes();
    final AttributeDataType[] dataTypesCopy = Arrays.copyOf(dataTypes, dataTypes.length);
    final String[] listDelimiters = getPreviewPanel().getListDelimiters();
    final String[] listDelimitersCopy = Arrays.copyOf(listDelimiters, listDelimiters.length);
    int startLineNumber = getStartLineNumber();
    String commentChar = null;
    if (!getCommentLinePrefix().isEmpty())
        commentChar = getCommentLinePrefix();
    final int sourceColumnIndex = getPreviewPanel().getColumnIndex(SOURCE);
    final int targetColumnIndex = getPreviewPanel().getColumnIndex(TARGET);
    final int interactionColumnIndex = getPreviewPanel().getColumnIndex(INTERACTION);
    final String defaultInteraction = defaultInteractionTextField.getText();
    // Build mapping parameter object.
    final List<String> del = checkDelimiter();
    final NetworkTableMappingParameters mapping = new NetworkTableMappingParameters(sourceName, del, listDelimitersCopy, attrNames, dataTypesCopy, typesCopy, sourceColumnIndex, targetColumnIndex, interactionColumnIndex, defaultInteraction, startLineNumber, commentChar);
    return mapping;
}
Also used : SourceColumnSemantic(org.cytoscape.tableimport.internal.util.SourceColumnSemantic) AttributeDataType(org.cytoscape.tableimport.internal.util.AttributeDataType) NetworkTableMappingParameters(org.cytoscape.tableimport.internal.reader.NetworkTableMappingParameters)

Example 7 with AttributeDataType

use of org.cytoscape.tableimport.internal.util.AttributeDataType in project cytoscape-impl by cytoscape.

the class PreviewTablePanel method setDataType.

public void setDataType(final int index, final AttributeDataType newValue) {
    if (index < 0)
        return;
    if (dataTypes != null && dataTypes.length > index) {
        final AttributeDataType oldValue = dataTypes[index];
        dataTypes[index] = newValue;
        if (newValue != oldValue)
            changes.fireIndexedPropertyChange(DataEvents.ATTR_DATA_TYPE_CHANGED, index, oldValue, newValue);
    }
}
Also used : AttributeDataType(org.cytoscape.tableimport.internal.util.AttributeDataType)

Example 8 with AttributeDataType

use of org.cytoscape.tableimport.internal.util.AttributeDataType in project cytoscape-impl by cytoscape.

the class LoadNetworkReaderTask method run.

@Override
public void run(final TaskMonitor tm) throws Exception {
    tm.setTitle("Loading network from table");
    tm.setProgress(0.0);
    tm.setStatusMessage("Loading network...");
    taskMonitor = tm;
    final List<String> attrNameList = new ArrayList<>();
    int colCount;
    String[] attributeNames;
    final CyNetworkReaderManager networkReaderManager = serviceRegistrar.getService(CyNetworkReaderManager.class);
    if (is != null)
        netReader = networkReaderManager.getReader(is, inputName);
    if (netReader == null)
        netReader = networkReaderManager.getReader(uri, inputName);
    if (netReader instanceof CombineReaderAndMappingTask) {
        Workbook workbook = null;
        // Load Spreadsheet data for preview.
        if (fileType != null && (fileType.equalsIgnoreCase(SupportedFileType.EXCEL.getExtension()) || fileType.equalsIgnoreCase(SupportedFileType.OOXML.getExtension())) && workbook == null) {
            try {
                workbook = WorkbookFactory.create(new FileInputStream(tempFile));
            } catch (InvalidFormatException e) {
                // e.printStackTrace();
                throw new IllegalArgumentException("Could not read Excel file.  Maybe the file is broken?", e);
            } finally {
            }
        }
        netReader = null;
        if (startLoadRow > 0)
            startLoadRow--;
        final int startLoadRowTemp = firstRowAsColumnNames ? 0 : startLoadRow;
        previewPanel.updatePreviewTable(workbook, fileType, tempFile.getAbsolutePath(), new FileInputStream(tempFile), delimiters.getSelectedValues(), null, startLoadRowTemp);
        colCount = previewPanel.getPreviewTable().getColumnModel().getColumnCount();
        Object curName = null;
        if (firstRowAsColumnNames) {
            previewPanel.setFirstRowAsColumnNames();
            startLoadRow++;
        }
        final SourceColumnSemantic[] types = previewPanel.getTypes();
        for (int i = 0; i < colCount; i++) {
            curName = previewPanel.getPreviewTable().getColumnModel().getColumn(i).getHeaderValue();
            if (attrNameList.contains(curName)) {
                int dupIndex = 0;
                for (int idx = 0; idx < attrNameList.size(); idx++) {
                    if (curName.equals(attrNameList.get(idx))) {
                        dupIndex = idx;
                        break;
                    }
                }
                if (!TypeUtil.allowsDuplicateName(ImportType.NETWORK_IMPORT, types[i], types[dupIndex])) {
                    // TODO add message to user (Duplicate Column Name Found)
                    return;
                }
            }
            if (curName == null)
                attrNameList.add("Column " + i);
            else
                attrNameList.add(curName.toString());
        }
        attributeNames = attrNameList.toArray(new String[attrNameList.size()]);
        final SourceColumnSemantic[] typesCopy = Arrays.copyOf(types, types.length);
        final AttributeDataType[] dataTypes = previewPanel.getDataTypes();
        final AttributeDataType[] dataTypesCopy = Arrays.copyOf(dataTypes, dataTypes.length);
        AttributeDataType[] tunableDataTypes = null;
        if (dataTypeList != null && !dataTypeList.trim().isEmpty())
            tunableDataTypes = TypeUtil.parseDataTypeList(dataTypeList);
        if (tunableDataTypes != null && tunableDataTypes.length > 0)
            System.arraycopy(tunableDataTypes, 0, dataTypesCopy, 0, Math.min(tunableDataTypes.length, dataTypesCopy.length));
        SourceColumnSemantic[] tunableColumnTypes = null;
        if (columnTypeList != null && !columnTypeList.trim().isEmpty()) {
            tunableColumnTypes = TypeUtil.parseColumnTypeList(columnTypeList);
        }
        if (tunableColumnTypes != null && tunableColumnTypes.length > 0) {
            System.arraycopy(tunableColumnTypes, 0, typesCopy, 0, Math.min(tunableColumnTypes.length, typesCopy.length));
            // Set the source and target interaction columns
            int index = 1;
            for (SourceColumnSemantic scs : tunableColumnTypes) {
                if (scs.equals(SourceColumnSemantic.SOURCE))
                    indexColumnSourceInteraction = index;
                else if (scs.equals(SourceColumnSemantic.TARGET))
                    indexColumnTargetInteraction = index;
                index++;
            }
        }
        if (nogui) {
            // Handle the validation
            nogui = false;
            ValidationState state = getValidationState(new StringBuffer(80));
            switch(state) {
                case INVALID:
                    tm.showMessage(TaskMonitor.Level.ERROR, "Source column must be specified");
                    return;
                case REQUEST_CONFIRMATION:
                    tm.showMessage(TaskMonitor.Level.WARN, "Target column is not specified.  No edges will be created");
            }
            nogui = true;
        }
        String[] listDelimiters = previewPanel.getListDelimiters();
        if (listDelimiters == null || listDelimiters.length == 0) {
            listDelimiters = new String[dataTypes.length];
            if (delimitersForDataList.getSelectedValue() != null)
                Arrays.fill(listDelimiters, delimitersForDataList.getSelectedValue());
        }
        if (indexColumnSourceInteraction > 0)
            indexColumnSourceInteraction--;
        if (indexColumnTargetInteraction > 0)
            indexColumnTargetInteraction--;
        if (indexColumnTypeInteraction > 0)
            indexColumnTypeInteraction--;
        networkName = previewPanel.getSourceName();
        ntmp = new NetworkTableMappingParameters(networkName, delimiters.getSelectedValues(), listDelimiters, attributeNames, dataTypesCopy, typesCopy, indexColumnSourceInteraction, indexColumnTargetInteraction, indexColumnTypeInteraction, defaultInteraction, startLoadRow, null);
        try {
            if (this.fileType.equalsIgnoreCase(SupportedFileType.EXCEL.getExtension()) || this.fileType.equalsIgnoreCase(SupportedFileType.OOXML.getExtension())) {
                final Sheet sheet = workbook.getSheet(networkName);
                reader = new ExcelNetworkSheetReader(networkName, sheet, ntmp, nMap, rootNetwork, serviceRegistrar);
            } else {
                networkName = this.inputName;
                reader = new NetworkTableReader(networkName, new FileInputStream(tempFile), ntmp, nMap, rootNetwork, serviceRegistrar);
            }
        } catch (Exception ioe) {
            tm.showMessage(TaskMonitor.Level.ERROR, "Unable to read network: " + ioe.getMessage());
            return;
        }
        loadNetwork(tm);
        tm.setProgress(1.0);
    } else {
        networkName = this.inputName;
        insertTasksAfterCurrentTask(netReader);
    }
}
Also used : NetworkTableReader(org.cytoscape.tableimport.internal.reader.NetworkTableReader) ArrayList(java.util.ArrayList) CyNetworkReaderManager(org.cytoscape.io.read.CyNetworkReaderManager) InvalidFormatException(org.apache.poi.openxml4j.exceptions.InvalidFormatException) Workbook(org.apache.poi.ss.usermodel.Workbook) FileInputStream(java.io.FileInputStream) InvalidFormatException(org.apache.poi.openxml4j.exceptions.InvalidFormatException) IOException(java.io.IOException) SourceColumnSemantic(org.cytoscape.tableimport.internal.util.SourceColumnSemantic) AttributeDataType(org.cytoscape.tableimport.internal.util.AttributeDataType) NetworkTableMappingParameters(org.cytoscape.tableimport.internal.reader.NetworkTableMappingParameters) ExcelNetworkSheetReader(org.cytoscape.tableimport.internal.reader.ExcelNetworkSheetReader) Sheet(org.apache.poi.ss.usermodel.Sheet)

Example 9 with AttributeDataType

use of org.cytoscape.tableimport.internal.util.AttributeDataType in project cytoscape-impl by cytoscape.

the class LoadTableReaderTask method run.

@Override
public void run(final TaskMonitor tm) throws Exception {
    tm.setTitle("Loading table data");
    tm.setProgress(0.0);
    tm.setStatusMessage("Loading table...");
    List<String> attrNameList = new ArrayList<>();
    int colCount;
    String[] attributeNames;
    Workbook workbook = null;
    // Load Spreadsheet data for preview.
    try {
        if (fileType != null && (fileType.equalsIgnoreCase(SupportedFileType.EXCEL.getExtension()) || fileType.equalsIgnoreCase(SupportedFileType.OOXML.getExtension())) && workbook == null) {
            try {
                workbook = WorkbookFactory.create(isStart);
            } catch (InvalidFormatException e) {
                e.printStackTrace();
                throw new IllegalArgumentException("Could not read Excel file.  Maybe the file is broken?");
            } finally {
                if (isStart != null)
                    isStart.close();
            }
        }
    } catch (Exception ioe) {
        tm.showMessage(TaskMonitor.Level.ERROR, "Unable to read table: " + ioe.getMessage());
        return;
    }
    if (startLoadRow > 0)
        startLoadRow--;
    final int startLoadRowTemp = firstRowAsColumnNames ? 0 : startLoadRow;
    previewPanel.updatePreviewTable(workbook, fileType, inputName, isStart, delimiters.getSelectedValues(), null, startLoadRowTemp);
    colCount = previewPanel.getPreviewTable().getColumnModel().getColumnCount();
    Object curName = null;
    if (firstRowAsColumnNames) {
        previewPanel.setFirstRowAsColumnNames();
        startLoadRow++;
    }
    final String sourceName = previewPanel.getSourceName();
    final SourceColumnSemantic[] types = previewPanel.getTypes();
    for (int i = 0; i < colCount; i++) {
        curName = previewPanel.getPreviewTable().getColumnModel().getColumn(i).getHeaderValue();
        if (attrNameList.contains(curName)) {
            int dupIndex = 0;
            for (int idx = 0; idx < attrNameList.size(); idx++) {
                if (curName.equals(attrNameList.get(idx))) {
                    dupIndex = idx;
                    break;
                }
            }
            if (!TypeUtil.allowsDuplicateName(ImportType.TABLE_IMPORT, types[i], types[dupIndex])) {
                // TODO add message to user
                return;
            }
        }
        if (curName == null)
            attrNameList.add("Column " + i);
        else
            attrNameList.add(curName.toString());
    }
    attributeNames = attrNameList.toArray(new String[0]);
    final SourceColumnSemantic[] typesCopy = Arrays.copyOf(types, types.length);
    final AttributeDataType[] dataTypes = previewPanel.getDataTypes();
    final AttributeDataType[] dataTypesCopy = Arrays.copyOf(dataTypes, dataTypes.length);
    AttributeDataType[] tunableDataTypes = null;
    if (dataTypeList != null && !dataTypeList.trim().isEmpty())
        tunableDataTypes = TypeUtil.parseDataTypeList(dataTypeList);
    if (tunableDataTypes != null && tunableDataTypes.length > 0)
        System.arraycopy(tunableDataTypes, 0, dataTypesCopy, 0, Math.min(tunableDataTypes.length, dataTypesCopy.length));
    String[] listDelimiters = previewPanel.getListDelimiters();
    if (listDelimiters == null || listDelimiters.length == 0) {
        listDelimiters = new String[dataTypes.length];
        if (delimitersForDataList.getSelectedValue() != null)
            Arrays.fill(listDelimiters, delimitersForDataList.getSelectedValue());
    }
    if (keyColumnIndex > 0)
        keyColumnIndex--;
    amp = new AttributeMappingParameters(sourceName, delimiters.getSelectedValues(), listDelimiters, keyColumnIndex, attributeNames, dataTypesCopy, typesCopy, startLoadRow, null);
    if (this.fileType.equalsIgnoreCase(SupportedFileType.EXCEL.getExtension()) || this.fileType.equalsIgnoreCase(SupportedFileType.OOXML.getExtension())) {
        // Fixed bug# 1668, Only load data from the first sheet, ignore the rest sheets
        // UPDATE: From the user perspective it makes more sense to get the selected tab/sheet than the first one.
        final Sheet sheet = workbook.getSheet(sourceName);
        if (sheet != null) {
            reader = new ExcelAttributeSheetReader(sheet, amp, serviceRegistrar);
            loadAnnotation(tm);
        }
    } else {
        reader = new DefaultAttributeTableReader(null, amp, this.isEnd, serviceRegistrar);
        loadAnnotation(tm);
    }
}
Also used : ArrayList(java.util.ArrayList) ExcelAttributeSheetReader(org.cytoscape.tableimport.internal.reader.ExcelAttributeSheetReader) InvalidFormatException(org.apache.poi.openxml4j.exceptions.InvalidFormatException) Workbook(org.apache.poi.ss.usermodel.Workbook) InvalidFormatException(org.apache.poi.openxml4j.exceptions.InvalidFormatException) IOException(java.io.IOException) SourceColumnSemantic(org.cytoscape.tableimport.internal.util.SourceColumnSemantic) AttributeDataType(org.cytoscape.tableimport.internal.util.AttributeDataType) DefaultAttributeTableReader(org.cytoscape.tableimport.internal.reader.DefaultAttributeTableReader) AttributeMappingParameters(org.cytoscape.tableimport.internal.reader.AttributeMappingParameters) Sheet(org.apache.poi.ss.usermodel.Sheet)

Example 10 with AttributeDataType

use of org.cytoscape.tableimport.internal.util.AttributeDataType in project cytoscape-impl by cytoscape.

the class AttributeEditorPanel method updateTypeButtons.

private void updateTypeButtons() {
    final AttributeDataType dataType = getAttributeDataType();
    for (Entry<SourceColumnSemantic, JToggleButton> entry : typeButtons.entrySet()) {
        final SourceColumnSemantic type = entry.getKey();
        final JToggleButton btn = entry.getValue();
        btn.setEnabled(TypeUtil.isValid(type, dataType));
        btn.setForeground(btn.isEnabled() ? type.getForeground() : UIManager.getColor("Button.disabledForeground"));
    }
}
Also used : SourceColumnSemantic(org.cytoscape.tableimport.internal.util.SourceColumnSemantic) AttributeDataType(org.cytoscape.tableimport.internal.util.AttributeDataType) JToggleButton(javax.swing.JToggleButton)

Aggregations

AttributeDataType (org.cytoscape.tableimport.internal.util.AttributeDataType)12 SourceColumnSemantic (org.cytoscape.tableimport.internal.util.SourceColumnSemantic)8 IOException (java.io.IOException)3 ArrayList (java.util.ArrayList)3 AttributeMappingParameters (org.cytoscape.tableimport.internal.reader.AttributeMappingParameters)3 JToggleButton (javax.swing.JToggleButton)2 InvalidFormatException (org.apache.poi.openxml4j.exceptions.InvalidFormatException)2 Sheet (org.apache.poi.ss.usermodel.Sheet)2 Workbook (org.apache.poi.ss.usermodel.Workbook)2 CyTable (org.cytoscape.model.CyTable)2 NetworkTableMappingParameters (org.cytoscape.tableimport.internal.reader.NetworkTableMappingParameters)2 Window (java.awt.Window)1 ActionEvent (java.awt.event.ActionEvent)1 WindowAdapter (java.awt.event.WindowAdapter)1 WindowEvent (java.awt.event.WindowEvent)1 WindowFocusListener (java.awt.event.WindowFocusListener)1 PropertyChangeEvent (java.beans.PropertyChangeEvent)1 PropertyChangeListener (java.beans.PropertyChangeListener)1 FileInputStream (java.io.FileInputStream)1 List (java.util.List)1