package ST_FE3B2_STAPP.utils; // -----( IS Java Code Template v1.2 // -----( CREATED: 2009-11-06 10:10:18 CET // -----( ON-HOST: eux832.sgp.st.com import com.wm.data.*; import com.wm.util.Values; import com.wm.app.b2b.server.Service; import com.wm.app.b2b.server.ServiceException; // --- <> --- import java.util.Arrays; import java.util.ArrayList; import java.util.Comparator; import java.lang.Comparable; import java.util.ListIterator; import java.io.Serializable; // --- <> --- public final class Table { // ---( internal utility methods )--- final static Table _instance = new Table(); static Table _newInstance() { return new Table(); } static Table _cast(Object o) { return (Table)o; } // ---( server methods )--- public static final void clear (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [o] object:0:required table // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); pipelineCursor.destroy(); table.clear(); // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); pipelineCursor_1.destroy(); // --- <> --- } public static final void dump (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [o] object:0:required table // [o] record:1:required lines // [o] - field:1:required keys // [o] - field:1:required values // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); pipelineCursor.destroy(); // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); // lines IData[] lines = new IData[table.size()]; Line l = null; int i=0; for (ListIterator ite = table.listIterator(); ite.hasNext(); i++) { lines[i] = IDataFactory.create(); IDataCursor linesCursor = lines[i].getCursor(); l = (Line) ite.next(); String[] keys = l.keyItems; IDataUtil.put( linesCursor, KEYS, keys); String[] values = l.dataItems; IDataUtil.put( linesCursor, VALUES, values); linesCursor.destroy(); } IDataUtil.put( pipelineCursor_1, LINES, lines ); pipelineCursor_1.destroy(); // --- <> --- } public static final void init (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [o] object:0:required table ArrayList table = new ArrayList(); // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); IDataUtil.put( pipelineCursor, TABLE, table ); pipelineCursor.destroy(); // --- <> --- } public static final void insert (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [i] field:1:required keys // [i] field:1:required values // [o] object:0:required table // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); String[] keys = IDataUtil.getStringArray( pipelineCursor, KEYS ); String[] values = IDataUtil.getStringArray( pipelineCursor, VALUES ); pipelineCursor.destroy(); Line line = new Line(keys, values); Object[] oa = table.toArray(); int result = Arrays.binarySearch(oa, line /*key*/, line /*Comparator*/); if (result >=0) { throw new ServiceException("Duplicate keys"); } else { table.add(-result-1, line); } // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); pipelineCursor_1.destroy(); // --- <> --- } public static final void select (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [i] field:1:optional keys // [o] object:0:required table // [o] field:1:required values // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); String[] keys = IDataUtil.getStringArray( pipelineCursor, KEYS ); pipelineCursor.destroy(); String[] values = null; Line line = new Line(keys, values); Object[] oa = table.toArray(); int result = Arrays.binarySearch(oa, line /*key*/, line /*Comparator*/); if (result >= 0) { line = (Line) table.get(result); values = line.dataItems; } else { //throw new ServiceException("Key was not found."); values = null; } // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); IDataUtil.put( pipelineCursor_1, VALUES, values ); pipelineCursor_1.destroy(); // --- <> --- } public static final void sizeOf (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [o] object:0:required table // [o] field:0:required size // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); pipelineCursor.destroy(); int size = table.size(); // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); IDataUtil.put( pipelineCursor_1, SIZE, Integer.toString(size) ); pipelineCursor_1.destroy(); // --- <> --- } public static final void update (IData pipeline) throws ServiceException { // --- <> --- // @subtype unknown // @sigtype java 3.5 // [i] object:0:required table // [i] field:1:required keys // [i] field:1:required values // [o] object:0:required table // pipeline IDataCursor pipelineCursor = pipeline.getCursor(); ArrayList table = (ArrayList) IDataUtil.get( pipelineCursor, TABLE ); String[] keys = IDataUtil.getStringArray( pipelineCursor, KEYS ); String[] values = IDataUtil.getStringArray( pipelineCursor, VALUES ); pipelineCursor.destroy(); Line line = new Line(keys, values); Object[] oa = table.toArray(); int result = Arrays.binarySearch(oa, line /*key*/, line /*Comparator*/); // update if (result >=0) { table.set(result, line); } else { throw new ServiceException("Key doesn't exist"); } // pipeline IDataCursor pipelineCursor_1 = pipeline.getCursor(); IDataUtil.put( pipelineCursor_1, TABLE, table ); pipelineCursor_1.destroy(); // --- <> --- } // --- <> --- public Table() { } // TODO explain // Maintaining an order inside the table // If the current input line is keyed as an existing line in the table, merge // current input line and table line. (merging can be adding data items) // Otherwise, insert the new line inside the table at the right location. /* Table should become a=n independent class. Comparator should be independent of Line, and become attribute of the current Table. */ public static final String TABLE = "table"; public static final String KEYS = "keys"; public static final String VALUES = "values"; public static final String LINES = "lines"; public static final String SIZE = "size"; static public class Line implements Comparator, Comparable, Serializable { public String[] keyItems; public String[] dataItems; public Line() { this.keyItems=new String[0]; this.dataItems=new String[0]; } public Line(String[] keyItems, String[] dataItems) { if (keyItems==null) keyItems=new String[0]; if (dataItems==null) dataItems=new String[0]; this.keyItems=keyItems; this.dataItems=dataItems; } public int compareTo(Object o) { Line l = (Line) o; // design property int i=0; int result = 0; for (i=0; i> --- }