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

📄 osinfo.java

📁 定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而定要上载质量高而
💻 JAVA
字号:
/*
 * Created on Aug 15, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.flexdock.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;


/**
 * @author Christopher Butler
 */
public class OsInfo {
    private static final OsInfo SINGLETON = new OsInfo();
    private static final String XML_RESOURCE = "org/flexdock/util/os-info.xml";
    
    private String osArch;
    private List osNameList;
    private List osLibraryList;
    private List prefixOsLibraryList;
    
    public static OsInfo getInstance() {
        return SINGLETON;
    }
    
    public OsInfo() {
        this(null);
    }
    
    public OsInfo(Properties systemProps) {
        if(systemProps==null)
            systemProps = System.getProperties();
        
        Document doc = ResourceManager.getDocument(XML_RESOURCE);
        osArch = getSystemArch(doc, systemProps);
        osNameList = Collections.unmodifiableList(getOSChain(doc, systemProps));
        
        ArrayList libList = new ArrayList(osNameList.size());
        ArrayList prefixLibList = new ArrayList(osNameList.size());
        for(Iterator it=osNameList.iterator(); it.hasNext();) {
            String osName = (String)it.next();
            libList.add(osName + "-" + osArch);
        }
        libList.addAll(osNameList);

        for(Iterator it=libList.iterator(); it.hasNext();) {
            String prefixed = "-" + it.next();
            prefixLibList.add(prefixed);
        }
        
        osLibraryList = Collections.unmodifiableList(libList);
        prefixOsLibraryList = Collections.unmodifiableList(prefixLibList);
    }
    
    private String getSystemArch(Document doc, Properties systemProps) {
        String archTag = "arch";
        String sysArch = format(systemProps.getProperty("os.arch"));

        Element archElem = findElementByName(doc, archTag, sysArch);
        while(isNested(archElem, archTag)) {
            archElem = (Element)archElem.getParentNode();
        }
        return archElem==null? sysArch: archElem.getAttribute("name");
    }
    
    
    private List getOSChain(Document doc, Properties systemProps) {
        String osTag = "os";
        String osName = format(systemProps.getProperty("os.name"));
        Element osElem = findElementByName(doc, osTag, osName);
        ArrayList list = new ArrayList();
       
        while(osElem!=null && osTag.equals(osElem.getTagName())) {
            list.add(osElem.getAttribute("name"));
            osElem = (Element)osElem.getParentNode();
        }
        
        if(list.isEmpty())
            list.add(osName);
        return list;
    }
    
    
    
    
    
    
    
    private Element findElementByName(Document doc, String tagName, String nameAttrib) {
        NodeList list = doc.getElementsByTagName(tagName);
        for(int i=0; i<list.getLength(); i++) {
            Element elem = (Element)list.item(i);
            if(nameAttrib.equals(elem.getAttribute("name")))
                return elem;
        }
        return null;
    }
    
    private String format(String data) {
        return data.replace(' ', '_').toLowerCase();
    }
    
    private boolean isNested(Element elem, String tagName) {
        if(elem==null)
            return false;
        
        Element parent = (Element)elem.getParentNode();
        return parent==null? false: tagName.equals(parent.getTagName());
    }
    
    /**
     * @return Returns the osArch.
     */
    public String getArch() {
        return osArch;
    }
    /**
     * @return Returns the osLibraryList.
     */
    public List getLibraryKeys() {
        return osLibraryList;
    }
    
    /**
     * @return Returns the prefixOsLibraryList.
     */
    public List getPrefixLibraryKeys() {
        return prefixOsLibraryList;
    }
    /**
     * @return Returns the osNameList.
     */
    public List getOsNames() {
        return osNameList;
    }
    
    public String getLibraryKey() {
        return (String)getLibraryKeys().get(0);
    }
    
    public String getPrefixLibraryKey() {
        return (String)getPrefixLibraryKeys().get(0);
    }
    
    public static void main(String[] args) {
        Properties props = new Properties();
        props.setProperty("os.name", System.getProperty("os.name"));
        props.setProperty("os.arch", System.getProperty("os.arch"));
        
        OsInfo info = new OsInfo(props);
        List libList = info.getLibraryKeys();
        
        System.out.println("Library Keychain");
        System.out.println("----------------");
        for(Iterator it=libList.iterator(); it.hasNext();) {
            System.out.println(it.next());
        }
        System.out.println();
        System.out.println("Default Library Key: " + info.getLibraryKey());
    }
}

⌨️ 快捷键说明

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