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