import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager2;
import java.util.Enumeration;
import java.util.Hashtable;

class AbsoluteLayout
	implements LayoutManager2
{
	Hashtable constraints=new Hashtable();

	public static class Constraint
	{
		private int x,y,width,height;

		public Constraint(
					int x,int y,int width,int height){
			this.x=x;
			this.y=y;
			this.width=width;
			this.height=height;
		}

		public int getX()
		{
			return x;
		}

		public int getY()
		{
			return y;
		}

		public int getWidth()
		{
			return width;
		}

		public int getHeight()
		{
			return height;
		}
	}

	public void addLayoutComponent(Component component,Object constraint)
	{
		constraints.put(component,constraint);
	}

	public void addLayoutComponent(String string,Component component)
	{
		throw new RuntimeException(
				"Use addLayoutComponent(Component,Object)");
	}

	public float getLayoutAlignmentX(Container container)
	{
		return 0.5f;
	}

	public float getLayoutAlignmentY(Container container)
	{
		return 0.5f;
	}

	public void invalidateLayout(Container container)
	{
	}

	public void layoutContainer(Container container)
	{
		Component[] components=container.getComponents();
		for (int a=0;a<components.length;a++)
		{
			Constraint constraint=(Constraint)constraints.get(components[a]);
			
			if (constraint!=null)
				components[a].setBounds
				(
					constraint.getX(),constraint.getY(),
					constraint.getWidth(),constraint.getHeight()
				);
		}
	}

	public Dimension minimumLayoutSize(Container container)
	{
		return preferredLayoutSize(container);
	}

	public Dimension maximumLayoutSize(Container container)
	{
		return preferredLayoutSize(container);
	}

	public Dimension preferredLayoutSize(Container container)
	{
		int maxWidth=0,maxHeight=0;
		
		for
		(
			Enumeration enum=constraints.elements();
			enum.hasMoreElements();
		)
		{
			Constraint constraint=(Constraint)enum.nextElement();
			maxWidth=Math.max(maxWidth,constraint.getWidth());
			maxHeight=Math.max(maxHeight,constraint.getHeight());
		}
		
		return new Dimension(maxWidth,maxHeight);
	}

	public void removeLayoutComponent(Component component)
	{
		constraints.remove(component);
	}
}
