package org.ourgrid.peer.status.util; import java.lang.reflect.Method; import java.util.List; import org.ourgrid.common.statistics.beans.aggregator.AG_Attribute; import org.ourgrid.common.statistics.beans.aggregator.AG_Command; import org.ourgrid.common.statistics.beans.aggregator.AG_GridProcess; import org.ourgrid.common.statistics.beans.aggregator.AG_Job; import org.ourgrid.common.statistics.beans.aggregator.AG_Login; import org.ourgrid.common.statistics.beans.aggregator.AG_Peer; import org.ourgrid.common.statistics.beans.aggregator.AG_Task; import org.ourgrid.common.statistics.beans.aggregator.AG_User; import org.ourgrid.common.statistics.beans.aggregator.AG_Worker; import org.ourgrid.common.statistics.beans.aggregator.monitor.AG_PeerStatusChange; import org.ourgrid.common.statistics.beans.aggregator.monitor.AG_WorkerStatusChange; import org.ourgrid.common.statistics.beans.ds.DS_PeerStatusChange; import org.ourgrid.common.statistics.beans.peer.Attribute; import org.ourgrid.common.statistics.beans.peer.Command; import org.ourgrid.common.statistics.beans.peer.GridProcess; import org.ourgrid.common.statistics.beans.peer.Job; import org.ourgrid.common.statistics.beans.peer.Login; import org.ourgrid.common.statistics.beans.peer.Peer; import org.ourgrid.common.statistics.beans.peer.Task; import org.ourgrid.common.statistics.beans.peer.User; import org.ourgrid.common.statistics.beans.peer.Worker; import org.ourgrid.common.statistics.beans.peer.monitor.WorkerStatusChange; public class PeerHistoryStatusBuilderHelper { public static AG_WorkerStatusChange convertWorkerStatusChange(WorkerStatusChange wsc){ AG_WorkerStatusChange workerChange = new AG_WorkerStatusChange(); workerChange.setLastModified(wsc.getLastModified()); workerChange.setStatus(wsc.getStatus()); workerChange.setTimeOfChange(wsc.getTimeOfChange()); return workerChange; } public static AG_Peer convertPeerSimple(Peer dbPeer) { AG_Peer peer = new AG_Peer(); peer.setAddress(dbPeer.getAddress()); peer.setDescription(dbPeer.getDescription()); peer.setEmail(dbPeer.getEmail()); peer.setLabel(dbPeer.getLabel()); peer.setLastModified(dbPeer.getLastModified()); peer.setLatitude(dbPeer.getLatitude()); peer.setLongitude(dbPeer.getLongitude()); peer.setTimezone(dbPeer.getTimezone()); peer.setVersion(dbPeer.getVersion()); return peer; } public static AG_Peer convertPeer(Peer dbPeer) { AG_Peer peer = convertPeerSimple(dbPeer); return peer; } /** * @param peer */ public static AG_Worker convertWorker(Worker w) { AG_Worker worker = new AG_Worker(); worker.setAddress(w.getAddress()); worker.setBeginTime(w.getBeginTime()); worker.setEndTime(w.getEndTime()); worker.setLastModified(w.getLastModified()); worker.setStatus(w.getStatus()); worker.setAllocatedFor(w.getAllocatedFor()); return worker; } public static AG_Attribute convertAttribute(Attribute att) { AG_Attribute attribute = new AG_Attribute(); attribute.setBeginTime(att.getBeginTime()); attribute.setEndTime(att.getEndTime()); attribute.setLastModified(att.getLastModified()); attribute.setProperty(att.getProperty()); attribute.setValue(att.getValue()); return attribute; } /** * @param peer */ public static AG_User convertUser(User u) { AG_User user = new AG_User(); user.setAddress(u.getAddress()); user.setCreationDate(u.getCreationDate()); user.setDeletionDate(u.getDeletionDate()); user.setLastModified(u.getLastModified()); user.setPublicKey(u.getPublicKey()); return user; } /** * @param peer * @param user */ public static AG_Login convertLogin(Login l) { AG_Login login = new AG_Login(); login.setBeginTime(l.getBeginTime()); login.setEndTime(l.getEndTime()); login.setLastModified(l.getLastModified()); login.setLoginResult(l.getLoginResult()); return login; } public static AG_Job convertJob(Job j) { AG_Job job = new AG_Job(); job.setCreationTime(j.getCreationTime()); job.setFinishTime(j.getFinishTime()); job.setJobId(j.getJobId()); job.setLabel(j.getLabel()); job.setLastModified(j.getLastModified()); job.setMaxFails(j.getMaxFails()); job.setMaxReplicas(j.getMaxReplicas()); job.setRequestId(j.getRequestId()); job.setRequirements(j.getRequirements()); job.setStatus(j.getStatus()); return job; } public static AG_Task convertTask(Task t) { AG_Task task = new AG_Task(); task.setActualFails(t.getActualFails()); task.setLastModified(t.getLastModified()); task.setRemoteExec(t.getRemoteExec()); task.setSabotageCheck(t.getSabotageCheck()); task.setStatus(t.getStatus()); task.setSequenceNumber(t.getSequenceNumber()); return task; } public static AG_GridProcess convertProcess(GridProcess p) { AG_GridProcess process = new AG_GridProcess(); process.setCreationTime(p.getCreationTime()); process.setErrorCause(p.getErrorCause()); process.setExecutionErrorType(p.getExecutionErrorType()); process.setExitValue(p.getExitValue()); process.setFinalBeginning(p.getFinalBeginning()); process.setFinalEnd(p.getFinalEnd()); process.setInitBeginning(p.getInitBeginning()); process.setInitEnd(p.getInitEnd()); process.setLastModified(p.getLastModified()); process.setLatestPhase(p.getLatestPhase()); process.setRemoteBeginning(p.getRemoteBeginning()); process.setRemoteEnd(p.getRemoteEnd()); process.setSabotageCheck(p.getSabotageCheck()); process.setStatus(p.getStatus()); process.setSequenceNumber(p.getSequenceNumber()); process.setWorkerAddress(p.getWorkerAddress()); process.setStderr(p.getStderr()); process.setStdout(p.getStdout()); return process; } public static AG_Command convertCommand(Command c) { AG_Command command = new AG_Command(); command.setDestination(c.getDestination()); command.setFileName(c.getFileName()); command.setFileSize(c.getFileSize()); command.setLastModified(c.getLastModified()); command.setName(c.getName()); command.setProgress(c.getProgress()); command.setSource(c.getSource()); command.setStatus(c.getStatus()); command.setTransferBegin(c.getTransferBegin()); command.setTransferEnd(c.getTransferEnd()); command.setTransferRate(c.getTransferRate()); return command; } public static void simplePeerCopy(AG_Peer peer, AG_Peer dbPeer) { dbPeer.setDescription(peer.getDescription()); dbPeer.setEmail(peer.getEmail()); dbPeer.setLabel(peer.getLabel()); dbPeer.setLastModified(peer.getLastModified()); dbPeer.setLatitude(peer.getLatitude()); dbPeer.setLongitude(peer.getLongitude()); dbPeer.setTimezone(peer.getTimezone()); dbPeer.setVersion(peer.getVersion()); } public static void simpleUserCopy(AG_User user, AG_User dbUser) { dbUser.setCreationDate(user.getCreationDate()); dbUser.setDeletionDate(user.getDeletionDate()); dbUser.setLastModified(user.getLastModified()); dbUser.setPassword(user.getPassword()); dbUser.setPublicKey(user.getPublicKey()); } public static void simpleWorkerCopy(AG_Worker worker, AG_Worker dbWorker) { dbWorker.setBeginTime(worker.getBeginTime()); dbWorker.setEndTime(worker.getEndTime()); dbWorker.setLastModified(worker.getLastModified()); dbWorker.setStatus(worker.getStatus()); dbWorker.setAllocatedFor(worker.getAllocatedFor()); } public static void simpleLoginCopy(AG_Login login, AG_Login dbLogin) { dbLogin.setBeginTime(login.getBeginTime()); dbLogin.setEndTime(login.getEndTime()); dbLogin.setLastModified(login.getLastModified()); dbLogin.setLoginResult(login.getLoginResult()); } public static void simpleJobCopy(AG_Job job, AG_Job dbJob) { dbJob.setCreationTime(job.getCreationTime()); dbJob.setFinishTime(job.getFinishTime()); dbJob.setJobId(job.getJobId()); dbJob.setLabel(job.getLabel()); dbJob.setLastModified(job.getLastModified()); dbJob.setMaxFails(job.getMaxFails()); dbJob.setMaxReplicas(job.getMaxReplicas()); dbJob.setRequestId(job.getRequestId()); dbJob.setRequirements(job.getRequirements()); dbJob.setStatus(job.getStatus()); } public static void simpleTaskCopy(AG_Task task, AG_Task dbTask) { dbTask.setActualFails(task.getActualFails()); dbTask.setLastModified(task.getLastModified()); dbTask.setRemoteExec(task.getRemoteExec()); dbTask.setSabotageCheck(task.getSabotageCheck()); dbTask.setSequenceNumber(task.getSequenceNumber()); dbTask.setStatus(task.getStatus()); } public static void simpleProcessCopy(AG_GridProcess process, AG_GridProcess dbProcess) { dbProcess.setCreationTime(process.getCreationTime()); dbProcess.setErrorCause(process.getErrorCause()); dbProcess.setExecutionErrorType(process.getExecutionErrorType()); dbProcess.setExitValue(process.getExitValue()); dbProcess.setFinalBeginning(process.getFinalBeginning()); dbProcess.setFinalEnd(process.getFinalEnd()); dbProcess.setInitBeginning(process.getInitBeginning()); dbProcess.setInitEnd(process.getInitEnd()); dbProcess.setLastModified(process.getLastModified()); dbProcess.setLatestPhase(process.getLatestPhase()); dbProcess.setRemoteBeginning(process.getRemoteBeginning()); dbProcess.setRemoteEnd(process.getRemoteEnd()); dbProcess.setStatus(process.getStatus()); dbProcess.setSequenceNumber(process.getSequenceNumber()); dbProcess.setWorkerAddress(process.getWorkerAddress()); dbProcess.setSabotageCheck(process.getSabotageCheck()); dbProcess.setStderr(process.getStderr()); dbProcess.setStdout(process.getStdout()); } public static void simpleCommandCopy(AG_Command cmd, AG_Command dbCommand) { dbCommand.setDestination(cmd.getDestination()); dbCommand.setFileName(cmd.getFileName()); dbCommand.setFileSize(cmd.getFileSize()); dbCommand.setLastModified(cmd.getLastModified()); dbCommand.setName(cmd.getName()); dbCommand.setProgress(cmd.getProgress()); dbCommand.setSource(cmd.getSource()); dbCommand.setStatus(cmd.getStatus()); dbCommand.setTransferBegin(cmd.getTransferBegin()); dbCommand.setTransferEnd(cmd.getTransferEnd()); dbCommand.setTransferRate(cmd.getTransferRate()); } public static <T> boolean equals(T t, T t2, List<String> excludedProperties){ Class<? extends Object> clazz = t.getClass(); Class<? extends Object> clazz2 = t2.getClass(); if(!clazz.equals(clazz2)){ return false; } String TPackageName = clazz.getPackage().getName(); for(Method method : clazz.getMethods()){ String methodName = method.getName(); boolean isAGet = methodName.startsWith("get"); if(isAGet){ Class<?> returnType = method.getReturnType(); String methodReturnPackage = (returnType.isPrimitive() ? returnType.getName() : returnType.getPackage().getName()); String firstLetter = methodName.substring(3,4).toLowerCase(); String theRestOfTheName = methodName.substring(4); String propertieName = firstLetter+theRestOfTheName; boolean notExcludedPropertie = !excludedProperties.contains(propertieName); boolean notACollection = !returnType.isAssignableFrom(List.class); boolean notInTheSamePackage = !methodReturnPackage.equals(TPackageName); if(notExcludedPropertie && notACollection && notInTheSamePackage){ try { Object result = method.invoke(t, (Object[])null); Object result2 = method.invoke(t2, (Object[])null); if(result != null && result2 != null){ if(!result.equals(result2)){ return false; } } else{ if((result != null && result2 == null) || (result == null && result2 != null)){ return false; } } } catch (Exception e) { return false; } } } } return true; } public static void simpleWorkerStatusChangeCopy(AG_WorkerStatusChange wsc, AG_WorkerStatusChange dbChange) { dbChange.setLastModified(wsc.getLastModified()); dbChange.setStatus(wsc.getStatus()); dbChange.setTimeOfChange(wsc.getTimeOfChange()); } public static AG_PeerStatusChange convertPeerStatusChange(DS_PeerStatusChange psc) { AG_PeerStatusChange agPsc = new AG_PeerStatusChange(); agPsc.setCurrentStatus(psc.getCurrentStatus()); agPsc.setLastModified(psc.getLastModified()); agPsc.setTimeOfChange(psc.getTimeOfChange()); agPsc.setVersion(psc.getVersion()); return agPsc; } }