/** * */ package org.gcube.portlets.user.sdmxexportwizardtd.client.progress; import java.util.ArrayList; import org.gcube.portlets.user.sdmxexportwizardtd.client.rpc.SDMXExportWizardServiceAsync; import org.gcube.portlets.user.sdmxexportwizardtd.shared.ExportMonitor; import org.gcube.portlets.user.td.gxtservice.shared.TRId; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; /** * This {@link Timer} retrieves {@link OperationProgress} from the specified {@link OperationProgressSource} with the scheduled interval. * The retrieved information are spread to the subscribed {@link OperationProgressListener}. * * @author "Giancarlo Panichi" * g.panichi@isti.cnr.it * */ public class OperationProgressUpdater extends Timer { protected ArrayList listeners = new ArrayList(); /** * {@inheritDoc} */ @Override public void run() { Log.debug("requesting operation progress"); SDMXExportWizardServiceAsync.INSTANCE.getExportMonitor(new AsyncCallback() { @Override public void onFailure(Throwable caught) { cancel(); Log.error("Error retrieving the operation state", caught); String message = getStack(caught); fireOperationFailed(caught, "Failed getting operation updates", message); } @Override public void onSuccess(ExportMonitor result) { Log.info("retrieved ImportMonitor: "+result.getStatus()); switch (result.getStatus()) { case WAITING: break; case INITIALIZING: fireOperationInitializing(); break; case IN_PROGRESS: fireOperationUpdate(result.getProgress()); break; case FAILED: cancel(); fireOperationFailed(result.getError(),"Failed Client Library Import", result.getStatusDescription()); break; case SUCCEDED: cancel(); Log.info("Import fisnish TableId :"+result.getTrId()); fireOperationComplete(result.getTrId()); break; case ABORTED: cancel(); break; default: break; } } }); } protected String getStack(Throwable e) { String message = e.getLocalizedMessage()+" ->
"; Throwable c = e.getCause(); if (c!=null) message += getStack(c); return message; } protected void fireOperationInitializing() { for (OperationProgressListener listener:listeners) listener.operationInitializing(); } protected void fireOperationUpdate(float elaborated) { for (OperationProgressListener listener:listeners) listener.operationUpdate(elaborated); } protected void fireOperationComplete(TRId trId) { for (OperationProgressListener listener:listeners) listener.operationComplete(trId); } protected void fireOperationFailed(Throwable caught, String failure, String failureDetails) { for (OperationProgressListener listener:listeners) listener.operationFailed(caught, failure, failureDetails); } /** * Add a new {@link OperationProgressListener} to this {@link OperationProgressUpdater}. * @param listener the listener to add. */ public void addListener(OperationProgressListener listener) { listeners.add(listener); } /** * Removes the specified {@link OperationProgressListener} from this {@link OperationProgressUpdater}. * @param listener the listener to remove. */ public void removeListener(OperationProgressListener listener) { listeners.remove(listener); } }