You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2016/10/21 09:49:02 UTC
[28/29] incubator-taverna-workbench git commit: Removed
non-opensource code TableMap/TableSorter
Removed non-opensource code TableMap/TableSorter
These were copied from code found at
http://www.informit.com/guides/content.aspx?g=java&seqNum=57
but
https://web.archive.org/web/20151110082836/http://www.informit.com/guides/content.aspx?g=java&seqNum=57
does not declare any closed or open source license.
This could be replace with BSD3-licensed demos from
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
.. but it seems TableMap and TableSorter are not used anywhere
in Taverna Workbench 3 or its plugins - so safe to remove
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/commit/a7761da4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/tree/a7761da4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/diff/a7761da4
Branch: refs/heads/master
Commit: a7761da444bbb0add71967b6bc3229fb101d13cc
Parents: 5f2bdc2
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Oct 21 11:27:57 2016 +0200
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Oct 21 11:34:56 2016 +0200
----------------------------------------------------------------------
.../org/apache/taverna/lang/ui/TableMap.java | 83 -----
.../org/apache/taverna/lang/ui/TableSorter.java | 355 -------------------
2 files changed, 438 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a7761da4/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableMap.java
----------------------------------------------------------------------
diff --git a/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableMap.java b/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableMap.java
deleted file mode 100644
index b3925b8..0000000
--- a/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableMap.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
-package org.apache.taverna.lang.ui;
-
-import javax.swing.table.AbstractTableModel;
-import javax.swing.table.TableModel;
-import javax.swing.event.TableModelListener;
-import javax.swing.event.TableModelEvent;
-
-/**
- * Copied from code found at http://www.informit.com/guides/content.aspx?g=java&seqNum=57
- *
- */
-public class TableMap extends AbstractTableModel implements TableModelListener {
- protected TableModel model;
-
- public TableModel getModel() {
- return model;
- }
-
- public void setModel(TableModel model) {
- this.model = model;
- model.addTableModelListener(this);
- }
-
- // By default, implement TableModel by forwarding all messages
- // to the model.
-
- public Object getValueAt(int aRow, int aColumn) {
- return model.getValueAt(aRow, aColumn);
- }
-
- public void setValueAt(Object aValue, int aRow, int aColumn) {
- model.setValueAt(aValue, aRow, aColumn);
- }
-
- public int getRowCount() {
- return (model == null) ? 0 : model.getRowCount();
- }
-
- public int getColumnCount() {
- return (model == null) ? 0 : model.getColumnCount();
- }
-
- public String getColumnName(int aColumn) {
- return model.getColumnName(aColumn);
- }
-
- public Class getColumnClass(int aColumn) {
- return model.getColumnClass(aColumn);
- }
-
- public boolean isCellEditable(int row, int column) {
- return model.isCellEditable(row, column);
- }
-
- public int transposeRow(int row) {
- return row;
- }
-
- //
- // Implementation of the TableModelListener interface,
- //
- // By default forward all events to all the listeners.
- public void tableChanged(TableModelEvent e) {
- fireTableChanged(e);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/a7761da4/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableSorter.java
----------------------------------------------------------------------
diff --git a/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableSorter.java b/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableSorter.java
deleted file mode 100644
index 4c9cc35..0000000
--- a/taverna-ui/src/main/java/org/apache/taverna/lang/ui/TableSorter.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
-package org.apache.taverna.lang.ui;
-
-/**
- * Copied from code found at http://www.informit.com/guides/content.aspx?g=java&seqNum=57
- */
-
-import java.util.Date;
-import java.util.Vector;
-
-import javax.swing.table.TableModel;
-import javax.swing.event.TableModelEvent;
-
-//Imports for picking up mouse events from the JTable.
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.InputEvent;
-import javax.swing.JTable;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableColumnModel;
-
-public class TableSorter extends TableMap {
- int indexes[];
- Vector sortingColumns = new Vector();
- boolean ascending = true;
- int compares;
-
- public TableSorter() {
- indexes = new int[0]; // for consistency
- }
-
- public TableSorter(TableModel model) {
- setModel(model);
- }
-
- public void setModel(TableModel model) {
- super.setModel(model);
- reallocateIndexes();
- }
-
- public int compareRowsByColumn(int row1, int row2, int column) {
- Class type = model.getColumnClass(column);
- TableModel data = model;
-
- // Check for nulls.
-
- Object o1 = data.getValueAt(row1, column);
- Object o2 = data.getValueAt(row2, column);
-
- // If both values are null, return 0.
- if (o1 == null && o2 == null) {
- return 0;
- } else if (o1 == null) { // Define null less than everything.
- return -1;
- } else if (o2 == null) {
- return 1;
- }
-
- if (o1 instanceof Comparable) {
- return ((Comparable) o1).compareTo(o2);
- }
- /*
- * We copy all returned values from the getValue call in case an
- * optimised model is reusing one object to return many values. The
- * Number subclasses in the JDK are immutable and so will not be used in
- * this way but other subclasses of Number might want to do this to save
- * space and avoid unnecessary heap allocation.
- */
-
- if (type.getSuperclass() == java.lang.Number.class) {
- Number n1 = (Number) data.getValueAt(row1, column);
- double d1 = n1.doubleValue();
- Number n2 = (Number) data.getValueAt(row2, column);
- double d2 = n2.doubleValue();
-
- if (d1 < d2) {
- return -1;
- } else if (d1 > d2) {
- return 1;
- } else {
- return 0;
- }
- } else if (type == java.util.Date.class) {
- Date d1 = (Date) data.getValueAt(row1, column);
- long n1 = d1.getTime();
- Date d2 = (Date) data.getValueAt(row2, column);
- long n2 = d2.getTime();
-
- if (n1 < n2) {
- return -1;
- } else if (n1 > n2) {
- return 1;
- } else {
- return 0;
- }
- } else if (type == String.class) {
- String s1 = (String) data.getValueAt(row1, column);
- String s2 = (String) data.getValueAt(row2, column);
- int result = s1.compareTo(s2);
-
- if (result < 0) {
- return -1;
- } else if (result > 0) {
- return 1;
- } else {
- return 0;
- }
- } else if (type == Boolean.class) {
- Boolean bool1 = (Boolean) data.getValueAt(row1, column);
- boolean b1 = bool1.booleanValue();
- Boolean bool2 = (Boolean) data.getValueAt(row2, column);
- boolean b2 = bool2.booleanValue();
-
- if (b1 == b2) {
- return 0;
- } else if (b1) { // Define false < true
- return 1;
- } else {
- return -1;
- }
- } else {
- Object v1 = data.getValueAt(row1, column);
- String s1 = v1.toString();
- Object v2 = data.getValueAt(row2, column);
- String s2 = v2.toString();
- int result = s1.compareTo(s2);
-
- if (result < 0) {
- return -1;
- } else if (result > 0) {
- return 1;
- } else {
- return 0;
- }
- }
- }
-
- public int compare(int row1, int row2) {
- compares++;
- for (int level = 0; level < sortingColumns.size(); level++) {
- Integer column = (Integer) sortingColumns.elementAt(level);
- int result = compareRowsByColumn(row1, row2, column.intValue());
- if (result != 0) {
- return ascending ? result : -result;
- }
- }
- return 0;
- }
-
- public void reallocateIndexes() {
- int rowCount = model.getRowCount();
-
- // Set up a new array of indexes with the right number of elements
- // for the new data model.
- indexes = new int[rowCount];
-
- // Initialise with the identity mapping.
- for (int row = 0; row < rowCount; row++) {
- indexes[row] = row;
- }
- }
-
- public void tableChanged(TableModelEvent e) {
- // System.out.println("Sorter: tableChanged");
- reallocateIndexes();
-
- super.tableChanged(e);
- }
-
- public void checkModel() {
- if (indexes.length != model.getRowCount()) {
- System.err.println("Sorter not informed of a change in model.");
- }
- }
-
- public void sort(Object sender) {
- checkModel();
-
- compares = 0;
- // n2sort();
- // qsort(0, indexes.length-1);
- shuttlesort((int[]) indexes.clone(), indexes, 0, indexes.length);
- // System.out.println("Compares: "+compares);
- }
-
- public void n2sort() {
- for (int i = 0; i < getRowCount(); i++) {
- for (int j = i + 1; j < getRowCount(); j++) {
- if (compare(indexes[i], indexes[j]) == -1) {
- swap(i, j);
- }
- }
- }
- }
-
- // This is a home-grown implementation which we have not had time
- // to research - it may perform poorly in some circumstances. It
- // requires twice the space of an in-place algorithm and makes
- // NlogN assigments shuttling the values between the two
- // arrays. The number of compares appears to vary between N-1 and
- // NlogN depending on the initial order but the main reason for
- // using it here is that, unlike qsort, it is stable.
- public void shuttlesort(int from[], int to[], int low, int high) {
- if (high - low < 2) {
- return;
- }
- int middle = (low + high) / 2;
- shuttlesort(to, from, low, middle);
- shuttlesort(to, from, middle, high);
-
- int p = low;
- int q = middle;
-
- /*
- * This is an optional short-cut; at each recursive call, check to see
- * if the elements in this subset are already ordered. If so, no further
- * comparisons are needed; the sub-array can just be copied. The array
- * must be copied rather than assigned otherwise sister calls in the
- * recursion might get out of sinc. When the number of elements is three
- * they are partitioned so that the first set, [low, mid), has one
- * element and and the second, [mid, high), has two. We skip the
- * optimisation when the number of elements is three or less as the
- * first compare in the normal merge will produce the same sequence of
- * steps. This optimisation seems to be worthwhile for partially ordered
- * lists but some analysis is needed to find out how the performance
- * drops to Nlog(N) as the initial order diminishes - it may drop very
- * quickly.
- */
-
- if (high - low >= 4 && compare(from[middle - 1], from[middle]) <= 0) {
- for (int i = low; i < high; i++) {
- to[i] = from[i];
- }
- return;
- }
-
- // A normal merge.
-
- for (int i = low; i < high; i++) {
- if (q >= high || (p < middle && compare(from[p], from[q]) <= 0)) {
- to[i] = from[p++];
- } else {
- to[i] = from[q++];
- }
- }
- }
-
- public void swap(int i, int j) {
- int tmp = indexes[i];
- indexes[i] = indexes[j];
- indexes[j] = tmp;
- }
-
- // The mapping only affects the contents of the data rows.
- // Pass all requests to these rows through the mapping array: "indexes".
-
- public Object getValueAt(int aRow, int aColumn) {
- checkModel();
- return model.getValueAt(indexes[aRow], aColumn);
- }
-
- public void setValueAt(Object aValue, int aRow, int aColumn) {
- checkModel();
- model.setValueAt(aValue, indexes[aRow], aColumn);
- }
-
- public void sortByColumn(int column) {
- sortByColumn(column, true);
- }
-
- public void sortByColumn(int column, boolean ascending) {
- this.ascending = ascending;
- sortingColumns.removeAllElements();
- sortingColumns.addElement(new Integer(column));
- sort(this);
- super.tableChanged(new TableModelEvent(this));
- }
-
- private int lastSortedColumn = -1;
- private boolean lastAscending = false;
-
- public void sortColumn(JTable tableView, int column) {
- int currentlySelectedRow = tableView.getSelectedRow();
- int underlyingSelectedRow = -1;
- if (currentlySelectedRow != -1) {
- underlyingSelectedRow = transposeRow(currentlySelectedRow);
- }
- // System.out.println("Sorting ...");
- boolean ascendingColumn = true;
- if (lastSortedColumn == column) {
- ascendingColumn = !lastAscending;
- }
- lastSortedColumn = column;
- lastAscending = ascendingColumn;
- this.sortByColumn(column, ascendingColumn);
- if (underlyingSelectedRow != -1) {
- for (int row = 0; row < indexes.length; row++) {
- if (transposeRow(row) == underlyingSelectedRow) {
- tableView.setRowSelectionInterval(row, row);
- }
- }
- }
- }
-
- public void resort(JTable tableView) {
- if (lastSortedColumn != -1) {
- lastAscending = !lastAscending;
- sortColumn(tableView, lastSortedColumn);
- }
- }
-
- // There is no-where else to put this.
- // Add a mouse listener to the Table to trigger a table sort
- // when a column heading is clicked in the JTable.
- public void addMouseListenerToHeaderInTable(JTable table) {
- final TableSorter sorter = this;
- final JTable tableView = table;
- tableView.setColumnSelectionAllowed(false);
- MouseAdapter listMouseListener = new MouseAdapter() {
-
- private int lastClickedColumn = -1;
- private boolean lastAscending = false;
- public void mouseClicked(MouseEvent e) {
- TableColumnModel columnModel = tableView.getColumnModel();
- int viewColumn = columnModel.getColumnIndexAtX(e.getX());
- int column = tableView.convertColumnIndexToModel(viewColumn);
- if (e.getClickCount() == 1 && column != -1) {
- sortColumn(tableView, column);
- }
- }
- };
- JTableHeader th = tableView.getTableHeader();
- th.addMouseListener(listMouseListener);
- }
-
- public int transposeRow(int row) {
- return indexes[row];
- }
-}
\ No newline at end of file