/*******************************************************************************
* Copyright (c) 2012, Nabeel Shaheen
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
******************************************************************************/
package com.odb.view.dashboard.server;
import java.io.Serializable;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.dao.DataAccessException;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.odb.core.SubscriberDataSource;
import com.odb.core.dao.dto.DataSourceAxisDetailInfo;
import com.odb.core.dao.dto.DataSourceInfo;
import com.odb.core.dao.dto.DataSourceSeries;
import com.odb.core.dao.dto.PublisherInfo;
import com.odb.core.dao.dto.SubscriberInfo;
import com.odb.core.service.DataSourceConfiguration;
import com.odb.core.service.OpenDashBoard;
import com.odb.view.dashboard.client.DashboardService;
import com.odb.view.dashboard.client.DataVO;
import com.odb.view.dashboard.client.TimeSeriesDataVO;
import com.odb.view.dashboard.client.dto.DataSourceAxisInfo;
import com.odb.view.dashboard.client.dto.LiveChartVO;
import com.odb.view.dashboard.client.dto.SubscriberSubscription;
import com.odb.view.dashboard.client.dto.ViewConfig;
import com.odb.view.dashboard.client.dto.ViewSettings;
import com.odb.view.dashboard.client.exceptions.FetchDataSourceException;
import com.odb.view.dashboard.client.exceptions.GraphNotAvailableException;
import com.odb.view.dashboard.client.exceptions.ViewSettingNotConsistentException;
import com.odb.view.util.Utilities;
/**
* The server side implementation of the RPC service.<br>
*
* this class is of type RemoteServiceServlet -i.e it is a servlet at the end-
* and hence, it is initialised by the
* {@link #init(javax.servlet.ServletConfig)} method.<br>
* by ServletConfig object we can get a reference to Spring
* WebApplicationContext, and hence, the OpenDashBoardCore service.
*/
@SuppressWarnings("serial")
public class DashboardServiceImpl extends RemoteServiceServlet implements DashboardService {
/** The log. */
private static Logger log = Logger.getLogger(DashboardServiceImpl.class);
/** The odb core. */
OpenDashBoard odbCore;
public void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException {
super.init(config);
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
odbCore = (OpenDashBoard) context.getBean("OpenDashBoardCore");
};
public ArrayList<DataVO> getDataUpdate(String dataSourceId, String graphID, int seriesCount, int seriesSetCount) throws GraphNotAvailableException {
ArrayList<DataVO> dataSetList = new ArrayList<DataVO>();
int rowNum = seriesCount * seriesSetCount;
List<DataSourceSeries> series = odbCore.getLatestSeriesData(dataSourceId, rowNum);
for (int i = 0; i < series.size(); i += seriesCount) {
TimeSeriesDataVO dataSet = new TimeSeriesDataVO(series.get(i).getDateTime());
for (int j = 0; j < seriesCount; j++) {
int idx = i+j;
dataSet.put(series.get(idx).getSeriesIndex(), series.get(idx).getSeriesIndexSeqVal());
}
dataSetList.add(dataSet);
}
return dataSetList;
// throw new GraphNotAvailableException();
}
public DataSourceConfiguration getDataSourceAllDetails(String dataSourceID) {
// HashMap<String, Serializable> dsAllDetails = new
// java.util.HashMap<String, Serializable>();
DataSourceConfiguration dsConfig = new DataSourceConfiguration();
try {
dsConfig = odbCore.getDataSourceConfigurationBy(dataSourceID);
} catch (SQLException e) {
log.error("Failed while getting data source details for dsID=" + dataSourceID + e);
}
return dsConfig;
}
public ArrayList<SubscriberSubscription> getCurrentSubscriptions() {
ArrayList<SubscriberSubscription> dsConfigList = null;
SubscriberInfo subscriberInfo = (SubscriberInfo) getThreadLocalRequest().getSession().getAttribute("subscriberInfo");
String subscriberID = Utilities.getClientSubscriberInfo(subscriberInfo).getSubscriberID();
try {
ArrayList<SubscriberDataSource> subDS = odbCore.getAllDataSourceBySubscriber(subscriberID);
dsConfigList = new ArrayList<SubscriberSubscription>(subDS.size());
for (SubscriberDataSource ds : subDS) {
DataSourceConfiguration dsConfig = odbCore.getDataSourceConfigurationBy(ds.getDataSourceID());
SubscriberSubscription ss = new SubscriberSubscription();
ss.setGraphID(ds.getGraphID());
ss.setDsID(dsConfig.getDsID());
ss.setDsName(dsConfig.getDsName());
ss.setDsTimeoutInterval(dsConfig.getDsTimeoutInterval());
ss.setPublisherID(dsConfig.getPublisherID());
ss.setSeriesCount(dsConfig.getSeriesCount());
ss.setXsInfo(dsConfig.getXsInfo());
dsConfigList.add(ss);
}
} catch (SQLException e) {
log.error("Getting Current Subscription for the subscriber failed: subID:" + subscriberID + e);
}
return dsConfigList;
}
public ArrayList<com.odb.view.dashboard.client.dto.PublisherInfo> getPublisherInfo() throws FetchDataSourceException {
ArrayList<com.odb.view.dashboard.client.dto.PublisherInfo> publisherInfoList = new ArrayList<com.odb.view.dashboard.client.dto.PublisherInfo>();
try {
ArrayList<PublisherInfo> pubInfo = odbCore.getAllPublishers();
for (PublisherInfo pInfo : pubInfo) {
com.odb.view.dashboard.client.dto.PublisherInfo pi = new com.odb.view.dashboard.client.dto.PublisherInfo();
pi.setPublisherID(pInfo.getPublisherID());
pi.setPublisherName(pInfo.getPublisherName());
publisherInfoList.add(pi);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return publisherInfoList;
}
public ArrayList<com.odb.view.dashboard.client.dto.DataSourceInfo> getDataSources(String publisherID) {
ArrayList<com.odb.view.dashboard.client.dto.DataSourceInfo> dataSourceList = new ArrayList<com.odb.view.dashboard.client.dto.DataSourceInfo>();
try {
ArrayList<DataSourceInfo> dsInfo = odbCore.getAllDataSourceByPublisher(publisherID);
for (DataSourceInfo dInfo : dsInfo) {
com.odb.view.dashboard.client.dto.DataSourceInfo dataSource = new com.odb.view.dashboard.client.dto.DataSourceInfo();
dataSource.setDataSourceID(dInfo.getDataSourceID());
dataSource.setDataSourceName(dInfo.getDataSourceName());
dataSource.setPublisherID(dInfo.getPublisherID());
dataSource.setSeriesCount(dInfo.getSeriesCount());
dataSource.setTimeoutInterval(dInfo.getTimeoutInterval());
dataSourceList.add(dataSource);
}
} catch (SQLException e) {
log.error("Fetching DataSourceInfo failed... ");
}
return dataSourceList;
}
public void addSubscription(String dsID, String graphID) {
SubscriberInfo subscriberInfo = (SubscriberInfo) getThreadLocalRequest().getSession().getAttribute("subscriberInfo");
odbCore.addSubscription(subscriberInfo.getSubscriberID(), dsID, graphID, subscriberInfo.getSubscriberID() + "_"+dsID);
}
}