import java.util.Vector;
/**
- * NOTE: Columns are zero based.
+ * Data class holding the selected columns and hidden column ranges for a view.
+ * Ranges are base 1.
*/
public class ColumnSelection
{
+ /**
+ * A class to hold an efficient representation of selected columns
+ */
private class IntList
{
/*
}
return rlist;
}
+
+ @Override
+ public int hashCode()
+ {
+ // TODO Auto-generated method stub
+ return selected.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof IntList)
+ {
+ return ((IntList) obj).selected.equals(selected);
+ }
+ return false;
+ }
}
- IntList selected = new IntList();
+ IntList selection = new IntList();
/*
* list of hidden column [start, end] ranges; the list is maintained in
*/
public void addElement(int col)
{
- selected.add(col);
+ selection.add(col);
}
/**
*/
public void clear()
{
- selected.clear();
+ selection.clear();
}
/**
*/
public void removeElement(int col)
{
- selected.remove(col);
+ selection.remove(col);
}
/**
for (int i = start; i < end; i++)
{
colInt = new Integer(i);
- if (selected.contains(colInt))
+ if (selection.contains(colInt))
{
- selected.remove(colInt);
+ selection.remove(colInt);
}
}
}
*/
public List<Integer> getSelected()
{
- return selected.getList();
+ return selection.getList();
}
/**
*/
public List<int[]> getSelectedRanges()
{
- return selected.getRanges();
+ return selection.getRanges();
}
/**
*/
public boolean contains(int col)
{
- return (col > -1) ? selected.isSelected(col) : false;
+ return (col > -1) ? selection.isSelected(col) : false;
}
/**
*/
public boolean isEmpty()
{
- return selected == null || selected.isEmpty();
+ return selection == null || selection.isEmpty();
}
/**
*/
public int getMax()
{
- if (selected.isEmpty())
+ if (selection.isEmpty())
{
return -1;
}
- return selected.getMaxColumn();
+ return selection.getMaxColumn();
}
/**
*/
public int getMin()
{
- if (selected.isEmpty())
+ if (selection.isEmpty())
{
return 1000000000;
}
- return selected.getMinColumn();
+ return selection.getMinColumn();
}
/**
public List<int[]> compensateForEdit(int start, int change)
{
List<int[]> deletedHiddenColumns = null;
- selected.compensateForEdits(start, change);
+ selection.compensateForEdits(start, change);
if (hiddenColumns != null)
{
private void compensateForDelEdits(int start, int change)
{
- selected.compensateForEdits(start, change);
+ selection.compensateForEdits(start, change);
if (hiddenColumns != null)
{
hiddenColumns = null;
}
}
- if (selected != null && selected.size() > 0)
+ if (selection != null && selection.size() > 0)
{
- selected.pruneColumnList(shifts);
- if (selected != null && selected.size() == 0)
+ selection.pruneColumnList(shifts);
+ if (selection != null && selection.size() == 0)
{
- selected = null;
+ selection = null;
}
}
// and shift the rest.
public void hideSelectedColumns()
{
- synchronized (selected)
+ synchronized (selection)
{
- for (int[] selregions : selected.getRanges())
+ for (int[] selregions : selection.getRanges())
{
hideColumns(selregions[0], selregions[1]);
}
- selected.clear();
+ selection.clear();
}
}
{
if (copy != null)
{
- if (copy.selected != null)
+ if (copy.selection != null)
{
- selected = new IntList();
- for (int i = 0, j = copy.selected.size(); i < j; i++)
+ selection = new IntList();
+ for (int i = 0, j = copy.selection.size(); i < j; i++)
{
- selected.add(copy.selected.elementAt(i));
+ selection.add(copy.selection.elementAt(i));
}
}
if (copy.hiddenColumns != null)
{
if (hiddenColumns != null && isVisible(col.intValue()))
{
- selected.add(col);
+ selection.add(col);
}
}
}
*/
public void setElementsFrom(ColumnSelection colsel)
{
- selected = new IntList();
- if (colsel.selected != null && colsel.selected.size() > 0)
+ selection = new IntList();
+ if (colsel.selection != null && colsel.selection.size() > 0)
{
if (hiddenColumns != null && hiddenColumns.size() > 0)
{
*/
public boolean hasSelectedColumns()
{
- return (selected != null && selected.size() > 0);
+ return (selection != null && selection.size() > 0);
}
/**
return false;
}
+ /**
+ * Returns a hashCode built from selected columns and hidden column ranges
+ */
+ @Override
+ public int hashCode()
+ {
+ int hashCode = selection.hashCode();
+ if (hiddenColumns != null)
+ {
+ for (int[] hidden : hiddenColumns)
+ {
+ hashCode = 31 * hashCode + hidden[0];
+ hashCode = 31 * hashCode + hidden[1];
+ }
+ }
+ return hashCode;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof ColumnSelection)
+ {
+ return hashCode() == obj.hashCode();
+ }
+ return false;
+ }
+
}
cs.addElement(0);
assertEquals(0, cs.getMin());
}
+
+ @Test(groups = { "Functional" })
+ public void testEquals()
+ {
+ ColumnSelection cs = new ColumnSelection();
+ cs.addElement(0);
+ cs.addElement(513);
+ cs.addElement(1);
+ cs.hideColumns(3);
+ cs.hideColumns(7);
+ cs.hideColumns(5,9);
+
+ // same selections added in a different order
+ ColumnSelection cs2 = new ColumnSelection();
+ cs2.addElement(1);
+ cs2.addElement(513);
+ cs2.addElement(0);
+ cs2.hideColumns(6, 9);
+ cs2.hideColumns(5, 8);
+ cs2.hideColumns(3);
+
+ assertTrue(cs.equals(cs2));
+ assertTrue(cs.equals(cs));
+ assertTrue(cs2.equals(cs));
+ assertTrue(cs2.equals(cs2));
+
+ cs2.addElement(12);
+ assertFalse(cs.equals(cs2));
+ assertFalse(cs2.equals(cs));
+
+ cs2.removeElement(12);
+ assertTrue(cs.equals(cs2));
+
+ cs2.hideColumns(88);
+ assertFalse(cs.equals(cs2));
+ /*
+ * unhiding a column adds it to selection!
+ */
+ cs2.revealHiddenColumns(88);
+ assertFalse(cs.equals(cs2));
+ cs.addElement(88);
+ assertTrue(cs.equals(cs2));
+ }
}