From 0ec8481c10cd8277d84c7c1a785483a0a739e5a0 Mon Sep 17 00:00:00 2001 From: abranson Date: Thu, 4 Aug 2011 00:42:34 +0200 Subject: More code cleanup: Refactored Entity Proxy Subscription to handle generics better Rewrote RemoteMap to use TreeMap instead of the internal array for order. It now sorts its keys by number if they parse, else as strings. Removed a no-longer-in-progress outcome form class --- .../gui/tabs/outcome/form/DimensionTableModel.java | 123 ++++++++++++--------- 1 file changed, 72 insertions(+), 51 deletions(-) (limited to 'source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java') diff --git a/source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java b/source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java index 1a606fb..45bdbc8 100644 --- a/source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java +++ b/source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java @@ -4,15 +4,29 @@ import java.util.Enumeration; import javax.swing.table.AbstractTableModel; -import org.exolab.castor.xml.schema.*; -import org.w3c.dom.*; +import org.exolab.castor.xml.schema.Annotated; +import org.exolab.castor.xml.schema.AttributeDecl; +import org.exolab.castor.xml.schema.ComplexType; +import org.exolab.castor.xml.schema.ContentModelGroup; +import org.exolab.castor.xml.schema.ElementDecl; +import org.exolab.castor.xml.schema.Group; +import org.exolab.castor.xml.schema.Order; +import org.exolab.castor.xml.schema.Particle; +import org.exolab.castor.xml.schema.SimpleType; +import org.exolab.castor.xml.schema.SimpleTypesFactory; +import org.exolab.castor.xml.schema.XMLType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; import com.c2kernel.gui.tabs.outcome.OutcomeException; import com.c2kernel.utils.Language; import com.c2kernel.utils.Logger; public class DimensionTableModel extends AbstractTableModel { - + ElementDecl model; ArrayList columnHeadings = new ArrayList(); ArrayList> columnClasses = new ArrayList>(); @@ -25,7 +39,7 @@ public class DimensionTableModel extends AbstractTableModel { public DimensionTableModel(ElementDecl model, boolean readOnly) throws StructuralException { XMLType modelContent = model.getType(); - + this.model = model; this.readOnly = readOnly; // use text node for simple types @@ -47,7 +61,7 @@ public class DimensionTableModel extends AbstractTableModel { addColumn(model.getName(), baseType, typeCode, new Boolean(model.getFixedValue() != null)); } // process attributes - for (Enumeration e = elementType.getAttributeDecls(); e.hasMoreElements();) { + for (Enumeration e = elementType.getAttributeDecls(); e.hasMoreElements();) { AttributeDecl thisAttr = (AttributeDecl)e.nextElement(); addColumn(thisAttr.getName(), thisAttr, thisAttr.getSimpleType().getTypeCode(), new Boolean(thisAttr.isFixed())); } @@ -63,30 +77,30 @@ public class DimensionTableModel extends AbstractTableModel { columnDecls.add(decl); columnClasses.add(OutcomeStructure.getJavaClass(typeCode)); colReadOnly.add(readOnly); - + // read help String helpText; if (decl instanceof SimpleType) helpText = OutcomeStructure.extractHelp(model); else helpText = OutcomeStructure.extractHelp(decl); - - if (helpText.length() == 0) + + if (helpText.length() == 0) helpText = ""+Language.translate("No help is available for this cell")+""; - + colHelp.add(helpText); } public void enumerateElements(ContentModelGroup group) throws StructuralException { - for (Enumeration childElements = group.enumerate(); childElements.hasMoreElements(); ) { + for (Enumeration childElements = group.enumerate(); childElements.hasMoreElements(); ) { Particle thisParticle = (Particle)childElements.nextElement(); String extraHeader = ""; if (thisParticle instanceof Group) { Group thisGroup = (Group)thisParticle; Order order = thisGroup.getOrder(); - if (order == Order.sequence || order == Order.all) + if (order == Order.sequence || order == Order.all) enumerateElements(thisGroup); else // we only support sequences in data structures such as these throw new StructuralException("Element "+thisGroup.getName()+". Expecting sequence or all. Got "+thisGroup.getOrder()); @@ -101,9 +115,9 @@ public class DimensionTableModel extends AbstractTableModel { if (elementType.getParticleCount() > 0 || thisElement.getMaxOccurs() > 1) throw new StructuralException("Too deep for a table"); - for (Enumeration attrs = elementType.getAttributeDecls(); attrs.hasMoreElements();) { + for (Enumeration attrs = elementType.getAttributeDecls(); attrs.hasMoreElements();) { AttributeDecl thisAttr = (AttributeDecl)attrs.nextElement(); - if (!thisAttr.isFixed()) + if (!thisAttr.isFixed()) throw new StructuralException("Non-fixed attributes of child elements not supported in tables."); else extraHeader=extraHeader+" ("+thisAttr.getName()+":"+(thisAttr.getFixedValue()!=null?thisAttr.getFixedValue():thisAttr.getDefaultValue())+")"; @@ -118,7 +132,7 @@ public class DimensionTableModel extends AbstractTableModel { else typeCode = ((SimpleType)thisElement.getType()).getTypeCode(); } - + //add to list addColumn(thisElement.getName()+extraHeader, thisElement, typeCode, new Boolean(thisElement.getFixedValue() != null)); } @@ -139,35 +153,35 @@ public class DimensionTableModel extends AbstractTableModel { if (childElement.hasChildNodes()) { Node thisNode = childElement.getFirstChild(); if (thisNode.getNodeType() == Node.TEXT_NODE) - newRow[i] = OutcomeStructure.getTypedValue(((Text)thisNode).getData(), (Class)columnClasses.get(i)); + newRow[i] = OutcomeStructure.getTypedValue(((Text)thisNode).getData(), columnClasses.get(i)); else throw new StructuralException("First child of Field " + thisElementDecl.getName() + " was not Text. (NodeType:"+thisNode.getNodeType()+")"); } else { // create text node - newRow[i] = this.setupDefaultElement(thisElementDecl, childElement, (Class)columnClasses.get(i)); + newRow[i] = this.setupDefaultElement(thisElementDecl, childElement, columnClasses.get(i)); } break; case 0: // element is missing - create it Element newElement = myElement.getOwnerDocument().createElement(thisElementDecl.getName()); myElement.appendChild(newElement); //TODO: not in the right place in sequence. should insert it - newRow[i] = setupDefaultElement(thisElementDecl, newElement, (Class)columnClasses.get(i)); - break; + newRow[i] = setupDefaultElement(thisElementDecl, newElement, columnClasses.get(i)); + break; default: throw new CardinalException("Element "+thisElementDecl.getName()+" appeared more than once."); } } else if (columnDecls.get(i) instanceof AttributeDecl) { //attribute AttributeDecl thisAttrDecl = (AttributeDecl)columnDecls.get(i); - newRow[i] = OutcomeStructure.getTypedValue(myElement.getAttribute(thisAttrDecl.getName()), (Class)columnClasses.get(i)); + newRow[i] = OutcomeStructure.getTypedValue(myElement.getAttribute(thisAttrDecl.getName()), columnClasses.get(i)); } - else { // first child node + else { // first child node Node thisNode = myElement.getFirstChild(); if (thisNode == null) { thisNode = myElement.getOwnerDocument().createTextNode(""); myElement.appendChild(thisNode); } if (thisNode.getNodeType() == Node.TEXT_NODE || thisNode.getNodeType() == Node.CDATA_SECTION_NODE) - newRow[i] = OutcomeStructure.getTypedValue(((Text)thisNode).getData(), (Class)columnClasses.get(i)); + newRow[i] = OutcomeStructure.getTypedValue(((Text)thisNode).getData(), columnClasses.get(i)); else throw new StructuralException("First child of Column " + myElement.getTagName() + " was not Text"); } @@ -176,31 +190,37 @@ public class DimensionTableModel extends AbstractTableModel { rows.add(index, newRow); fireTableRowsInserted(index, index); } - public Class getColumnClass(int columnIndex) { + @Override + public Class getColumnClass(int columnIndex) { return columnClasses.get(columnIndex); } - public String getColumnName(int columnIndex) { - return (String)columnHeadings.get(columnIndex); + @Override + public String getColumnName(int columnIndex) { + return columnHeadings.get(columnIndex); } - public int getRowCount() { + @Override + public int getRowCount() { return rows.size(); } - public int getColumnCount() { + @Override + public int getColumnCount() { return columnHeadings.size(); } - public boolean isCellEditable(int rowIndex, int columnIndex) { - boolean isReadOnly = readOnly || ((Boolean)colReadOnly.get(columnIndex)).booleanValue(); + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + boolean isReadOnly = readOnly || colReadOnly.get(columnIndex).booleanValue(); return !isReadOnly; } - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - Object[] thisRow = (Object[])rows.get(rowIndex); + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + Object[] thisRow = rows.get(rowIndex); thisRow[columnIndex]=aValue; - Element myElement = (Element)elements.get(rowIndex); + Element myElement = elements.get(rowIndex); // update node if (columnDecls.get(columnIndex) instanceof ElementDecl) { // sub element ElementDecl thisDecl = (ElementDecl)columnDecls.get(columnIndex); @@ -213,7 +233,7 @@ public class DimensionTableModel extends AbstractTableModel { AttributeDecl thisDecl = (AttributeDecl) columnDecls.get(columnIndex); myElement.setAttribute(thisDecl.getName(), aValue.toString()); } - else { // first child node + else { // first child node Text textNode = (Text)myElement.getFirstChild(); textNode.setData(aValue.toString()); } @@ -221,14 +241,14 @@ public class DimensionTableModel extends AbstractTableModel { } public Element removeRow(int rowIndex) { - Element elementToGo = (Element)elements.get(rowIndex); + Element elementToGo = elements.get(rowIndex); elements.remove(rowIndex); rows.remove(rowIndex); fireTableRowsDeleted(rowIndex,rowIndex); return elementToGo; } - - public Object setupDefaultElement(ElementDecl thisDecl, Element parent, Class type) { + + public Object setupDefaultElement(ElementDecl thisDecl, Element parent, Class type) { Object newValue; String defaultValue = thisDecl.getFixedValue(); if (defaultValue == null) @@ -237,13 +257,13 @@ public class DimensionTableModel extends AbstractTableModel { newValue = ""; else newValue = OutcomeStructure.getTypedValue(defaultValue, type); - + Text newNode = parent.getOwnerDocument().createTextNode(newValue.toString()); parent.appendChild(newNode); // fixed attributes try { ComplexType content = (ComplexType)thisDecl.getType(); - for (Enumeration attrs = content.getAttributeDecls(); attrs.hasMoreElements();) { + for (Enumeration attrs = content.getAttributeDecls(); attrs.hasMoreElements();) { AttributeDecl thisAttr = (AttributeDecl)attrs.nextElement(); parent.setAttribute(thisAttr.getName(), thisAttr.getFixedValue()!=null?thisAttr.getFixedValue():thisAttr.getDefaultValue()); } @@ -251,16 +271,17 @@ public class DimensionTableModel extends AbstractTableModel { return newValue; } - public Object getValueAt(int rowIndex, int columnIndex) { - Object[] thisRow = (Object[])rows.get(rowIndex); + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + Object[] thisRow = rows.get(rowIndex); if (!(getColumnClass(columnIndex).equals(thisRow[columnIndex].getClass()))) Logger.warning(thisRow[columnIndex]+" should be "+getColumnClass(columnIndex)+" is a "+thisRow[columnIndex].getClass().getName()); return thisRow[columnIndex]; } - + public String validateStructure() { // remove empty rows for (int j=0; j < rows.size(); j++) { - Object[] elems = (Object[])rows.get(j); + Object[] elems = rows.get(j); boolean empty = true; for (int i = 0; i < elems.length && empty; i++) empty &= OutcomeStructure.isEmpty(elems[i]); @@ -272,37 +293,37 @@ public class DimensionTableModel extends AbstractTableModel { } return null; } - + public Element initNew(Document parent, int index) { if (index == -1) index = elements.size(); Object[] newRow = new Object[columnHeadings.size()]; Element myElement = parent.createElement(model.getName()); for (int i=0; i