/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.bearsoft.gui.grid.rows; import com.bearsoft.gui.grid.data.TableFront2TreedModel; import java.util.List; import javax.swing.ListSelectionModel; /** * * @author mg * @param <T> * @param <M> */ public class TreedRowsSorter<T, M extends TableFront2TreedModel<T>> extends TabularRowsSorter<M> { public TreedRowsSorter(M aModel, ListSelectionModel aViewSelection) { super(aModel, aViewSelection); } @Override public int compareRows(int row1, int row2) { T el1 = model.getElementAt(row1); T el2 = model.getElementAt(row2); if (model.unwrap().getParentOf(el1) != model.unwrap().getParentOf(el2)) { List<T> path1 = model.buildPathTo(el1); List<T> path2 = model.buildPathTo(el2); if (path2.contains(el1)) { // el1 is parent of el2 return -1; } if (path1.contains(el2)) { // el2 is parent of el1 return 1; } for (int i = 0; i < Math.min(path1.size(), path2.size()); i++) { if (path1.get(i) != path2.get(i)) { row1 = model.getIndexOf(path1.get(i)); row2 = model.getIndexOf(path2.get(i)); break; } } } return super.compareRows(row1, row2); } }