/*
* Copyright (c) 2014 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.internal.util.table;
import org.eclipse.net4j.internal.util.table.Cell.Visitor;
import java.text.Format;
import java.util.List;
import java.util.Set;
/**
* @author Eike Stepper
*/
public interface Range extends Iterable<Cell>
{
public Table table();
public Set<Cell> set();
public List<Cell> list();
public int accept(Visitor visitor) throws Exception;
public boolean contains(int col, int row);
public boolean contains(Coordinate coordinate);
public boolean contains(Cell cell);
public boolean contains(Range range);
public Range offset(int cols, int rows);
public Range addRange(Coordinate coordinate1, Coordinate coordinate2);
public Range addRange(int col1, int row1, int col2, int row2);
public Range addRanges(Range... ranges);
public Range subtractRange(Coordinate coordinate1, Coordinate coordinate2);
public Range subtractRange(int col1, int row1, int col2, int row2);
public Range subtractRanges(Range... ranges);
public Range value(Object value);
public Range format(Format format);
public Range alignment(Alignment alignment);
/**
* @author Eike Stepper
*/
public enum Alignment
{
LEFT, CENTER, RIGHT;
public String apply(String value, int width)
{
int length = value.length();
int pad = width - length;
if (pad == 0)
{
return value;
}
int padLeft = 0;
int padRight = 0;
switch (this)
{
case LEFT:
padRight = pad;
break;
case CENTER:
padLeft = pad / 2;
padRight = pad - padLeft;
break;
case RIGHT:
padLeft = pad;
break;
}
StringBuilder builder = new StringBuilder(width);
if (padLeft > 0)
{
pad(builder, padLeft);
}
builder.append(value);
if (padRight > 0)
{
pad(builder, padRight);
}
return builder.toString();
}
private static void pad(StringBuilder builder, int spaces)
{
for (int i = 0; i < spaces; i++)
{
builder.append(' ');
}
}
}
}