/*- * #%L * Fiji distribution of ImageJ for the life sciences. * %% * Copyright (C) 2007 - 2017 Fiji developers. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-2.0.html>. * #L% */ package spim.fiji.spimdata.explorer; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import javax.swing.table.AbstractTableModel; import mpicbg.spim.data.generic.AbstractSpimData; import mpicbg.spim.data.generic.base.Entity; import mpicbg.spim.data.generic.base.NamedEntity; import mpicbg.spim.data.generic.sequence.BasicViewDescription; import mpicbg.spim.data.generic.sequence.BasicViewSetup; import mpicbg.spim.data.registration.ViewRegistrations; import mpicbg.spim.data.sequence.TimePoint; import mpicbg.spim.data.sequence.ViewId; import spim.fiji.spimdata.SpimData2; import spim.fiji.spimdata.interestpoints.ViewInterestPoints; public class ViewSetupTableModel< AS extends AbstractSpimData< ? > > extends AbstractTableModel { private static final long serialVersionUID = -6526338840427674269L; protected ArrayList< BasicViewDescription< ? extends BasicViewSetup > > elements = null; final ViewSetupExplorerPanel< AS, ? > panel; final ArrayList< String > columnNames; final int registrationColumn, interestPointsColumn; final ViewRegistrations viewRegistrations; final ViewInterestPoints viewInterestPoints; public int registrationColumn() { return registrationColumn; } public int interestPointsColumn() { return interestPointsColumn; } public ViewSetupTableModel( final ViewSetupExplorerPanel< AS, ? > panel ) { this.panel = panel; columnNames = new ArrayList< String >(); columnNames.add( "Timepoint" ); columnNames.add( "View Id" ); columnNames.addAll( panel.getSpimData().getSequenceDescription().getViewSetupsOrdered().get( 0 ).getAttributes().keySet() ); columnNames.add( "#Registrations" ); registrationColumn = columnNames.size() - 1; viewRegistrations = panel.getSpimData().getViewRegistrations(); if ( SpimData2.class.isInstance( panel.getSpimData() ) ) { final SpimData2 data2 = (SpimData2)panel.getSpimData(); columnNames.add( "#InterestPoints" ); interestPointsColumn = columnNames.size() - 1; viewInterestPoints = data2.getViewInterestPoints(); } else { viewInterestPoints = null; interestPointsColumn = -1; } } protected ArrayList< BasicViewDescription< ? extends BasicViewSetup > > elements() { final ArrayList< BasicViewDescription< ? extends BasicViewSetup > > elementsNew = new ArrayList< BasicViewDescription< ? extends BasicViewSetup > >(); for ( final TimePoint t : panel.getSpimData().getSequenceDescription().getTimePoints().getTimePointsOrdered() ) for ( final BasicViewSetup v : panel.getSpimData().getSequenceDescription().getViewSetupsOrdered() ) { final ViewId viewId = new ViewId( t.getId(), v.getId() ); final BasicViewDescription< ? > viewDesc = panel.getSpimData().getSequenceDescription().getViewDescriptions().get( viewId ); if ( viewDesc.isPresent() ) elementsNew.add( viewDesc ); } if ( this.elements == null || this.elements.size() != elementsNew.size() ) this.elements = elementsNew; return elements; } public void sortByColumn( final int column ) { Collections.sort( elements(), new Comparator< BasicViewDescription< ? extends BasicViewSetup > >() { @Override public int compare( BasicViewDescription<? extends BasicViewSetup> arg0, BasicViewDescription<? extends BasicViewSetup> arg1) { if ( column == 0 ) { final int diff = arg0.getTimePointId() - arg1.getTimePointId(); return diff == 0 ? arg0.getViewSetupId() - arg1.getViewSetupId() : diff; } else if ( column == 1 ) { final int diff = arg0.getViewSetupId() - arg1.getViewSetupId(); return diff == 0 ? arg0.getTimePointId() - arg1.getTimePointId() : diff; } else if ( column == registrationColumn ) { final int diff1 = viewRegistrations.getViewRegistration( arg0 ).getTransformList().size() - viewRegistrations.getViewRegistration( arg1 ).getTransformList().size(); final int diff2 = arg0.getTimePointId() - arg1.getTimePointId(); return diff1 == 0 ? ( diff2 == 0 ? arg0.getViewSetupId() - arg1.getViewSetupId() : diff2 ) : diff1; } else if ( column == interestPointsColumn && viewInterestPoints != null ) { final int diff1 = viewInterestPoints.getViewInterestPointLists( arg0 ).getHashMap().keySet().size() - viewInterestPoints.getViewInterestPointLists( arg1 ).getHashMap().keySet().size(); final int diff2 = arg0.getTimePointId() - arg1.getTimePointId(); return diff1 == 0 ? ( diff2 == 0 ? arg0.getViewSetupId() - arg1.getViewSetupId() : diff2 ) : diff1; } else { final int diff1 = arg0.getViewSetup().getAttributes().get( columnNames.get( column ) ).getId() - arg1.getViewSetup().getAttributes().get( columnNames.get( column ) ).getId(); final int diff2 = arg0.getViewSetupId() - arg1.getViewSetupId(); return diff1 == 0 ? ( diff2 == 0 ? arg0.getTimePointId() - arg1.getTimePointId() : diff2 ) : diff1; } } }); fireTableDataChanged(); } public ArrayList< BasicViewDescription< ? extends BasicViewSetup > > getElements() { return elements(); } @Override public int getColumnCount() { return columnNames.size(); } @Override public int getRowCount() { return elements().size(); } @Override public boolean isCellEditable( final int row, final int column ) { return false; } @Override public Object getValueAt( final int row, final int column ) { final BasicViewDescription< ? extends BasicViewSetup > vd = elements().get( row ); if ( column == 0 ) return vd.getTimePoint().getId(); else if ( column == 1 ) return vd.getViewSetupId(); else if ( column == registrationColumn ) return this.viewRegistrations.getViewRegistration( vd ).getTransformList().size(); else if ( column == interestPointsColumn && viewInterestPoints != null ) return viewInterestPoints.getViewInterestPointLists( vd ).getHashMap().keySet().size(); else { final Entity e = vd.getViewSetup().getAttributes().get( columnNames.get( column ) ); if ( e instanceof NamedEntity ) return ((NamedEntity)e).getName() + " (id = " + e.getId() + ")"; else return e.getId() + " (no name available)"; } } @Override public String getColumnName( final int column ) { return columnNames.get( column ); } }