use of org.jfree.data.time.Day in project adempiere by adempiere.
the class MChartDatasource method addData.
public void addData(MChart parent) {
String value = getValueColumn();
String category;
String unit = "D";
if (!parent.isTimeSeries())
category = getCategoryColumn();
else {
if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Week)) {
unit = "W";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Month)) {
unit = "MM";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Quarter)) {
unit = "Q";
} else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Year)) {
unit = "Y";
}
category = " TRUNC(" + getDateColumn() + ", '" + unit + "') ";
}
String series = DB.TO_STRING(getName());
boolean hasSeries = false;
if (getSeriesColumn() != null) {
series = getSeriesColumn();
hasSeries = true;
}
String where = getWhereClause();
if (!Util.isEmpty(where)) {
where = Env.parseContext(getCtx(), parent.getWindowNo(), where, true);
}
boolean hasWhere = false;
String sql = "SELECT " + value + ", " + category + ", " + series + " FROM " + getFromClause();
if (!Util.isEmpty(where)) {
sql += " WHERE " + where;
hasWhere = true;
}
Date currentDate = Env.getContextAsDate(getCtx(), "#Date");
Date startDate = null;
Date endDate = null;
int scope = parent.getTimeScope();
int offset = getTimeOffset();
if (parent.isTimeSeries() && scope != 0) {
offset += -scope;
startDate = increment(currentDate, parent.getTimeUnit(), offset);
endDate = increment(startDate, parent.getTimeUnit(), scope);
}
if (startDate != null && endDate != null) {
sql += hasWhere ? " AND " : " WHERE ";
sql += category + ">=TRUNC(" + DB.TO_DATE(new Timestamp(startDate.getTime())) + ", '" + unit + "') AND ";
sql += category + "<=TRUNC(" + DB.TO_DATE(new Timestamp(endDate.getTime())) + ", '" + unit + "') ";
}
MRole role = MRole.getDefault(getCtx(), false);
sql = role.addAccessSQL(sql, null, true, false);
if (hasSeries)
sql += " GROUP BY " + series + ", " + category + " ORDER BY " + series + ", " + category;
else
sql += " GROUP BY " + category + " ORDER BY " + category;
log.log(Level.FINE, sql);
PreparedStatement pstmt = null;
ResultSet rs = null;
TimeSeries tseries = null;
Dataset dataset = parent.getDataset();
try {
pstmt = DB.prepareStatement(sql, null);
rs = pstmt.executeQuery();
while (rs.next()) {
String key = rs.getString(2);
String seriesName = rs.getString(3);
if (seriesName == null)
seriesName = getName();
String queryWhere = "";
if (hasWhere)
queryWhere += where + " AND ";
queryWhere += series + " = " + DB.TO_STRING(seriesName) + " AND " + category + " = ";
if (parent.isTimeSeries() && dataset instanceof TimeSeriesCollection) {
if (tseries == null || !tseries.getKey().equals(seriesName)) {
if (tseries != null)
((TimeSeriesCollection) dataset).addSeries(tseries);
tseries = new TimeSeries(seriesName);
}
Date date = rs.getDate(2);
RegularTimePeriod period = null;
if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Day))
period = new Day(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Week))
period = new Week(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Month))
period = new Month(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Quarter))
period = new Quarter(date);
else if (parent.getTimeUnit().equals(MChart.TIMEUNIT_Year))
period = new Year(date);
tseries.add(period, rs.getBigDecimal(1));
key = period.toString();
queryWhere += DB.TO_DATE(new Timestamp(date.getTime()));
} else {
queryWhere += DB.TO_STRING(key);
}
MQuery query = new MQuery(getAD_Table_ID());
String keyCol = MTable.get(getCtx(), getAD_Table_ID()).getKeyColumns()[0];
String whereClause = keyCol + " IN (SELECT " + getKeyColumn() + " FROM " + getFromClause() + " WHERE " + queryWhere + " )";
query.addRestriction(whereClause.toString());
query.setRecordCount(1);
HashMap<String, MQuery> map = parent.getQueries();
if (dataset instanceof DefaultPieDataset) {
((DefaultPieDataset) dataset).setValue(key, rs.getBigDecimal(1));
map.put(key, query);
} else if (dataset instanceof DefaultCategoryDataset) {
((DefaultCategoryDataset) dataset).addValue(rs.getBigDecimal(1), seriesName, key);
map.put(seriesName + "__" + key, query);
} else if (dataset instanceof TimeSeriesCollection) {
map.put(seriesName + "__" + key, query);
}
}
} catch (SQLException e) {
throw new DBException(e, sql);
} finally {
DB.close(rs, pstmt);
rs = null;
pstmt = null;
}
if (tseries != null)
((TimeSeriesCollection) dataset).addSeries(tseries);
}
use of org.jfree.data.time.Day in project cubrid-manager by CUBRID.
the class MonitorStatisticChart method buildInvalidData.
/**
* Build TimeSeries for StatisticData which has no data. After build, each
* TimeSeries accompany with the StatisticData will have the same time
* series with ordinary TimeSeries, but all the values will be -1.
*
* @param dataset
* @param timeType
* @param dataItemWithoutDataList
* @param current
* @param interalMillisecs
*/
private void buildInvalidData(TimeSeriesCollection dataset, TimeType timeType, List<StatisticData> dataItemWithoutDataList, Date current, long interalMillisecs) {
for (StatisticData statisticData : dataItemWithoutDataList) {
TimeSeries series = null;
if (isDetailView) {
series = new TimeSeries(statisticData.getDescription(isMultiHost));
} else {
series = new TimeSeries(statisticData.getSimpleDescription(isMultiHost));
}
Date point = (Date) current.clone();
long curMillisecs = current.getTime();
for (int i = 0; i < dataSize; i++) {
point.setTime(curMillisecs - (dataSize - i) * interalMillisecs);
switch(timeType) {
case DAILY:
series.add(new Second(point), -1);
break;
case WEEKLY:
series.add(new Hour(point), -1);
break;
case MONTHLY:
series.add(new Hour(point), -1);
break;
case YEARLY:
series.add(new Day(point), -1);
break;
default:
break;
}
}
maxValueMap.put(statisticData, -1d);
minValueMap.put(statisticData, -1d);
dataset.addSeries(series);
}
}
use of org.jfree.data.time.Day in project ta4j by ta4j.
the class IndicatorsToChart method buildChartTimeSeries.
/**
* Builds a JFreeChart time series from a Ta4j time series and an indicator.
* @param barseries the ta4j time series
* @param indicator the indicator
* @param name the name of the chart time series
* @return the JFreeChart time series
*/
private static org.jfree.data.time.TimeSeries buildChartTimeSeries(TimeSeries barseries, Indicator<Decimal> indicator, String name) {
org.jfree.data.time.TimeSeries chartTimeSeries = new org.jfree.data.time.TimeSeries(name);
for (int i = 0; i < barseries.getBarCount(); i++) {
Bar bar = barseries.getBar(i);
chartTimeSeries.add(new Day(Date.from(bar.getEndTime().toInstant())), indicator.getValue(i).doubleValue());
}
return chartTimeSeries;
}
use of org.jfree.data.time.Day in project cubrid-manager by CUBRID.
the class MonitorStatisticChart method createDataset.
private XYDataset createDataset() {
TimeSeriesCollection dataset = new TimeSeriesCollection();
if (statisticDataList == null) {
return dataset;
}
double maxForRang = 0;
List<StatisticData> dataItemWithoutDataList = new ArrayList<StatisticData>();
TimeType timeType = null;
Date current = new Date();
long interalMillisecs = 0;
for (StatisticData statisticData : statisticDataList) {
if (statisticData == null) {
continue;
}
MetricType metricType = MetricType.getEnumByMetric(statisticData.getMetric());
if (metricType == null) {
continue;
}
int size = statisticData.getData().size();
if (size == 0) {
dataItemWithoutDataList.add(statisticData);
continue;
} else if (dataSize == 0) {
//record data size for build invalid data
dataSize = size;
}
//check data type, record 'isHasValidData = true'
if (!isHasValidData) {
isHasValidData = true;
chartType = getChartType(statisticData.getMetric());
if (chartType == ChartType.PERCENT) {
rangMax = 100;
}
String dateType = statisticData.getDtype();
timeType = TimeType.getEnumByType(dateType);
//CMS return -1 for invalid data, so for invalid data(<0), display as -1.
switch(timeType) {
case DAILY:
interalMillisecs = 1000 * 60 * 60 * 24 / size;
break;
case WEEKLY:
interalMillisecs = 1000 * 60 * 60;
break;
case MONTHLY:
interalMillisecs = 1000 * 60 * 60;
break;
case YEARLY:
interalMillisecs = 1000 * 60 * 60 * 24;
break;
default:
break;
}
}
TimeSeries series = null;
if (isDetailView) {
series = new TimeSeries(statisticData.getDescription(isMultiHost));
} else {
series = new TimeSeries(statisticData.getSimpleDescription(isMultiHost));
}
Date point = (Date) current.clone();
long curMillisecs = current.getTime();
int count = 0;
int max = 0;
int min = 0;
boolean isInitMinVal = false;
for (int val : statisticData.getData()) {
point.setTime(curMillisecs - (size - count) * interalMillisecs);
switch(timeType) {
case DAILY:
if (val < 0) {
series.add(new Second(point), -1);
} else {
series.add(new Second(point), val / 100);
}
break;
case WEEKLY:
if (val < 0) {
series.add(new Hour(point), -1);
} else {
series.add(new Hour(point), val / 100);
}
break;
case MONTHLY:
if (val < 0) {
series.add(new Hour(point), -1);
} else {
series.add(new Hour(point), val / 100);
}
break;
case YEARLY:
if (val < 0) {
series.add(new Day(point), -1);
} else {
series.add(new Day(point), val / 100);
}
break;
default:
break;
}
if (chartType != ChartType.PERCENT && val > maxForRang) {
maxForRang = val;
}
if (!isInitMinVal && val >= 0) {
min = val;
isInitMinVal = true;
}
if (val > max) {
max = val;
}
if (val < min && val >= 0) {
min = val;
}
count++;
}
maxValueMap.put(statisticData, max / 100d);
minValueMap.put(statisticData, min / 100d);
dataset.addSeries(series);
}
if (!isHasValidData) {
return dataset;
}
if (chartType != ChartType.PERCENT) {
decideRangMax(maxForRang / 100);
}
/*[TOOLS-3742] Build invalid data for StatisticData which has no data*/
buildInvalidData(dataset, timeType, dataItemWithoutDataList, current, interalMillisecs);
if (isDetailView) {
chartTitle = Messages.monStatisticDetailChartTitle;
timeAxisLabel = Messages.lblChartTime;
valueAxisLabel = Messages.lblChartValue;
switch(chartType) {
case PERCENT:
valueAxisLabel += " (%)";
break;
case MEMORY:
case SPACE:
valueAxisLabel += " (MB)";
break;
case OTHERS:
break;
default:
break;
}
}
return dataset;
}
use of org.jfree.data.time.Day in project MtgDesktopCompanion by nicho92.
the class HistoryPricesPanel method refresh.
private void refresh() {
TimeSeriesCollection dataset = new TimeSeriesCollection();
TimeSeries series1 = new TimeSeries(title);
if (showAll) {
for (MTGDashBoard d : MTGControler.getInstance().getDashBoards()) {
TimeSeries series = new TimeSeries(d.getName());
Map<Date, Double> mapTime;
try {
mapTime = d.getPriceVariation(mc, me);
if (mapTime != null) {
for (Entry<Date, Double> da : mapTime.entrySet()) series.add(new Day(da.getKey()), da.getValue().doubleValue());
dataset.addSeries(series);
}
} catch (IOException e) {
MTGLogger.printStackTrace(e);
}
}
} else {
for (Entry<Date, Double> d : map.entrySet()) series1.add(new Day(d.getKey()), d.getValue().doubleValue());
dataset.addSeries(series1);
}
JFreeChart chart = ChartFactory.createTimeSeriesChart("Price Variation", "Date", "Price", dataset, true, true, false);
if (showEdition)
try {
for (MagicEdition edition : MTGControler.getInstance().getEnabledProviders().loadEditions()) {
Date d = new SimpleDateFormat("yyyy-MM-dd hh:mm").parse(edition.getReleaseDate() + " 00:00");
TimeSeriesDataItem item = series1.getDataItem(new Day(d));
if (item != null) {
double x = item.getPeriod().getFirstMillisecond();
double y = item.getValue().doubleValue();
XYTextAnnotation annot = new XYTextAnnotation(edition.getId(), x, y);
annot.setToolTipText(edition.getSet());
XYPlot plot = (XYPlot) chart.getPlot();
plot.addAnnotation(annot);
}
}
} catch (Exception e) {
MTGLogger.printStackTrace(e);
}
pane.setChart(chart);
pane.addMouseWheelListener(mwe -> {
if (mwe.getWheelRotation() > 0) {
pane.zoomOutDomain(0.5, 0.5);
} else if (mwe.getWheelRotation() < 0) {
pane.zoomInDomain(1.5, 1.5);
}
});
this.add(pane, BorderLayout.CENTER);
chart.fireChartChanged();
}
Aggregations