package com.dragome.render.serverside.swing; import java.awt.Component; import java.awt.Container; import java.util.List; import java.util.Map; import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import com.dragome.render.html.renderers.Mergeable; import com.dragome.templates.TemplateImpl; import com.dragome.templates.interfaces.Content; import com.dragome.templates.interfaces.Template; import com.dragome.templates.interfaces.TemplateListener; public class SwingTemplateListener implements TemplateListener { private boolean enabled= true; private boolean isInvokingEvents() { return enabled; } public void setEnabled(boolean enabled) { this.enabled= enabled; } public void contentChanged(Content<?> oldTemplateContent, Content<?> newTemplateContent) { if (isInvokingEvents()) { if (oldTemplateContent != null) { Component value= (Component) oldTemplateContent.getValue(); Mergeable<Component> value2= (Mergeable<Component>) newTemplateContent.getValue(); value2.mergeWith(value); } } } public void insertAfter(Template newChild, Template referenceChild, Map<String, Template> children, List<Template> childrenList, Template template) { } public void childRemoved(final Template child) { if (isInvokingEvents()) { SwingUtilities.invokeLater(new Runnable() { public void run() { Container component= (Container) child.getContent().getValue(); Container parent= component.getParent(); parent.remove(component); parent.getParent().validate(); } }); } } public void childAdded(Template parent, Template child) { if (isInvokingEvents()) { Container component= (Container) parent.getContent().getValue(); Component childComponent= (Component) child.getContent().getValue(); component.add(childComponent); } } public void insertBefore(Template newChild, Template referenceChild, Map<String, Template> children, List<Template> childrenList, Template template) { if (isInvokingEvents()) { Component referenceElement= (Component) referenceChild.getContent().getValue(); Object componentConstraints= ((MigLayout) referenceElement.getParent().getLayout()).getComponentConstraints(referenceElement); int index= childrenList.indexOf(referenceChild) - 1; if (index < 0) index= 0; childrenList.add(index, newChild); children.put(newChild.getName(), newChild); Component newElement= (Component) newChild.getContent().getValue(); referenceElement.getParent().add(newElement, componentConstraints); newChild.setParent(template); } } public void childReplaced(TemplateImpl parent, Template previousChild, Template newChild) { if (previousChild != newChild) { System.out.println("child replaced"); } } }