/*
* Copyright (C) 2011 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.common.statistics.control;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.ourgrid.common.interfaces.to.LocalWorkerState;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.specification.worker.WorkerSpecification;
import org.ourgrid.common.statistics.beans.peer.Worker;
import org.ourgrid.common.statistics.util.hibernate.HibernateUtil;
import org.ourgrid.peer.business.dao.PeerDAOFactory;
import org.ourgrid.peer.business.dao.statistics.WorkerDAO;
import org.ourgrid.peer.business.util.LoggerUtil;
import org.ourgrid.peer.to.LocalWorker;
public class WorkerControl {
private static WorkerControl instance = null;
public static WorkerControl getInstance() {
if (instance == null) {
instance = new WorkerControl();
}
return instance;
}
public void statusChanged(List<IResponseTO> responses,
String workerUserAtServer, LocalWorkerState workerStatus) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().statusChanged(responses,
workerUserAtServer, workerStatus);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public void statusChanged(List<IResponseTO> responses,
String workerUserAtServer, LocalWorkerState workerStatus, String allocatedFor) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().statusChanged(responses,
workerUserAtServer, workerStatus, allocatedFor);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public void addLocalWorker(List<IResponseTO> responses, LocalWorker localWorker, String myUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().addLocalWorker(responses, localWorker, myUserAtServer);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public void addRemoteWorker(List<IResponseTO> responses,
WorkerSpecification workerSpec, String providerDN, String consumerUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().addRemoteWorker(responses, workerSpec, providerDN, consumerUserAtServer);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public void updateWorker(List<IResponseTO> responses, String workerUserAtServer,
Map<String, String> currentAttributes, Map<String, String> currentAnnotations) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().updateWorker(responses, workerUserAtServer, currentAttributes, currentAnnotations);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public LocalWorker getLocalWorker(List<IResponseTO> responses, String workerUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
LocalWorker worker = null;
try {
worker = PeerDAOFactory.getInstance().getLocalWorkersDAO()
.getLocalWorker(responses, workerUserAtServer);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return worker;
}
public Collection<LocalWorker> getLocalWorkers(List<IResponseTO> responses,
String peerUserAtServer,LocalWorkerState status) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
Collection<LocalWorker> workers = createCollection();
try {
workers = PeerDAOFactory.getInstance().getLocalWorkersDAO().
getLocalWorkers(responses, peerUserAtServer, status);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return workers;
}
public boolean isNewWorker(List<IResponseTO> responses, String workerAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
boolean isNew = false;
try {
isNew = PeerDAOFactory.getInstance().getLocalWorkersDAO().isNewWorker(
responses, workerAtServer);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return isNew;
}
public Collection<String> getLocalWorkersUserAtServer(List<IResponseTO> responses, String myUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
Collection<String> localWorkersAddress = createCollection();
try {
localWorkersAddress = PeerDAOFactory.getInstance().getLocalWorkersDAO()
.getLocalWorkersUserAtServer(responses, myUserAtServer);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return localWorkersAddress;
}
public LocalWorker removeLocalWorker(List<IResponseTO> responses, String localWorkerUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
LocalWorker localWorker = null;
try {
localWorker = PeerDAOFactory.getInstance().getWorkerDAO().removeLocalWorker(responses,
localWorkerUserAtServer);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
return localWorker;
}
public void removeRemoteWorker(List<IResponseTO> responses, String remoteWorkerUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().removeRemoteWorker(responses, remoteWorkerUserAtServer);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
public Collection<Worker> findAllActiveWorkers(List<IResponseTO> responses, String myUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
Collection<Worker> workers = createCollection();
try {
workers = getWorkerDAO().findAllActiveWorkers(responses, myUserAtServer);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return workers;
}
public Worker findActiveWorker(List<IResponseTO> responses, String workerUserAtServer) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
Worker worker = null;
try {
worker = getWorkerDAO().findActiveWorker(responses, workerUserAtServer);
} catch (Exception e) {
responses.add(LoggerUtil.exception(e));
}
HibernateUtil.closeSession();
responses.add(LoggerUtil.leave());
return worker;
}
public void updateWorkAccounting(List<IResponseTO> responses, String workerUserAtServer, double cpuTime, double dataStored) {
responses.add(LoggerUtil.enter());
HibernateUtil.beginTransaction();
try {
getWorkerDAO().updateWorkAccounting(responses, workerUserAtServer, cpuTime, dataStored);
HibernateUtil.commitTransaction();
} catch (Exception e) {
responses.add(LoggerUtil.rollbackException(e));
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
responses.add(LoggerUtil.leave());
}
private WorkerDAO getWorkerDAO() {
return PeerDAOFactory.getInstance().getWorkerDAO();
}
private <T> Collection<T> createCollection(){
return new LinkedList<T>();
}
}