All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ibm.commons.util.TSystem Maven / Gradle / Ivy

The newest version!
/*
 * © Copyright IBM Corp. 2012-2013
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at:
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 * implied. See the License for the specific language governing 
 * permissions and limitations under the License.
 */

package com.ibm.commons.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;


/**
 * This class provide some system functions.
 * @ibm-non-published
 */
public final class TSystem {
    
    /** Operating system is Windows NT. */
    public static final int OS_WINNT        = 0x00000001;
    /** Operating system is Windows 95. */
    public static final int OS_WIN95        = 0x00000002;
    /** Operating system is Windows 98. */
    public static final int OS_WIN98        = 0x00000004;
    /** Operating system is Solaris. */
    public static final int OS_SOLARIS      = 0x00000008;
    /** Operating system is Linux. */
    public static final int OS_LINUX        = 0x00000010;
    /** Operating system is HP-UX. */
    public static final int OS_HP           = 0x00000020;
    /** Operating system is IBM AIX. */
    public static final int OS_AIX          = 0x00000040;
    /** Operating system is SGI IRIX. */
    public static final int OS_IRIX         = 0x00000080;
    /** Operating system is Sun OS. */
    public static final int OS_SUNOS        = 0x00000100;
    /** Operating system is DEC (Digital Unix). */
    public static final int OS_DEC          = 0x00000200;
    /** Operating system is OS/2. */
    public static final int OS_OS2          = 0x00000400;
    /** Operating system is Mac. */
    public static final int OS_MAC          = 0x00000800;
    /** Operating system is Windows 2000. */
    public static final int OS_WIN2000      = 0x00001000;
    /** Operating system is Windows XP. */
    public static final int OS_WINXP        = 0x00002000;
    /** Operating system is Windows XP. */
    public static final int OS_WINVISTA     = 0x00003000;
    /** Operating system is Windows XP. */
    public static final int OS_WIN7         = 0x00003500;
    /** Operating system is AS/400. */
    public static final int OS_AS400        = 0x00004000;
    /** Operating system is OS/390. */
    public static final int OS_OS390        = 0x00008000;
    /** Operating system is Windows 2000. */
    public static final int OS_OTHERWIN     = 0x00010000;
    /** Operating system is unknown. */
    public static final int OS_OTHER        = 0x10000000;

    /** A mask for Windows platforms. */
    public static final int OS_WINDOWS_MASK = OS_WINNT | OS_WIN95 | OS_WIN98 | OS_WIN2000 | OS_WINXP | OS_OTHERWIN;
    /** A mask for Windows NT platforms. */
    public static final int OS_WINNT_MASK = OS_WINNT | OS_WIN2000 | OS_WINXP | OS_OTHERWIN;
    /** A mask for Unix platforms. */
    public static final int OS_UNIX_MASK = OS_SOLARIS | OS_LINUX | OS_HP | OS_AIX | OS_IRIX | OS_SUNOS | OS_DEC;

    /** CPU Intel x86*/
    public static final int CPU_I386        = 0x00000001;
    /** CPU is unknown*/
    public static final int CPU_OTHER       = 0x10000000;

    /**
     * Get the java vendor of the VM.
     * @return the java vendor name
     */
    public static final String getVMVendor() {
        try {
            return System.getProperty("java.vendor"); //$NON-NLS-1$
        } catch( Exception e ) {}
        return ""; //$NON-NLS-1$
    }

