Author: chatellier Date: 2011-01-14 17:06:27 +0000 (Fri, 14 Jan 2011) New Revision: 511 Log: Upload de r?\195?\169sultat ?\195?\160 nouveau fonctionnel Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorage.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/LengthStructureMatrixFilter.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ExportUploadDialog.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectUploadResultView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/command/Command.java 2011-01-14 17:06:27 UTC (rev 511) @@ -25,8 +25,6 @@ package fr.ifremer.coser.command; -import java.util.UUID; - import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.bean.AbstractDataContainer; import fr.ifremer.coser.bean.Project; @@ -58,7 +56,7 @@ * du même groupe de commandes. * * @return command UUID - * @see UUID + * @see java.util.UUID */ public String getCommandUUID() { return commandUUID; @@ -69,7 +67,7 @@ * du même groupe de commandes. * * @param commandUUID new uuid - * @see UUID + * @see java.util.UUID */ public void setCommandUUID(String commandUUID) { this.commandUUID = commandUUID; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/ProjectService.java 2011-01-14 17:06:27 UTC (rev 511) @@ -30,17 +30,14 @@ import java.beans.Introspector; import java.io.BufferedOutputStream; -import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; -import java.io.Writer; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/services/WebService.java 2011-01-14 17:06:27 UTC (rev 511) @@ -50,6 +50,7 @@ import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; @@ -283,7 +284,7 @@ project = projectService.openProject(project.getName()); OneResultFileFilter oneRFF = new OneResultFileFilter(config, - (Project)path[0], (Selection)path[1], (RSufiResult)path[2], exportWithData); + project, (Selection)path[1], (RSufiResult)path[2], exportWithData); mFileFilters.add(oneRFF); } @@ -310,10 +311,13 @@ * @param login remote admin login * @param password remote admin password * @param progress progress monitor + * @return upload error status or {@code null} if no error * @throws CoserBusinessException */ - public void performResultUpload(Collection<Object[]> selectedResults, String login, String password, ProgressMonitor progress) throws CoserBusinessException { + public String performResultUpload(Collection<Object[]> selectedResults, String login, String password, ProgressMonitor progress) throws CoserBusinessException { + String uploadStatus = null; + // first copy prepare directory with only necessary data // ie project with only selected selections // and selection with only selected results @@ -355,9 +359,9 @@ } HttpResponse response = httpclient.execute(httppost); - - if (log.isDebugEnabled()) { - log.debug("Upload response code : " + response.getStatusLine()); + + if (response.getStatusLine().getStatusCode() != 200) { + uploadStatus = response.getStatusLine().getReasonPhrase(); } } catch (ClientProtocolException ex) { throw new CoserBusinessException("Can't upload file", ex); @@ -366,6 +370,8 @@ } prepareZip.delete(); + + return uploadStatus; } /** Modified: trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorage.java =================================================================== --- trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorage.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-business/src/main/java/fr/ifremer/coser/storage/DataStorage.java 2011-01-14 17:06:27 UTC (rev 511) @@ -26,13 +26,12 @@ package fr.ifremer.coser.storage; import java.util.Iterator; -import java.util.List; /** * Data storage utiliser pour manipuler dans l'application des * tableau de String, mais les stocker en back différement. * - * Cette interface respecte globalement l'interface d'une {@link List}. + * Cette interface respecte globalement l'interface d'une {@link java.util.List}. * * @author chatellier * @version $Revision$ Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2011-01-14 17:06:27 UTC (rev 511) @@ -32,7 +32,6 @@ import java.io.File; import java.io.IOException; import java.net.URI; -import java.util.List; import java.util.Locale; import javax.swing.JDialog; @@ -40,7 +39,6 @@ import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; -import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.config.ConfigUI; import jaxx.runtime.swing.editor.config.ConfigUIHelper; @@ -67,7 +65,6 @@ import fr.ifremer.coser.ui.project.ProjectOpenView; import fr.ifremer.coser.ui.project.ProjectSummaryView; import fr.ifremer.coser.ui.result.ResultHandler; -import fr.ifremer.coser.ui.result.RsufiResultRenderer; import fr.ifremer.coser.ui.result.SelectUploadResultView; import fr.ifremer.coser.ui.selection.SelectionHandler; import fr.ifremer.coser.ui.selection.SelectionView; Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/LengthStructureMatrixFilter.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/LengthStructureMatrixFilter.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/common/LengthStructureMatrixFilter.java 2011-01-14 17:06:27 UTC (rev 511) @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.List; -import org.jfree.util.Log; import org.nuiton.math.matrix.MatrixFactory; import org.nuiton.math.matrix.MatrixND; import org.nuiton.math.matrix.viewer.MatrixFilter; Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ExportUploadDialog.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ExportUploadDialog.jaxx 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ExportUploadDialog.jaxx 2011-01-14 17:06:27 UTC (rev 511) @@ -45,7 +45,7 @@ <cell anchor="east"> <JCheckBox id="sourceDataExport" selected="true" /> </cell> - <cell columns="2"> + <cell columns="2" anchor="west"> <JLabel text="coser.ui.uploadresult.extractWithData" /> </cell> </row> @@ -70,10 +70,10 @@ </cell> </row> <row> - <cell> + <cell fill="horizontal"> <JLabel text="coser.ui.uploadresult.uploadPassword" /> </cell> - <cell> + <cell fill="horizontal"> <JPasswordField id="uploadPasswordtextField" /> </cell> </row> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/ResultHandler.java 2011-01-14 17:06:27 UTC (rev 511) @@ -39,6 +39,7 @@ import jaxx.runtime.JAXXUtil; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import fr.ifremer.coser.CoserBusinessException; import fr.ifremer.coser.CoserException; @@ -66,10 +67,12 @@ //SwingUtil.fixTableColumnWidth(view.getSelectedProjectTable(), 1, 25); //SwingUtil.fixTableColumnWidth(view.getAvailableProjectTable(), 1, 25); - view.getAvailableProjectTable().setDefaultRenderer(String[].class, new RsufiResultRenderer()); + view.getAvailableResultTable().setDefaultRenderer(String[].class, new RsufiResultRenderer()); + view.getSelectedResultTable().setDefaultRenderer(String[].class, new RsufiResultRenderer()); // initialise les données avec les filtres par default updateAvailableResultsFilter(view); + view.getSelectedResultTableModel().setResultPath(new ArrayList<Object[]>()); } @@ -91,7 +94,7 @@ try { List<Object[]> results = webService.findAllProjectWithResult(beginDate, endDate, onlyPubliable); - view.getAvailableProjectTableModel().setResultPath(results); + view.getAvailableResultTableModel().setResultPath(results); } catch (CoserBusinessException ex) { throw new CoserException("Can't get results", ex); } @@ -106,9 +109,9 @@ // get new result to add List<Object[]> newResult = new ArrayList<Object[]>(); - int[] selectedAvailableRows = view.getAvailableProjectTable().getSelectedRows(); + int[] selectedAvailableRows = view.getAvailableResultTable().getSelectedRows(); for (int selectedAvailableRow : selectedAvailableRows) { - Object[] resultData = view.getAvailableProjectTableModel().getResultPath().get(selectedAvailableRow); + Object[] resultData = view.getAvailableResultTableModel().getResultPath().get(selectedAvailableRow); newResult.add(resultData); } @@ -116,9 +119,9 @@ // seulement lors du clic sur le bouton export/upload // add new results - List<Object[]> currentResult = view.getSelectedProjectTableModel().getResultPath(); + List<Object[]> currentResult = view.getSelectedResultTableModel().getResultPath(); currentResult.addAll(newResult); - view.getAvailableProjectTableModel().setResultPath(currentResult); + view.getSelectedResultTableModel().setResultPath(currentResult); } /** @@ -127,12 +130,12 @@ * @param view view */ public void removeSelectedResult(SelectUploadResultView view) { - List<Object[]> currentResult = view.getSelectedProjectTableModel().getResultPath(); - int[] selectedSelectedRows = view.getSelectedProjectTable().getSelectedRows(); + List<Object[]> currentResult = view.getSelectedResultTableModel().getResultPath(); + int[] selectedSelectedRows = view.getSelectedResultTable().getSelectedRows(); for (int selectedSelectedRow : selectedSelectedRows) { currentResult.remove(selectedSelectedRow); } - view.getAvailableProjectTableModel().setResultPath(currentResult); + view.getSelectedResultTableModel().setResultPath(currentResult); } /** @@ -148,22 +151,22 @@ // get result selected by user SelectUploadResultView parentView = view.getContextValue(SelectUploadResultView.class, JAXXUtil.PARENT); - final Collection<Object[]> selectedResult = parentView.getSelectedProjectTableModel().getResultPath(); + final Collection<Object[]> selectedResult = parentView.getSelectedResultTableModel().getResultPath(); if (CollectionUtils.isNotEmpty(selectedResult)) { - SwingWorker<Void, Void> task = new SwingWorker<Void, Void>() { + SwingWorker<String, Void> task = new SwingWorker<String, Void>() { @Override - protected Void doInBackground() { + protected String doInBackground() { try { // get progress bar CoserProgressBar progressBar = view.getUploadProgressBar(); WebService webService = view.getContextValue(WebService.class); - webService.performResultUpload(selectedResult, login, password, progressBar); + String status = webService.performResultUpload(selectedResult, login, password, progressBar); + return status; } catch (CoserBusinessException ex) { throw new CoserException("Can't send results", ex); } - return null; } @Override @@ -171,13 +174,20 @@ // laisser cet appel, sinon les exceptions sont silencieuse try { - get(); - } catch (Exception ex) { - throw new CoserException("Can't send results", ex); + String status = get(); + + if (StringUtils.isNotEmpty(status)) { + JOptionPane.showMessageDialog(view, _("coser.ui.uploadresult.resultsuploaderror", status), + _("coser.ui.uploadresult.title"), JOptionPane.ERROR_MESSAGE); + } + else { + JOptionPane.showMessageDialog(view, _("coser.ui.uploadresult.resultsuploaded"), + _("coser.ui.uploadresult.title"), JOptionPane.INFORMATION_MESSAGE); + } } - - JOptionPane.showMessageDialog(view, _("coser.ui.uploadresult.resultsuploaded"), - _("coser.ui.uploadresult.title"), JOptionPane.INFORMATION_MESSAGE); + catch (Exception ex) { + throw new CoserException("Can't get upload status", ex); + } } }; task.execute(); @@ -199,7 +209,7 @@ boolean withData = view.getSourceDataExport().isSelected(); SelectUploadResultView parentView = view.getContextValue(SelectUploadResultView.class, JAXXUtil.PARENT); - Collection<Object[]> selectedResult = parentView.getSelectedProjectTableModel().getResultPath(); + Collection<Object[]> selectedResult = parentView.getSelectedResultTableModel().getResultPath(); WebService webService = view.getContextValue(WebService.class); try { webService.performResultExtract(selectedResult, extractDirectory, withData); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectUploadResultView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectUploadResultView.jaxx 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/result/SelectUploadResultView.jaxx 2011-01-14 17:06:27 UTC (rev 511) @@ -67,16 +67,17 @@ <row> <cell weightx="1" weighty="1" fill="both"> <JScrollPane> - <RsufiResultTreeModel id="availableProjectTableModel" initializer='new RsufiResultTreeModel(false)' - onTableChanged='addResultButton.setEnabled(getAvailableProjectTableModel().getRowCount() == 0)'/> - <JTable id="availableProjectTable" model="{getAvailableProjectTableModel()}"/> + <RsufiResultTreeModel id="availableResultTableModel" initializer='new RsufiResultTreeModel(false)' /> + <JTable id="availableResultTable" model="{getAvailableResultTableModel()}"/> + <ListSelectionModel javaBean="availableResultTable.getSelectionModel()" + onValueChanged="addResultButton.setEnabled(getAvailableResultTable().getSelectedRow() != -1)" /> </JScrollPane> </cell> </row> <row> <cell weightx="1" anchor="center"> <JButton id="addResultButton" text="coser.ui.uploadresult.addResults" - onActionPerformed="getHandler().addAvailableResult(this)" /> + onActionPerformed="getHandler().addAvailableResult(this)" enabled="false" /> </cell> </row> <row> @@ -87,16 +88,17 @@ <row> <cell weightx="1" weighty="1" fill="both"> <JScrollPane> - <RsufiResultTreeModel id="selectedProjectTableModel" initializer='new RsufiResultTreeModel(true)' - onTableChanged='removeResultButton.setEnabled(getAvailableProjectTableModel().getRowCount() == 0)'/> - <JTable id="selectedProjectTable" model="{getSelectedProjectTableModel()}"/> + <RsufiResultTreeModel id="selectedResultTableModel" initializer='new RsufiResultTreeModel(true)' /> + <JTable id="selectedResultTable" model="{getSelectedResultTableModel()}" /> + <ListSelectionModel javaBean="selectedResultTable.getSelectionModel()" + onValueChanged="removeResultButton.setEnabled(getSelectedResultTable().getSelectedRow() != -1)" /> </JScrollPane> </cell> </row> <row> <cell weightx="1" anchor="center"> <JButton id="removeResultButton" text="coser.ui.uploadresult.removeResults" - onActionPerformed="getHandler().removeSelectedResult(this)"/> + onActionPerformed="getHandler().removeSelectedResult(this)" enabled="false" /> </cell> </row> <row> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionHandler.java 2011-01-14 17:06:27 UTC (rev 511) @@ -35,7 +35,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2011-01-14 17:06:27 UTC (rev 511) @@ -236,6 +236,7 @@ coser.ui.uploadresult.removeResults=Remove results coser.ui.uploadresult.resultsextracted=Result extracted. coser.ui.uploadresult.resultsuploaded=Results published. +coser.ui.uploadresult.resultsuploaderror=Result upload fails for reason \: %s coser.ui.uploadresult.selectedResults=Selected results \: coser.ui.uploadresult.title=Results publication coser.ui.uploadresult.upload=Send results Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2011-01-14 17:06:27 UTC (rev 511) @@ -226,7 +226,7 @@ coser.ui.uploadresult.extract=Extraire coser.ui.uploadresult.extractChoice=Extraire vers un dossier coser.ui.uploadresult.extractTo=Dossier d'extraction \: -coser.ui.uploadresult.extractWithData=Extraire les r\u00E9sultats avec les donn\uFFFDes sources +coser.ui.uploadresult.extractWithData=Extraire les r\u00E9sultats avec les donn\u00E9es sources coser.ui.uploadresult.filter.beginDate=Date de d\u00E9but \: coser.ui.uploadresult.filter.endDate=Date de fin \: coser.ui.uploadresult.filter.publiableResults=Seulement les r\u00E9sultats publiables @@ -236,6 +236,7 @@ coser.ui.uploadresult.removeResults=Supprimer le r\u00E9sultat coser.ui.uploadresult.resultsextracted=R\u00E9sultats extraits. coser.ui.uploadresult.resultsuploaded=R\u00E9sultats publi\u00E9s. +coser.ui.uploadresult.resultsuploaderror=Echec de l'envoi des r\u00E9sultats pour la raison \: %s coser.ui.uploadresult.selectedResults=R\u00E9sultats s\u00E9lectionn\u00E9s \: coser.ui.uploadresult.title=Publication des r\u00E9sultats coser.ui.uploadresult.upload=Envoyer les r\u00E9sultats Modified: trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java =================================================================== --- trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java 2011-01-14 14:37:55 UTC (rev 510) +++ trunk/coser-web/src/main/java/fr/ifremer/coser/web/actions/UploadResultAction.java 2011-01-14 17:06:27 UTC (rev 511) @@ -31,9 +31,12 @@ import java.util.Date; import java.util.Properties; +import javax.servlet.http.HttpServletResponse; + import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.struts2.ServletActionContext; import org.nuiton.util.StringUtil; import com.opensymphony.xwork2.Action; @@ -126,6 +129,8 @@ if (log.isWarnEnabled()) { log.warn("Wrong login/password : login = " + login); } + HttpServletResponse response = ServletActionContext.getResponse(); + response.setStatus(HttpServletResponse.SC_FORBIDDEN); } }