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.XmlBooleanToggle; 10 import org.terracotta.dso.editors.xmlbeans.XmlIntegerSpinner; 11 import org.terracotta.dso.editors.xmlbeans.XmlObjectStructureChangeEvent; 12 import org.terracotta.dso.editors.xmlbeans.XmlObjectStructureListener; 13 import com.terracottatech.config.DsoServerData; 14 import com.terracottatech.config.GarbageCollection; 15 16 import java.awt.event.ActionEvent ; 17 import java.awt.event.ActionListener ; 18 import java.awt.event.MouseAdapter ; 19 import java.awt.event.MouseEvent ; 20 21 import javax.swing.event.ChangeEvent ; 22 import javax.swing.event.ChangeListener ; 23 24 public class GarbageCollectionPanel extends ConfigurationEditorPanel 25 implements ActionListener , 26 ChangeListener , 27 XmlObjectStructureListener 28 { 29 private DsoServerData m_dsoServerData; 30 private GarbageCollection m_garbageCollection; 31 private XmlBooleanToggle m_isGcEnabled; 32 private XmlBooleanToggle m_isVerboseGc; 33 private XmlIntegerSpinner m_gcInterval; 34 private Label m_gcIntervalLabel; 35 36 public GarbageCollectionPanel() { 37 super(); 38 } 39 40 public void load(ContainerResource containerRes) { 41 super.load(containerRes); 42 43 44 m_isGcEnabled = (XmlBooleanToggle)findComponent("IsGCEnabled"); 45 m_isGcEnabled.init(GarbageCollection.class, "enabled"); 46 47 m_isVerboseGc = (XmlBooleanToggle)findComponent("IsVerboseGC"); 48 m_isVerboseGc.init(GarbageCollection.class, "verbose"); 49 50 m_gcInterval = (XmlIntegerSpinner)findComponent("GCInterval"); 51 m_gcInterval.init(GarbageCollection.class, "interval"); 52 53 m_gcIntervalLabel = (Label)findComponent("GCIntervalLabel"); 54 m_gcIntervalLabel.addMouseListener(new MouseAdapter () { 55 public void mouseClicked(MouseEvent me) { 56 if(me.getClickCount() == 1) { 57 m_gcInterval.unset(); 58 } 59 } 60 }); 61 } 62 63 public void ensureXmlObject() { 64 super.ensureXmlObject(); 65 66 if(m_garbageCollection == null) { 67 removeListeners(); 68 m_garbageCollection = m_dsoServerData.addNewGarbageCollection(); 69 updateChildren(); 70 addListeners(); 71 } 72 } 73 74 public boolean hasAnySet() { 75 return m_garbageCollection != null && 76 (m_garbageCollection.isSetEnabled() || 77 m_garbageCollection.isSetVerbose() || 78 m_garbageCollection.isSetInterval()); 79 } 80 81 public void actionPerformed(ActionEvent ae) { 82 setDirty(); 83 } 84 85 public void stateChanged(ChangeEvent e) { 86 setDirty(); 87 } 88 89 public void structureChanged(XmlObjectStructureChangeEvent e) { 90 syncModel(); 91 } 92 93 private void syncModel() { 94 if(!hasAnySet() && m_dsoServerData.getGarbageCollection() != null) { 95 m_dsoServerData.unsetGarbageCollection(); 96 m_garbageCollection = null; 97 fireXmlObjectStructureChanged(); 98 updateChildren(); 99 } 100 else { 101 setDirty(); 102 } 103 } 104 105 private void fireXmlObjectStructureChanged() { 106 fireXmlObjectStructureChanged(m_dsoServerData); 107 } 108 109 private void addListeners() { 110 m_isGcEnabled.addActionListener(this); 111 m_isGcEnabled.addXmlObjectStructureListener(this); 112 113 m_isVerboseGc.addActionListener(this); 114 m_isVerboseGc.addXmlObjectStructureListener(this); 115 116 m_gcInterval.addChangeListener(this); 117 m_gcInterval.addXmlObjectStructureListener(this); 118 } 119 120 private void removeListeners() { 121 m_isGcEnabled.removeActionListener(this); 122 m_isGcEnabled.removeXmlObjectStructureListener(this); 123 124 m_isVerboseGc.removeActionListener(this); 125 m_isVerboseGc.removeXmlObjectStructureListener(this); 126 127 m_gcInterval.removeChangeListener(this); 128 m_gcInterval.removeXmlObjectStructureListener(this); 129 } 130 131 132 private void updateChildren() { 133 m_isGcEnabled.setup(m_garbageCollection); 134 m_isVerboseGc.setup(m_garbageCollection); 135 m_gcInterval.setup(m_garbageCollection); 136 } 137 138 public void setup(DsoServerData dsoServerData) { 139 setEnabled(true); 140 removeListeners(); 141 142 m_dsoServerData = dsoServerData; 143 m_garbageCollection = m_dsoServerData != null ? 144 m_dsoServerData.getGarbageCollection() : 145 null; 146 147 updateChildren(); 148 addListeners(); 149 } 150 151 public void tearDown() { 152 removeListeners(); 153 154 m_dsoServerData = null; 155 m_garbageCollection = null; 156 157 m_isGcEnabled.tearDown(); 158 m_isVerboseGc.tearDown(); 159 m_gcInterval.tearDown(); 160 161 setEnabled(false); 162 } 163 } 164 | Popular Tags |