Roster/src/java/org/thdl/roster/PaletteMergeTableProcessor....

175 lines
5.8 KiB
Java
Executable File

package org.thdl.roster;
import java.util.*;
import java.text.*;
import org.apache.tapestry.*;
import org.apache.torque.*;
import org.apache.torque.util.*;
import org.apache.torque.om.*;
import org.thdl.roster.om.*;
/**
* This is a utility class for processing input from Tapestry Palette Components.
* Palettes are user-sortable multiple-select javascript widgets.
* The data collected are stored in Torque OR Objects that represent rows of a basic merge table.
* This class works in conjunction with torque objects that implement the RosterMergeData interface.
* The merge table should also include field called "relevance" to store the user-specified sort order
*
*@author travis
*@created June 17, 2003
*/
public class PaletteMergeTableProcessor
{
/**
* This is the utility method that processes data from the Palette. The examples here all assume that merge data relationship is PersonData::PersonPersonTypes.
*
*@param flatDataIds This is a list of Integers which are primary keys of two-column flat data tables ( PersonType.id, PersonType.personType ) that are used in palette select boxes.
*@param torqueObjects This is a list of Torque Objects that represent rows of the Merge Table (e.g. PersonPersonType )
*@param memberDataId This is an Integer primary key of the single MemberData (e.g. PersonData) parent for the multiple rows of merge data.
*@param template This is a prototype Torque merge data object passed in to make copies from. (e.g. PersonPersonType, or ProjectProjectType ).
*@exception TorqueException Description of the Exception
*@exception ApplicationRuntimeException Description of the Exception
*/
public static void processPalette( List flatDataIds, List torqueObjects, Integer memberDataId, RosterMergeData template ) throws TorqueException, ApplicationRuntimeException
{
//creative loop
ListIterator flatDataIdsIterator = null;
if ( null != flatDataIds )
{
flatDataIdsIterator = flatDataIds.listIterator( 0 );
}
while ( null != flatDataIdsIterator && flatDataIdsIterator.hasNext() )
{
Integer flatDataId = (Integer) flatDataIdsIterator.next();
RosterMergeData torqueObject = null;
ListIterator torqueObjectsIterator = torqueObjects.listIterator( 0 );
while ( torqueObjectsIterator.hasNext() )
{
RosterMergeData mergeData = (RosterMergeData) torqueObjectsIterator.next();
Integer flat = (Integer) mergeData.getByPosition( 2 );
if ( flatDataId.equals( flat ) )
{
torqueObject = mergeData;
}
}
if ( null == torqueObject )
{
try
{
torqueObject = (RosterMergeData) template.getClass().newInstance();
torqueObject.setByPosition( 2, flatDataId );
torqueObject.setByPosition( 3, memberDataId );
}
catch ( Exception e )
{
throw new ApplicationRuntimeException( e.getMessage(), e );
}
}
try
{
Integer relevance = new Integer( flatDataIdsIterator.previousIndex() );
torqueObject.setByPosition( 4, relevance );
torqueObject.save();
}
catch ( Exception e )
{
throw new ApplicationRuntimeException( e.getMessage(), e );
}
}
//destructive loop
ListIterator torqueObjectsIterator = torqueObjects.listIterator( 0 );
while ( torqueObjectsIterator.hasNext() )
{
RosterMergeData mergeObject = (RosterMergeData) torqueObjectsIterator.next();
boolean match = false;
if ( null != flatDataIds )
{
flatDataIdsIterator = flatDataIds.listIterator( 0 );
while ( flatDataIdsIterator.hasNext() )
{
Integer flatDataId = (Integer) flatDataIdsIterator.next();
if ( flatDataId.equals( mergeObject.getByPosition( 2 ) ) )
{
match = true;
break;
}
}
if ( match == false )
{
try
{
mergeObject.remove();
}
catch ( Exception e )
{
throw new ApplicationRuntimeException( "destruction loop says: " + e.getMessage(), e );
}
}
}
else
{
try
{
mergeObject.remove();
}
catch ( Exception e )
{
throw new ApplicationRuntimeException( "destruction loop says: " + e.getMessage(), e );
}
}
}
}
//main
/**
* The main program for the PaletteMergeTableProcessor class
*
*@param args The command line arguments
*/
public static void main( String[] args )
{
try
{
/*
* java.io.InputStream stream = Torque.class.getClassLoader().getResourceAsStream("org/thdl/roster/roster-torque.properties");
* org.apache.commons.configuration.PropertiesConfiguration config = new org.apache.commons.configuration.PropertiesConfiguration();
* config.load( stream );
*/
Torque.init( "./roster-torque.properties" );
Member person = MemberPeer.retrieveByPK( new Integer( 1020 ) );
List flatDataIds = new LinkedList();
flatDataIds.add( new Integer( 1 ) );
flatDataIds.add( new Integer( 2 ) );
flatDataIds.add( new Integer( 3 ) );
List torqueObjects = person.getPersonData().getPersonPersonTypes();
Integer memberDataId = person.getPersonData().getId();
PersonPersonType template = new PersonPersonType();
//PaletteMergeTableProcessor.processPalette( flatDataIds, torqueObjects, memberDataId, template );
System.out.println( MemberPeer.executeQuery( "select count( id ) from PersonPersonType" ) );
/*
* flatDataIds = new LinkedList();
* flatDataIds.add( new Integer( 4 ) );
* flatDataIds.add( new Integer( 5 ) );
* flatDataIds.add( new Integer( 6 ) );
* torqueObjects = person.getPersonData().getPersonPersonTypes();
* PaletteMergeTableProcessor.processPalette( flatDataIds, torqueObjects, memberDataId, template );
* System.out.println( MemberPeer.executeQuery( "select count( id ) from PersonPersonType" ) );
*/
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}