This document contains a record of changes that have occurred in XTT prior to version 5.9. For a record of the most recent changes in XTT, please see the README.html.
SimpleHandler class to allow access to objects behind indexed rows in tables.
SimpleHandler class preventing the inserting and deleting of objects in nested collections.
OTHER JDBC data type, in XML in DB2 version 9.5, as CLOB.
ThreadLocal related problem affecting the response XML
when the XTT server is placed under a heavy load.
Xdo.clean() method.
RemoteMethodDispatcher caused on the XTT Server
when an invoked remote method throws a Throwable .
myapp.client.gui.Main
(i.e. a stub-in for the client application main class).
NullPointerException when sending binary data.
Note that the instantiateServerPush(String) method of the ServerPush class now throws an IOException that must be caught.
Some refactoring of existing code may be required.
serveraddress property was missing from /application.properties.
NULL primary keys.
R18_CascadingRelations to the examples to showcase cascading relations.
PV01_PivotExample to the examples showcase the pivoting of tables.
NullPointerException triggered by Debian L&F in RTextField, RCheckBox, etc. (caused by calling getName() prior to initialization).
ConnectingXTTToDifferentDataSources.html) .
swing-layout.jar to go along with the XTTCDev.jar in Eclipse projects.
XTTC.jar to newly created common projects.
xttc-api-jdk5.jar to newly created client projects.
getRSetPos,
setRSetPos,
getOSetPos,
setRSetPos. Indexing of these methods starts with 0 and not 1. These methods deprecate the corresponding getRSetPosition, setRSetPosition, getOSetPosition, and setOSetPosition methods.
OMessage when the OMessage is added to the Envelope.
connectors.xml are no longer position sensitive.
Server Address fields by looking up the entry in application.properties.XTTS now also shows server license status.
Utility.setLocale throws SecurityException in unsigned environment.OCheckBox's text that did not resize properly in a panel with dynamic layout manager.
RTable to null.
ServerPush example that caused a lock-up when run as an applet
XTTCDev.jar when running the jar by itself. Now you will just see the jar version.
setFocusable(false) from the default construction of the DPanel.
OptionsData.xml from webapp to client project. The new location and name is: .settings/com.itgp.dev.OptionsData.xml
Xdo objects transmitted from XTT Server to XTT Client.
ServerAccessInterface and OSetStreamedInterface.
get method on an XdoProxy that is configured to filter out a primitive property.
com.itgp.rm.Remotable allowing for compiletime-checked, refactorable, proxy-based remote method calling. See the remote method examples in the xtt-examples workspace.
com.itgp.transfer.xdo.Xdo and related infrastructure to encode data for enhanced flexabilty managing POJOs.
com.itgp.transfer.ServerConnection to manage server connection in XTT applications, which is referenced in the base GUI forms. It is now unnecessary to specify the server address on each DPanel of the application.
com.itgp.server.ClientCom with com.itgp.server.CommToClient.
NullPointerException problem in the Object Form Wizard caused by using a "custom" persistence type.
RDateFormatters in xtt-examples workspace.
AUTOCOMMIT attribute to CONNDEF elements allowing control of how the connection needs to be set.
java.sql.Types.BINARY; java.sql.Types.LONGVARBINARY; java.sql.Types.VARBINARY.
com.itgp.server.provider.sql.sybase.SybaseSQLProvider to address Sybase JDBC problems with schemas
XTTCDev.jar.
RMetaData method getKeys() no longer returns null as the first entry.
signjar.keypass property to the XTT workspace to accommodate keystores with differing keypass and storepass.
com.itgp.mvc.view.RTree) is offered as-is in this version and will be officially released and supported in version 6.
POST using a custom HTTPConnection that does not extend URLConnection. Call method TransportUtil.setCustomHTTPClient(CustomHTTPClient ) and pass is an implementation of new interface CustomHTTPClient (provide for POST operation for byte array and input stream) .
INSERT operation. The new key will be displayed in the form as long as the form is not cleared after save.
XML Encoder instead of serialization. The encoding mechanism handles both the control of the depth as well as breadth (properties) to be encoded for transmission. This mechanism is offered as a prototype in this release and will be supported fully in version 6.
SELECT. The new method is com.itgp.mvc.DPanel.executeSelect. If the select is on one table, locking is fully implemented.
XTTS.XML_Debug property in the XTTS_Init.properties file on the server, and com.itgp.mvc.Utility.setClientPerfLoggerLevel(java.util.logging.Level level) on the client.
boolean property emptySameAsNull to RTextField and RTextArea that when set to true makes the controls handle an empty string in the view as a null in the model.
UTF-8 encoding for both development and run-time.
SimpleHandler when they extended DViewSimple.
Global
com.itgp.mvc.DPanel could not handle its own streaming any longer because of an implementation bug.
com.itgp.mvc.Utility.setAndUpdate and normal lostfocus did not work the same for foreign keys
com.itgp.mvc.view.OTable performance was drastically improved by caching the number of rows for successive getRowCount calls.
CurrencyFormatter required you to enter the currency
symbol or 3 letter code or they fail validation. They now allow
purely numeric values as well.
com.itgp.mvc.ClientMessages.properties.
ItemChanged events properly.
public static void main(String[] args) of GUI form templates. (The new implementation addresses an obscure Swing bug. You may wish to refactor your existing forms and templates accordingly if you are experiencing problems.)
com.itgp.transport.ServerPushClient now yields and sleeps for 100ms increments while waiting for the ClientComm to register.
com.itgp.mvc.decorator
com.itgp.server.remoteLoader to com.itgp.server.loader
com.itgp.mvc
MultiPathOViewSimple
RSetEvent
DTableColumn
OTableColumnModel
RModelComplex
RSetListener
RTableColumnModel
DModelTable
RModelTable
MultiPathSimpleOComponent
OComponent
RComponent
OTableSortedModel
RListSelectionListener
RNewDefault
RTableSelectionModel
RTableSortedModel
DColumn
RColumn
OColumn
RTableCol
| to DModelComplex | |
| to OModelComplex | |
| to OModelTable | |
| to DView | |
| to DViewSimple | |
| to DViewComplex | |
| to RViewSimple | |
| to RViewComplex | |
| to OViewSimple | |
| to OViewComplex |
RTableColumn now extends DTableColumn. (Replaces RTableCol)
OTableColumn now extends DTableColumn.
com.itgp.mvc.view
DTable
| to OViewSimpleSupport | |
| to RViewSimpleSupport |
OTable now extends DTable and implements com.itgp.mvc.OViewTable
RTable now extends DTable and implements com.itgp.mvc.RViewTable
com.itgp.transport
ServerCommEvent
ServerCommListener
ServerCommEnvelopeEvent
ServerCommBinaryEvent
VetoException
com.itgp.mvc.DEvent
public static final int PRE_TABLE_INSERTROW
public static final int POST_TABLE_INSERTROW
public static final int PRE_TABLE_DELETEROW
public static final int POST_TABLE_DELETEROW
public static final int PRE_TABLE_APPENDROW
public static final int POST_TABLE_APPENDROW
com.itgp.mvc.DPanel
public boolean isRefreshInProgress()
public void setRefreshInProgress(boolean refreshInProgress)
public boolean isPanelRefreshInProgress()
public void setPanelRefreshInProgress(boolean refreshInProgress)
public boolean performParse( String envelopeAsXML , String serverAddress)
public Hashtable RelationalAutoFill
com.itgp.mvc.DSet
public void clear()
public boolean containsData()
public boolean existsRSet(String rSetName)
public void clearDSet()
public boolean isNew()
public boolean clearOSet(String name)
public int addObject( Object object, Serializable id, boolean keepCopyOfObject)
public void addRecord(String rSetName,RPkValue rPkValue,Record record) --> use setRecord
public int appendObject( Object object, Serializable id, boolean keepCopyOfObject)
public int appendObject( String oSetName , Object object, Serializable id, boolean keepCopyOfObject) --> use the one in OSet
public void setRSetTableName( String rSetName, String tableName)
public void setRMetaData(String rSetName,RMetaData rMetaData)
public void setRecord(String rSetName,RPkValue rPkValue,Record record)
public Record getRecord(String rSetName,RPkValue rPkValue)
public DSet setRecord( String rSetName , int position, Record record)
public Record getRecord(String rSetName,int position)
public boolean appendRecord(String rSetName, RPkValue rPkValue, Record record)
public void setPrimaryKey( String rSetName , int recordPosition , RPkValue rPkValue)
public RPkValue getPrimaryKey( String rSetName , int recordPosition)
public String getOracleSequenceName( String rSetName)
public void setOracleSequenceName( String rSetName, String sequenceName)
public int setObject( Object original, Object object, Serializable id, boolean keepCopyOfObject)
public int setObject( int position, Object object, Serializable id, boolean keepCopyOfObject )
public int setObject( String oSetName, Object original, Object object, Serializable id, boolean keepCopyOfObject)
public boolean isLockEnabled(String rSetName)
public void setLockEnabled(String rSetName, boolean lockEnabled )
public boolean isInsertEnabled(String rSetName)
public void setInsertEnabled(String rSetName, boolean insertEnabled )
public boolean isDeleteEnabled(String rSetName)
public void setDeleteEnabled(String rSetName, boolean deleteEnabled )
public boolean isUpdateEnabled(String rSetName)
public void setUpdateEnabled(String rSetName, boolean updateEnabled )
public boolean isColumnDataNull( String rSetName , String columnName, RPkValue rPkValue )
public boolean isColumnDataNull( String rSetName , int columnPosition, int recordPosition )
public boolean insertRecord(String rSetName, int position, RPkValue rPkValue, Record record)
public boolean insertObject( int position, Object object, Serializable id, boolean keepCopyOfObject)
public boolean insertObject( String oSetName , int position, Object object, Serializable id, boolean keepCopyOfObject)
public com.itgp.transport.Envelope getUnlockRequests( com.itgp.transport.Envelope envelope )
public String getRSetTableName(String rSetName)
public int getRSetPosition( String rSetName )
public int getRecordPosition( String rSetName , RPkValue rPkValue )
public OSet getOSet( String oSetName, Class oSetClassType )
public OSet getOSet( String oSetName, boolean addToDataSet)
public OSet getOSet( String oSetName, Class oSetClassType, boolean addToDataSet)
public boolean deleteObjectById( String oSetName , Serializable id)
public boolean deleteObject( String oSetName , Object object)
public boolean deleteObject( String oSetName, int position)
public int countErrorMessage()
public void clearRSet(String rSetName)
public String getErrorMessage( int position)
public Serializable[] getIds(String oSetName)
public Object[] getObjects(String oSetName)
public int getObjectPositionById(String oSetName, Serializable id )
public int getObjectPosition(String oSetName, Object object)
public Object getObjectById( String oSetName, Serializable id)
public int getObjectCount( String oSetName)
com.itgp.mvc.GetSetHandler
public Object handleGet(DView c, Object o, int[] positionInDataColumn, java.util.Map param)
public boolean handleSet(DView c, Object o, Object internalValue, int[] positionInDataColumn, java.util.Map extra);
public Object handleGet(DComponent c, Object o, int[] positionInDataColumn, Vector param)
public boolean handleSet(DComponent c, Object o, Object internalValue, int[] positionInDataColumn, Vector param)
com.itgp.mvc.MvString
static methods. See JavaDoc for new API.
com.itgp.mvc.OHandler
public Class getClassType(DView c)
public int insertItem( DViewComplex c, Object instance, int[] positionInPreviousColumns, int position, HashMap insertHistory)
public boolean deleteItem(DViewComplex c, Object instance, int[] positionInPreviousColumns, int position, HashMap deleteHistory )
public int countItems(DViewComplex c, Object instance, int[] positionInPreviousColumns)
public int insertItem( DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns, int position, HashMap insertHistory)
public boolean deleteItem(DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns, int position, HashMap deleteHistory )
public int countItems(DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns)
com.itgp.mvc.OSet
public OSet(String oSetName)
public OSet(String oSetName, Class classType)
public OSet(Class classType)
public OSet(int initialSize, Class classType)
OSet( String oSetName,
Class classType ,
String serverConnection,
boolean lockEnabled,
boolean doNotSave,
boolean overwriteEqualsMethod,
boolean deleteEnabled)
com.itgp.mvc.OTableColumn
public DView getDView()
public void setDView(DView dv)
public InputVerifier getInputVerifier() (inherited from DTableColumn)
public void setInputVerifier(InputVerifier inputVerifier) (inherited from DTableColumn)
public DComplexView getDComplexView()
public void setDComplexView(DComplexView dcv)
public Object getVerifier()
public void setVerifier(Object verifier)
com.itgp.mvc.OTableModel
public java.lang.String[] getCellRendererName()
public void setCellRendererName(java.lang.String[] cellRendererNameList)
public java.lang.String[] getCellEditorName()
public void setCellEditorName(java.lang.String[] cellEditorNameList)
public java.lang.String[] getFormatterName()
setFormatterName(java.lang.String[] formatterNameList)
com.itgp.mvc.RMetaColumn
public Class getColumnClass()
com.itgp.mvc.RSet
public void clear()
public String getColumnData( int columnPosition, int recordPosition )
public String getColumnData( String columnName, int recordPosition )
public String getColumnData(String columnName, RPkValue rPkValue )
public boolean isColumnDataNull( int columnPosition, int recordPosition )
public boolean isColumnDataNull( String columnName, int recordPosition )
public void setNull(int columnPosition, int recordPosition )
public void setNull( String columnName, int recordPosition )
public void addRSetListener(RSetListener listener)
public void removeRSetListener(RSetListener listener)
public RSetListener[] getRSetListeners()
public void fireRSetEvent(RSetEvent evt)
public void clearRSet()
com.itgp.mvc.RTableColumn
public DView getDView()
public void setDView(DView dv)
public InputVerifier getInputVerifier() (inherited from DTableColumn)
public void setInputVerifier(InputVerifier inputVerifier) (inherited from DTableColumn)
public String getRSetName()
public void setRSetName(String rSetName)
public DComplexView getDComplexView()
public void setDComplexView(DComplexView dcv)
public Object getVerifier()
public void setVerifier(Object verifier)
public String getTableName()
public void setTableName(String tableName)
public public Class getColumnClass(String identifier)
public void setColumnClass(Class customClass)
com.itgp.mvc.RTableColumns
public boolean isEditable(String identifier)
public boolean isRecalculate(String identifier)
public void addColumn(String identifier,String rSetName,String columnName,String heading, int width,InputVerifier verifier)
public Boolean isEditable(String identifier)
public Boolean getRecalculate(String identifier)
public Hashtable getColumnProperties(String identifier)
public Enumeration getNameKeys()
public void setColumnClass(String identifier,Class customClass)
public Class getColumnClass(String identifier)
com.itgp.mvc.RTableModel
public DSet getDSet()
com.itgp.mvc.SimpleHandler
public Class getClassType(DView c)
public int insertItem( DViewComplex c, Object instance, int[] positionInPreviousColumns, int position, HashMap insertHistory)
public boolean deleteItem(DViewComplex c, Object instance, int[] positionInPreviousColumns, int position, HashMap deleteHistory )
public int countItems(DViewComplex c, Object instance, int[] positionInPreviousColumns)
public int insertItem( DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns, int position, HashMap insertHistory)
public boolean deleteItem(DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns, int position, HashMap deleteHistory )
public int countItems(DViewComplex c, OTableColumn column, Object instance, int[] positionInPreviousColumns)
com.itgp.mvc.Utility
public static boolean eq(Object obj1, Object obj2)
public static DSet getDSet(DView dv)
public static Envelope buildSelect( DPanel dPanel , Relations relations )
private static Envelope buildSelect( DPanel dPanel , RelTable relationTable)
public static String getPopupLocation( String serverAddress , String virtualDirectory, String popupName )
public static Object[] getControls( Container c , Class[] classTypes, boolean deepSearch)
public static void synchronzeFormatter( RSimpleComponent c)
public static ArrayList getDComponentList( Container c ) | to public static ArrayList getDViewList( Container c ) |
com.itgp.mvc.view.OComboBox
public void addItems( DSet dSet, String rSetName, String columnName, boolean autoSelectFirstItem)
com.itgp.mvc.view.OTable now extends com.itgp.mvc.view.DTable and implements com.itgp.mvc.OViewTable. Other Changes:
public DEvent getPreLostFocus()
public void setPreLostFocus(DEvent dEvent)
public DEvent getPostLostFocus()
public void setPostLostFocus(DEvent dEvent)
public DEvent getPreGotFocus()
public void setPreGotFocus(DEvent dEvent)
public DEvent getPostGotFocus()
public void setPostGotFocus(DEvent dEvent)
public DEvent getPreTableInsertRow()
public void setPreTableInsertRow(DEvent dEvent)
public DEvent getPostTableInsertRow()
public void setPostTableInsertRow(DEvent dEvent)
public DEvent getPreTableAppendRow()
public void setPreTableAppendRow(DEvent dEvent)
public DEvent getPostTableAppendRow()
public void setPostTableAppendRow(DEvent dEvent)
public DEvent getPreTableDeleteRow()
public void setPreTableDeleteRow(DEvent dEvent)
public DEvent getPostTableDeleteRow()
public void setPostTableDeleteRow(DEvent dEvent)
public boolean deleteRow(int rowIndex )
com.itgp.mvc.view.RViewSimpleSupport
public static void synchronzeFormatter( RViewSimple c)
com.itgp.mvc.view.RCheckBox
public void clear()
com.itgp.mvc.view.RComboBox
public void clear()
com.itgp.mvc.view.RLabel
public void clear()
com.itgp.mvc.view.RTextArea
public void clear()
com.itgp.mvc.view.RTextField
public void clear()
com.itgp.mvc.view.RTable now extends com.itgp.mvc.view.DTable and implements com.itgp.mvc.RViewTable. Other Changes:
public DEvent getPreLostFocus()
public void setPreLostFocus(DEvent dEvent)
public DEvent getPostLostFocus()
public void setPostLostFocus(DEvent dEvent)
public DEvent getPreGotFocus()
public void setPreGotFocus(DEvent dEvent)
public DEvent getPostGotFocus()
public void setPostGotFocus(DEvent dEvent)
public DEvent getPreTableInsertRow()
public void setPreTableInsertRow(DEvent dEvent)
public DEvent getPostTableInsertRow()
public void setPostTableInsertRow(DEvent dEvent)
public DEvent getPreTableAppendRow()
public void setPreTableAppendRow(DEvent dEvent)
public DEvent getPostTableAppendRow()
public void setPostTableAppendRow(DEvent dEvent)
public DEvent getPreTableDeleteRow()
public void setPreTableDeleteRow(DEvent dEvent)
public DEvent getPostTableDeleteRow()
public void setPostTableDeleteRow(DEvent dEvent)
public TableCellRenderer getCellRenderer(int row, int column)
public TableCellEditor getCellEditor(int row, int column)
public void setCellEditor( int row, int col, TableCellEditor editor )
public void setCellRenderer( int row, int col, TableCellRenderer renderer )
public void showData()
public void setCellRenderer( int row, int col )
public DSet getDSet()
public boolean isAppendNewRow()
public void getAppendNewRow( boolean newRowAtBottom)
public RTableColumns getiDataColumns()
public Vector getRSetNames())
public Vector getColumnNames()
public RTableColumn[] getDColumns()
public boolean deleteRow(int rowIndex )
com.itgp.transport.RMessage
public boolean isRecordLock()
public void setRecordLock( boolean locked)
public int getRecordLock()
public void setRecordLock(int i)
This version fixes several problems affecting documentation and property editing in the IDE. No changes have been made to the runtime APIs.
.gif file from XTTCDev.jar.
myapp.client.Main provided in the client projects of workspaces now exits properly.
com.itgp.mvc.RemoteMethod methods are called isStreamed and setStreamed.
com.itgp.mvc.RemoteMethod method is called terminate().
com.itgp.mvc.DBFormatter no longer extends com.itgp.mvc.RFormatter
DBFormatter methods. New methods are:
public Object modelToDatabase(Object modelValue);
public Object databaseToModel(Object databaseValue);
com.itgp.mvc.RMetaColumn methods to set and get DBFormatters, not RFormatters
DBFormatters are copied from the visual control to the RMetaColumn to be used during parsing and saves.
RFormatters in XTT refactored so that only the necessary ones implement DBFormatter
XttsUtil.getServerCacheFactory() to look in XTTS_Init.proerties for the default name of the ServerCacheFactory implementation.
Added the following properties to configuration file XTTS_Init.properties (with examples):
#Maximum number of seconds of inactivity for a server push connection (defaults to 60) XTTS.ServerPush.KeepAliveIntervalSeconds=60 #ServerCacheFactory implementation class full name XTTS.ServerCacheFactory=com.itgp.server.replication.LocalServerCacheFactoryThese properties are stored in
XttsUtil and the corresponding methods are:
public static int getServerPushKeepAliveIntervalSeconds() public static void setServerPushKeepAliveIntervalSeconds(int aServerPushKeepAliveIntervalSeconds) public static ServerCacheFactory getServerCacheFactory() public static void setServerCacheFactory(ServerCacheFactory aServerCacheFactory)
getLastAccessTime() method to com.itgp.server.ClientComm.
This method will always return the timestamp (as a long) for last time this ClientComm instance was used.
If the instance was never used it will return Long.MIN_VALUE.com.itgp.server.ClientComm:
public void addClientCommListener(ClientCommListener listener);
public void removeClientCommListener(ClientCommListener listener);
Also added class com.itgp.server.ClientCommListener and class com.itgp.server.ClientCommEvent.Utility.getHttpSessionID() is superceded by public static String getSessionID() method.application.properties file in the workspace client projects.com.itgp.server.provider.sql.ConnectionPool when an exception is thrown, and the trace() methods are invoked.
com.itgp.mvc.ToNumber.
com.itgp.mvc.RPopup titles.
ButtonClose triggers a window closing event instead of calling Utility.closeForm. This gives an JInternalFrame a chance to handle that event.ParserServerComm no longer muffles IOException when physical network connection is severed, so that the client can be notified. IOException is now re-thrown.
catalina.dir, in the property file xttbuild.properties, in the web app project, points correctly
to the bundled Tomcat:
catalina.dir=${ant.home}/../com.itgp.eclipse.XTT_5.2.3/tomcat-5.5.9
This version affects only documentation. No changes have been made to the runtime libraries.
connectors.xml is case sensitive.
connectors.xml in the xtt-demoapp workspace to support the security provider example.
This version affects only documentation. No changes have been made to the runtime libraries.
callServer and callServerStreamed replace deprecated performParse and performStreamedParse in com.itgp.mvc.Utility.
com.itgp.mvc.Utility. See example in xtt-demoapp.
This new version offers a long list of new functionality: