summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java
diff options
context:
space:
mode:
authorabranson <andrew.branson@cern.ch>2011-08-04 00:42:34 +0200
committerabranson <andrew.branson@cern.ch>2011-08-04 00:42:34 +0200
commit0ec8481c10cd8277d84c7c1a785483a0a739e5a0 (patch)
tree5f6e5d9ae75193e67e6f3b3dfa488960c5cde1d5 /source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java
parent036cbdba66f804743c4c838ed598d6972c4b3e17 (diff)
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
Diffstat (limited to 'source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java')
-rw-r--r--source/com/c2kernel/gui/tabs/outcome/form/DimensionTableModel.java123
1 files changed, 72 insertions, 51 deletions
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<String> columnHeadings = new ArrayList<String>();
ArrayList<Class<?>> columnClasses = new ArrayList<Class<?>>();
@@ -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 = "<i>"+Language.translate("No help is available for this cell")+"</i>";
-
+
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<columnDecls.size(); i++) {
- if (columnDecls.get(i) instanceof ElementDecl) { // sub element
+ if (columnDecls.get(i) instanceof ElementDecl) { // sub element
ElementDecl childElementDecl = (ElementDecl)columnDecls.get(i);
Element childElement = parent.createElement(childElementDecl.getName());
- Object newValue = setupDefaultElement(childElementDecl, childElement, (Class)columnClasses.get(i));
+ Object newValue = setupDefaultElement(childElementDecl, childElement, columnClasses.get(i));
myElement.appendChild(childElement);
newRow[i] = newValue;
}
else if (columnDecls.get(i) instanceof AttributeDecl) { //attribute
AttributeDecl thisAttrDecl = (AttributeDecl)columnDecls.get(i);
String newValue = thisAttrDecl.getFixedValue()!=null?thisAttrDecl.getFixedValue():thisAttrDecl.getDefaultValue();
- newRow[i] = OutcomeStructure.getTypedValue(newValue, (Class)columnClasses.get(i));
+ newRow[i] = OutcomeStructure.getTypedValue(newValue, columnClasses.get(i));
myElement.setAttribute(thisAttrDecl.getName(), newRow[i].toString());
}
- else { // first child node
- newRow[i] = setupDefaultElement(model, myElement, (Class)columnClasses.get(i));
+ else { // first child node
+ newRow[i] = setupDefaultElement(model, myElement, columnClasses.get(i));
}
}
elements.add(index,myElement);
rows.add(index, newRow);
fireTableRowsInserted(index,index);
return myElement;
- }
-
+ }
+
public String getHelp(int i) {
- return (String)colHelp.get(i);
+ return colHelp.get(i);
}
-
+
}