/** * */ package org.gcube.portlets.user.td.sdmximportwidget.client; import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync; import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession; import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession; import org.gcube.portlets.user.td.gwtservice.shared.source.SDMXRegistrySource; import org.gcube.portlets.user.td.monitorwidget.client.MonitorBarUpdater; import org.gcube.portlets.user.td.monitorwidget.client.MonitorUpdater; import org.gcube.portlets.user.td.monitorwidget.client.MonitorUpdaterListener; import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; import org.gcube.portlets.user.td.wizardwidget.client.WizardCard; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.widget.core.client.FramedPanel; import com.sencha.gxt.widget.core.client.ProgressBar; import com.sencha.gxt.widget.core.client.box.AlertMessageBox; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData; import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer; import com.sencha.gxt.widget.core.client.container.VBoxLayoutContainer.VBoxLayoutAlign; import com.sencha.gxt.widget.core.client.event.HideEvent; import com.sencha.gxt.widget.core.client.event.HideEvent.HideHandler; //import com.allen_sauer.gwt.log.client.Log; //import com.google.gwt.user.client.Command; /** * * @author "Giancarlo Panichi" g.panichi@isti.cnr.it * */ public class SDMXOperationInProgressCard extends WizardCard implements MonitorUpdaterListener { public static final int STATUS_POLLING_DELAY = 1000; protected SDMXOperationInProgressCard thisCard; protected SDMXImportSession importSession; protected MonitorUpdater progressUpdater; protected ProgressBar progressBar; public SDMXOperationInProgressCard(final SDMXImportSession importSession) { super("Operation In Progress", ""); this.importSession = importSession; thisCard = this; VBoxLayoutContainer operationInProgressPanel = new VBoxLayoutContainer(); operationInProgressPanel.setVBoxLayoutAlign(VBoxLayoutAlign.CENTER); final FlexTable description = new FlexTable(); FlexCellFormatter cellFormatter = description.getFlexCellFormatter(); description.setCellSpacing(10); description.setCellPadding(4); description.setBorderWidth(0); // display:block;vertical-align:text-top; description.setHTML(0, 0, "Document: "); description.setText(0, 1, importSession.getSDMXDocument().getName()); description.setHTML(1, 0, "Source: "); description.setText(1, 1, importSession.getSource().getName()); if (importSession.getSource().getId().compareTo("SDMXRegistry") == 0) { description.setHTML(2, 0, "Url: "); description .setText( 2, 1, ((SDMXRegistrySource) importSession.getSource()) .getUrl() == null ? "Internal" : ((SDMXRegistrySource) importSession .getSource()).getUrl()); if (importSession.getSDMXDocument().getId().compareTo("codelist") == 0) { cellFormatter.setVerticalAlignment(3, 0, HasVerticalAlignment.ALIGN_TOP); description .setHTML(3, 0, "Codelist Selected: "); final FlexTable codelistDescription = new FlexTable(); codelistDescription.setBorderWidth(0); codelistDescription.setCellPadding(4); codelistDescription.setCellSpacing(10); codelistDescription .setHTML(0, 0, "Id: "); codelistDescription.setText(0, 1, importSession .getSelectedCodelist().getId()); codelistDescription .setHTML(1, 0, "Name: "); codelistDescription.setText(1, 1, importSession .getSelectedCodelist().getName()); codelistDescription .setHTML(2, 0, "Agency: "); codelistDescription.setText(2, 1, importSession .getSelectedCodelist().getAgencyId()); codelistDescription .setHTML(3, 0, "Version: "); codelistDescription.setText(3, 1, importSession .getSelectedCodelist().getVersion()); description.setWidget(3, 1, codelistDescription); } } FramedPanel summary = new FramedPanel(); summary.setHeadingText("Import Summary"); summary.setWidth(400); summary.add(description); operationInProgressPanel.add(summary, new BoxLayoutData(new Margins(20, 5, 10, 5))); ProgressBar progressBar = new ProgressBar(); operationInProgressPanel.add(progressBar, new BoxLayoutData( new Margins(10, 5, 10, 5))); setContent(operationInProgressPanel); } public void importSDMX() { TDGWTServiceAsync.INSTANCE.startSDMXImport(importSession, new AsyncCallback() { public void onSuccess(String taskId) { OperationMonitorSession operationMonitorSession = new OperationMonitorSession( taskId); progressUpdater = new MonitorUpdater( operationMonitorSession); progressUpdater.addListener(new MonitorBarUpdater( progressBar)); progressUpdater.addListener(thisCard); progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY); } public void onFailure(Throwable caught) { if (caught instanceof TDGWTSessionExpiredException) { getEventBus() .fireEvent( new SessionExpiredEvent( SessionExpiredType.EXPIREDONSERVER)); } else { showErrorAndHide("Error in importSDMX", "An error occured in importSDMX", "", caught); } } }); } @Override public void setup() { getWizardWindow().setEnableBackButton(false); setBackButtonVisible(false); setNextButtonVisible(false); getWizardWindow().setEnableNextButton(false); getWizardWindow().setNextButtonToFinish(); importSDMX(); } @Override public void monitorInitializing(OperationMonitor operationMonitor) { } @Override public void monitorUpdate(OperationMonitor operationMonitor) { } @Override public void monitorComplete(final TRId trId) { Command sayComplete = new Command() { public void execute() { try { getWizardWindow().close(false); Log.info("fire Complete: " + trId); getWizardWindow().fireCompleted(trId); } catch (Exception e) { Log.error("fire Complete :" + e.getLocalizedMessage()); } } }; getWizardWindow().setNextButtonCommand(sayComplete); setNextButtonVisible(true); getWizardWindow().setEnableNextButton(true); } @Override public void monitorFailed(Throwable caught, String reason, String failureDetails) { if (caught instanceof TDGWTSessionExpiredException) { getEventBus() .fireEvent( new SessionExpiredEvent( SessionExpiredType.EXPIREDONSERVER)); } else { AlertMessageBox d = new AlertMessageBox( "Error in Codelist Mapping Import", reason); d.addHideHandler(new HideHandler() { public void onHide(HideEvent event) { } }); d.show(); } } @Override public void monitorStopped(final TRId trId, String reason, String details) { Command sayComplete = new Command() { public void execute() { try { getWizardWindow().close(false); Log.info("fire Complete: tabular resource " + trId.getId()); Log.info("fire Complete: tableId " + trId.getTableId()); getWizardWindow().fireCompleted(trId); } catch (Exception e) { Log.error("fire Complete :" + e.getLocalizedMessage()); } } }; getWizardWindow().setNextButtonCommand(sayComplete); setNextButtonVisible(true); getWizardWindow().setEnableNextButton(true); } @Override public void monitorGeneratingView(OperationMonitor operationMonitor) { // TODO Auto-generated method stub } @Override public void monitorValidate(OperationMonitor operationMonitor) { // TODO Auto-generated method stub } @Override public void monitorAborted() { // TODO Auto-generated method stub } @Override public void monitorPutInBackground() { // TODO Auto-generated method stub } }