netcdf-basic-widgets/src/main/java/org/gcube/portlets/widgets/netcdfbasicwidgets/server/NetCDFBasicWidgetServiceImp...

127 lines
4.7 KiB
Java

package org.gcube.portlets.widgets.netcdfbasicwidgets.server;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.ServletException;
import org.gcube.portlets.widgets.netcdfbasicwidgets.client.rpc.NetCDFBasicWidgetService;
import org.gcube.portlets.widgets.netcdfbasicwidgets.server.netcdf.NetCDFResource;
import org.gcube.portlets.widgets.netcdfbasicwidgets.server.util.ServiceCredentials;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.exception.ServiceException;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.netcdf.NetCDFData;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.netcdf.NetCDFId;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.netcdf.NetCDFValues;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.netcdf.VariableData;
import org.gcube.portlets.widgets.netcdfbasicwidgets.shared.session.UserInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
*
* @author Giancarlo Panichi
*
*
*/
@SuppressWarnings("serial")
public class NetCDFBasicWidgetServiceImpl extends RemoteServiceServlet implements NetCDFBasicWidgetService {
private static Logger logger = LoggerFactory.getLogger(NetCDFBasicWidgetServiceImpl.class);
/**
* {@inheritDoc}
*/
@Override
public void init() throws ServletException {
super.init();
logger.info("NetCDFBasicWidgetService started!");
}
@Override
public UserInfo hello() throws ServiceException {
try {
ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
logger.debug("hello()");
UserInfo userInfo = new UserInfo(serviceCredentials.getUserName(), serviceCredentials.getGroupId(),
serviceCredentials.getGroupName(), serviceCredentials.getScope(), serviceCredentials.getEmail(),
serviceCredentials.getFullName());
logger.debug("UserInfo: " + userInfo);
return userInfo;
} catch (ServiceException e) {
e.printStackTrace();
throw e;
} catch (Throwable e) {
logger.error("Error in hello(): " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(), e);
}
}
@Override
public NetCDFData getNetCDFFromPublicLink(String publicLink) throws ServiceException {
try {
ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
URL url;
try {
url = new URL(publicLink);
} catch (MalformedURLException e) {
logger.error(e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(), e);
}
NetCDFResource netCDFResource = new NetCDFResource(url);
NetCDFData netCDFData = netCDFResource.exploreNetCDF();
SessionUtil.setNetCDFData(netCDFData, this.getThreadLocalRequest(), serviceCredentials);
return netCDFData;
} catch (ServiceException e) {
logger.error("Error in getCDFResourceFromPublicLink(): " + e.getLocalizedMessage(), e);
throw e;
} catch (Exception e) {
logger.error("Error in getCDFResourceFromPublicLink(): " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(), e);
}
}
@Override
public NetCDFValues readDataVariable(NetCDFId netCDFId, VariableData variableData, boolean sample, int limit)
throws ServiceException {
try {
ServiceCredentials serviceCredentials=SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
SessionUtil.getNetCDFData(netCDFId, this.getThreadLocalRequest(), serviceCredentials);
NetCDFResource netCDFResource = new NetCDFResource(netCDFId);
NetCDFValues netCDFValues = netCDFResource.readDataVariable(variableData, sample, limit);
return netCDFValues;
} catch (ServiceException e) {
logger.error("Error in getCDFResourceFromItem(): " + e.getLocalizedMessage(), e);
throw e;
} catch (Exception e) {
logger.error("Error in getCDFResourceFromItem(): " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(), e);
}
}
@Override
public void closeNetCDF(NetCDFId netCDFId) throws ServiceException {
try {
ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
SessionUtil.getNetCDFData(netCDFId, this.getThreadLocalRequest(),
serviceCredentials);
NetCDFResource netCDFResource = new NetCDFResource(netCDFId);
netCDFResource.close();
SessionUtil.removeNetCDFData(netCDFId, this.getThreadLocalRequest(), serviceCredentials);
} catch (ServiceException e) {
logger.error("Error in closeNetCDF(): " + e.getLocalizedMessage(), e);
throw e;
} catch (Exception e) {
logger.error("Error in closeNetCDF(): " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(), e);
}
}
}