Details
-
Type: Improvement
-
Status: Closed
-
Priority: Major
-
Resolution: Duplicate
-
Affects Version/s: 0.2
-
Fix Version/s: None
-
Component/s: None
-
Labels:None
Description
import com.thoughtworks.xstream.alias.ClassMapper;
import com.thoughtworks.xstream.alias.ElementMapper;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.ConverterLookup;
import com.thoughtworks.xstream.converters.reference.*;
import com.thoughtworks.xstream.objecttree.ObjectTree;
import com.thoughtworks.xstream.xml.XMLReader;
import com.thoughtworks.xstream.xml.XMLWriter;
public class ObjectWithFieldsConverter implements Converter {
private ClassMapper classMapper;
private CircularityTracker circularityTracker = new CircularityTracker();
private ElementMapper elementMapper;
public ObjectWithFieldsConverter(ClassMapper classMapper,ElementMapper elementMapper)
{ this.classMapper = classMapper; this.elementMapper = elementMapper; }public boolean canConvert(Class type)
{ return true; } public void toXML(ObjectTree objectGraph, XMLWriter xmlWriter, ConverterLookup converterLookup) {
String[] fieldNames = objectGraph.fieldNames();
for (int i = 0; i < fieldNames.length; i++) {
String fieldName = fieldNames[i];
objectGraph.push(fieldName);
Object fieldObject = objectGraph.get();
if ( fieldObject != null) {
int referenceID = circularityTracker.contains(fieldObject);
if( referenceID > -1 )
{ xmlWriter.startElement(fieldName); xmlWriter.addAttribute("idref", referenceID+""); xmlWriter.endElement(); }else
{ referenceID = circularityTracker.track(fieldObject); writeFieldAsXML(xmlWriter, elementMapper.toXml(fieldName), objectGraph, converterLookup, referenceID); }}else
{ // write null reference } objectGraph.pop();
}
}
private void writeFieldAsXML(XMLWriter xmlWriter, String fieldName, ObjectTree objectGraph, ConverterLookup converterLookup, int referenceID)
{ xmlWriter.startElement(fieldName); xmlWriter.addAttribute("id", referenceID+""); writeClassAttributeInXMLIfNotDefaultImplementation(objectGraph, xmlWriter); Converter converter = converterLookup.lookupConverterForType(objectGraph.type()); converter.toXML(objectGraph, xmlWriter, converterLookup); xmlWriter.endElement(); } protected void writeClassAttributeInXMLIfNotDefaultImplementation(ObjectTree objectGraph, XMLWriter xmlWriter) {
Class actualType = objectGraph.get().getClass();
Class defaultType = classMapper.lookupDefaultType(objectGraph.type());
if (!actualType.equals(defaultType))
}
public void fromXML(final ObjectTree objectGraph, XMLReader xmlReader, ConverterLookup converterLookup, Class requiredType) {
objectGraph.create(requiredType);
while (xmlReader.nextChild())
}
private Class determineWhichImplementationToUse(XMLReader xmlReader, final ObjectTree objectGraph) {
String classAttribute = xmlReader.attribute("class");
Class type;
if (classAttribute == null)
else
{ type = classMapper.lookupType(classAttribute); } return type;
}
}
// NOW - Try and use this on a JTable
// What are we going to do about null pointers? They should still be referenced:
//<someFieldName null/>
// Otherwise the complete state of the object will not be serialised
-
Hide
- com.zip
- 51 kB
- ben
-
- com/.../AbstractAcceptanceTest.java 1 kB
- com/thoughtworks/.../ArraysTest.java 3 kB
- com/thoughtworks/.../BasicTypesTest.java 2 kB
- com/thoughtworks/.../CollectionsTest.java 3 kB
- com/.../ConcreteClassesTest.java 2 kB
- com/thoughtworks/.../CustomClassesTest.java 3 kB
- com/thoughtworks/.../ExtendedTypesTest.java 1 kB
- com/thoughtworks/.../InheritanceTest.java 0.7 kB
- com/thoughtworks/acceptance/MapTest.java 2 kB
- com/thoughtworks/.../objects/Hardware.java 0.3 kB
- com/thoughtworks/.../OpenSourceSoftware.java 0.3 kB
- com/thoughtworks/.../SampleLists.java 0.3 kB
- com/thoughtworks/.../objects/Software.java 0.3 kB
- com/thoughtworks/.../StandardObject.java 0.5 kB
- com/thoughtworks/.../FunnyConstructor.java 0.2 kB
- com/thoughtworks/.../WithList.java 0.2 kB
- com/thoughtworks/someobjects/X.java 0.2 kB
- com/thoughtworks/someobjects/Y.java 0.2 kB
- com/.../CannotResolveClassException.java 0.2 kB
- com/thoughtworks/.../alias/ClassMapper.java 0.3 kB
- com/thoughtworks/.../DefaultClassMapper.java 3 kB
- com/.../DefaultClassMapperTest.java 1 kB
- com/.../DefaultElementMapper.java 0.3 kB
- com/thoughtworks/.../ElementMapper.java 0.2 kB
- com/.../AbstractBasicConverter.java 0.9 kB
- com/thoughtworks/.../BooleanConverter.java 0.4 kB
- com/thoughtworks/.../ByteConverter.java 0.3 kB
- com/thoughtworks/.../CharConverter.java 0.3 kB
- com/thoughtworks/.../DateConverter.java 1.0 kB
- com/thoughtworks/.../DoubleConverter.java 0.3 kB
-
Hide
- com.zip
- 50 kB
- ben
-
- com/.../AbstractAcceptanceTest.java 1 kB
- com/thoughtworks/.../ArraysTest.java 3 kB
- com/thoughtworks/.../BasicTypesTest.java 2 kB
- com/thoughtworks/.../CollectionsTest.java 3 kB
- com/.../ConcreteClassesTest.java 2 kB
- com/thoughtworks/.../CustomClassesTest.java 3 kB
- com/thoughtworks/.../ExtendedTypesTest.java 1 kB
- com/thoughtworks/.../InheritanceTest.java 0.7 kB
- com/thoughtworks/acceptance/MapTest.java 2 kB
- com/thoughtworks/.../objects/Hardware.java 0.3 kB
- com/thoughtworks/.../OpenSourceSoftware.java 0.3 kB
- com/thoughtworks/.../SampleLists.java 0.3 kB
- com/thoughtworks/.../objects/Software.java 0.3 kB
- com/thoughtworks/.../StandardObject.java 0.5 kB
- com/thoughtworks/.../FunnyConstructor.java 0.2 kB
- com/thoughtworks/.../WithList.java 0.2 kB
- com/thoughtworks/someobjects/X.java 0.2 kB
- com/thoughtworks/someobjects/Y.java 0.2 kB
- com/.../CannotResolveClassException.java 0.2 kB
- com/thoughtworks/.../alias/ClassMapper.java 0.3 kB
- com/thoughtworks/.../DefaultClassMapper.java 3 kB
- com/.../DefaultClassMapperTest.java 1 kB
- com/.../DefaultElementMapper.java 0.3 kB
- com/thoughtworks/.../ElementMapper.java 0.2 kB
- com/.../AbstractBasicConverter.java 0.9 kB
- com/thoughtworks/.../BooleanConverter.java 0.4 kB
- com/thoughtworks/.../ByteConverter.java 0.3 kB
- com/thoughtworks/.../CharConverter.java 0.3 kB
- com/thoughtworks/.../DateConverter.java 1.0 kB
- com/thoughtworks/.../DoubleConverter.java 0.3 kB
Activity
/**
Sorry - here is the new version with null support.
*/
package com.thoughtworks.xstream.converters.composite;
import com.thoughtworks.xstream.alias.ClassMapper;
import com.thoughtworks.xstream.alias.ElementMapper;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.ConverterLookup;
import com.thoughtworks.xstream.converters.reference.*;
import com.thoughtworks.xstream.objecttree.ObjectTree;
import com.thoughtworks.xstream.xml.XMLReader;
import com.thoughtworks.xstream.xml.XMLWriter;
public class ObjectWithFieldsConverter implements Converter {
private ClassMapper classMapper;
private CircularityTracker circularityTracker = new CircularityTracker();
private ElementMapper elementMapper;
public ObjectWithFieldsConverter(ClassMapper classMapper,ElementMapper elementMapper)
{ this.classMapper = classMapper; this.elementMapper = elementMapper; }public boolean canConvert(Class type)
{ return true; } public void toXML(ObjectTree objectGraph, XMLWriter xmlWriter, ConverterLookup converterLookup) {
String[] fieldNames = objectGraph.fieldNames();
for (int i = 0; i < fieldNames.length; i++) {
String fieldName = fieldNames[i];
objectGraph.push(fieldName);
Object fieldObject = objectGraph.get();
if ( fieldObject != null) {
int referenceID = circularityTracker.contains(fieldObject);
if( referenceID > -1 )
{ xmlWriter.startElement(fieldName); xmlWriter.addAttribute("idref", referenceID+""); xmlWriter.endElement(); }else
{ referenceID = circularityTracker.track(fieldObject); writeFieldAsXML(xmlWriter, elementMapper.toXml(fieldName), objectGraph, converterLookup, referenceID); }}else
{ // write null reference xmlWriter.startElement(fieldName); xmlWriter.addAttribute("value", "null"); xmlWriter.endElement(); } objectGraph.pop();
}
}
private void writeFieldAsXML(XMLWriter xmlWriter, String fieldName, ObjectTree objectGraph, ConverterLookup converterLookup, int referenceID)
{ xmlWriter.startElement(fieldName); xmlWriter.addAttribute("id", referenceID+""); writeClassAttributeInXMLIfNotDefaultImplementation(objectGraph, xmlWriter); Converter converter = converterLookup.lookupConverterForType(objectGraph.type()); converter.toXML(objectGraph, xmlWriter, converterLookup); xmlWriter.endElement(); } protected void writeClassAttributeInXMLIfNotDefaultImplementation(ObjectTree objectGraph, XMLWriter xmlWriter) {
Class actualType = objectGraph.get().getClass();
Class defaultType = classMapper.lookupDefaultType(objectGraph.type());
if (!actualType.equals(defaultType))
}
public void fromXML(final ObjectTree objectGraph, XMLReader xmlReader, ConverterLookup converterLookup, Class requiredType) {
objectGraph.create(requiredType);
while (xmlReader.nextChild())
}
private Class determineWhichImplementationToUse(XMLReader xmlReader, final ObjectTree objectGraph) {
String classAttribute = xmlReader.attribute("class");
Class type;
if (classAttribute == null)
else
{ type = classMapper.lookupType(classAttribute); } return type;
}
}
And the associated xml...
<javax.swing.JTable>
<dataModel id="0" class="javax.swing.table.DefaultTableModel">
<dataVector id="1" class="java.util.Vector"/>
<columnIdentifiers id="2" class="java.util.Vector"/>
<listenerList id="3" class="javax.swing.event.EventListenerList"/>
</dataModel>
<columnModel id="4" class="javax.swing.table.DefaultTableColumnModel">
<tableColumns id="5" class="java.util.Vector"/>
<selectionModel id="6" class="javax.swing.DefaultListSelectionModel">
<selectionMode id="7">2</selectionMode>
<minIndex id="8">2147483647</minIndex>
<maxIndex id="9">-1</maxIndex>
<anchorIndex id="10">0</anchorIndex>
<leadIndex id="11">-1</leadIndex>
<firstAdjustedIndex id="12">2147483647</firstAdjustedIndex>
<lastAdjustedIndex id="13">-1</lastAdjustedIndex>
<isAdjusting id="14">false</isAdjusting>
<firstChangedIndex id="15">2147483647</firstChangedIndex>
<lastChangedIndex id="16">-1</lastChangedIndex>
<value id="17" class="java.util.BitSet">
<bits id="18" class="long-array">
<long>0</long>
</bits>
</value>
<listenerList id="19" class="javax.swing.event.EventListenerList"/>
<leadAnchorNotificationEnabled id="20">true</leadAnchorNotificationEnabled>
</selectionModel>
<columnMargin id="21">1</columnMargin>
<listenerList id="22" class="javax.swing.event.EventListenerList"/>
<columnSelectionAllowed id="23">false</columnSelectionAllowed>
<totalColumnWidth id="24">-1</totalColumnWidth>
</columnModel>
<selectionModel id="25" class="javax.swing.DefaultListSelectionModel">
<selectionMode id="26">2</selectionMode>
<minIndex id="27">2147483647</minIndex>
<maxIndex id="28">-1</maxIndex>
<anchorIndex id="29">0</anchorIndex>
<leadIndex id="30">-1</leadIndex>
<firstAdjustedIndex id="31">2147483647</firstAdjustedIndex>
<lastAdjustedIndex id="32">-1</lastAdjustedIndex>
<isAdjusting id="33">false</isAdjusting>
<firstChangedIndex id="34">2147483647</firstChangedIndex>
<lastChangedIndex id="35">-1</lastChangedIndex>
<value id="36" class="java.util.BitSet">
<bits id="37" class="long-array">
<long>0</long>
</bits>
</value>
<listenerList id="38" class="javax.swing.event.EventListenerList"/>
<leadAnchorNotificationEnabled id="39">true</leadAnchorNotificationEnabled>
</selectionModel>
<tableHeader id="40" class="javax.swing.table.JTableHeader">
<table id="41" class="javax.swing.JTable">
<dataModel idref="0"/>
<columnModel idref="4"/>
<selectionModel idref="25"/>
<tableHeader idref="40"/>
<rowHeight id="42">16</rowHeight>
<rowMargin id="43">1</rowMargin>
<gridColor id="44" class="javax.swing.plaf.ColorUIResource">
<value id="45">-6710887</value>
<frgbvalue value="null"/>
<fvalue value="null"/>
<falpha id="46">0.0</falpha>
<cs value="null"/>
</gridColor>
<showHorizontalLines id="47">true</showHorizontalLines>
<showVerticalLines id="48">true</showVerticalLines>
<autoResizeMode id="49">2</autoResizeMode>
<autoCreateColumnsFromModel id="50">true</autoCreateColumnsFromModel>
<preferredViewportSize id="51" class="java.awt.Dimension">
<width id="52">450</width>
<height id="53">400</height>
</preferredViewportSize>
<rowSelectionAllowed id="54">true</rowSelectionAllowed>
<cellSelectionEnabled id="55">false</cellSelectionEnabled>
<selectionForeground id="56" class="javax.swing.plaf.ColorUIResource">
<value id="57">-16777216</value>
<frgbvalue value="null"/>
<fvalue value="null"/>
<falpha id="58">0.0</falpha>
<cs value="null"/>
</selectionForeground>
<selectionBackground id="59" class="javax.swing.plaf.ColorUIResource">
<value id="60">-3355393</value>
<frgbvalue value="null"/>
<fvalue value="null"/>
<falpha id="61">0.0</falpha>
<cs value="null"/>
</selectionBackground>
<rowModel value="null"/>
<dragEnabled id="62">false</dragEnabled>
<surrendersFocusOnKeystroke id="63">false</surrendersFocusOnKeystroke>
<editorRemover value="null"/>
<columnSelectionAdjusting id="64">false</columnSelectionAdjusting>
<rowSelectionAdjusting id="65">false</rowSelectionAdjusting>
<preferredSize value="null"/>
<minimumSize value="null"/>
<maximumSize value="null"/>
<alignmentX value="null"/>
<alignmentY value="null"/>
<ancestorNotifier value="null"/>
<_bounds id="66" class="java.awt.Rectangle">
<x id="67">0</x>
<y id="68">0</y>
<width id="69">0</width>
<height id="70">0</height>
</_bounds>
<listenerList id="71" class="javax.swing.event.EventListenerList"/>
<clientProperties value="null"/>
<vetoableChangeSupport value="null"/>
<autoscroller id="72" class="javax.swing.Autoscroller">
<component idref="41"/>
</autoscroller>
<border value="null"/>
<flags id="73">328</flags>
<transfer id="74" class="javax.swing.plaf.basic.BasicTableUI-TableTransferHandler">
<propertyName value="null"/>
</transfer>
<inputVerifier value="null"/>
<verifyInputWhenFocusTarget id="75">true</verifyInputWhenFocusTarget>
<focusInputMap value="null"/>
<ancestorInputMap id="76" class="javax.swing.InputMap">
<parent id="77" class="javax.swing.plaf.InputMapUIResource">
<parent value="null"/>
</parent>
</ancestorInputMap>
<windowInputMap value="null"/>
<actionMap id="78" class="javax.swing.ActionMap">
<parent id="79" class="javax.swing.plaf.ActionMapUIResource">
<parent value="null"/>
</parent>
</actionMap>
<accessibleContext value="null"/>
<htmlView value="null"/>
<changeSupport id="80" class="javax.swing.event.SwingPropertyChangeSupport">
<children value="null"/>
<source idref="41"/>
<children value="null"/>
<source idref="41"/>
<propertyChangeSupportSerializedDataVersion id="81">2</propertyChangeSupportSerializedDataVersion>
</changeSupport>
<paintImmediatelyClip id="82" class="java.awt.Rectangle">
<x id="83">0</x>
<y id="84">0</y>
<width id="85">0</width>
<height id="86">0</height>
</paintImmediatelyClip>
<ncomponents id="87">1</ncomponents>
<component id="88" class="java.awt.Component-array">
<javax.swing.CellRendererPane>
<accessibleContext value="null"/>
<ncomponents id="89">0</ncomponents>
<component id="90" class="java.awt.Component-array"/>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="91">false</focusCycleRoot>
<containerSerializedDataVersion id="92">1</containerSerializedDataVersion>
<x id="93">0</x>
<y id="94">0</y>
<width id="95">0</width>
<height id="96">0</height>
<foreground value="null"/>
<background value="null"/>
<font value="null"/>
<peerFont value="null"/>
<cursor value="null"/>
<locale value="null"/>
<ignoreRepaint id="97">false</ignoreRepaint>
<visible id="98">false</visible>
<enabled id="99">true</enabled>
<valid id="100">false</valid>
<dropTarget value="null"/>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="101">false</nameExplicitlySet>
<focusable id="102">true</focusable>
<isFocusTraversableOverridden id="103">0</isFocusTraversableOverridden>
<focusTraversalKeys value="null"/>
<focusTraversalKeysEnabled id="104">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="105">false</newEventsOnly>
<eventMask id="106">4096</eventMask>
<changeSupport value="null"/>
<isPacked id="107">false</isPacked>
<componentSerializedDataVersion id="108">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</javax.swing.CellRendererPane>
</component>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="109">false</focusCycleRoot>
<containerSerializedDataVersion id="110">1</containerSerializedDataVersion>
<x id="111">0</x>
<y id="112">0</y>
<width id="113">0</width>
<height id="114">0</height>
<foreground idref="56"/>
<background id="115" class="javax.swing.plaf.ColorUIResource">
<value id="116">-1</value>
<frgbvalue value="null"/>
<fvalue value="null"/>
<falpha id="117">0.0</falpha>
<cs value="null"/>
</background>
<font id="118" class="javax.swing.plaf.FontUIResource">
<fRequestedAttributes id="119" class="java.util.Hashtable">
<entry>
<java.awt.font.TextAttribute>
<name id="120">weight</name>
</java.awt.font.TextAttribute>
<float>1.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="121">transform</name>
</java.awt.font.TextAttribute>
<java.awt.font.TransformAttribute>
<transform value="null"/>
</java.awt.font.TransformAttribute>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="122">posture</name>
</java.awt.font.TextAttribute>
<float>0.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="123">size</name>
</java.awt.font.TextAttribute>
<float>12.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="124">family</name>
</java.awt.font.TextAttribute>
<string>Dialog</string>
</entry>
</fRequestedAttributes>
<name id="125">Dialog</name>
<style id="126">0</style>
<size id="127">12</size>
<pointSize id="128">12.0</pointSize>
<fontSerializedDataVersion id="129">1</fontSerializedDataVersion>
</font>
<peerFont value="null"/>
<cursor value="null"/>
<locale id="130" class="java.util.Locale">
<language id="131">en</language>
<country id="132">NZ</country>
<variant id="133"></variant>
<hashcode id="134">1381</hashcode>
</locale>
<ignoreRepaint id="135">false</ignoreRepaint>
<visible id="136">true</visible>
<enabled id="137">true</enabled>
<valid id="138">false</valid>
<dropTarget id="139" class="javax.swing.TransferHandler-SwingDropTarget">
<listenerList id="140" class="javax.swing.event.EventListenerList"/>
<dropTargetContext id="141" class="java.awt.dnd.DropTargetContext">
<dropTarget idref="139"/>
</dropTargetContext>
<component idref="41"/>
<actions id="142">3</actions>
<active id="143">true</active>
</dropTarget>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="144">false</nameExplicitlySet>
<focusable id="145">true</focusable>
<isFocusTraversableOverridden id="146">0</isFocusTraversableOverridden>
<focusTraversalKeys id="147" class="set-array">
<java.util.Collections-UnmodifiableSet>
<javax.swing.KeyStroke>
<keyChar id="148">?</keyChar>
<keyCode id="149">9</keyCode>
<modifiers id="150">130</modifiers>
<onKeyRelease id="151">false</onKeyRelease>
</javax.swing.KeyStroke>
</java.util.Collections-UnmodifiableSet>
<java.util.Collections-UnmodifiableSet>
<javax.swing.KeyStroke>
<keyChar id="152">?</keyChar>
<keyCode id="153">9</keyCode>
<modifiers id="154">195</modifiers>
<onKeyRelease id="155">false</onKeyRelease>
</javax.swing.KeyStroke>
</java.util.Collections-UnmodifiableSet>
<null/>
<null/>
</focusTraversalKeys>
<focusTraversalKeysEnabled id="156">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="157">true</newEventsOnly>
<eventMask id="158">4104</eventMask>
<changeSupport idref="80"/>
<isPacked id="159">false</isPacked>
<componentSerializedDataVersion id="160">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</table>
<columnModel idref="4"/>
<reorderingAllowed id="161">true</reorderingAllowed>
<resizingAllowed id="162">true</resizingAllowed>
<updateTableInRealTime id="163">true</updateTableInRealTime>
<defaultRenderer id="164" class="javax.swing.table.JTableHeader-UIResourceTableCellRenderer">
<unselectedForeground value="null"/>
<unselectedBackground value="null"/>
<mnemonic id="165">0</mnemonic>
<mnemonicIndex id="166">-1</mnemonicIndex>
<text idref="133"/>
<defaultIcon value="null"/>
<disabledIcon value="null"/>
<disabledIconSet id="167">false</disabledIconSet>
<verticalAlignment id="168">0</verticalAlignment>
<horizontalAlignment id="169">0</horizontalAlignment>
<verticalTextPosition id="170">0</verticalTextPosition>
<horizontalTextPosition id="171">11</horizontalTextPosition>
<iconTextGap id="172">4</iconTextGap>
<labelFor value="null"/>
<accessibleIcon value="null"/>
<preferredSize value="null"/>
<minimumSize value="null"/>
<maximumSize value="null"/>
<alignmentX id="173">0.0</alignmentX>
<alignmentY value="null"/>
<ancestorNotifier value="null"/>
<_bounds id="174" class="java.awt.Rectangle">
<x id="175">0</x>
<y id="176">0</y>
<width id="177">0</width>
<height id="178">0</height>
</_bounds>
<listenerList id="179" class="javax.swing.event.EventListenerList"/>
<clientProperties value="null"/>
<vetoableChangeSupport value="null"/>
<autoscroller value="null"/>
<border id="180" class="javax.swing.border.EmptyBorder">
<left id="181">1</left>
<right id="182">1</right>
<top id="183">1</top>
<bottom id="184">1</bottom>
</border>
<flags id="185">8</flags>
<transfer value="null"/>
<inputVerifier value="null"/>
<verifyInputWhenFocusTarget id="186">true</verifyInputWhenFocusTarget>
<focusInputMap value="null"/>
<ancestorInputMap value="null"/>
<windowInputMap value="null"/>
<actionMap value="null"/>
<accessibleContext value="null"/>
<htmlView value="null"/>
<changeSupport id="187" class="javax.swing.event.SwingPropertyChangeSupport">
<children value="null"/>
<source idref="164"/>
<children value="null"/>
<source idref="164"/>
<propertyChangeSupportSerializedDataVersion id="188">2</propertyChangeSupportSerializedDataVersion>
</changeSupport>
<paintImmediatelyClip id="189" class="java.awt.Rectangle">
<x id="190">0</x>
<y id="191">0</y>
<width id="192">0</width>
<height id="193">0</height>
</paintImmediatelyClip>
<ncomponents id="194">0</ncomponents>
<component id="195" class="java.awt.Component-array"/>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="196">false</focusCycleRoot>
<containerSerializedDataVersion id="197">1</containerSerializedDataVersion>
<x id="198">0</x>
<y id="199">0</y>
<width id="200">0</width>
<height id="201">0</height>
<foreground value="null"/>
<background value="null"/>
<font id="202" class="javax.swing.plaf.FontUIResource">
<fRequestedAttributes id="203" class="java.util.Hashtable">
<entry>
<java.awt.font.TextAttribute>
<name idref="120"/>
</java.awt.font.TextAttribute>
<float>2.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="121"/>
</java.awt.font.TextAttribute>
<java.awt.font.TransformAttribute>
<transform value="null"/>
</java.awt.font.TransformAttribute>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="122"/>
</java.awt.font.TextAttribute>
<float>0.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="123"/>
</java.awt.font.TextAttribute>
<float>12.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="124"/>
</java.awt.font.TextAttribute>
<string>Dialog</string>
</entry>
</fRequestedAttributes>
<name id="204">Dialog</name>
<style id="205">1</style>
<size id="206">12</size>
<pointSize id="207">12.0</pointSize>
<fontSerializedDataVersion id="208">1</fontSerializedDataVersion>
</font>
<peerFont value="null"/>
<cursor value="null"/>
<locale idref="130"/>
<ignoreRepaint id="209">false</ignoreRepaint>
<visible id="210">true</visible>
<enabled id="211">true</enabled>
<valid id="212">false</valid>
<dropTarget value="null"/>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="213">false</nameExplicitlySet>
<focusable id="214">true</focusable>
<isFocusTraversableOverridden id="215">0</isFocusTraversableOverridden>
<focusTraversalKeys value="null"/>
<focusTraversalKeysEnabled id="216">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="217">true</newEventsOnly>
<eventMask id="218">4104</eventMask>
<changeSupport idref="187"/>
<isPacked id="219">false</isPacked>
<componentSerializedDataVersion id="220">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</defaultRenderer>
<preferredSize value="null"/>
<minimumSize value="null"/>
<maximumSize value="null"/>
<alignmentX value="null"/>
<alignmentY value="null"/>
<ancestorNotifier value="null"/>
<_bounds id="221" class="java.awt.Rectangle">
<x id="222">0</x>
<y id="223">0</y>
<width id="224">0</width>
<height id="225">0</height>
</_bounds>
<listenerList id="226" class="javax.swing.event.EventListenerList"/>
<clientProperties value="null"/>
<vetoableChangeSupport value="null"/>
<autoscroller value="null"/>
<border value="null"/>
<flags id="227">8</flags>
<transfer value="null"/>
<inputVerifier value="null"/>
<verifyInputWhenFocusTarget id="228">true</verifyInputWhenFocusTarget>
<focusInputMap value="null"/>
<ancestorInputMap value="null"/>
<windowInputMap value="null"/>
<actionMap value="null"/>
<accessibleContext value="null"/>
<htmlView value="null"/>
<changeSupport value="null"/>
<paintImmediatelyClip id="229" class="java.awt.Rectangle">
<x id="230">0</x>
<y id="231">0</y>
<width id="232">0</width>
<height id="233">0</height>
</paintImmediatelyClip>
<ncomponents id="234">1</ncomponents>
<component id="235" class="java.awt.Component-array">
<javax.swing.CellRendererPane>
<accessibleContext value="null"/>
<ncomponents id="236">0</ncomponents>
<component id="237" class="java.awt.Component-array"/>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="238">false</focusCycleRoot>
<containerSerializedDataVersion id="239">1</containerSerializedDataVersion>
<x id="240">0</x>
<y id="241">0</y>
<width id="242">0</width>
<height id="243">0</height>
<foreground value="null"/>
<background value="null"/>
<font value="null"/>
<peerFont value="null"/>
<cursor value="null"/>
<locale value="null"/>
<ignoreRepaint id="244">false</ignoreRepaint>
<visible id="245">false</visible>
<enabled id="246">true</enabled>
<valid id="247">false</valid>
<dropTarget value="null"/>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="248">false</nameExplicitlySet>
<focusable id="249">true</focusable>
<isFocusTraversableOverridden id="250">0</isFocusTraversableOverridden>
<focusTraversalKeys value="null"/>
<focusTraversalKeysEnabled id="251">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="252">false</newEventsOnly>
<eventMask id="253">4096</eventMask>
<changeSupport value="null"/>
<isPacked id="254">false</isPacked>
<componentSerializedDataVersion id="255">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</javax.swing.CellRendererPane>
</component>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="256">false</focusCycleRoot>
<containerSerializedDataVersion id="257">1</containerSerializedDataVersion>
<x id="258">0</x>
<y id="259">0</y>
<width id="260">0</width>
<height id="261">0</height>
<foreground idref="56"/>
<background id="262" class="javax.swing.plaf.ColorUIResource">
<value id="263">-3355444</value>
<frgbvalue value="null"/>
<fvalue value="null"/>
<falpha id="264">0.0</falpha>
<cs value="null"/>
</background>
<font idref="118"/>
<peerFont value="null"/>
<cursor value="null"/>
<locale idref="130"/>
<ignoreRepaint id="265">false</ignoreRepaint>
<visible id="266">true</visible>
<enabled id="267">true</enabled>
<valid id="268">false</valid>
<dropTarget value="null"/>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="269">false</nameExplicitlySet>
<focusable id="270">false</focusable>
<isFocusTraversableOverridden id="271">2</isFocusTraversableOverridden>
<focusTraversalKeys value="null"/>
<focusTraversalKeysEnabled id="272">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="273">true</newEventsOnly>
<eventMask id="274">4104</eventMask>
<changeSupport value="null"/>
<isPacked id="275">false</isPacked>
<componentSerializedDataVersion id="276">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</tableHeader>
<rowHeight id="277">16</rowHeight>
<rowMargin id="278">1</rowMargin>
<gridColor idref="44"/>
<showHorizontalLines id="279">true</showHorizontalLines>
<showVerticalLines id="280">true</showVerticalLines>
<autoResizeMode id="281">2</autoResizeMode>
<autoCreateColumnsFromModel id="282">true</autoCreateColumnsFromModel>
<preferredViewportSize idref="51"/>
<rowSelectionAllowed id="283">true</rowSelectionAllowed>
<cellSelectionEnabled id="284">false</cellSelectionEnabled>
<selectionForeground idref="56"/>
<selectionBackground idref="59"/>
<rowModel value="null"/>
<dragEnabled id="285">false</dragEnabled>
<surrendersFocusOnKeystroke id="286">false</surrendersFocusOnKeystroke>
<editorRemover value="null"/>
<columnSelectionAdjusting id="287">false</columnSelectionAdjusting>
<rowSelectionAdjusting id="288">false</rowSelectionAdjusting>
<preferredSize value="null"/>
<minimumSize value="null"/>
<maximumSize value="null"/>
<alignmentX value="null"/>
<alignmentY value="null"/>
<ancestorNotifier value="null"/>
<_bounds idref="66"/>
<listenerList idref="71"/>
<clientProperties value="null"/>
<vetoableChangeSupport value="null"/>
<autoscroller idref="72"/>
<border value="null"/>
<flags id="289">328</flags>
<transfer idref="74"/>
<inputVerifier value="null"/>
<verifyInputWhenFocusTarget id="290">true</verifyInputWhenFocusTarget>
<focusInputMap value="null"/>
<ancestorInputMap idref="76"/>
<windowInputMap value="null"/>
<actionMap idref="78"/>
<accessibleContext value="null"/>
<htmlView value="null"/>
<changeSupport idref="80"/>
<paintImmediatelyClip idref="82"/>
<ncomponents id="291">1</ncomponents>
<component idref="88"/>
<layoutMgr value="null"/>
<dispatcher value="null"/>
<maxSize value="null"/>
<focusCycleRoot id="292">false</focusCycleRoot>
<containerSerializedDataVersion id="293">1</containerSerializedDataVersion>
<x id="294">0</x>
<y id="295">0</y>
<width id="296">0</width>
<height id="297">0</height>
<foreground idref="56"/>
<background idref="115"/>
<font idref="118"/>
<peerFont value="null"/>
<cursor value="null"/>
<locale idref="130"/>
<ignoreRepaint id="298">false</ignoreRepaint>
<visible id="299">true</visible>
<enabled id="300">true</enabled>
<valid id="301">false</valid>
<dropTarget idref="139"/>
<popups value="null"/>
<name value="null"/>
<nameExplicitlySet id="302">false</nameExplicitlySet>
<focusable id="303">true</focusable>
<isFocusTraversableOverridden id="304">0</isFocusTraversableOverridden>
<focusTraversalKeys idref="147"/>
<focusTraversalKeysEnabled id="305">true</focusTraversalKeysEnabled>
<minSize value="null"/>
<prefSize value="null"/>
<newEventsOnly id="306">true</newEventsOnly>
<eventMask id="307">4104</eventMask>
<changeSupport idref="80"/>
<isPacked id="308">false</isPacked>
<componentSerializedDataVersion id="309">4</componentSerializedDataVersion>
<accessibleContext value="null"/>
</javax.swing.JTable>
Could you possibly provide a summary of changes in your implementation?
Here are the current changes. I still have a lot to go.
I am investigating the ability to use a circularity tracker delegate, as you will see in com.thoughtworks.xstream.converters.reference
This is not updated with the new codebase and should be treated as a potential strategy for xstreaming objects, not an implementation.
This is a better version - it correctly handles null values and does not change object with field converter.
Thanks. I shall use some of this when implementing XSTR-23
Here is the output from a jtable
<javax.swing.JTable>
<dataModel id="0" class="javax.swing.table.DefaultTableModel">
<dataVector id="1" class="java.util.Vector"/>
<columnIdentifiers id="2" class="java.util.Vector"/>
<listenerList id="3" class="javax.swing.event.EventListenerList"/>
</dataModel>
<columnModel id="4" class="javax.swing.table.DefaultTableColumnModel">
<tableColumns id="5" class="java.util.Vector"/>
<selectionModel id="6" class="javax.swing.DefaultListSelectionModel">
<selectionMode id="7">2</selectionMode>
<minIndex id="8">2147483647</minIndex>
<maxIndex id="9">-1</maxIndex>
<anchorIndex id="10">0</anchorIndex>
<leadIndex id="11">-1</leadIndex>
<firstAdjustedIndex id="12">2147483647</firstAdjustedIndex>
<lastAdjustedIndex id="13">-1</lastAdjustedIndex>
<isAdjusting id="14">false</isAdjusting>
<firstChangedIndex id="15">2147483647</firstChangedIndex>
<lastChangedIndex id="16">-1</lastChangedIndex>
<value id="17" class="java.util.BitSet">
<bits id="18" class="long-array">
<long>0</long>
</bits>
</value>
<listenerList id="19" class="javax.swing.event.EventListenerList"/>
<leadAnchorNotificationEnabled id="20">true</leadAnchorNotificationEnabled>
</selectionModel>
<columnMargin id="21">1</columnMargin>
<listenerList id="22" class="javax.swing.event.EventListenerList"/>
<columnSelectionAllowed id="23">false</columnSelectionAllowed>
<totalColumnWidth id="24">-1</totalColumnWidth>
</columnModel>
<selectionModel id="25" class="javax.swing.DefaultListSelectionModel">
<selectionMode id="26">2</selectionMode>
<minIndex id="27">2147483647</minIndex>
<maxIndex id="28">-1</maxIndex>
<anchorIndex id="29">0</anchorIndex>
<leadIndex id="30">-1</leadIndex>
<firstAdjustedIndex id="31">2147483647</firstAdjustedIndex>
<lastAdjustedIndex id="32">-1</lastAdjustedIndex>
<isAdjusting id="33">false</isAdjusting>
<firstChangedIndex id="34">2147483647</firstChangedIndex>
<lastChangedIndex id="35">-1</lastChangedIndex>
<value id="36" class="java.util.BitSet">
<bits id="37" class="long-array">
<long>0</long>
</bits>
</value>
<listenerList id="38" class="javax.swing.event.EventListenerList"/>
<leadAnchorNotificationEnabled id="39">true</leadAnchorNotificationEnabled>
</selectionModel>
<tableHeader id="40" class="javax.swing.table.JTableHeader">
<table id="41" class="javax.swing.JTable">
<dataModel idref="0"/>
<columnModel idref="4"/>
<selectionModel idref="25"/>
<tableHeader idref="40"/>
<rowHeight id="42">16</rowHeight>
<rowMargin id="43">1</rowMargin>
<gridColor id="44" class="javax.swing.plaf.ColorUIResource">
<value id="45">-6710887</value>
<falpha id="46">0.0</falpha>
</gridColor>
<showHorizontalLines id="47">true</showHorizontalLines>
<showVerticalLines id="48">true</showVerticalLines>
<autoResizeMode id="49">2</autoResizeMode>
<autoCreateColumnsFromModel id="50">true</autoCreateColumnsFromModel>
<preferredViewportSize id="51" class="java.awt.Dimension">
<width id="52">450</width>
<height id="53">400</height>
</preferredViewportSize>
<rowSelectionAllowed id="54">true</rowSelectionAllowed>
<cellSelectionEnabled id="55">false</cellSelectionEnabled>
<selectionForeground id="56" class="javax.swing.plaf.ColorUIResource">
<value id="57">-16777216</value>
<falpha id="58">0.0</falpha>
</selectionForeground>
<selectionBackground id="59" class="javax.swing.plaf.ColorUIResource">
<value id="60">-3355393</value>
<falpha id="61">0.0</falpha>
</selectionBackground>
<dragEnabled id="62">false</dragEnabled>
<surrendersFocusOnKeystroke id="63">false</surrendersFocusOnKeystroke>
<columnSelectionAdjusting id="64">false</columnSelectionAdjusting>
<rowSelectionAdjusting id="65">false</rowSelectionAdjusting>
<_bounds id="66" class="java.awt.Rectangle">
<x id="67">0</x>
<y id="68">0</y>
<width id="69">0</width>
<height id="70">0</height>
</_bounds>
<listenerList id="71" class="javax.swing.event.EventListenerList"/>
<autoscroller id="72" class="javax.swing.Autoscroller">
<component idref="41"/>
</autoscroller>
<flags id="73">328</flags>
<transfer id="74" class="javax.swing.plaf.basic.BasicTableUI-TableTransferHandler"/>
<verifyInputWhenFocusTarget id="75">true</verifyInputWhenFocusTarget>
<ancestorInputMap id="76" class="javax.swing.InputMap">
<parent id="77" class="javax.swing.plaf.InputMapUIResource"/>
</ancestorInputMap>
<actionMap id="78" class="javax.swing.ActionMap">
<parent id="79" class="javax.swing.plaf.ActionMapUIResource"/>
</actionMap>
<changeSupport id="80" class="javax.swing.event.SwingPropertyChangeSupport">
<source idref="41"/>
<source idref="41"/>
<propertyChangeSupportSerializedDataVersion id="81">2</propertyChangeSupportSerializedDataVersion>
</changeSupport>
<paintImmediatelyClip id="82" class="java.awt.Rectangle">
<x id="83">0</x>
<y id="84">0</y>
<width id="85">0</width>
<height id="86">0</height>
</paintImmediatelyClip>
<ncomponents id="87">1</ncomponents>
<component id="88" class="java.awt.Component-array">
<javax.swing.CellRendererPane>
<ncomponents id="89">0</ncomponents>
<component id="90" class="java.awt.Component-array"/>
<focusCycleRoot id="91">false</focusCycleRoot>
<containerSerializedDataVersion id="92">1</containerSerializedDataVersion>
<x id="93">0</x>
<y id="94">0</y>
<width id="95">0</width>
<height id="96">0</height>
<ignoreRepaint id="97">false</ignoreRepaint>
<visible id="98">false</visible>
<enabled id="99">true</enabled>
<valid id="100">false</valid>
<nameExplicitlySet id="101">false</nameExplicitlySet>
<focusable id="102">true</focusable>
<isFocusTraversableOverridden id="103">0</isFocusTraversableOverridden>
<focusTraversalKeysEnabled id="104">true</focusTraversalKeysEnabled>
<newEventsOnly id="105">false</newEventsOnly>
<eventMask id="106">4096</eventMask>
<isPacked id="107">false</isPacked>
<componentSerializedDataVersion id="108">4</componentSerializedDataVersion>
</javax.swing.CellRendererPane>
</component>
<focusCycleRoot id="109">false</focusCycleRoot>
<containerSerializedDataVersion id="110">1</containerSerializedDataVersion>
<x id="111">0</x>
<y id="112">0</y>
<width id="113">0</width>
<height id="114">0</height>
<foreground idref="56"/>
<background id="115" class="javax.swing.plaf.ColorUIResource">
<value id="116">-1</value>
<falpha id="117">0.0</falpha>
</background>
<font id="118" class="javax.swing.plaf.FontUIResource">
<fRequestedAttributes id="119" class="java.util.Hashtable">
<entry>
<java.awt.font.TextAttribute>
<name id="120">weight</name>
</java.awt.font.TextAttribute>
<float>1.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="121">transform</name>
</java.awt.font.TextAttribute>
<java.awt.font.TransformAttribute/>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="122">posture</name>
</java.awt.font.TextAttribute>
<float>0.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="123">size</name>
</java.awt.font.TextAttribute>
<float>12.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name id="124">family</name>
</java.awt.font.TextAttribute>
<string>Dialog</string>
</entry>
</fRequestedAttributes>
<name id="125">Dialog</name>
<style id="126">0</style>
<size id="127">12</size>
<pointSize id="128">12.0</pointSize>
<fontSerializedDataVersion id="129">1</fontSerializedDataVersion>
</font>
<locale id="130" class="java.util.Locale">
<language id="131">en</language>
<country id="132">NZ</country>
<variant id="133"></variant>
<hashcode id="134">1381</hashcode>
</locale>
<ignoreRepaint id="135">false</ignoreRepaint>
<visible id="136">true</visible>
<enabled id="137">true</enabled>
<valid id="138">false</valid>
<dropTarget id="139" class="javax.swing.TransferHandler-SwingDropTarget">
<listenerList id="140" class="javax.swing.event.EventListenerList"/>
<dropTargetContext id="141" class="java.awt.dnd.DropTargetContext">
<dropTarget idref="139"/>
</dropTargetContext>
<component idref="41"/>
<actions id="142">3</actions>
<active id="143">true</active>
</dropTarget>
<nameExplicitlySet id="144">false</nameExplicitlySet>
<focusable id="145">true</focusable>
<isFocusTraversableOverridden id="146">0</isFocusTraversableOverridden>
<focusTraversalKeys id="147" class="set-array">
<java.util.Collections-UnmodifiableSet>
<javax.swing.KeyStroke>
<keyChar id="148">?</keyChar>
<keyCode id="149">9</keyCode>
<modifiers id="150">130</modifiers>
<onKeyRelease id="151">false</onKeyRelease>
</javax.swing.KeyStroke>
</java.util.Collections-UnmodifiableSet>
<java.util.Collections-UnmodifiableSet>
<javax.swing.KeyStroke>
<keyChar id="152">?</keyChar>
<keyCode id="153">9</keyCode>
<modifiers id="154">195</modifiers>
<onKeyRelease id="155">false</onKeyRelease>
</javax.swing.KeyStroke>
</java.util.Collections-UnmodifiableSet>
<null/>
<null/>
</focusTraversalKeys>
<focusTraversalKeysEnabled id="156">true</focusTraversalKeysEnabled>
<newEventsOnly id="157">true</newEventsOnly>
<eventMask id="158">4104</eventMask>
<changeSupport idref="80"/>
<isPacked id="159">false</isPacked>
<componentSerializedDataVersion id="160">4</componentSerializedDataVersion>
</table>
<columnModel idref="4"/>
<reorderingAllowed id="161">true</reorderingAllowed>
<resizingAllowed id="162">true</resizingAllowed>
<updateTableInRealTime id="163">true</updateTableInRealTime>
<defaultRenderer id="164" class="javax.swing.table.JTableHeader-UIResourceTableCellRenderer">
<mnemonic id="165">0</mnemonic>
<mnemonicIndex id="166">-1</mnemonicIndex>
<text idref="133"/>
<disabledIconSet id="167">false</disabledIconSet>
<verticalAlignment id="168">0</verticalAlignment>
<horizontalAlignment id="169">0</horizontalAlignment>
<verticalTextPosition id="170">0</verticalTextPosition>
<horizontalTextPosition id="171">11</horizontalTextPosition>
<iconTextGap id="172">4</iconTextGap>
<alignmentX id="173">0.0</alignmentX>
<_bounds id="174" class="java.awt.Rectangle">
<x id="175">0</x>
<y id="176">0</y>
<width id="177">0</width>
<height id="178">0</height>
</_bounds>
<listenerList id="179" class="javax.swing.event.EventListenerList"/>
<border id="180" class="javax.swing.border.EmptyBorder">
<left id="181">1</left>
<right id="182">1</right>
<top id="183">1</top>
<bottom id="184">1</bottom>
</border>
<flags id="185">8</flags>
<verifyInputWhenFocusTarget id="186">true</verifyInputWhenFocusTarget>
<changeSupport id="187" class="javax.swing.event.SwingPropertyChangeSupport">
<source idref="164"/>
<source idref="164"/>
<propertyChangeSupportSerializedDataVersion id="188">2</propertyChangeSupportSerializedDataVersion>
</changeSupport>
<paintImmediatelyClip id="189" class="java.awt.Rectangle">
<x id="190">0</x>
<y id="191">0</y>
<width id="192">0</width>
<height id="193">0</height>
</paintImmediatelyClip>
<ncomponents id="194">0</ncomponents>
<component id="195" class="java.awt.Component-array"/>
<focusCycleRoot id="196">false</focusCycleRoot>
<containerSerializedDataVersion id="197">1</containerSerializedDataVersion>
<x id="198">0</x>
<y id="199">0</y>
<width id="200">0</width>
<height id="201">0</height>
<font id="202" class="javax.swing.plaf.FontUIResource">
<fRequestedAttributes id="203" class="java.util.Hashtable">
<entry>
<java.awt.font.TextAttribute>
<name idref="120"/>
</java.awt.font.TextAttribute>
<float>2.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="121"/>
</java.awt.font.TextAttribute>
<java.awt.font.TransformAttribute/>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="122"/>
</java.awt.font.TextAttribute>
<float>0.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="123"/>
</java.awt.font.TextAttribute>
<float>12.0</float>
</entry>
<entry>
<java.awt.font.TextAttribute>
<name idref="124"/>
</java.awt.font.TextAttribute>
<string>Dialog</string>
</entry>
</fRequestedAttributes>
<name id="204">Dialog</name>
<style id="205">1</style>
<size id="206">12</size>
<pointSize id="207">12.0</pointSize>
<fontSerializedDataVersion id="208">1</fontSerializedDataVersion>
</font>
<locale idref="130"/>
<ignoreRepaint id="209">false</ignoreRepaint>
<visible id="210">true</visible>
<enabled id="211">true</enabled>
<valid id="212">false</valid>
<nameExplicitlySet id="213">false</nameExplicitlySet>
<focusable id="214">true</focusable>
<isFocusTraversableOverridden id="215">0</isFocusTraversableOverridden>
<focusTraversalKeysEnabled id="216">true</focusTraversalKeysEnabled>
<newEventsOnly id="217">true</newEventsOnly>
<eventMask id="218">4104</eventMask>
<changeSupport idref="187"/>
<isPacked id="219">false</isPacked>
<componentSerializedDataVersion id="220">4</componentSerializedDataVersion>
</defaultRenderer>
<_bounds id="221" class="java.awt.Rectangle">
<x id="222">0</x>
<y id="223">0</y>
<width id="224">0</width>
<height id="225">0</height>
</_bounds>
<listenerList id="226" class="javax.swing.event.EventListenerList"/>
<flags id="227">8</flags>
<verifyInputWhenFocusTarget id="228">true</verifyInputWhenFocusTarget>
<paintImmediatelyClip id="229" class="java.awt.Rectangle">
<x id="230">0</x>
<y id="231">0</y>
<width id="232">0</width>
<height id="233">0</height>
</paintImmediatelyClip>
<ncomponents id="234">1</ncomponents>
<component id="235" class="java.awt.Component-array">
<javax.swing.CellRendererPane>
<ncomponents id="236">0</ncomponents>
<component id="237" class="java.awt.Component-array"/>
<focusCycleRoot id="238">false</focusCycleRoot>
<containerSerializedDataVersion id="239">1</containerSerializedDataVersion>
<x id="240">0</x>
<y id="241">0</y>
<width id="242">0</width>
<height id="243">0</height>
<ignoreRepaint id="244">false</ignoreRepaint>
<visible id="245">false</visible>
<enabled id="246">true</enabled>
<valid id="247">false</valid>
<nameExplicitlySet id="248">false</nameExplicitlySet>
<focusable id="249">true</focusable>
<isFocusTraversableOverridden id="250">0</isFocusTraversableOverridden>
<focusTraversalKeysEnabled id="251">true</focusTraversalKeysEnabled>
<newEventsOnly id="252">false</newEventsOnly>
<eventMask id="253">4096</eventMask>
<isPacked id="254">false</isPacked>
<componentSerializedDataVersion id="255">4</componentSerializedDataVersion>
</javax.swing.CellRendererPane>
</component>
<focusCycleRoot id="256">false</focusCycleRoot>
<containerSerializedDataVersion id="257">1</containerSerializedDataVersion>
<x id="258">0</x>
<y id="259">0</y>
<width id="260">0</width>
<height id="261">0</height>
<foreground idref="56"/>
<background id="262" class="javax.swing.plaf.ColorUIResource">
<value id="263">-3355444</value>
<falpha id="264">0.0</falpha>
</background>
<font idref="118"/>
<locale idref="130"/>
<ignoreRepaint id="265">false</ignoreRepaint>
<visible id="266">true</visible>
<enabled id="267">true</enabled>
<valid id="268">false</valid>
<nameExplicitlySet id="269">false</nameExplicitlySet>
<focusable id="270">false</focusable>
<isFocusTraversableOverridden id="271">2</isFocusTraversableOverridden>
<focusTraversalKeysEnabled id="272">true</focusTraversalKeysEnabled>
<newEventsOnly id="273">true</newEventsOnly>
<eventMask id="274">4104</eventMask>
<isPacked id="275">false</isPacked>
<componentSerializedDataVersion id="276">4</componentSerializedDataVersion>
</tableHeader>
<rowHeight id="277">16</rowHeight>
<rowMargin id="278">1</rowMargin>
<gridColor idref="44"/>
<showHorizontalLines id="279">true</showHorizontalLines>
<showVerticalLines id="280">true</showVerticalLines>
<autoResizeMode id="281">2</autoResizeMode>
<autoCreateColumnsFromModel id="282">true</autoCreateColumnsFromModel>
<preferredViewportSize idref="51"/>
<rowSelectionAllowed id="283">true</rowSelectionAllowed>
<cellSelectionEnabled id="284">false</cellSelectionEnabled>
<selectionForeground idref="56"/>
<selectionBackground idref="59"/>
<dragEnabled id="285">false</dragEnabled>
<surrendersFocusOnKeystroke id="286">false</surrendersFocusOnKeystroke>
<columnSelectionAdjusting id="287">false</columnSelectionAdjusting>
<rowSelectionAdjusting id="288">false</rowSelectionAdjusting>
<_bounds idref="66"/>
<listenerList idref="71"/>
<autoscroller idref="72"/>
<flags id="289">328</flags>
<transfer idref="74"/>
<verifyInputWhenFocusTarget id="290">true</verifyInputWhenFocusTarget>
<ancestorInputMap idref="76"/>
<actionMap idref="78"/>
<changeSupport idref="80"/>
<paintImmediatelyClip idref="82"/>
<ncomponents id="291">1</ncomponents>
<component idref="88"/>
<focusCycleRoot id="292">false</focusCycleRoot>
<containerSerializedDataVersion id="293">1</containerSerializedDataVersion>
<x id="294">0</x>
<y id="295">0</y>
<width id="296">0</width>
<height id="297">0</height>
<foreground idref="56"/>
<background idref="115"/>
<font idref="118"/>
<locale idref="130"/>
<ignoreRepaint id="298">false</ignoreRepaint>
<visible id="299">true</visible>
<enabled id="300">true</enabled>
<valid id="301">false</valid>
<dropTarget idref="139"/>
<nameExplicitlySet id="302">false</nameExplicitlySet>
<focusable id="303">true</focusable>
<isFocusTraversableOverridden id="304">0</isFocusTraversableOverridden>
<focusTraversalKeys idref="147"/>
<focusTraversalKeysEnabled id="305">true</focusTraversalKeysEnabled>
<newEventsOnly id="306">true</newEventsOnly>
<eventMask id="307">4104</eventMask>
<changeSupport idref="80"/>
<isPacked id="308">false</isPacked>
<componentSerializedDataVersion id="309">4</componentSerializedDataVersion>
</javax.swing.JTable>