Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.wicketstuff.minis.behavior.apanel;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
GridLayout puts markup of components in <table><table/> according to GridLayoutConstraints. Component without a constraint will be added to the first empty cell. If there is no empty cells for the component WicketRuntimeException will be thrown.
 
 public class GridLayout implements ILayout
 {
 	private static class GridConstraintIterator implements
 	{
 		private int currentRow = 0;
 		private boolean isNewRow;
 		private int currentIndex = 0;
 
 		{
 			 = set.iterator();
 		}
 
 		public boolean hasNext()
 		{
 			return .hasNext();
 		}
 
 		public boolean isAtFirstConstraint()
 		{
 			return  == 1;
 		}
 
 		public boolean isNewRow()
 		{
 			return ;
 		}
 
 		{
 
 
 			if ( != entry.getKey().getRow())
 			{
 				 = entry.getKey().getRow();
 				 = true;
 			}
 			else
 				 = false;
 
 			return entry;
 		}
 
 		public void remove()
 		{
 		}
 	}
 
 	private static final long serialVersionUID = 1L;
 
 	private static final Component EMPTY_CELL_COMPONENT = null;
 
 	private static XmlTag createXmlTag(final String namefinal XmlTag.TagType type)
 	{
 		final XmlTag xmlTag = new XmlTag();
 		xmlTag.setType(type);
 		xmlTag.setName(name);
		return xmlTag;
	}
	private final RenderersList renderersList;
	private final int width;
	private final int height;

Holds constraints for components. It is sorted to write markup output in the right order.

Constructor.

Parameters:
width width of grid
height height of grid
	public GridLayout(final int widthfinal int height)
	{
		this(widthheight, RenderersList.getDefaultRenderers());
	}

Constructor.

Parameters:
width width of grid
height height of grid
renderers list of renderers to customize component rendering in this layout
	public GridLayout(final int widthfinal int heightfinal List<IComponentRenderer<?>> renderers)
	{
		this. = height;
		this. = width;
		 = new RenderersList(renderers);
	}
	private void checkConstraints(final List<? extends Componentcomponents)
	{
		for (int i = 0; i < components.size(); i++)
		{
			final GridLayoutConstraint constraint = getGridConstraint(components.get(i));
			if (constraint == null)
				continue;
			// skip current component and all components before because
			// their constraints have already been checked
			for (int j = i + 1; j < components.size(); j++)
			{
				final GridLayoutConstraint anotherConstraint = getGridConstraint(components.get(j));
				if (anotherConstraint == null)
					continue;
				if (constraint.intersectsWith(anotherConstraint))
					throw new WicketRuntimeException("Component " + components.get(i) +
						" and component " + components.get(j) + " has intersecting constraints");
			}
		}
	}
	private void fillConstraintsMap(final List<? extends Componentcomponents)
	{
		final List<ComponentcomponentsWithNoConstraint = new ArrayList<Component>();
		for (final Component component : components)
		{
			final GridLayoutConstraint constraint = getGridConstraint(component);
			if (constraint != null)
				.put(constraintcomponent);
			else
				componentsWithNoConstraint.add(component);
		}
		for (final Component component : componentsWithNoConstraint)
		{
			if (constraint == null)
					"There is no free cells in grid for the component " + component);
			.put(constraintcomponent);
		}
		assert .size() == components.size();
		// filling cells that has no components so that they can be rendered
		for (GridLayoutConstraint constraint = findEmptyCellConstraint(); constraint != nullconstraint = findEmptyCellConstraint())
	}
	{
		for (int row = 0; row < row++)
			for (int col = 0; col < col++)
				if (!isWithinAnyConstraint(colrow))
					return new GridLayoutConstraint(colrow);
		return null;
	}
	{
		for (final Behavior behavior : component.getBehaviors())
			if (behavior instanceof GridLayoutConstraint)
				return (GridLayoutConstraint)behavior;
		return null;
	}
	private boolean isWithinAnyConstraint(final int colfinal int row)
	{
		for (final GridLayoutConstraint constraint : .keySet())
			if (constraint.contains(colrow))
				return true;
		return false;
	}

May be overriden to modify <td> tag

Parameters:
component component
xmlTag <td> tag
	protected void onGridCell(final Component componentfinal XmlTag xmlTag)
	{
	}

May be overriden to modify <tr> tag

Parameters:
xmlTag <tr> tag
	protected void onGridRow(final XmlTag xmlTag)
	{
	}

	public CharSequence renderComponents(final List<? extends Componentcomponents)
	{
		checkConstraints(components);
		fillConstraintsMap(components);
		final StringBuilder stringBuilder = new StringBuilder();
		writeOutput(stringBuilder);
		return stringBuilder;
	}
	private void writeOutput(final StringBuilder stringBuilder)
	{
		stringBuilder.append("<table>");
		while (iterator.hasNext())
		{
			final Map.Entry<GridLayoutConstraintComponententry = iterator.next();
			final GridLayoutConstraint constraint = entry.getKey();
			final Component component = entry.getValue();
			CharSequence markup = "";
			if (component != )
			{
				final IComponentRenderer<ComponentcomponentRenderer = .findRendererForClass(component.getClass());
				markup = componentRenderer.getMarkup(component);
			}
			if (iterator.isNewRow())
				stringBuilder.append("</tr>");
			if (iterator.isNewRow() || iterator.isAtFirstConstraint())
			{
				final XmlTag xmlTag = createXmlTag("tr"..);
				onGridRow(xmlTag);
				stringBuilder.append(xmlTag.toCharSequence());
			}
			final XmlTag xmlTag = createXmlTag("td"..);
			onGridCell(componentxmlTag);
			if (constraint.getColSpan() > 1)
				xmlTag.put("colspan"constraint.getColSpan());
			if (constraint.getRowSpan() > 1)
				xmlTag.put("rowspan"constraint.getRowSpan());
			stringBuilder.append(xmlTag.toCharSequence());
			stringBuilder.append(markup);
			stringBuilder.append("</td>");
		}
		stringBuilder.append("</tr>");
		stringBuilder.append("</table>");
	}
New to GrepCode? Check out our FAQ X