blob: 7ea0f17d7760ccd3071991766279b7660d121df0 [file] [log] [blame]
/*
* Copyright (c) 2014 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.internal.util.table;
import java.text.Format;
import java.util.Collections;
import java.util.Iterator;
/**
* @author Eike Stepper
*/
public final class Cell extends AbstractRange
{
final Table table;
int col;
int row;
Object value;
Format format;
Alignment alignment;
Cell(Table table, int col, int row)
{
this.table = table;
this.col = col;
this.row = row;
}
@Override
public Table table()
{
return table;
}
public int col()
{
return col;
}
public int row()
{
return row;
}
public Coordinate coordinate()
{
return new Coordinate(col, row);
}
@Override
public Cell offset(int cols, int rows)
{
return table.cell(coordinate().offset(cols, rows));
}
public Object value()
{
if (value instanceof Formula)
{
Formula formula = (Formula)value;
return formula.evaluate();
}
return value;
}
@Override
public Cell value(Object value)
{
if (value instanceof Generator)
{
Generator generator = (Generator)value;
value = generator.nextValue();
}
this.value = value;
return this;
}
public Object unevaluated()
{
return value;
}
public Number number()
{
Object value = value();
if (value instanceof Number)
{
return (Number)value;
}
return null;
}
public Formula formula()
{
if (value instanceof Formula)
{
return (Formula)value;
}
return null;
}
public Cell formula(String formula)
{
return this;
}
public Format format()
{
return format;
}
@Override
public Range format(Format format)
{
this.format = format;
return this;
}
public Alignment alignment()
{
return alignment;
}
@Override
public Range alignment(Alignment alignment)
{
this.alignment = alignment;
return this;
}
// public String format()
// {
// Object value = value();
// if (formatter != null)
// {
// return formatter.applyFormat(value);
// }
//
// if (value == null)
// {
// return "";
// }
//
// return value.toString();
// }
@Override
public Iterator<Cell> iterator()
{
return Collections.singleton(this).iterator();
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + col;
result = prime * result + row;
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (Cell.class != obj.getClass())
{
return false;
}
Cell other = (Cell)obj;
return col == other.col && row == other.row;
}
@Override
public String toString()
{
return "Cell" + coordinate() + " = " + value;
}
String applyFormat(Object value)
{
try
{
if (format != null)
{
return format.format(value);
}
}
catch (Exception ex)
{
//$FALL-THROUGH$
}
if (value == null)
{
return "";
}
return value.toString();
}
Alignment alignmentFor(Object value)
{
if (alignment == null)
{
if (value instanceof Number)
{
return Alignment.RIGHT;
}
return Alignment.LEFT;
}
return alignment;
}
/**
* @author Eike Stepper
*/
public interface Visitor
{
public boolean visit(Cell cell, int n) throws Exception;
}
}