/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.app.util;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import org.dspace.app.util.dao.WebAppDAO;
import org.dspace.app.util.service.WebAppService;
import org.dspace.core.Context;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Service implementation for the WebApp object.
* This class is responsible for all business logic calls for the WebApp object and is autowired by spring.
* This class should never be accessed directly.
*
* @author kevinvandevelde at atmire.com
*/
public class WebAppServiceImpl implements WebAppService {
private final Logger log = Logger.getLogger(WebAppServiceImpl.class);
@Autowired(required = true)
protected WebAppDAO webAppDAO;
protected WebAppServiceImpl()
{
}
@Override
public WebApp create(Context context, String appName, String url, Date started, int isUI) throws SQLException {
WebApp webApp = webAppDAO.create(context, new WebApp());
webApp.setAppName(appName);
webApp.setUrl(url);
webApp.setStarted(started);
webApp.setIsui(isUI);
webAppDAO.save(context, webApp);
return webApp;
}
@Override
public void delete(Context context, WebApp webApp) throws SQLException {
webAppDAO.delete(context, webApp);
}
@Override
public List<WebApp> findAll(Context context) throws SQLException {
return webAppDAO.findAll(context, WebApp.class);
}
@Override
public List<WebApp> getApps()
{
ArrayList<WebApp> apps = new ArrayList<>();
Context context = null;
HttpHead method = null;
try {
context = new Context();
List<WebApp> webApps = findAll(context);
for (WebApp app : webApps)
{
method = new HttpHead(app.getUrl());
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(method);
int status = response.getStatusLine().getStatusCode();
if (status != HttpStatus.SC_OK)
{
delete(context, app
);
continue;
}
apps.add(app);
}
} catch (SQLException e) {
log.error("Unable to list running applications", e);
} catch (IOException e) {
log.error("Failure checking for a running webapp", e);
} finally {
if (null != method)
{
method.releaseConnection();
}
if (null != context)
{
context.abort();
}
}
return apps;
}
}