/**
*
*/
package org.javabuilders.swing.handler.type;
import java.util.List;
import java.util.Map;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Builder;
import org.javabuilders.BuilderConfig;
import org.javabuilders.Node;
import org.javabuilders.handler.ITypeHandlerFinishProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Handles creation button groups
* @author Jacek Furmankiewicz
*/
public class ButtonGroupTypeHandler implements ITypeHandlerFinishProcessor {
private final static ButtonGroupTypeHandler singleton = new ButtonGroupTypeHandler();
private final static Logger logger = LoggerFactory.getLogger(ButtonGroupTypeHandler.class);
/**
* @return Singleton
*/
public static ButtonGroupTypeHandler getInstance() {return singleton;}
/**
* Constructor
*/
private ButtonGroupTypeHandler() {}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandlerPostProcessor#finish(org.javabuilders.BuilderConfig, org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.util.Map)
*/
@SuppressWarnings("unchecked")
public void finish(BuilderConfig config, BuildProcess process,
Node current, String key, Map<String, Object> typeDefinition)
throws BuildException {
try {
ButtonGroup group = (ButtonGroup)current.getMainObject();
//add all the buttons in the list to the button group
Object content = current.getProperty(Builder.CONTENT);
if (content instanceof List) {
List<String> buttons = (List<String>) content;
for(String buttonName : buttons) {
Object button = process.getByName(buttonName);
if (button != null) {
if (button instanceof AbstractButton) {
AbstractButton btn = (AbstractButton) button;
group.add(btn);
} else {
throw new BuildException("ButtonGroup: ''{0}'' is not an instance of AbstractButton",buttonName);
}
} else {
throw new BuildException("ButtonGroup: ''{0}'' is not a valid named object",buttonName);
}
}
} else {
throw new BuildException("ButtonGroup:content should be a list instead of: {0}",content);
}
} catch (BuildException e) {
logger.error(e.getMessage(),e);
throw e;
}
}
}