⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webstartio.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Christopher Kohlhaas                                  |
 |                                                                          |
 | This program is free software; you can redistribute it and/or modify     |
 | it under the terms of the GNU General Public License as published by the |
 | Free Software Foundation. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/

package org.rapla.components.iolayer;

import java.awt.Component;
import java.awt.Frame;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.avalon.framework.logger.Logger;

final public class WebstartIO extends DefaultIO {
    Method lookup;
    Method getDefaultPage;
    Method showPageFormatDialog;
    Method print;
    Method saveFileDialog;
    Method openFileDialog;
    Method getName;
    Method getInputStream;
    Method setContents;
    Class unavailableServiceException;
    String printService = "javax.jnlp.PrintService";
    String fileSaveService = "javax.jnlp.FileSaveService";
    String fileOpenService = "javax.jnlp.FileOpenService";
    String clipboardService = "javax.jnlp.ClipboardService";

    public WebstartIO(Logger logger) throws UnsupportedOperationException {
        super( logger);
        try {
            Class serviceManagerC = Class.forName("javax.jnlp.ServiceManager");
            Class printServiceC = Class.forName(printService);
            Class fileSaveServiceC = Class.forName(fileSaveService);
            Class fileOpenServiceC = Class.forName(fileOpenService);
            Class clipboardServiceC = Class.forName(clipboardService);
            Class fileContents = Class.forName("javax.jnlp.FileContents");
            unavailableServiceException = Class.forName("javax.jnlp.UnavailableServiceException");

            getName = fileContents.getMethod("getName", new Class[] {} );
            getInputStream = fileContents.getMethod("getInputStream", new Class[] {} );
            lookup = serviceManagerC.getMethod("lookup", new Class[] {String.class});
            getDefaultPage = printServiceC.getMethod("getDefaultPage",new Class[] {});
            showPageFormatDialog = printServiceC.getMethod("showPageFormatDialog",new Class[] {PageFormat.class});
            print = printServiceC.getMethod("print",new Class[] {Printable.class});
            saveFileDialog = fileSaveServiceC.getMethod("saveFileDialog",new Class[] {String.class,String[].class,InputStream.class,String.class});
            openFileDialog = fileOpenServiceC.getMethod("openFileDialog",new Class[] {String.class,String[].class});
            setContents = clipboardServiceC.getMethod("setContents", new Class[] {Transferable.class});
        } catch (ClassNotFoundException ex) {
        	getLogger().error(ex.getMessage());
            throw new UnsupportedOperationException("Java Webstart not available due to " + ex.getMessage());
        } catch (Exception ex) {
        	getLogger().error(ex.getMessage());
            throw new UnsupportedOperationException(ex.getMessage());
        }
    }

    private Object invoke(String serviceName, Method method, Object[] args) throws Exception {
        Object service;
        try {
            service = lookup.invoke( null, new Object[] { serviceName });
            return method.invoke( service,  args);
        } catch (InvocationTargetException e) {
            throw (Exception) e.getTargetException();
        } catch (Exception e) {
            if ( unavailableServiceException.isInstance( e ) ) {
                 throw new UnsupportedOperationException("The java-webstart serivce " + serviceName + " is not available!");
            }
            throw new UnsupportedOperationException(e.getMessage());
        }
    }

    public PageFormat defaultPage() throws UnsupportedOperationException {
        if ( isJDK1_5orHigher() )
            return super.defaultPage();
        PageFormat format = null;
        try {
            format = (PageFormat) invoke ( printService, getDefaultPage, new Object[] {} ) ;
        } catch (Exception ex) {
            getLogger().error("Can't get print service using default PageFormat." + ex.getMessage());
        }
        if (format == null)
            format = new PageFormat();
        logPaperSize (format.getPaper());
        return format;
    }

    public void setContents(Transferable transferable, ClipboardOwner owner) {
    	try {
    		invoke( clipboardService, setContents, new Object[] {transferable});
    	} catch (Exception ex) {
            throw new UnsupportedOperationException(ex.getMessage());
        }
    }

