/**
*
*/
package org.javabuilders.swing.handler.type.layout;
import java.awt.Component;
import java.awt.Container;
import java.util.Map;
import javax.swing.JLabel;
import net.miginfocom.swing.MigLayout;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.BuilderConfig;
import org.javabuilders.Node;
import org.javabuilders.layout.mig.AbstractMigLayoutHandler;
import org.javabuilders.swing.SwingJavaBuilderUtils;
/**
* Mig Layout handler
* @author Jacek Furmankiewcz
*
*/
public class MigLayoutHandler extends AbstractMigLayoutHandler {
private final static MigLayoutHandler singleton = new MigLayoutHandler();
/**
* @return Singleton
*/
public static MigLayoutHandler getInstance() {
return singleton;
}
/**
* Constructor
*/
private MigLayoutHandler() {
super(JLabel.class,"text");
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandler#createNewInstance(org.javabuilders.BuilderConfig, org.javabuilders.BuildResult, org.javabuilders.Node, java.lang.String, java.util.Map)
*/
public Node createNewInstance(BuilderConfig config, BuildProcess result,
Node parent, String key, Map<String, Object> typeDefinition) throws BuildException {
MigLayout instance = new MigLayout();
return useExistingInstance(config, result, parent, key, typeDefinition, instance);
}
/* (non-Javadoc)
* @see org.javabuilders.IKeyValueConsumer#getApplicableClass()
*/
public Class<?> getApplicableClass() {
return MigLayout.class;
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#applyControlConstraints(org.javabuilders.BuildResult, org.javabuilders.Node, org.javabuilders.Node, java.util.Map)
*/
@Override
protected void applyControlConstraints(BuildProcess process, Node node, Node components, Map<String, String> layoutConstraints) throws BuildException {
Container parentContainer = (Container)node.getParent().getParent().getMainObject();
for(String componentName : layoutConstraints.keySet()) {
String componentConstraint = layoutConstraints.get(componentName);
Component component = SwingJavaBuilderUtils.getComponent(components,String.valueOf(componentName));
if (component == null) {
throw new BuildException("Unable to find component for name: {0}",componentName);
}
if (logger.isDebugEnabled()) {
logger.debug("MigLayout constraints for " + componentName + " : " + componentConstraint);
}
parentContainer.add(component,componentConstraint);
}
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#getComponent(org.javabuilders.BuildResult, org.javabuilders.Node, java.lang.String)
*/
@Override
protected Object getComponent(BuildProcess result, Node components,
String name) throws BuildException {
Component component = SwingJavaBuilderUtils.getComponent(components,String.valueOf(name));
return component;
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setLayout(org.javabuilders.BuildResult, org.javabuilders.Node, java.lang.Object)
*/
@Override
protected void setLayout(BuildProcess result, Node node, Object migLayout) {
Node parent = node.getParent().getParent();
Container parentContainer = (Container)parent.getMainObject();
MigLayout layout = (MigLayout)node.getMainObject();
parentContainer.setLayout(layout);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setLayoutConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setLayoutConstraints(Object layout, String constraints) {
((MigLayout)layout).setLayoutConstraints(constraints);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setRowConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setRowConstraints(Object layout, String constraints) {
((MigLayout)layout).setRowConstraints(constraints);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setColumnConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setColumnConstraints(Object layout, String constraints) {
((MigLayout)layout).setColumnConstraints(constraints);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setControlName(java.lang.Object, java.lang.String)
*/
@Override
protected void setControlName(Object control, String name) {
((Component)control).setName(name);
}
}