home *** CD-ROM | disk | FTP | other *** search
Wrap
Java Source | 1998-03-18 | 19.1 KB | 629 lines
package symantec.itools.db.beans.binding; import symantec.itools.db.beans.binding.databus.*; import java.util.Vector; import java.beans.PropertyVetoException; import java.beans.VetoableChangeSupport; import java.beans.VetoableChangeListener; import com.sun.java.swing.event.ListDataListener; import com.sun.java.swing.event.ListDataEvent; import com.sun.java.swing.event.TableModelListener; import com.sun.java.swing.event.TableModelEvent; import com.sun.java.swing.DefaultListSelectionModel; import com.sun.java.swing.event.DocumentListener; import com.sun.java.swing.event.DocumentEvent; import com.sun.java.swing.ButtonModel; import com.sun.java.swing.DefaultButtonModel; import com.sun.java.swing.ListSelectionModel; import com.sun.java.swing.event.ListSelectionListener; import com.sun.java.swing.text.PlainDocument; import com.sun.java.swing.text.Document; import com.sun.java.swing.text.BadLocationException; import com.sun.java.swing.text.SimpleAttributeSet; public class JFCBinderModel extends PlainDocument implements DataBusEventListener,DataBusMember,java.awt.event.ActionListener,DataItemChangedListener,com.sun.java.swing.ComboBoxModel,com.sun.java.swing.table.TableModel,DocumentListener,ListSelectionModel,ButtonModel,Document { public JFCBinderModel() { } protected DataBus dBus; protected DataItem input; protected DataItem lookupInput; protected VetoableChangeSupport vetos=new VetoableChangeSupport(this); protected Vector ListDataListeners =new Vector(); protected Vector TableModelListeners =new Vector(); protected Vector DocumentListeners=new Vector(); protected String dataBinding; protected String lookupBinding; protected String[] ColumnNames; protected int selected=-1; protected DefaultListSelectionModel DLSModel; protected DefaultButtonModel DBModel; protected String BooleanTrueString="true"; protected String BooleanFalseString="false"; protected boolean UseAString=false; public void handleDataBusEvent(DataBusEvent e){} public void requestDataItem(DataBusEvent e){} public void setDataBus(DataBus b)throws PropertyVetoException { vetos.fireVetoableChange("DataBus",dBus,b); dBus=b; dBus.addDataBusEventListener((DataBusEventListener)this); } /** *Returns the current DataBus *@return DataBus. the current DataBus */ public DataBus getDataBus() { return dBus; } //These methods constitute the design pattern for a property named "DataBus". This property is "pushed" // onto a new bus member when that new member is added to the bus. (See DataBus.joinDataBus() // above.) public void addVetoableChangeListener(VetoableChangeListener listener) { vetos.addVetoableChangeListener(listener); } public void removeVetoableChangeListener(VetoableChangeListener listener) { vetos.removeVetoableChangeListener(listener); } public void setDataBinding(String name) { dataBinding=name; if(dBus==null)DataBus.joinDataBus(this); input=findDI(name); input.addDataItemChangedListener(this); // this.addDocumentListener((DocumentListener)this); dataBinding= ((DataItemAddition)input).getName(); setUpDocument(); } public String getDataBinding() { return dataBinding; } public void setLookupBinding(String name) { if(DLSModel==null)DLSModel=new DefaultListSelectionModel() ; lookupBinding=name; if(dBus==null)DataBus.joinDataBus(this); lookupInput=findDI(name); lookupInput.addDataItemChangedListener(this); lookupBinding= ((DataItemAddition)lookupInput).getName(); } public String getLookupBinding() { return lookupBinding; } protected DataItem findDI(String binding) { if (java.beans.Beans.isDesignTime()) { return null; } DataItem DI=dBus.findDataItem(binding,this); if(DI!=null && DI instanceof DataItem){ return DI; } return null; } public void actionPerformed(java.awt.event.ActionEvent e) { } // LIST MODEL public void addListDataListener(ListDataListener LDL){ if(input!=null)setUpDocument(); ListDataListeners.addElement(LDL); } public void removeListDataListener(ListDataListener LDL){ ListDataListeners.removeElement(LDL); } public int getSize() { if(lookupInput instanceof DataInput)return 1; return ((MutableCollectionItem)lookupInput).dataItems.size(); } public Object getElementAt(int i) { DataItem CDI=(DataItem)((MutableCollectionItem)lookupInput).dataItems.elementAt(i); if(CDI instanceof DataInput) { return ((DataInput)CDI).getValueAsObject(); } else return null; } //COMBOBOX MODEL Object def= null; public Object getSelectedItem() { //System.out.println("getCalled"); if(selected==-1)return def; return getElementAt(selected); } public void setSelectedItem(Object o) { //System.out.println("SDetting shit"); def=o; selected=findSelectedItem(o); if(input!=null && selected!=-1) { notify=false; ((MutableImmediateAccess)input).setValue(new NewValue(o)); notify=true; } } protected int findSelectedItem(Object o) { if(o!=null) { for(int i=0;i<((MutableCollectionItem)lookupInput).dataItems.size();i++) { if(o.toString().equals(getElementAt(i).toString())) { DLSModel.setSelectionInterval(i,i); //System.out.println("returning" +i+" "+o); return i; } } } DLSModel.clearSelection(); return -1; } //LISTSELECTIONMODEL public void addListSelectionListener(ListSelectionListener lsl){ if(DLSModel==null)DLSModel=new DefaultListSelectionModel() ; if(input!=null)setUpDocument(); DLSModel.addListSelectionListener(lsl); } public void addSelectionInterval(int a, int b){ DLSModel.addSelectionInterval(a,b); } public void clearSelection(){ DLSModel.clearSelection(); } public int getAnchorSelectionIndex(){ return DLSModel.getAnchorSelectionIndex(); } public void setAnchorSelectionIndex(int a){ DLSModel.setAnchorSelectionIndex(a); } public int getLeadSelectionIndex(){ return DLSModel.getLeadSelectionIndex(); } public void setLeadSelectionIndex(int a){ DLSModel.setLeadSelectionIndex(a); } public int getMaxSelectionIndex(){ return DLSModel.getMaxSelectionIndex(); } public int getMinSelectionIndex(){ return DLSModel.getMinSelectionIndex(); } public boolean getValueIsAdjusting(){ return DLSModel.getValueIsAdjusting(); } public void insertIndexInterval(int a, int b, boolean c){ DLSModel.insertIndexInterval(a,b,c); } public boolean isSelectedIndex(int index){ return DLSModel.isSelectedIndex(index); } public boolean isSelectionEmpty(){ return DLSModel.isSelectionEmpty(); } public void removeIndexInterval(int a, int b){ DLSModel.removeIndexInterval(a,b); } public void removeListSelectionListener(ListSelectionListener lsl){ DLSModel.removeListSelectionListener(lsl); } public void removeSelectionInterval(int a, int b){ DLSModel.removeSelectionInterval(a,b); } public void setSelectionInterval(int a, int b){ if(input!=null) { notify=false; ((MutableImmediateAccess)input).setValue(new NewValue(getElementAt(a))); notify=true; } //setSelectedItem(getElementAt(a)); DLSModel.setSelectionInterval(a,a); } public void setValueIsAdjusting(boolean a){ DLSModel.setValueIsAdjusting(a); } public void setSelectionMode(int mode){ DLSModel.setSelectionMode(mode); } public int getSelectionMode(){ return DLSModel.getSelectionMode(); } //BUTTON MODEL public void addActionListener(java.awt.event.ActionListener al){ DBModel.addActionListener(al); } public void addChangeListener(com.sun.java.swing.event.ChangeListener cl){ if(DBModel==null)DBModel=new DefaultButtonModel() ; DBModel.addChangeListener(cl); } public void addItemListener(java.awt.event.ItemListener il){ DBModel.addItemListener(il); } public String getActionCommand(){ return DBModel.getActionCommand(); } /* public int getKeyAccelerator(){ return DBModel.getKeyAccelerator(); }*/ public boolean isArmed(){ return DBModel.isArmed(); } public boolean isEnabled(){ return DBModel.isEnabled(); } public boolean isPressed(){ return DBModel.isPressed(); } public boolean isRollover(){ return DBModel.isRollover(); } public boolean isSelected(){ return DBModel.isSelected(); } public void removeActionListener(java.awt.event.ActionListener al){ DBModel.removeActionListener(al); } public void removeChangeListener(com.sun.java.swing.event.ChangeListener cl){ DBModel.removeChangeListener(cl); } public void removeItemListener(java.awt.event.ItemListener il){ DBModel.removeItemListener(il); } public void setActionCommand(String a){ DBModel.setActionCommand(a); } public void setArmed(boolean a){ DBModel.setArmed(a); } public void setEnabled(boolean a){ DBModel.setEnabled(a); } public void setGroup(com.sun.java.swing.ButtonGroup a){ DBModel.setGroup(a); } /* public void setKeyAccelerator(int a){ DBModel.setKeyAccelerator(a); }*/ public void setPressed(boolean a){ DBModel.setPressed(a); if(a) setSelected(!DBModel.isSelected()); } public void setRollover(boolean a){ DBModel.setRollover(a); } public void setSelected(boolean a){ DBModel.setSelected(a); notify=false; if(UseAString) { if(a) ((MutableImmediateAccess)input).setValue(new NewValue(BooleanTrueString)); else if(!a) ((MutableImmediateAccess)input).setValue(new NewValue(BooleanFalseString)); } else if(!UseAString) { ((MutableImmediateAccess)input).setValue(new NewValue(new Boolean(a))); } notify=true; } public Object[] getSelectedObjects(){ return DBModel.getSelectedObjects(); } public void setMnemonic(int a){ DBModel.setMnemonic(a); } public int getMnemonic(){ return DBModel.getMnemonic(); } public void setBooleanTrueString(String s){ UseAString=true; BooleanTrueString=s; } public String getBooleanTrueString(){ return BooleanTrueString; } public String getBooleanFalseString(){ return BooleanFalseString; } public void setBooleanFalseString(String s){ UseAString=true; BooleanFalseString=s; } //TABLE MODEL public void addTableModelListener(TableModelListener TML){ //System.out.println("added"); TableModelListeners.addElement(TML); setUp(); } public void removeTableModelListener(TableModelListener TML){ TableModelListeners.removeElement(TML); } public int getColumnCount() { return symantec.itools.db.beans.binding.Name.getNumberOfCols(lookupBinding); } public String getColumnName(int i) { return ColumnNames[i]; } public int getRowCount() { return ((MutableCollectionItem)lookupInput).dataItems.size(); } public boolean isCellEditable(int i, int j) { return true; } public Class getColumnClass(int columnIndex) { try { return java.lang.Class.forName("java.lang.Object"); } catch(Exception e){System.out.println("error");} return null; } public Object getValueAt(int i, int j) { if(i<((MutableCollectionItem)lookupInput).dataItems.size()) { DataItem CDI=(DataItem)((MutableCollectionItem)lookupInput).dataItems.elementAt(i); if(CDI instanceof DataInput && j==0) { return ((DataInput)CDI).getValueAsObject(); } else if(CDI instanceof MutableCollectionAccess) { CDI=(DataItem)(((MutableCollectionItem)lookupInput).dataItems).elementAt(i); DataItem CCDI=(DataItem)((MutableCollectionItem)CDI).dataItems.elementAt(j); return ((ImmediateAccess)CCDI).getValueAsObject(); } } return null; } public void setValueAt(Object o,int i, int j) { if(i<((MutableCollectionItem)lookupInput).dataItems.size()) { DataItem CDI=(DataItem)((MutableCollectionItem)lookupInput).dataItems.elementAt(i); if(CDI instanceof DataInput && j==0) { ((MutableImmediateAccess)CDI).setValue(new NewValue(o)); } else if(CDI instanceof MutableCollectionAccess) { CDI=(DataItem)(((MutableCollectionItem)lookupInput).dataItems).elementAt(i); DataItem CCDI=(DataItem)((MutableCollectionItem)CDI).dataItems.elementAt(j); ((MutableImmediateAccess)CCDI).setValue(new NewValue(o)); } } } public Object getColumnIdentifier(int i) { return ColumnNames[i]; } public int getColumnIndex(Object o) { for(int i=0;i<ColumnNames.length;i++) { if(o.equals(ColumnNames[i])){ return i; } } return 0; } public void setUp() { int cols=getColumnCount(); ColumnNames=new String[cols]; String Fields=symantec.itools.db.beans.binding.Name.getFieldName(lookupBinding)+","; for(int i=0;i<cols;i++) { ColumnNames[i]=Fields.substring(0,Fields.indexOf(',')); Fields=Fields.substring(Fields.indexOf(',')+1,Fields.length()); } } //DOCUMENT protected boolean notify=true; protected boolean documentSet=false; public String getText(int a,int b)throws BadLocationException { if(!documentSet) { setUpDocument(); this.addDocumentListener(this); documentSet=true; } return super.getText(a,b); } protected void setUpDocument() { if(notify) { Object value=((ImmediateAccess)input).getValueAsObject(); if(value instanceof Boolean) { DBModel.setSelected(((Boolean)value).booleanValue()); } else { if(DBModel!=null) { UseAString=true; DBModel.setSelected(value.equals(BooleanTrueString)); } try { notify=false; remove(0,getLength()); insertString(0,value.toString(),new SimpleAttributeSet()); if(ListDataListeners.size()!=0) { selected=findSelectedItem(value); } notify=true; } catch(BadLocationException e){} } } } public void insertUpdate(DocumentEvent e) { if(notify)notifyInput(); } public void removeUpdate(DocumentEvent e) { if(notify)notifyInput(); } public void changedUpdate(DocumentEvent e){} protected void notifyInput() { try{ notify=false; ((MutableImmediateAccess)input).setValue(new NewValue(getText(0,getLength()))); notify=true; } catch(BadLocationException ex){} } public void addDocumentListener(DocumentListener dl) { DocumentListeners.addElement(dl); super.addDocumentListener(dl); } public void removeDocumentListener(DocumentListener dl) { DocumentListeners.removeElement(dl); super.removeDocumentListener(dl); } //EVENT HANDELING FOR DATAITEMCHANGED public void notifyDataItemChanged(DataItemChangedEvent event) { Vector l; if(event.getSource()==input) { if(event.getChangeType()==event.DATA_VALUE_CHANGE) { setUpDocument(); } if(lookupInput!=null) { if(ListDataListeners.size()!=0) { try { ListDataEvent lde=new ListDataEvent(this,ListDataEvent.CONTENTS_CHANGED,0,0); synchronized(this) { l=(Vector)ListDataListeners.clone(); } for(int i=0;i<l.size();i++) { ((ListDataListener)l.elementAt(i)). contentsChanged(lde); } } catch(Exception e){} } } } else { if(ListDataListeners.size()!=0) { try { ListDataEvent lde=new ListDataEvent(this,ListDataEvent.CONTENTS_CHANGED,0,0); synchronized(this) { l=(Vector)ListDataListeners.clone(); } for(int i=0;i<l.size();i++) { ((ListDataListener)l.elementAt(i)). contentsChanged(lde); } } catch(Exception e){} } if(TableModelListeners.size()!=0) { try { TableModelEvent tme=new TableModelEvent(this);//,1,getRowCount() ); synchronized(this) { l=(Vector)TableModelListeners.clone(); } for(int i=0;i<l.size();i++) { ((TableModelListener)l.elementAt(i)).tableChanged(tme); } } catch(Exception e){} } if(DocumentListeners.size()!=0) { try { DefaultDocumentEvent tme=new DefaultDocumentEvent(1, getLength(),DocumentEvent. EventType.CHANGE); synchronized(this) { l=(Vector)DocumentListeners.clone(); } for(int i=0;i<l.size();i++) { ((DocumentListener)l.elementAt(i)).changedUpdate(tme); } } catch(Exception e){ System.out.println("doc error");} } } } }