package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
import net.sourceforge.squirrel_sql.fw.util.Utilities;
import java.util.List;
public class Interval
{
private IndexedColumn _indexedColumn;
private int _firstIx;
private int _lastIx;
private Object _beginData;
private Object _endData;
private String _label;
private String _tooltip;
private String _report;
public Interval(IndexedColumn indexedColumn, int firstIx, int lastIx, Object beginData, Object endData)
{
_indexedColumn = indexedColumn;
_firstIx = firstIx;
_lastIx = lastIx;
_beginData = beginData;
_endData = endData;
Object firstVal = _indexedColumn.get(firstIx);
Object lastVal = _indexedColumn.get(lastIx);
String firstValRendered = _indexedColumn.renderObject(firstVal);
String lastValRendered = _indexedColumn.renderObject(lastVal);
if (hasDifferentValues())
{
_label = firstValRendered + " - " + lastValRendered;
}
else
{
_label = firstValRendered;
}
_tooltip = "<html>" +
escapeHtmlChars(_label) + "<br><br>" +
"row count = " + getLen() + "; percentage = " + String.format("%.3f",100d * getWight()) + "%<br>" +
"first value = " + escapeHtmlChars(firstValRendered) + "<br>" +
"last value = " + escapeHtmlChars(lastValRendered) + "<br>" +
"first index = " + _firstIx + "; last index = " + _lastIx + "<br>" +
"data interval = " + getIntervalOpeningBracket() + escapeHtmlChars(_indexedColumn.renderObject(beginData)) +
", " + escapeHtmlChars(_indexedColumn.renderObject(endData)) + getIntervalClosingBracket() + "<br>" +
"complete row count = " + _indexedColumn.size() +
"</html>";
_report = "<html>" +
//"<table border=\"1\">" +
"<table>" +
"<tr><th>" +
escapeHtmlChars(_label) +
"</th></tr>" +
"<tr><td>" +
//"<table border=\"1\">" +
"<table>" +
"<tr>" +
"<td>row count</td><td>" + getLen() + "</td>" +
"</tr>" +
"<tr>" +
"<td>percentage</td><td>" + String.format("%.3f",100d * getWight()) + "%</td>" +
"</tr>" +
"<tr>" +
"<td>from-to index</td><td>" + _firstIx + " - " + _lastIx + "</td>" +
"</tr>" +
"</table>" +
"</tr></td>" +
"</table>" +
"</html>";
}
private String getIntervalOpeningBracket()
{
if(0 == _indexedColumn.compareObjects(_indexedColumn.get(_firstIx), _beginData))
{
return "[";
}
else
{
return "]";
}
}
private String getIntervalClosingBracket()
{
if(0 == _indexedColumn.compareObjects(_indexedColumn.get(_lastIx), _endData))
{
return "]";
}
else
{
return "[";
}
}
public int getLen()
{
return (_lastIx - _firstIx + 1);
}
private String escapeHtmlChars(String sql)
{
String buf = sql.replaceAll("&", "&");
buf = buf.replaceAll("<", "<");
buf = buf.replaceAll("<", ">");
buf = buf.replaceAll("\"", """);
return buf;
}
private boolean hasDifferentValues()
{
Object firstVal = _indexedColumn.get(_firstIx);
Object lastVal = _indexedColumn.get(_lastIx);
return false == Utilities.equalsRespectNull(firstVal, lastVal);
}
public double getWight()
{
return (double) getLen() / (double) _indexedColumn.size();
}
public String getLabel()
{
return _label;
}
public String getToolTip()
{
return _tooltip;
}
public String getReport()
{
return _report;
}
public List<Object[]> getResultRows()
{
return _indexedColumn.getResultRows(_firstIx, _lastIx);
}
public boolean containsAllRows()
{
return getLen() == _indexedColumn.size();
}
public String getWidth()
{
return _indexedColumn.calculateDist(_beginData, _endData);
}
public Object get(int i)
{
return _indexedColumn.get(_firstIx + i);
}
public int getDataSetRowIndex(int intervalIx)
{
return _indexedColumn.getRowIx(_firstIx + intervalIx);
}
public IndexedColumn getIndexedColumn()
{
return _indexedColumn;
}
}