1 56 package org.objectstyle.cayenne.dataview; 57 58 import javax.swing.AbstractListModel ; 59 60 import org.objectstyle.cayenne.DataObject; 61 62 67 public class DOListModel extends AbstractListModel implements DataObjectChangeListener, 68 FieldValueChangeListener { 69 70 protected ObjEntityViewField viewField; 71 protected DataObjectList dataObjects = new DataObjectList(1); 72 73 public DOListModel() { 74 } 75 76 public void setViewField(ObjEntityViewField field) { 77 if (this.viewField != null) { 78 this.viewField.getOwner().getOwner().removeFieldValueChangeListener(this); 79 } 80 this.viewField = field; 81 viewField.getOwner().getOwner().addFieldValueChangeListener(this); 82 fireContentsChanged(this, 0, getSize()); 83 } 84 85 public void setDataObjects(DataObjectList dataObjects) { 86 this.dataObjects.removeDataObjectChangeListener(this); 87 this.dataObjects = dataObjects; 88 this.dataObjects.addDataObjectChangeListener(this); 89 fireContentsChanged(this, 0, getSize()); 90 } 91 92 public int getSize() { 93 return dataObjects.size(); 94 } 95 96 public DataObject getDataObject(int index) { 97 return (DataObject) dataObjects.get(index); 98 } 99 100 public Object getElementAt(int index) { 101 if (viewField == null) 102 return getDataObject(index); 103 return viewField.getValue(getDataObject(index)); 104 } 105 106 public void dataChanged(DataObjectChangeEvent event) { 107 if (event.isMultiObjectChange()) { 108 fireContentsChanged(this, 0, getSize()); 109 return; 110 } 111 int affectedRow = event.getAffectedDataObjectIndex(); 112 switch (event.getId()) { 113 case DataObjectChangeEvent.DATAOBJECT_ADDED: 114 fireIntervalAdded(this, affectedRow, affectedRow); 115 break; 116 case DataObjectChangeEvent.DATAOBJECT_REMOVED: 117 fireIntervalRemoved(this, affectedRow, affectedRow); 118 break; 119 case DataObjectChangeEvent.DATAOBJECT_CHANGED: 120 fireContentsChanged(this, affectedRow, affectedRow); 121 break; 122 default: 123 fireContentsChanged(this, 0, getSize()); 124 } 125 } 126 127 public ObjEntityViewField getViewField() { 128 return viewField; 129 } 130 131 public DataObjectList getDataObjects() { 132 return dataObjects; 133 } 134 135 public void fieldValueChanged(FieldValueChangeEvent event) { 136 if (viewField != null && viewField.isSameObjAttribute(event.getField())) { 137 int index = dataObjects.indexOf(event.getModifiedObject()); 138 if (index >= 0) 139 fireContentsChanged(this, index, index); 140 } 141 } 142 } | Popular Tags |