package open.dolphin.system; import java.awt.*; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.concurrent.ExecutionException; import javax.swing.*; import open.dolphin.client.ClientContext; /** * OIDRequester * * @author Minagawa,Kazushi * */ public class OIDGetter extends JPanel { public static final String NEXT_OID_PROP = "nextOidProp"; private String helloReply; private final PropertyChangeSupport boundSupport = new PropertyChangeSupport(this); private OidTask task; private PropertyChangeListener pl; private JProgressBar bar; private JDialog progressDialog; private JButton comTest; public OIDGetter() { initialize(); connect(); } public String getHelloReply() { return helloReply; } public void setHelloReply(String oid) { helloReply = oid; boundSupport.firePropertyChange(NEXT_OID_PROP, "", helloReply); } public void addOidPropertyListener(PropertyChangeListener l) { boundSupport.addPropertyChangeListener(NEXT_OID_PROP, l); } public void removeOidPropertyListener(PropertyChangeListener l) { boundSupport.removePropertyChangeListener(NEXT_OID_PROP, l); } private void initialize() { try { InputStream in = this.getClass().getResourceAsStream("/open/dolphin/system/account-make-info.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); String line; StringBuilder sb = new StringBuilder(); while ( (line = reader.readLine()) != null) { sb.append(line); sb.append("\n"); } JTextArea infoArea = new JTextArea(); infoArea.setEditable(false); infoArea.setLineWrap(true); infoArea.setMargin(new Insets(10,10,10,10)); infoArea.setText(sb.toString()); JScrollPane scroller = new JScrollPane(infoArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); java.util.ResourceBundle bundle = ClientContext.getMyBundle(OIDGetter.class); btnPanel.add(new JLabel(bundle.getString("labelText.comTest"))); comTest = new JButton(bundle.getString("actionText.comTest")); btnPanel.add(comTest); this.setLayout(new BorderLayout()); this.add(scroller, BorderLayout.CENTER); this.add(btnPanel, BorderLayout.SOUTH); } catch (Exception e) { e.printStackTrace(System.err); } } private void connect() { comTest.addActionListener((ActionEvent e) -> { doTest(); }); } private void doTest() { task = new OidTask(); pl = (PropertyChangeEvent evt) -> { if ("state".equals(evt.getPropertyName())) { if (SwingWorker.StateValue.DONE==evt.getNewValue()) { stopProgress(); } else if (SwingWorker.StateValue.STARTED==evt.getNewValue()) { startProgress(); } } }; task.addPropertyChangeListener(pl); task.execute(); } private void startProgress() { bar = new JProgressBar(0, 100); java.util.ResourceBundle bundle = ClientContext.getMyBundle(OIDGetter.class); String note = bundle.getString("note.progress.comTesting"); Object[] message = new Object[]{note, bar}; JButton cancel = new JButton((String)UIManager.get("OptionPane.cancelButtonText")); cancel.addActionListener((ActionEvent ae) -> { task.cancel(true); }); JOptionPane pane = new JOptionPane( message, JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{cancel}); String title = ClientContext.getFrameTitle(bundle.getString("title.optionPane")); title = ClientContext.getFrameTitle(title); Component c = SwingUtilities.getWindowAncestor(this); progressDialog = pane.createDialog(c, title); progressDialog.setModal(false); bar.setIndeterminate(true); progressDialog.setVisible(true); } private void stopProgress() { task.removePropertyChangeListener(pl); } class OidTask extends SwingWorker<String, Void> { @Override protected String doInBackground() throws Exception { SystemDelegater sdl = new SystemDelegater(); String ret = sdl.hellow(); return ret; } @Override public void done() { bar.setIndeterminate(false); progressDialog.setVisible(false); if (isCancelled()) { return; } try { String result = get(); succeeded(result); } catch (InterruptedException ex) { ex.printStackTrace(System.err); } catch (ExecutionException ex) { failed(ex); } } protected void succeeded(String result) { Window myParent = SwingUtilities.getWindowAncestor(OIDGetter.this); java.util.ResourceBundle bundle = ClientContext.getMyBundle(OIDGetter.class); String title = bundle.getString("title.optionPane"); title = ClientContext.getFrameTitle(title); String msg = bundle.getString("instraction.proceedNextStep"); JOptionPane.showMessageDialog(myParent, msg, title, JOptionPane.INFORMATION_MESSAGE); setHelloReply(result); } protected void failed(Throwable cause) { String errMsg = cause.getMessage(); Window myParent = SwingUtilities.getWindowAncestor(OIDGetter.this); String title = ClientContext.getMyBundle(OIDGetter.class).getString("title.optionPane"); title = ClientContext.getFrameTitle(title); JOptionPane.showMessageDialog(myParent, errMsg, title, JOptionPane.WARNING_MESSAGE); setHelloReply(null); } } }