    /**
     * Get the operating system on which the IDE is running.
     * @return one of the OS_* constants (such as {@link #OS_WINNT})
     */
    public static final int getOperatingSystem () {
        if (operatingSystem == -1) {
            try {
                String osName = System.getProperty ("os.name"); //$NON-NLS-1$
                if ("Windows NT".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WINNT;
                else if ("Windows 95".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WIN95;
                else if ("Windows 98".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WIN98;
                else if ("Windows 2000".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WIN2000;
                else if ("Windows XP".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WINXP;
                else if ("Windows Vista".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WINVISTA;
                else if ("Windows 7".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_WIN7;
                else if (osName.indexOf("Windows")>=0) //$NON-NLS-1$
                    operatingSystem = OS_OTHERWIN;
                else if ("Solaris".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_SOLARIS;
                else if (osName.startsWith ("SunOS")) //$NON-NLS-1$
                    operatingSystem = OS_SOLARIS;
                else if ("Linux".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_LINUX;
                else if ("HP-UX".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_HP;
                else if ("AIX".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_AIX;
                else if ("Irix".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_IRIX;
                else if ("SunOS".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_SUNOS;
                else if ("Digital UNIX".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_DEC;
                else if ("OS/390".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_OS390; // Confirm that.
                else if ("AS/400".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_AS400; // Confirm that.
                else if ("OS/2".equals (osName)) //$NON-NLS-1$
                    operatingSystem = OS_OS2;
                else if (osName.startsWith ("Mac OS")) //$NON-NLS-1$
                    operatingSystem = OS_MAC;
                else if (osName.startsWith ("Darwin")) //$NON-NLS-1$
                    operatingSystem = OS_MAC;
                else
                    operatingSystem = OS_OTHER;
            } catch( Exception e ) {
                operatingSystem = OS_OTHER;
            }
        }
        return operatingSystem;
    }

    /**
     * Test whether the code is running on some variant of Windows.
     * @return true if Windows, false if some other manner of operating system
     */
    public static final boolean isWindows () {
        return (getOperatingSystem () & OS_WINDOWS_MASK) != 0;
    }

    /**
     * Test whether the code is running on some variant of Windows NT.
     * @return true if Windows NT, false if some other manner of operating system, even Win 95/98
     */
    public static final boolean isWindowsNT () {
        return (getOperatingSystem () & OS_WINNT_MASK) != 0;
    }

    /**
     * Test whether the code is running on Windows XP..
     * @return true if Windows XP, false if some other manner of operating system, even Win 2000/NT
     */
    public static final boolean isWindowsXP () {
        return getOperatingSystem () == OS_WINXP;
    }
    
    /**
     * Test whether the code is running on Windows Vista..
     * @return true if Windows Vista, false if some other manner of operating system, even Win 2000/NT/XP
     */
    public static final boolean isWindowsVista () {
        return getOperatingSystem () == OS_WINVISTA;
    }
    
    /**
     * Test whether the code is running on Windows 7..
     * @return true if Windows 7, false if some other manner of operating system, even Win 2000/NT/XP/Vista
     */
    public static final boolean isWindows7 () {
        return getOperatingSystem () == OS_WIN7;
    }

    /**
     * Test whether the code is running on some variant of Unix.
     * Linux is included as well as the commercial vendors.
     * @return true some sort of Unix, false if some other manner of operating system
     */
    public static final boolean isUnix () {
        return (getOperatingSystem () & OS_UNIX_MASK) != 0;
    }

    /**
     * The operating system on which the app runs
     */
    private static int operatingSystem = -1;

    /**
     * Get the CPU on which the app is running.
     * @return one of the CPU_* constants (such as {@link #CPU_I386})
     */
    public static final int getCPU() {
        if( cpu==-1 ) {
            try {
                String cpuName = System.getProperty ("os.arch"); //$NON-NLS-1$
                if( "i386".equals(cpuName) || "x86".equals(cpuName) ) //$NON-NLS-1$ //$NON-NLS-2$
                    cpu = CPU_I386;
                else
                    cpu = CPU_OTHER;
            } catch( Exception e ) {
                cpu = CPU_OTHER;
            }
        }
        return cpu;
    }

    /**
     * The CPU on which FlowBuilder runs
     */
    private static int cpu = -1;
    
    
    public static boolean isDevelopment() {
        return false;
    }

    
    /**
     * Load a native windows DLL from the jar file.
     */
    public static void loadWindowsDLL( String libName, int version, String resourceName ) throws IOException {
        String libPath = installWindowsDLL(libName,version,resourceName);
        System.load(libPath);
    }
    public static String installWindowsDLL( String libName, int version, String resourceName ) throws IOException {
        if( !isWindows() ) {
            //throw new IOException( String.format("Unable to load a DLL on non Windows system") ); //$NLS-TSystem.TSystem.NonWindows.Exception-1$
            throw new IOException( StringUtil.format("Cannot load a Windows DLL on a non Windows operating system") ); // $NLS-TSystem.CannotloadaWindowsDLLonanonWindow-1$
        }
        // Get the file name
        File dllFile = null;
        if( libName.indexOf("/")<=0 && libName.indexOf("\\")<=0 ) { //$NON-NLS-1$ //$NON-NLS-2$
            File tempDirectory = new File(System.getProperty("java.io.tmpdir")); //$NON-NLS-1$
            dllFile = new File(tempDirectory,libName+"_"+version+".dll"); //$NON-NLS-1$ //$NON-NLS-2$
        } else {
            // For debug only
            dllFile = new File(libName);
        }
        // If not already exist, load it from the resources
        // Also, check for the size
        if( TSystem.isDevelopment() && dllFile.exists() ) {
            dllFile.delete();
        }
        if( !dllFile.exists() ) {
            //TDiag.trace( "Creating DLL {0}", dllFile );
            InputStream dll=TSystem.class.getResourceAsStream(resourceName);
            if( dll==null ) {
                //throw new IOException( StringUtil.format("Unable to find resource: {0}", resourceName) ); //$NLS-TSystem.TSystem.ResourceNotFound.Exception-1$
                throw new IOException( StringUtil.format("Windows DLL {0} not found", resourceName) ); // $NLS-TSystem.WindowsDLL0notfound-1$
            }
            try {
                // Find the directory where to extract the DLL
                FileOutputStream dllout=new FileOutputStream(dllFile);
                try {
                    byte[] data=new byte[4096];
                    int read=dll.read(data, 0, data.length);
                    while( read>0 ) {
                        dllout.write(data, 0, read);
                        read=dll.read(data, 0, data.length);
                    }
                } finally {
                    dllout.close();
                }
            } finally {
                dll.close();
            }
        } else {
            //TDiag.trace( "DLL already loaded: {0} ", dllFile );
        }
        // And load the library
        return dllFile.getPath();
    }
    
    /**
    *
    */
   public static final int getJavaVersion() {
       if( javaVersion<0 ) {
           try {
               javaVersion=0;
               String[] v = StringUtil.splitString(System.getProperty("java.version"),'.',true);//NORES //$NON-NLS-1$
               if( v.length>=1 ) {
                   int major  = parseInt(v[0]);
                   int minor  = v.length>=2 ? parseInt(v[1]) : 0;
                   int minor2 = v.length>=3 ? parseInt(v[2]) : 0;
                   javaVersion = major*100 + minor*10 + minor2;
               }
           } catch( Exception e ) {
               // If we cannot get the version for any reason,
               // simply assume java2
               javaVersion = 120;
           }
       }
       return javaVersion;
   }
   private static final int parseInt( String s ) {
       // Some VM return something like 1.3.0_02
       // We just get the first digit to build the number
       return s.length()>0 ? s.charAt(0)-'0' : 0;
   }
   private static int javaVersion = -1;
   public static final boolean isJava2() {
       return getJavaVersion()>=120;
   }

    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy