org.knime.core.node.tableview
Class TableContentView

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JTable
                  extended by org.knime.core.node.tableview.TableContentView
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, EventListener, Accessible, CellEditorListener, ListSelectionListener, RowSorterListener, TableColumnModelListener, TableModelListener, Scrollable
Direct Known Subclasses:
PreviewTableContentView

public class TableContentView
extends JTable

Table view on a DataTable. This implementation uses a caching strategy as described in the TableContentModel.
Standard renderers are used to display the different types of DataCells. This will change in future.
This view typically resides in a TableView (wrapping it in a scroll pane and providing lots of delegating methods). If you want to use a table view somewhere else than in this package, e.g. in a different node, refer to the TableView implementation.

Author:
Bernd Wiswedel, University of Konstanz
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JTable
JTable.AccessibleJTable, JTable.DropLocation, JTable.PrintMode
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JTable
AUTO_RESIZE_ALL_COLUMNS, AUTO_RESIZE_LAST_COLUMN, AUTO_RESIZE_NEXT_COLUMN, AUTO_RESIZE_OFF, AUTO_RESIZE_SUBSEQUENT_COLUMNS, autoCreateColumnsFromModel, autoResizeMode, cellEditor, cellSelectionEnabled, columnModel, dataModel, defaultEditorsByColumnClass, defaultRenderersByColumnClass, editingColumn, editingRow, editorComp, gridColor, preferredViewportSize, rowHeight, rowMargin, rowSelectionAllowed, selectionBackground, selectionForeground, selectionModel, showHorizontalLines, showVerticalLines, tableHeader
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
TableContentView()
          Creates empty content view.
TableContentView(DataTable data)
          Creates new TableContentView based on a DataTable.
TableContentView(TableContentModel model)
          Creates new TableContentView based on a given TableContentModel.
 
Method Summary
 void addColumn(TableColumn aColumn)
          Overridden to set proper header content and apply renderer.
 void cancelRowCountingInBackground()
          Delegate method to cancel row counting.
 void changeRenderer(DataType type, String ident)
          Changes the renderer in all columns whose type is equal to type.
 void changeRenderer(int column, String rendererID)
          Changes the renderer in a given column.
 void countRowsInBackground()
          Delegate method to start row counting.
(package private)  int fitCellSizeToRenderer()
          Sets the preferred column width and returns the maximum of the preferred row heights according to each column's renderer.
 String[] getAvailableRenderers(int column)
          Get the description of all available renderers in a column.
 TableContentModel getContentModel()
          Returns a reference to the TableContentModel.
protected  ColumnHeaderRenderer getNewColumnHeaderRenderer()
          Get the renderer for the column header (never null).
protected  JPopupMenu getPopUpMenu(int column)
          Create a custom popup menu when the mouse was clicked in a column header.
protected  DataValueRendererFamily getRendererFamily(DataColumnSpec colSpec)
          Method being invoked when the table is (re-)constructed to get the available renderer for a column.
 Map<DataType,String[]> getTypeRendererMap()
          Creates a new map containing DataType<->available renderer identifiers.
 boolean hasData()
          This table "hasData" when there is valid input, i.e.
 boolean hasHiLiteHandler()
          Is there a HiLiteHandler connected?
 void hiliteSelected()
          Requests to the HiLiteHandler that all rows that are currently selected are added to the set of hilited patterns.
 boolean isRowCountFinal()
          Is the row count returned by JTable.getRowCount() final?
 boolean isShowIconInColumnHeader()
          Get the status if the icon in the column header is shown.
protected  void onMouseClickInHeader(MouseEvent e)
          Invoked when a mouse event in the header occurs.
 Component prepareRenderer(TableCellRenderer renderer, int row, int column)
          Overridden in order to set the correct selection color (depending on hilite status).
 void resetHilite()
          Requests to the HiLiteHandler that the hilite status of all rows is reset.
 void setColumnWidth(int width)
          Sets the width of all columns to the argument width.
 void setDataTable(DataTable data)
          Sets a new DataTable as content.
 void setHiLiteHandler(HiLiteHandler hiLiteHdl)
          Sets a new HiLiteHandler that this view talks to.
 void setModel(TableModel tableModel)
          Checks that the given argument is of type TableContentModel and throws exception if it is not.
 void setSelectionBackground(Color back)
          Overridden to avoid event storm.
 void setShowIconInColumnHeader(boolean show)
          Sets the property whether or not the icon in the column header shall be shown.
 void setTableHeader(JTableHeader newTableHeader)
          Overridden so that we can attach a mouse listener to it and set the proper renderer.
 void showHiLitedOnly(boolean showOnlyHilite)
          Deprecated. Implementors should refer to getContentModel().setTableContentFilter(TableContentFilter)
 boolean showsHiLitedOnly()
          Deprecated. Implementors should refer to getContentModel().getTableContentFilter()
 void tableChanged(TableModelEvent e)
          
 void unHiliteSelected()
          Requests to the HiLiteHandler that all rows that are currently selected are removed from the set of hilited patterns.
 
Methods inherited from class javax.swing.JTable
addColumnSelectionInterval, addNotify, addRowSelectionInterval, changeSelection, clearSelection, columnAdded, columnAtPoint, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged, configureEnclosingScrollPane, convertColumnIndexToModel, convertColumnIndexToView, convertRowIndexToModel, convertRowIndexToView, createDefaultColumnModel, createDefaultColumnsFromModel, createDefaultDataModel, createDefaultEditors, createDefaultRenderers, createDefaultSelectionModel, createDefaultTableHeader, createScrollPaneForTable, doLayout, editCellAt, editCellAt, editingCanceled, editingStopped, getAccessibleContext, getAutoCreateColumnsFromModel, getAutoCreateRowSorter, getAutoResizeMode, getCellEditor, getCellEditor, getCellRect, getCellRenderer, getCellSelectionEnabled, getColumn, getColumnClass, getColumnCount, getColumnModel, getColumnName, getColumnSelectionAllowed, getDefaultEditor, getDefaultRenderer, getDragEnabled, getDropLocation, getDropMode, getEditingColumn, getEditingRow, getEditorComponent, getFillsViewportHeight, getGridColor, getIntercellSpacing, getModel, getPreferredScrollableViewportSize, getPrintable, getRowCount, getRowHeight, getRowHeight, getRowMargin, getRowSelectionAllowed, getRowSorter, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedColumn, getSelectedColumnCount, getSelectedColumns, getSelectedRow, getSelectedRowCount, getSelectedRows, getSelectionBackground, getSelectionForeground, getSelectionModel, getShowHorizontalLines, getShowVerticalLines, getSurrendersFocusOnKeystroke, getTableHeader, getToolTipText, getUI, getUIClassID, getUpdateSelectionOnSort, getValueAt, initializeLocalVars, isCellEditable, isCellSelected, isColumnSelected, isEditing, isRowSelected, moveColumn, paramString, prepareEditor, print, print, print, print, print, processKeyBinding, removeColumn, removeColumnSelectionInterval, removeEditor, removeNotify, removeRowSelectionInterval, resizeAndRepaint, rowAtPoint, selectAll, setAutoCreateColumnsFromModel, setAutoCreateRowSorter, setAutoResizeMode, setCellEditor, setCellSelectionEnabled, setColumnModel, setColumnSelectionAllowed, setColumnSelectionInterval, setDefaultEditor, setDefaultRenderer, setDragEnabled, setDropMode, setEditingColumn, setEditingRow, setFillsViewportHeight, setGridColor, setIntercellSpacing, setPreferredScrollableViewportSize, setRowHeight, setRowHeight, setRowMargin, setRowSelectionAllowed, setRowSelectionInterval, setRowSorter, setSelectionForeground, setSelectionMode, setSelectionModel, setShowGrid, setShowHorizontalLines, setShowVerticalLines, setSurrendersFocusOnKeystroke, setUI, setUpdateSelectionOnSort, setValueAt, sizeColumnsToFit, sizeColumnsToFit, sorterChanged, unconfigureEnclosingScrollPane, updateUI, valueChanged
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TableContentView

public TableContentView()
Creates empty content view. Consider setDataTable(DataTable) to set a new data table to be displayed.


TableContentView

public TableContentView(TableContentModel model)
Creates new TableContentView based on a given TableContentModel. A standard renderer that prints the toString() result of DataCell is used.

Parameters:
model - to be displayed

TableContentView

public TableContentView(DataTable data)
Creates new TableContentView based on a DataTable. The view's table model is a TableContentModel.

Parameters:
data - DataTable to be displayed
Throws:
NullPointerException - if data is null.
See Also:
TableContentModel.TableContentModel(DataTable)
Method Detail

setModel

public void setModel(TableModel tableModel)
Checks that the given argument is of type TableContentModel and throws exception if it is not. Otherwise it sets the new model and updates the table.

Overrides:
setModel in class JTable
Parameters:
tableModel - the new model, necessarily of type TableContentModel
Throws:
ClassCastException - if dataModel not of type TableContentModel
IllegalArgumentException - if dataModel is null as done by JTable.setModel(TableModel)
See Also:
JTable.setModel(javax.swing.table.TableModel)

getContentModel

public TableContentModel getContentModel()
Returns a reference to the TableContentModel.

Returns:
the reference to the table model

prepareRenderer

public Component prepareRenderer(TableCellRenderer renderer,
                                 int row,
                                 int column)
Overridden in order to set the correct selection color (depending on hilite status).

Overrides:
prepareRenderer in class JTable

isRowCountFinal

public boolean isRowCountFinal()
Is the row count returned by JTable.getRowCount() final?

Returns:
true if row count won't change anymore (all rows have been seen), false if more rows are expected to come
See Also:
TableContentModel.isRowCountFinal()

setDataTable

public void setDataTable(DataTable data)
Sets a new DataTable as content.

Parameters:
data - New data to be shown. May be null to have an empty table.
See Also:
TableContentModel.setDataTable(DataTable)

setHiLiteHandler

public void setHiLiteHandler(HiLiteHandler hiLiteHdl)
Sets a new HiLiteHandler that this view talks to. The argument may be null to disconnect the current HiLiteHandler.

Parameters:
hiLiteHdl - the new HiLiteHandler.

showHiLitedOnly

@Deprecated
public final void showHiLitedOnly(boolean showOnlyHilite)
Deprecated. Implementors should refer to getContentModel().setTableContentFilter(TableContentFilter)

Control behaviour to show only hilited rows.

Parameters:
showOnlyHilite - true: filter and display only rows whose hilite status is set
See Also:
TableContentModel.getTableContentFilter()

showsHiLitedOnly

@Deprecated
public boolean showsHiLitedOnly()
Deprecated. Implementors should refer to getContentModel().getTableContentFilter()

Get status of filtering for hilited rows.

Returns:
true if only hilited rows are shown, false if all rows are shown.
See Also:
TableContentModel.getTableContentFilter()

hasHiLiteHandler

public final boolean hasHiLiteHandler()
Is there a HiLiteHandler connected?

Returns:
true if global hiliting is possible
See Also:
TableContentModel.hasHiLiteHandler()

hasData

public boolean hasData()
This table "hasData" when there is valid input, i.e. the DataTable to be displayed is not null. The status may be changed during runtime by calling the models setDataTable method.

Returns:
true if there is data to be displayed
See Also:
TableContentModel.hasData()

cancelRowCountingInBackground

public void cancelRowCountingInBackground()
Delegate method to cancel row counting.

See Also:
TableContentModel.cancelRowCountingInBackground()

countRowsInBackground

public void countRowsInBackground()
Delegate method to start row counting.

See Also:
TableContentModel.countRowsInBackground()

hiliteSelected

public void hiliteSelected()
Requests to the HiLiteHandler that all rows that are currently selected are added to the set of hilited patterns. This method does nothing if the view is not connected to any HiLiteHandler.


unHiliteSelected

public void unHiliteSelected()
Requests to the HiLiteHandler that all rows that are currently selected are removed from the set of hilited patterns. This method does nothing if the view is not connected to any HiLiteHandler.


resetHilite

public void resetHilite()
Requests to the HiLiteHandler that the hilite status of all rows is reset. This method does nothing if the view is not connected to any HiLiteHandler.


setShowIconInColumnHeader

public void setShowIconInColumnHeader(boolean show)
Sets the property whether or not the icon in the column header shall be shown. This typically represents the column's type icon (the cell type contained in the column). Sometimes, this is not desired (for instance in the data outport view).

Parameters:
show - Whether or not this icon should be shown.

isShowIconInColumnHeader

public boolean isShowIconInColumnHeader()
Get the status if the icon in the column header is shown.

Returns:
true when the icon is shown, false otherwise.

setTableHeader

public void setTableHeader(JTableHeader newTableHeader)
Overridden so that we can attach a mouse listener to it and set the proper renderer. The mouse listener is used to display a popup menu.

Overrides:
setTableHeader in class JTable

setSelectionBackground

public void setSelectionBackground(Color back)
Overridden to avoid event storm. The super implementation will invoke a repaint if the color has changed. Since that happens frequently (and also within the repaint) this causes an infinite loop.

Overrides:
setSelectionBackground in class JTable

addColumn