    public PageFormat showFormatDialog(PageFormat format) throws UnsupportedOperationException {
        if ( isJDK1_5orHigher() )
            return super.showFormatDialog( format );
        logPaperSize (format.getPaper());
        try {
            // format = getPrintService().showPageFormatDialog(format);
            format = (PageFormat) invoke( printService, showPageFormatDialog, new Object[] {format});
        } catch (Exception ex) {
            throw new UnsupportedOperationException(ex.getMessage());
        }
        return format;
    }

    /** in the new JDK we don't need the webstart print service */
    private boolean isJDK1_5orHigher() {
        try {
            String version = System.getProperty("java.version");
            boolean  oldVersion = version.startsWith("1.4") || version.startsWith("1.3");
            //System.out.println( version + " new=" + !oldVersion);
            return !oldVersion;
            //return false;
        } catch (SecurityException ex) {
            return false;
        }
    }

    /**
   Prints an printable object. The format parameter is ignored, if askFormat is not set.
   Call showFormatDialog to set the PageFormat.
   @param askFormat If true a dialog will show up to allow the user to edit printformat.
   */
    public boolean print(Printable printable, PageFormat format, boolean askFormat) throws PrinterException,UnsupportedOperationException  {
        if ( isJDK1_5orHigher() ) {
            return super.print( printable , format, askFormat );
        }
        logPaperSize (format.getPaper());
        if ( askFormat ) {
        	format= showFormatDialog(format);
        }
        try {
            Boolean result = (Boolean) invoke( printService , print, new Object[] { printable });
            return result.booleanValue();
        } catch (PrinterException ex) {
            throw ex;
        } catch (Exception ex) {
            throw new UnsupportedOperationException(ex.getMessage());
        }
    }

    public String saveAsPostscriptShowDialog(String dir,Printable printable,PageFormat format,boolean askFormat,Component owner) throws IOException,UnsupportedOperationException {
        if (askFormat) { format= showFormatDialog(format); }
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        callExport(printable,format,out);
        if (dir == null)
            dir = "";
        return saveFile( null, dir, new String[] {"ps"},"RaplaOutput.ps", out.toByteArray());
    }

    public void saveAsPostscript(
            Printable printable
            ,PageFormat format
            ,OutputStream out
                         )
    {
        throw new UnsupportedOperationException("Can't print dir without a save-dialog in java webstart! Use saveComponentShowDialog instead!");
    }

    public String saveFile(Frame frame,String dir, String[] fileExtensions, String filename, byte[] content) throws IOException {
        try {
            
            InputStream in =  new ByteArrayInputStream( content);
            Object result = invoke( fileSaveService, saveFileDialog, new Object[] {
                    dir
                    ,fileExtensions
                    ,in
                    ,filename
                                            });
            if (result != null)
                return (String) getName.invoke( result, new Object[] {});
            else
                return null;
        } catch (IOException ex) {
            throw ex;
        } catch (Exception ex) {
            throw new UnsupportedOperationException("Can't invoke save Method " + ex.getMessage() );
        }
        
    }

    public FileContent openFile(Frame frame,String dir, String[] fileExtensions) throws IOException {
        try {
            
            Object result = invoke( fileOpenService, openFileDialog, new Object[] {
                    dir
                    ,fileExtensions
                                            });
            
            if (result != null)
            {
                String name = (String) getName.invoke( result, new Object[] {});
                InputStream in = (InputStream) getInputStream.invoke( result, new Object[] {});
                FileContent content = new FileContent();
                content.setName( name );
                content.setInputStream( in );
                return content;
            }

            return null;
        } catch (IOException ex) {
            throw ex;
        } catch (Exception ex) {
            throw new UnsupportedOperationException("Can't invoke open Method " + ex.getMessage() );
        }
        
    }

     

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -