/* * SimpleConsole.java * * Copyright (C) 2010-2016, Microsoft Corporation * * This program is licensed to you under the terms of Version 2.0 of the * Apache License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) for more details. * */ package com.revo.deployr.example; import com.revo.deployr.client.*; import com.revo.deployr.client.auth.basic.RBasicAuthentication; import com.revo.deployr.client.factory.RClientFactory; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.URL; import java.util.ArrayList; public class SimpleConsole extends JFrame { JTextField id = new JTextField(System.getProperty("username"), 6); JPasswordField pw = new JPasswordField(System.getProperty("password"), 6); JTextField server = new JTextField(System.getProperty("endpoint"), 12); JTextArea inputText = new JTextArea("demo(graphics)"); JTextArea outputText = new JTextArea(); JButton exeButton = new JButton("Execute Code"); JButton exeSelButton = new JButton("Execute Selected Code"); JButton cc = new JButton("Connect/Authenticate"); JButton rc = new JButton("Sign Off & Release Client"); RUser rUser = null; RClient rClient = null; RProject rProject = null; public SimpleConsole() { initComponents(); } /** * @param args the command line arguments */ public static void main(String[] args) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new SimpleConsole().setVisible(true); } }); } private void initComponents() { this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (rClient != null) { try { if (rProject != null) { rProject.close(); rProject = null; } rClient.logout(rUser); } catch (RClientException ex) { ex.printStackTrace(); } catch (RSecurityException ex) { ex.printStackTrace(); } rClient.release(); } } }); setTitle("DeployR Java Client Library Simple Console"); JPanel mainPanel = new JPanel(new BorderLayout()); JPanel subPanel = new JPanel(new BorderLayout()); JPanel textPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel idLabel = new JLabel("Username: "); textPanel.add(idLabel); textPanel.add(id); JLabel pwLabel = new JLabel("Password: "); textPanel.add(pwLabel); textPanel.add(pw); JLabel sLabel = new JLabel("Server: "); textPanel.add(sLabel); textPanel.add(server); cc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { createClient(); } }); textPanel.add(cc); rc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { releaseClient(); } }); rc.setEnabled(false); textPanel.add(rc); subPanel.add(textPanel, BorderLayout.NORTH); JPanel executePanel = new JPanel(new BorderLayout()); JPanel bp = new JPanel(new FlowLayout(FlowLayout.LEFT)); exeButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String code = inputText.getText(); executeCode(code); } }); bp.add(exeButton); exeButton.setEnabled(false); exeSelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String code = inputText.getSelectedText(); if (code != null) { executeCode(code); } } }); bp.add(exeSelButton); exeSelButton.setEnabled(false); executePanel.add(bp, BorderLayout.NORTH); JPanel textAreaExecutePanel = new JPanel(new GridLayout(1, 2)); JScrollPane isp = new JScrollPane(inputText); isp.setBorder(BorderFactory.createTitledBorder("Input Code")); textAreaExecutePanel.add(isp); JScrollPane osp = new JScrollPane(outputText); osp.setBorder(BorderFactory.createTitledBorder("Execute Results")); textAreaExecutePanel.add(osp); executePanel.add(textAreaExecutePanel, BorderLayout.CENTER); subPanel.add(executePanel, BorderLayout.CENTER); mainPanel.add(subPanel); this.getContentPane().add(mainPanel); pack(); this.setSize(800, 400); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = this.getSize(); this.setLocation(screenSize.width / 2 - (frameSize.width / 2), screenSize.height / 2 - (frameSize.height / 2)); } private void createClient() { try { String url = server.getText(); rClient = RClientFactory.createClient(url); RBasicAuthentication pAuthentication = new RBasicAuthentication(id.getText(), new String(pw.getPassword())); rUser = rClient.login(pAuthentication); if (rUser != null) { exeButton.setEnabled(true); exeSelButton.setEnabled(true); cc.setEnabled(false); rc.setEnabled(true); } } catch (RClientException ex) { ex.printStackTrace(); } catch (RSecurityException ex) { ex.printStackTrace(); } } private void releaseClient() { if (rClient != null) { try { if (rProject != null) { rProject.close(); rProject = null; } rClient.logout(rUser); rUser = null; } catch (RClientException ex) { ex.printStackTrace(); } catch (RSecurityException ex) { ex.printStackTrace(); } rClient.release(); rClient = null; cc.setEnabled(true); rc.setEnabled(false); exeButton.setEnabled(false); exeSelButton.setEnabled(false); } } private void executeCode(String code) { if (rUser != null) { try { if (rProject == null) { rProject = rUser.createProject(); } RProjectExecution codeResult = rProject.executeCode(code); outputText.append(codeResult.about().console + "\n"); // check for plot file ArrayList results = (ArrayList) codeResult.about().results; for (int i = 0; i < results.size(); i++) { RProjectResult pr = (RProjectResult) results.get(i); URL url = pr.about().url; if (url != null) { createPlotWindow(url, (i + 1) * 20, (i + 1) * 20); } } } catch (Exception ex) { ex.printStackTrace(); } } else { outputText.append("Please create client before executing code\n"); } } private void createPlotWindow(URL url, int x, int y) { ImagePanel panel = new ImagePanel(new ImageIcon(url).getImage()); JFrame frame = new JFrame(); frame.setTitle("DeployR Graph"); frame.getContentPane().add(panel); frame.pack(); frame.setLocation(x, y); frame.setVisible(true); } class ImagePanel extends JPanel { private Image img; public ImagePanel(String img) { this(new ImageIcon(img).getImage()); } public ImagePanel(Image img) { this.img = img; Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setSize(size); setLayout(null); } public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, null); } } }