package com.marinilli.b2.c10;
import com.marinilli.b2.c11.util.*;
import javax.swing.*;
import java.awt.event.*;
import javax.jnlp.*;
import java.net.*;
import java.io.*;
import java.util.Iterator;
import java.awt.*;
import java.awt.print.*;
/**
 * Chapter 10 - JNLP Security - Try it Out Yourself
 * @author Mauro Marinilli
 * @version 1.0
 */
public class SecurityTester extends JFrame{
  public SecurityTester() {
    JToolBar jToolBar = new JToolBar();
    JButton clipboardButton = new JButton();
    JButton openFileButton = new JButton();
    JButton saveFileButton = new JButton();
    JButton connectForeignHostButton = new JButton();
    JButton persistenceButton = new JButton();
    JButton printButton = new JButton();
    setTitle("permissions test ");
    getContentPane().setLayout(new BorderLayout());
    addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    clipboardButton.setText("paste");
    clipboardButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.out.println("Clipboard:"+getClipboardContent());
      }
    });
    openFileButton.setText("open file");
    openFileButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        openFile();
      }
    });
    saveFileButton.setText("save file");
    saveFileButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        saveFile();
      }
    });
    connectForeignHostButton.setText("connect foreign host");
    connectForeignHostButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        connectForeignHost("http://www.marinilli.com/index.html");
      }
    });
    persistenceButton.setText("use persistence");
    persistenceButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        usePersistence();
      }
    });
    printButton.setText("print");
    printButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        ((PrintService)Utilities.getService("javax.jnlp.PrintService")).print(
                                                        new PrintableExample());
      }
    });
    getContentPane().add(jToolBar, BorderLayout.NORTH);
    jToolBar.add(clipboardButton, null);
    jToolBar.add(openFileButton, null);
    jToolBar.add(saveFileButton, null);
    jToolBar.add(persistenceButton, null);
    jToolBar.add(printButton, null);
    jToolBar.add(connectForeignHostButton, null);
    pack();
    setVisible(true);
  }
  private void usePersistence(){
    PersistentStorage pst = new PersistentStorage();
    pst.write("key","value");
    System.out.println("data written.");
  }
  private String getClipboardContent() {
    String s = "";
    ClipboardService cbs =
     (ClipboardService)Utilities.getService("javax.jnlp.ClipboardService");
    try {
      if (cbs.getContents()!=null)
        s=(String)cbs.getContents().getTransferData(java.awt.datatransfer.DataFlavor.stringFlavor);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return s;
  }
  public void openFile() {
    FileContents file = null;
    FileOpenService fs =
     (FileOpenService)Utilities.getService("javax.jnlp.FileOpenService");
    if (fs!=null) {
      try {
        file = fs.openFileDialog(null,null);
      } catch (Exception e) {
        System.out.println("openFile: "+e);
      }
    }
  }
  public void saveFile() {
    FileContents file = null;
    FileOpenService fo =
     (FileOpenService)Utilities.getService("javax.jnlp.FileOpenService");
    FileSaveService fs =
     (FileSaveService)Utilities.getService("javax.jnlp.FileSaveService");
    if (fs!=null) {
      try {
        file = fo.openFileDialog(null, null);
        FileContents savedFile = fs.saveAsFileDialog(null, null, file);
      } catch (Exception e) {
        System.out.println("openFile: "+e);
      }
    }
  }
  public void connectForeignHost(String url) {
    try {
      FileOutputStream fos = new FileOutputStream("aFile.html");
      URL anURL = new URL(url);
      URLConnection anURLConn = anURL.openConnection();
      InputStream is = anURLConn.getInputStream();
      int q;
      while ((q = is.read()) != -1)
        fos.write(q);
      is.close();
      fos.close();
    } catch (Exception e) {
      System.out.println("connectForeignHost "+e);
    }
  }
  public class PrintableExample implements Printable {
    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex){
      Graphics2D g2d = (Graphics2D)graphics;
      g2d.setPaint(Color.blue);
      g2d.drawString("Print Test",200,200);
      return PAGE_EXISTS;
    }
  }
  public static void main(String[] args) {
    SecurityTester securityTester1 = new SecurityTester();
  }
}