jtulach@309: package org.apidesign.exceptions.trycatchredo; jtulach@309: jtulach@309: import java.awt.EventQueue; jtulach@309: import java.awt.event.ActionEvent; jtulach@309: import java.io.IOException; jtulach@309: import java.io.OutputStream; jtulach@309: import java.net.URL; jtulach@309: import javax.swing.AbstractAction; jtulach@309: import javax.swing.JDialog; jtulach@309: import javax.swing.JOptionPane; jtulach@309: jtulach@309: /** jtulach@309: * jtulach@309: * @author Jaroslav Tulach jtulach@309: */ jtulach@309: final class SaveActionWithQuery extends AbstractAction { jtulach@309: private final URL where; jtulach@309: private final CharSequence what; jtulach@309: jtulach@309: SaveActionWithQuery(URL where, CharSequence what) { jtulach@309: this.where = where; jtulach@309: this.what = what; jtulach@309: } jtulach@309: jtulach@309: jtulach@309: public void actionPerformed(ActionEvent ev) { jtulach@309: assert EventQueue.isDispatchThread(); jtulach@309: for (;;) { jtulach@309: try { jtulach@309: OutputStream os = where.openConnection().getOutputStream(); jtulach@309: os.write(what.toString().getBytes()); jtulach@309: os.close(); jtulach@309: } catch (UserQuestionException ex) { jtulach@309: JOptionPane p = ex.getQuestionPane(); jtulach@309: JDialog d = p.createDialog(ex.getLocalizedMessage()); jtulach@309: d.setVisible(true); jtulach@309: ex.confirm(p.getValue()); jtulach@310: if ( jtulach@310: !p.getValue().equals(JOptionPane.CANCEL_OPTION) && jtulach@310: !p.getValue().equals(JOptionPane.CLOSED_OPTION) jtulach@310: ) { jtulach@310: continue; jtulach@310: } jtulach@309: } catch (IOException ex) { jtulach@309: JOptionPane.showMessageDialog(null, ex); jtulach@309: } jtulach@309: break; jtulach@309: } jtulach@309: } jtulach@309: }