licensehandler.java

来自「提供ESB 应用mule源代码 提供ESB 应用mule源代码」· Java 代码 · 共 239 行

JAVA
239
字号
/* * $Id $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.module.boot;import org.mule.util.JarUtils;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedHashMap;/** * This class has methods for displaying the EULA and saving the license acceptance * acknowledgment. */public final class LicenseHandler{    private static final int MAX_ROWS_TO_DISPLAY = 80;    private static final String DEFAULT_LICENSE_TYPE = "Common Public Attribution License Version 1.0 (CPAL)";    private static final String DEFAULT_LICENSE_VERSION = "UNKNOWN";    private static final String VERSION_TEXT_PREFIX = "Version ";        private static final String LICENSE_TEXT_FILENAME = "LICENSE.txt";        private static final String LICENSE_TEXT_JAR_FILE_PATH = "META-INF/mule/" + LICENSE_TEXT_FILENAME;    private static final String LICENSE_PROPERTIES_JAR_FILE_PATH = "META-INF/mule/license.props";        private LicenseHandler()    {        // used as utility class at this point only    }        public static boolean isLicenseAccepted() throws Exception    {        return MuleBootstrapUtils.getResource(LICENSE_PROPERTIES_JAR_FILE_PATH, LicenseHandler.class) != null;    }        public static File getLicenseFile()    {        return new File(MuleBootstrapUtils.getMuleHomeFile(), LICENSE_TEXT_FILENAME);    }        /**     * Display the EULA and get the user's acceptance. Note that only a missing     * license file or a non-yes answer will cause this to return false. If the user     * accepts, but we can't write the license ack file for some reason, we'll still     * return true.     *      * @return boolean whether the license was accepted or not     */    public static boolean getAcceptance()    {        boolean hasAccepted;                try        {            if (!getLicenseFile().exists() || !MuleBootstrapUtils.getMuleLibDir().exists())            {                System.out.println("\nYour Mule installation seems to be incomplete. Please try downloading it again from http://mule.mulesource.org/display/MULE/Download and start again.");                hasAccepted = false;            }            else            {                System.out.println("\n\nPlease read over the following license agreement carefully:\n\n");                                LicenseInfo licenseInfo = readLicenseFileAndDisplayToStdout();                                hasAccepted = askUserForAcceptance();                                if (hasAccepted)                {                    saveLicenseInfo(licenseInfo);                }            }        }        catch (Exception e)        {            hasAccepted = false;            System.out.println("\nSorry, we encountered an error in processing your license agreement - please try again.");            e.printStackTrace();        }        return hasAccepted;    }    public static void saveLicenseInfo(LicenseInfo licenseInfo) throws Exception    {        if (licenseInfo != null && !isLicenseAccepted())        {            if (!MuleBootstrapUtils.getMuleLibDir().canWrite())            {                throw new Exception("No write permissions for " + MuleBootstrapUtils.MULE_LOCAL_JAR_FILENAME +                     " to MULE_HOME. If you are using MULE_BASE and multiple deployments, please ask your administrator to run Mule for the first time.");            }            File tempJarFile = createTempLicenseJarFile(licenseInfo);            MuleBootstrapUtils.getMuleLocalJarFile().delete();            MuleBootstrapUtils.renameFile(tempJarFile, MuleBootstrapUtils.getMuleLocalJarFile());        }    }    private static LicenseInfo readLicenseFileAndDisplayToStdout() throws IOException    {        String licenseType = null;        String licenseVersion = null;                BufferedReader stdin;        BufferedReader fileReader = null;        try        {            stdin = new BufferedReader(new InputStreamReader(System.in));            fileReader = new BufferedReader(new FileReader(getLicenseFile()));            int row = 1;                        while (fileReader.ready())            {                String line = fileReader.readLine();                    if (row == 1 && line.length() > 0)                 {                    licenseType = line;                }                if (row == 2 && line.startsWith(VERSION_TEXT_PREFIX))                {                    licenseVersion = line.substring(VERSION_TEXT_PREFIX.length());                }                    if ((row % MAX_ROWS_TO_DISPLAY) == 0)                {                    System.out.print("\nHit return to continue ... ");                    stdin.readLine();                }                    System.out.println(line);                row++;            }        }        finally        {            if (fileReader != null)            {                fileReader.close();            }        }                return new LicenseInfo(licenseType, licenseVersion);    }        private static boolean askUserForAcceptance() throws IOException    {        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));                System.out.print("\n\nDo you accept the terms and conditions of this license agreement [y/n]?");        final String input = stdin.readLine();                boolean hasAcccepted = false;        if (input != null && input.toLowerCase().startsWith("y"))        {            hasAcccepted = true;        }                if (!hasAcccepted)        {            System.out.println("\nSorry, until you accept the terms and conditions of this EULA, you won't be able to start Mule");        }                return hasAcccepted;    }    private static File createTempLicenseJarFile(LicenseInfo licenseInfo) throws Exception    {        LinkedHashMap jarEntries = new LinkedHashMap();        jarEntries.put(LICENSE_PROPERTIES_JAR_FILE_PATH, licenseInfo.toString());        jarEntries.put(LICENSE_TEXT_JAR_FILE_PATH, getLicenseFile());        File tempJar = File.createTempFile(MuleBootstrapUtils.MULE_LOCAL_JAR_FILENAME, null);        try        {            JarUtils.createJarFileEntries(tempJar, jarEntries);        }        catch (IOException ioe)        {            if (tempJar != null)            {                throw new Exception("Unable to create temporary jar file to " + tempJar.getAbsolutePath());            }            else            {                throw new Exception("Unable to create temporary jar file for " + MuleBootstrapUtils.MULE_LOCAL_JAR_FILENAME);            }        }        return tempJar;    }        public static class LicenseInfo    {        private String licenseType = DEFAULT_LICENSE_TYPE;        private String licenseVersion = DEFAULT_LICENSE_VERSION;        private String licenseDate = (new java.util.Date()).toString();                public LicenseInfo()        {            // for default license        }                public LicenseInfo(String licenseType, String licenseVersion)        {            if (licenseType != null && !licenseType.trim().equals(""))            {                this.licenseType = licenseType;            }            if (licenseVersion != null && !licenseVersion.trim().equals(""))            {                this.licenseVersion = licenseVersion;            }        }                public String toString()        {            return "LicenseType=" + licenseType + "\n" +                "LicenseVersion=" + licenseVersion + "\n" +                "LicenseDate=" + licenseDate + "\n";        }    }}

⌨️ 快捷键说明

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