public void addColumn(TableColumn aColumn)
Overridden to set proper header content and apply renderer. The header of the column will be set to the DataTable's DataColumnSpec and for the renderer the type's getNewRenderer() is used

Overrides:
addColumn in class JTable
Parameters:
aColumn - column to be added
See Also:
JTable.addColumn(javax.swing.table.TableColumn), DataType.getRenderer(DataColumnSpec), DataColumnSpec

getRendererFamily

protected DataValueRendererFamily getRendererFamily(DataColumnSpec colSpec)
Method being invoked when the table is (re-)constructed to get the available renderer for a column. This method may be overwritten to make the list of renderers more specific or general.

Parameters:
colSpec - The spec of the column, never null.
Returns:
The renderer family for the argument, not null.

onMouseClickInHeader

protected void onMouseClickInHeader(MouseEvent e)
Invoked when a mouse event in the header occurs. This implementation will create a popup menu when there is more than one renderer for that column available and will also list all possible values in the column where the mouse was clicked (as it is provided in the column spec). The event's source is the table header

Parameters:
e - the mouse event in the table header

getPopUpMenu

protected JPopupMenu getPopUpMenu(int column)
Create a custom popup menu when the mouse was clicked in a column header. This popup menu will contain the possible values in that column (when available) and a set of buttons which let the user change the renderer (again: when available).

Parameters:
column - column for which to create the popup menu
Returns:
a popup menu displaying these properties
See Also:
onMouseClickInHeader(MouseEvent)

changeRenderer

public void changeRenderer(int column,
                           String rendererID)
Changes the renderer in a given column. The column's renderer is retrieved and checked if it is instance of DataValueRendererFamily (which it is unless a subclass overrides addColumn). In this renderer family the renderer matching the description rendererID is set active.
If the description is not valid (null or unknown), this method does nothing.

Parameters:
column - the column of interest
rendererID - the name of the renderer
Throws:
IndexOutOfBoundsException - if column violates its range
See Also:
DataValueRendererFamily.getRendererDescriptions()

getAvailableRenderers

public String[] getAvailableRenderers(int column)
Get the description of all available renderers in a column. The returned array simply contains all description in the DataValueRendererFamily (which should be the default renderer in each column.)

Parameters:
column - the column of interest.
Returns:
a new array containing the description of all available renderer or an empty array to address no available renderer
Throws:
IndexOutOfBoundsException - if column violates its range

changeRenderer

public void changeRenderer(DataType type,
                           String ident)
Changes the renderer in all columns whose type is equal to type. This is a convenient way to change the renderer of several columns at once. This method does nothing if the type is unknown or the identifier is invalid.

Parameters:
type - the target type
ident - The identifier for the renderer to use
See Also:
getTypeRendererMap()

setColumnWidth

public void setColumnWidth(int width)
Sets the width of all columns to the argument width.

Parameters:
width - The new width.
See Also:
TableColumn.setWidth(int)

getTypeRendererMap

public Map<DataType,String[]> getTypeRendererMap()
Creates a new map containing DataType<->available renderer identifiers. The size of this map is equal to the number of different <@link column types, i.e. if the table only contains, e.g. double values (represented by DoubleCell), this map will have only one entry. The values in this map correspond to the renderer descriptions that are available for the type at hand.

This map is used to switch the renderer for a set of columns.

Returns:
Such a (new) map.

fitCellSizeToRenderer

int fitCellSizeToRenderer()
Sets the preferred column width and returns the maximum of the preferred row heights according to each column's renderer. This method should only be called when the table is built up from scratch.

Returns:
the best initial row height (this must be set elsewhere)

tableChanged

public void tableChanged(TableModelEvent e)

Specified by:
tableChanged in interface TableModelListener
Overrides:
tableChanged in class JTable

getNewColumnHeaderRenderer

protected ColumnHeaderRenderer getNewColumnHeaderRenderer()
Get the renderer for the column header (never null).

Returns:
a new ColumnHeaderRenderer
See Also:
ColumnHeaderRenderer, JTableHeader.setDefaultRenderer(javax.swing.table.TableCellRenderer)


Copyright, 2003 - 2010. All rights reserved.
University of Konstanz, Germany.
Chair for Bioinformatics and Information Mining, Prof. Dr. Michael R. Berthold.
You may not modify, publish, transmit, transfer or sell, reproduce, create derivative works from, distribute, perform, display, or in any way exploit any of the content, in whole or in part, except as otherwise expressly permitted in writing by the copyright owner or as specified in the license file distributed with this product.