forked from Coded/SIPRP
git-svn-id: https://svn.coded.pt/svn/SIPRP@765 bb69d46d-e84e-40c8-a05a-06db0d633741
parent
40d5363455
commit
2011427d99
@ -1,342 +0,0 @@
|
||||
package leaf.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
public class OrderedMap<KeyClass extends Object> implements Iterable<KeyClass>
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Vector<KeyClass> order = new Vector<KeyClass>();
|
||||
|
||||
private HashMap<KeyClass, List<Object>> map = new HashMap<KeyClass, List<Object>>();
|
||||
|
||||
public OrderedMap()
|
||||
{
|
||||
}
|
||||
|
||||
public OrderedMap(Collection<KeyClass> allPrestadores)
|
||||
{
|
||||
Iterator<KeyClass> iterator = allPrestadores.iterator();
|
||||
while( iterator.hasNext() )
|
||||
{
|
||||
KeyClass value = iterator.next();
|
||||
this.putLast( value, value );
|
||||
}
|
||||
}
|
||||
|
||||
public List<Object> getRow( int row )
|
||||
{
|
||||
return map.get( order.get( row ) );
|
||||
}
|
||||
|
||||
public List<Object> getValues( KeyClass key )
|
||||
{
|
||||
return map.get( key );
|
||||
}
|
||||
|
||||
public int rows()
|
||||
{
|
||||
return order.size();
|
||||
}
|
||||
|
||||
public KeyClass getKeyForValue( Object value )
|
||||
{
|
||||
for( KeyClass key : map.keySet() )
|
||||
{
|
||||
List<Object> values = map.get( key );
|
||||
if( value.equals( values ) )
|
||||
{
|
||||
return key;
|
||||
}
|
||||
else
|
||||
{
|
||||
for( Object currentValue : values )
|
||||
{
|
||||
if( currentValue.equals( value ) )
|
||||
{
|
||||
return key;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns the length of the biggest line
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int columns()
|
||||
{
|
||||
int result = 0;
|
||||
for( KeyClass key : order )
|
||||
{
|
||||
result = map.get( key ).size() > result ? map.get( key ).size() : result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<Object> getColumn( int i )
|
||||
{
|
||||
List<Object> result = new ArrayList<Object>();
|
||||
if( order != null && order.size() > 0 )
|
||||
{
|
||||
for( KeyClass key : order )
|
||||
{
|
||||
List<Object> row = map.get( key );
|
||||
if( row != null && row.size() > 0 )
|
||||
{
|
||||
result.add( row.get( 0 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
row.add( null );
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public KeyClass getFirst()
|
||||
{
|
||||
return order.isEmpty() ? null : order.get( 0 );
|
||||
}
|
||||
|
||||
public Iterator<KeyClass> iterator()
|
||||
{
|
||||
return order.iterator();
|
||||
}
|
||||
|
||||
public boolean containsKey( KeyClass key )
|
||||
{
|
||||
return map.containsKey( key );
|
||||
}
|
||||
|
||||
public Object getValueAt( int row, int column )
|
||||
{
|
||||
Object result = null;
|
||||
if( row < order.size() )
|
||||
{
|
||||
List<Object> line = map.get( order.get( row ) );
|
||||
if( column < line.size() )
|
||||
{
|
||||
result = line.get( column );
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds arguments to the end of the row (on given order)
|
||||
*
|
||||
* @param key
|
||||
* @param values
|
||||
*/
|
||||
public void putLast( KeyClass key, Object... values )
|
||||
{
|
||||
if( values != null )
|
||||
{
|
||||
for( Object currentValue : values )
|
||||
{
|
||||
putLast( key, currentValue );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds argument to the end of the row
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
*/
|
||||
public void putLast( KeyClass key, Object value )
|
||||
{
|
||||
List<Object> list;
|
||||
if( map.containsKey( key ) )
|
||||
{
|
||||
list = map.get( key );
|
||||
}
|
||||
else
|
||||
{
|
||||
list = new ArrayList<Object>();
|
||||
order.add( key );
|
||||
}
|
||||
list.add( value );
|
||||
map.put( key, list );
|
||||
}
|
||||
|
||||
public List<Object> remove( Object key )
|
||||
{
|
||||
order.remove( key );
|
||||
return map.remove( key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Orders by first column (rows compared as strings)
|
||||
*/
|
||||
public void order()
|
||||
{
|
||||
order( 0 );
|
||||
}
|
||||
|
||||
public void order( int columnNumber )
|
||||
{
|
||||
order( new int[] {
|
||||
columnNumber
|
||||
}, 0, 0, order.size() - 1, order );
|
||||
}
|
||||
|
||||
public void order( int[] colNumbers )
|
||||
{
|
||||
order( colNumbers, 0, 0, order.size() - 1, order );
|
||||
}
|
||||
|
||||
private void order( int[] colNumbers, int currentColumnIndex, int fromLineNumber, int toLineNumber, List<KeyClass> order )
|
||||
{
|
||||
if( colNumbers != null && currentColumnIndex >= 0 && fromLineNumber < toLineNumber && toLineNumber < order.size() && currentColumnIndex < colNumbers.length )
|
||||
{
|
||||
int columnNumber = colNumbers[currentColumnIndex];
|
||||
if( order != null && order.size() > 0 )
|
||||
{
|
||||
List<Pair<String, KeyClass>> sortedList = new ArrayList<Pair<String, KeyClass>>();
|
||||
for( int i = fromLineNumber; i < order.size() && i < (toLineNumber + 1); ++i )
|
||||
{
|
||||
KeyClass key = order.get( i );
|
||||
List<Object> row = map.get( key );
|
||||
String value = "";
|
||||
if( row != null && row.size() > columnNumber && row.get( columnNumber ) != null )
|
||||
{
|
||||
value = row.get( columnNumber ).toString();
|
||||
}
|
||||
sortedList.add( new Pair<String, KeyClass>( value, key ) );
|
||||
}
|
||||
Collections.sort( sortedList );
|
||||
List<Pair<String, KeyClass>> equalEntries = new ArrayList<Pair<String, KeyClass>>();
|
||||
for( int i = 0; i < sortedList.size(); ++i )
|
||||
{
|
||||
Pair<String, KeyClass> entry = sortedList.get( i );
|
||||
if( equalEntries.isEmpty() && i < (sortedList.size() - 1) )
|
||||
{
|
||||
equalEntries.add( entry );
|
||||
}
|
||||
else
|
||||
{
|
||||
Pair<String, KeyClass> previousEntry = equalEntries.get( 0 );
|
||||
if( previousEntry.getCar().equals( entry.getCar() ) )
|
||||
{
|
||||
if( i < (sortedList.size() - 1) )
|
||||
{
|
||||
equalEntries.add( entry );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
equalEntries.add( entry );
|
||||
++i;
|
||||
}
|
||||
}
|
||||
if( equalEntries.size() > 1 )
|
||||
{
|
||||
List<KeyClass> toSubOrder = new Vector<KeyClass>();
|
||||
List<String> DEBUGLIST = new Vector<String>();
|
||||
for( Pair<String, KeyClass> pair : equalEntries )
|
||||
{
|
||||
toSubOrder.add( pair.getCdr() );
|
||||
DEBUGLIST.add( pair.getCar() );
|
||||
}
|
||||
order( colNumbers, currentColumnIndex + 1, 0, toSubOrder.size() - 1, toSubOrder );
|
||||
for( int j = 0; j < toSubOrder.size(); ++j )
|
||||
{
|
||||
sortedList.set( i - toSubOrder.size() + j, new Pair<String, KeyClass>( "", toSubOrder.get( j ) ) );
|
||||
}
|
||||
}
|
||||
equalEntries.clear();
|
||||
if( i < (sortedList.size() - 1) )
|
||||
{
|
||||
equalEntries.add( entry );
|
||||
}
|
||||
}
|
||||
}
|
||||
for( int i = 0; i < sortedList.size(); ++i )
|
||||
{
|
||||
Pair<String, KeyClass> value = sortedList.get( i );
|
||||
order.set( i, value.getCdr() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addRow( KeyClass key, List<Object> grupo )
|
||||
{
|
||||
if( key != null && grupo != null )
|
||||
{
|
||||
order.add( key );
|
||||
map.put( key, grupo );
|
||||
}
|
||||
}
|
||||
|
||||
public void clear()
|
||||
{
|
||||
order.clear();
|
||||
map.clear();
|
||||
}
|
||||
|
||||
public void deleteRow( int row )
|
||||
{
|
||||
if( row < order.size() )
|
||||
{
|
||||
KeyClass key = order.get( row );
|
||||
order.remove( row );
|
||||
map.remove( key );
|
||||
}
|
||||
}
|
||||
|
||||
public KeyClass getKeyForRow( int row )
|
||||
{
|
||||
KeyClass result = null;
|
||||
if( row < order.size() )
|
||||
{
|
||||
result = order.get( row );
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setValueAt( int row, int col, Object obj )
|
||||
{
|
||||
if( row < order.size() )
|
||||
{
|
||||
List<Object> line = map.get( order.get( row ) );
|
||||
if( col < line.size() )
|
||||
{
|
||||
line.add( col, obj );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Object getFirstValue( KeyClass key )
|
||||
{
|
||||
return getValue( key, 0 );
|
||||
}
|
||||
|
||||
public Object getValue( KeyClass key, int i )
|
||||
{
|
||||
Object result = null;
|
||||
if( key != null && order.contains( key ) )
|
||||
{
|
||||
List<Object> row = map.get( key );
|
||||
if( row != null && row.size() > i )
|
||||
{
|
||||
result = row.get( i );
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
package leaf.data;
|
||||
|
||||
public class Pair<CarClass extends Comparable<CarClass>, CdrClass> implements Comparable<Pair<CarClass, CdrClass>>
|
||||
{
|
||||
|
||||
private final CarClass car;
|
||||
private final CdrClass cdr;
|
||||
|
||||
public Pair(CarClass car, CdrClass cdr)
|
||||
{
|
||||
this.car = car;
|
||||
this.cdr = cdr;
|
||||
}
|
||||
|
||||
public CarClass getCar()
|
||||
{
|
||||
return car;
|
||||
}
|
||||
|
||||
public CdrClass getCdr()
|
||||
{
|
||||
return cdr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo( Pair<CarClass, CdrClass> toPair )
|
||||
{
|
||||
if(toPair == null)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if(car == null && toPair.getCar() == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return getCar().compareTo( toPair.getCar() );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "(" + (car == null ? "" : car.toString()) + ", "+ (cdr == null ? "" : cdr.toString()) + ")";
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue