Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull for AbsoluteLayout management, #5, #4 #6

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion core/src/main/java/org/javabuilders/Builder.java
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,7 @@ private static void handleProperty(BuilderConfig config, BuildProcess process, N
if (asValueHandler != null) {

String sValue = parent.getStringProperty(currentKey);
if (sValue.matches(asValueHandler.getRegex())) {
if (sValue != null && sValue.matches(asValueHandler.getRegex())) {
//replace the value from the file with the corresponding object instance
parent.getProperties().put(currentKey, asValueHandler.getValue(process, parent, currentKey,
parent.getProperty(currentKey)));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package org.javabuilders.swing;

import static org.javabuilders.swing.SwingJavaBuilder.*;
import static org.javabuilders.swing.SwingJavaBuilder.ACCELERATOR;
import static org.javabuilders.swing.SwingJavaBuilder.LAYOUT_DATA;
import static org.javabuilders.swing.SwingJavaBuilder.TEXT;
import static org.javabuilders.swing.SwingJavaBuilder.TITLE;
import static org.javabuilders.swing.SwingJavaBuilder.TOOL_TIP_TEXT;

import java.applet.Applet;
import java.awt.Button;
Expand All @@ -20,6 +24,8 @@
import java.awt.Label;
import java.awt.LayoutManager;
import java.awt.Panel;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.ScrollPane;
import java.awt.Scrollbar;
import java.awt.TextArea;
Expand Down Expand Up @@ -92,8 +98,6 @@
import javax.swing.table.TableModel;
import javax.swing.text.JTextComponent;

import net.miginfocom.swing.MigLayout;

import org.javabuilders.BuildResult;
import org.javabuilders.Builder;
import org.javabuilders.BuilderConfig;
Expand Down Expand Up @@ -148,8 +152,12 @@
import org.javabuilders.swing.handler.type.JSpiltPaneTypeHandler;
import org.javabuilders.swing.handler.type.JTabbedPaneTypeHandler;
import org.javabuilders.swing.handler.type.JTableFinishProcessor;
import org.javabuilders.swing.handler.type.PointAsValueHandler;
import org.javabuilders.swing.handler.type.RectangleAsValueHandler;
import org.javabuilders.swing.handler.type.SwingActionHandler;
import org.javabuilders.swing.handler.type.TableColumnTypeHandler;
import org.javabuilders.swing.handler.type.layout.AbsoluteLayout;
import org.javabuilders.swing.handler.type.layout.AbsoluteLayoutTypeHandler;
import org.javabuilders.swing.handler.type.layout.CardLayoutTypeHandler;
import org.javabuilders.swing.handler.type.layout.FlowLayoutTypeHandler;
import org.javabuilders.swing.handler.type.layout.MigLayoutHandler;
Expand All @@ -158,6 +166,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.miginfocom.swing.MigLayout;

public class SwingJavaBuilderConfig extends BuilderConfig implements IStringLiteralControlConfig,
IBindingListenerProvider<Binding<? extends Object,? extends Object,? extends Object,? extends Object>> {

Expand Down Expand Up @@ -259,6 +269,7 @@ public SwingJavaBuilderConfig() {

//define aliases for Swing layout managers
addType(MigLayout.class,CardLayout.class,FlowLayout.class);
addType(AbsoluteLayout.class);
addType("Action",SwingAction.class);
addType(Focus.class);

Expand Down Expand Up @@ -288,6 +299,10 @@ public SwingJavaBuilderConfig() {
.children(Action.class,0,Integer.MAX_VALUE);
forType(Dimension.class)
.valueHandler(DimensionAsValueHandler.getInstance());
forType(Point.class)
.valueHandler(PointAsValueHandler.getInstance());
forType(Rectangle.class)
.valueHandler(RectangleAsValueHandler.getInstance());
forType(Font.class)
.valueHandler(FontAsValueHandler.getInstance());
forType(Frame.class).localize(TITLE)
Expand Down Expand Up @@ -426,6 +441,9 @@ public SwingJavaBuilderConfig() {
forType(FlowLayout.class)
.ignore(Builder.CONTENT,Builder.NAME)
.finishProcessor(FlowLayoutTypeHandler.getInstance());
forType(AbsoluteLayout.class)
.ignore(Builder.CONTENT, Builder.NAME)
.finishProcessor(AbsoluteLayoutTypeHandler.getInstance());

forType(Action.class)
.valueHandler(ActionAsValueHandler.getInstance());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/**
*
*/
package org.javabuilders.swing.handler.type;

import java.awt.Point;

import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Node;
import org.javabuilders.handler.ITypeAsValueHandler;

/**
* Handles creating Point objects
*
* @author Luca Domenichini
*/
public final class PointAsValueHandler implements ITypeAsValueHandler<Point>
{

/**
* POINT_VALUE_REGEX
*/
private final static String POINT_VALUE_REGEX = "^[0-9]+;{1}[0-9]+$";

/**
* singleton
*/
private final static PointAsValueHandler SINGLETON = new PointAsValueHandler();

/**
* @return Singleton
*/
public static PointAsValueHandler getInstance()
{
return SINGLETON;
}

public String getInputValueSample()
{
return "100;50";
}

/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getValue(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.lang.Object)
*/
public Point getValue(BuildProcess process, Node node, String key, Object inputValue) throws BuildException
{
final String pointValue = (String) inputValue;
if (pointValue.matches(POINT_VALUE_REGEX))
{
final String[] xy = pointValue.split(";");
return new Point(Integer.valueOf(xy[0]), Integer.valueOf(xy[1]));
}
//else
throw new BuildException("\"{0}\" is not a valid point", pointValue);
}

/**
* (non-Javadoc)
*
* @see org.javabuilders.handler.ITypeAsValueHandler#getRegex()
*/
public String getRegex()
{
return POINT_VALUE_REGEX;
}

/**
* (non-Javadoc)
*
* @see org.javabuilders.IApplicable#getApplicableClass()
*/
public Class<?> getApplicableClass()
{
return Point.class;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/**
*
*/
package org.javabuilders.swing.handler.type;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;

import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Node;
import org.javabuilders.handler.ITypeAsValueHandler;

/**
* Handles creating Rectangle objects. Useful for setting both location and size within a single property
*
* @author Luca Domenichini
*/
public final class RectangleAsValueHandler implements ITypeAsValueHandler<Rectangle>
{

/**
* RECTANGLE_VALUE_REGEX
*/
private final static String RECTANGLE_VALUE_REGEX = "^[0-9]+x{1}[0-9]+x{1}[0-9]+x{1}[0-9]+$";

/**
* singleton
*/
private final static RectangleAsValueHandler SINGLETON = new RectangleAsValueHandler();

/**
* @return Singleton
*/
public static RectangleAsValueHandler getInstance()
{
return SINGLETON;
}

public String getInputValueSample()
{
return "100x50x200x200";
}

/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeAsValueHandler#getValue(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.lang.Object)
*/
public Rectangle getValue(BuildProcess process, Node node, String key, Object inputValue) throws BuildException
{
final String rectangleValue = (String) inputValue;
if (rectangleValue.matches(RECTANGLE_VALUE_REGEX))
{
final String[] xywh = rectangleValue.split("x");
return new Rectangle(new Point(Integer.valueOf(xywh[0]), Integer.valueOf(xywh[1])), new Dimension(Integer.valueOf(xywh[2]), Integer.valueOf(xywh[3])));
}
//else
throw new BuildException("\"{0}\" is not a valid rectangle", rectangleValue);
}

/**
* (non-Javadoc)
*
* @see org.javabuilders.handler.ITypeAsValueHandler#getRegex()
*/
public String getRegex()
{
return RECTANGLE_VALUE_REGEX;
}

/**
* (non-Javadoc)
*
* @see org.javabuilders.IApplicable#getApplicableClass()
*/
public Class<?> getApplicableClass()
{
return Rectangle.class;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.javabuilders.swing.handler.type.layout;

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;

/**
* Marker class to indicate the absolute layout positioning.
* This class represents the tag AbsoluteLayout applicable to a Container.
* LayoutManager is implemented just for respecting the cardinalities while bulding
* the Container. All methods are no-op.
*
* @author Luca Domenichini
*/
public class AbsoluteLayout implements LayoutManager {

@Override
public void addLayoutComponent(String name, Component comp) {

}

@Override
public void removeLayoutComponent(Component comp) {

}

@Override
public Dimension preferredLayoutSize(Container parent) {
return null;
}

@Override
public Dimension minimumLayoutSize(Container parent) {
return null;
}

@Override
public void layoutContainer(Container parent) {

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.javabuilders.swing.handler.type.layout;

import java.awt.Component;
import java.awt.Container;
import java.util.Map;

import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.BuilderConfig;
import org.javabuilders.Node;
import org.javabuilders.handler.ITypeHandlerFinishProcessor;
import org.javabuilders.swing.SwingJavaBuilderUtils;

/**
* AbsoluteLayoutTypeHandler for absolute layout positioning.
* Uses {@link AbsoluteLayout} marker class to indicate that the layout should be set as absolute
* through method {@link java.awt.Container#setLayout(java.awt.LayoutManager)}.
*
* @author Luca Domenichini
*/
public class AbsoluteLayoutTypeHandler implements ITypeHandlerFinishProcessor {

private static final AbsoluteLayoutTypeHandler singleton = new AbsoluteLayoutTypeHandler();

public static AbsoluteLayoutTypeHandler getInstance() {
return singleton;
}

private AbsoluteLayoutTypeHandler() {

}

@Override
public void finish(BuilderConfig config, BuildProcess process, Node current, String key,
Map<String, Object> typeDefinition) throws BuildException {

Container container = SwingJavaBuilderUtils.getParentContainer(current);
if (container != null) {
container.setLayout(null);

for(Node child : current.getParent().getChildNodes(Component.class)) {
Component c = (Component) child.getMainObject();
container.add(c);
}
} else {
throw new BuildException("Unable to process AbolusteLayout since no parent JComponent was found: {0}",
typeDefinition);
}
}

}