1 4 package org.terracotta.dso.editors; 5 6 import org.dijon.ContainerResource; 7 import org.dijon.Label; 8 9 import org.terracotta.dso.editors.xmlbeans.XmlObjectStructureChangeEvent; 10 import org.terracotta.dso.editors.xmlbeans.XmlObjectStructureListener; 11 import org.terracotta.dso.editors.xmlbeans.XmlStringEnumCombo; 12 import com.terracottatech.config.DsoServerData; 13 import com.terracottatech.config.Persistence; 14 15 import java.awt.event.ActionEvent ; 16 import java.awt.event.ActionListener ; 17 import java.awt.event.MouseAdapter ; 18 import java.awt.event.MouseEvent ; 19 20 import javax.swing.event.ChangeEvent ; 21 import javax.swing.event.ChangeListener ; 22 23 public class PersistencePanel extends ConfigurationEditorPanel 24 implements ActionListener , 25 ChangeListener , 26 XmlObjectStructureListener 27 { 28 private DsoServerData m_dsoServerData; 29 private Persistence m_persistence; 30 private XmlStringEnumCombo m_persistenceCombo; 31 private Label m_persistenceComboLabel; 32 33 public PersistencePanel() { 34 super(); 35 } 36 37 public void load(ContainerResource containerRes) { 38 super.load(containerRes); 39 40 m_persistenceCombo = (XmlStringEnumCombo)findComponent("PersistenceCombo"); 41 m_persistenceCombo.init(Persistence.class, "mode"); 42 43 m_persistenceComboLabel = (Label)findComponent("PersistenceComboLabel"); 44 m_persistenceComboLabel.addMouseListener(new MouseAdapter () { 45 public void mouseClicked(MouseEvent me) { 46 if(me.getClickCount() == 1) { 47 m_persistenceCombo.unset(); 48 } 49 } 50 }); 51 } 52 53 public void ensureXmlObject() { 54 super.ensureXmlObject(); 55 56 if(m_persistence == null) { 57 removeListeners(); 58 m_persistence = m_dsoServerData.addNewPersistence(); 59 updateChildren(); 60 addListeners(); 61 } 62 } 63 64 public boolean hasAnySet() { 65 return m_persistence != null && 66 m_persistence.isSetMode(); 67 } 68 69 public void actionPerformed(ActionEvent ae) { 70 setDirty(); 71 } 72 73 public void stateChanged(ChangeEvent e) { 74 setDirty(); 75 } 76 77 public void structureChanged(XmlObjectStructureChangeEvent e) { 78 syncModel(); 79 } 80 81 private void syncModel() { 82 if(!hasAnySet() && m_dsoServerData.getPersistence() != null) { 83 m_dsoServerData.unsetPersistence(); 84 m_persistence = null; 85 fireXmlObjectStructureChanged(); 86 updateChildren(); 87 } 88 else { 89 setDirty(); 90 } 91 } 92 93 private void fireXmlObjectStructureChanged() { 94 fireXmlObjectStructureChanged(m_dsoServerData); 95 } 96 97 private void addListeners() { 98 m_persistenceCombo.addActionListener(this); 99 m_persistenceCombo.addXmlObjectStructureListener(this); 100 101 } 102 103 private void removeListeners() { 104 m_persistenceCombo.removeActionListener(this); 105 m_persistenceCombo.removeXmlObjectStructureListener(this); 106 107 } 108 109 private void updateChildren() { 110 m_persistenceCombo.setup(m_persistence); 111 } 112 113 public void setup(DsoServerData dsoServerData) { 114 setEnabled(true); 115 removeListeners(); 116 117 m_dsoServerData = dsoServerData; 118 m_persistence = m_dsoServerData != null ? 119 m_dsoServerData.getPersistence() : null; 120 121 updateChildren(); 122 addListeners(); 123 } 124 125 public void tearDown() { 126 removeListeners(); 127 128 m_dsoServerData = null; 129 m_persistence = null; 130 131 m_persistenceCombo.tearDown(); 132 133 setEnabled(false); 134 } 135 } 136 | Popular Tags |