Changeset 16582 in osm for applications


Ignore:
Timestamp:
2009-07-19T18:32:45+02:00 (15 years ago)
Author:
jttt
Message:

Made plug-in work with JOSM new ProgressMonitor API

Location:
applications/editors/josm/plugins/DirectUpload
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGui.java

    r15828 r16582  
    1111import static org.openstreetmap.josm.tools.I18n.tr;
    1212
    13 import java.awt.Dimension;
     13import java.awt.GridBagLayout;
    1414import java.awt.event.ActionEvent;
    15 import java.awt.GridBagLayout;
    16 import java.io.BufferedOutputStream;
    1715import java.io.ByteArrayInputStream;
    1816import java.io.ByteArrayOutputStream;
     17import java.io.IOException;
    1918import java.io.InputStream;
    20 import java.io.IOException;
    2119import java.io.OutputStream;
    22 import java.lang.String;
    2320import java.net.HttpURLConnection;
    2421import java.net.URL;
     
    2724import java.nio.charset.Charset;
    2825import java.nio.charset.CharsetEncoder;
    29 import java.text.DateFormat;
    3026import java.text.DecimalFormat;
    3127import java.text.SimpleDateFormat;
    3228import java.util.Date;
    3329
    34 import javax.swing.JButton;
    3530import javax.swing.JCheckBox;
    3631import javax.swing.JLabel;
     
    3833import javax.swing.JTextField;
    3934
     35import org.openstreetmap.josm.Main;
    4036import org.openstreetmap.josm.data.gpx.GpxData;
    4137import org.openstreetmap.josm.gui.ExtendedDialog;
    4238import org.openstreetmap.josm.gui.JMultilineLabel;
     39import org.openstreetmap.josm.gui.MapView;
     40import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    4341import org.openstreetmap.josm.gui.layer.GpxLayer;
    4442import org.openstreetmap.josm.gui.layer.Layer;
    45 import org.openstreetmap.josm.gui.MapView;
    46 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
     43import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4744import org.openstreetmap.josm.io.GpxWriter;
    48 import org.openstreetmap.josm.Main;
    4945import org.openstreetmap.josm.tools.Base64;
    5046import org.openstreetmap.josm.tools.GBC;
     
    164160     * @param GpxData The GPX Data to upload
    165161     */
    166     private void upload(String description, String tags, Boolean isPublic, GpxData gpxData) throws IOException {
    167         if(checkForErrors(username, password, description, gpxData))
    168             return;
    169 
    170         // Clean description/tags from disallowed chars
    171         description = description.replaceAll("[&?/\\\\]"," ");
    172         tags = tags.replaceAll("[&?/\\\\.,;]"," ");
    173 
    174         // Set progress dialog to indeterminate while connecting
    175         Main.pleaseWaitDlg.progress.setValue(0);
    176         Main.pleaseWaitDlg.setIndeterminate(true);
    177         Main.pleaseWaitDlg.currentAction.setText(tr("Connecting..."));
    178 
    179         try {
    180             // Generate data for upload
    181             ByteArrayOutputStream baos  = new ByteArrayOutputStream();
    182             writeGpxFile(baos, "file", gpxData);
    183             writeField(baos, "description", description);
    184             writeField(baos, "tags", (tags != null && tags.length() > 0) ? tags : "");
    185             writeField(baos, "public", isPublic ? "1" : "0");
    186             writeString(baos, "--" + BOUNDARY + "--" + LINE_END);
    187 
    188             ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
    189             HttpURLConnection conn = setupConnection(baos.size());
    190 
    191             Main.pleaseWaitDlg.progress.setMaximum(baos.size());
    192             Main.pleaseWaitDlg.setIndeterminate(false);
    193 
    194             try {
    195                 flushToServer(bais, conn.getOutputStream());
    196             } catch(Exception e) {}
    197 
    198             if(cancelled) {
    199                 conn.disconnect();
    200                 OutputDisplay.setText(tr("Upload cancelled"));
    201                 buttons.get(0).setEnabled(true);
    202                 cancelled = false;
    203             } else {
    204                 boolean success = finishUpConnection(conn);
    205                 buttons.get(0).setEnabled(!success);
    206                 if(success)
    207                     buttons.get(1).setText(tr("Close"));
    208             }
    209         } catch(Exception e) {
    210             OutputDisplay.setText(tr("Error while uploading"));
    211             e.printStackTrace();
    212         }
     162    private void upload(String description, String tags, Boolean isPublic, GpxData gpxData, ProgressMonitor progressMonitor) throws IOException {
     163        progressMonitor.beginTask(null);
     164        try {
     165                if(checkForErrors(username, password, description, gpxData))
     166                        return;
     167
     168                // Clean description/tags from disallowed chars
     169                description = description.replaceAll("[&?/\\\\]"," ");
     170                tags = tags.replaceAll("[&?/\\\\.,;]"," ");
     171
     172                // Set progress dialog to indeterminate while connecting
     173                progressMonitor.indeterminateSubTask(tr("Connecting..."));
     174
     175                try {
     176                        // Generate data for upload
     177                        ByteArrayOutputStream baos  = new ByteArrayOutputStream();
     178                        writeGpxFile(baos, "file", gpxData);
     179                        writeField(baos, "description", description);
     180                        writeField(baos, "tags", (tags != null && tags.length() > 0) ? tags : "");
     181                        writeField(baos, "public", isPublic ? "1" : "0");
     182                        writeString(baos, "--" + BOUNDARY + "--" + LINE_END);
     183
     184                        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
     185                        HttpURLConnection conn = setupConnection(baos.size());
     186
     187                        progressMonitor.setTicksCount(baos.size());
     188                        progressMonitor.subTask(null);
     189
     190                        try {
     191                                flushToServer(bais, conn.getOutputStream(), progressMonitor);
     192                        } catch(Exception e) {}
     193
     194                        if(cancelled) {
     195                                conn.disconnect();
     196                                OutputDisplay.setText(tr("Upload cancelled"));
     197                                buttons.get(0).setEnabled(true);
     198                                cancelled = false;
     199                        } else {
     200                                boolean success = finishUpConnection(conn);
     201                                buttons.get(0).setEnabled(!success);
     202                                if(success)
     203                                        buttons.get(1).setText(tr("Close"));
     204                        }
     205                } catch(Exception e) {
     206                        OutputDisplay.setText(tr("Error while uploading"));
     207                        e.printStackTrace();
     208                }
     209        } finally {
     210                progressMonitor.finishTask();
     211        }
    213212    }
    214213
     
    271270     * @param OutputStream
    272271     */
    273     private void flushToServer(InputStream in, OutputStream out) throws Exception {
     272    private void flushToServer(InputStream in, OutputStream out, ProgressMonitor progressMonitor) throws Exception {
    274273        // Upload in 10 kB chunks
    275274        byte[] buffer = new byte[10000];
     
    281280                cur += nread;
    282281                out.flush();
    283                 Main.pleaseWaitDlg.progress.setValue(cur);
    284                 Main.pleaseWaitDlg.currentAction.setText(getProgressText(cur));
     282                progressMonitor.worked(nread);
     283                progressMonitor.subTask(getProgressText(cur, progressMonitor));
    285284
    286285                if(cancelled)
     
    290289        if(!cancelled)
    291290            out.flush();
    292         Main.pleaseWaitDlg.currentAction.setText("Waiting for server reply...");
     291        progressMonitor.subTask("Waiting for server reply...");
    293292        buffer = null;
    294293    }
     
    299298     * @return String Message
    300299     */
    301     private String getProgressText(int cur) {
    302         int max = Main.pleaseWaitDlg.progress.getMaximum();
     300    private String getProgressText(int cur, ProgressMonitor progressMonitor) {
     301        int max = progressMonitor.getTicksCount();
    303302        int percent = Math.round(cur * 100 / max);
    304303        return tr("Uploading GPX track: {0}% ({1} of {2})",
     
    380379                         tagsField.getText(),
    381380                         publicCheckbox.isSelected(),
    382                          ((GpxLayer)Main.map.mapView.getActiveLayer()).data
     381                         ((GpxLayer)Main.map.mapView.getActiveLayer()).data,
     382                         progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false)
    383383                  );
    384384            }
Note: See TracChangeset for help on using the changeset viewer.