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

📄 componentdb.java

📁 cisco-2950交换机的应用程序的源代码
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   ComponentDb.java

package cisco.dsbu.cms.boot.internal;

import cisco.dsbu.cms.boot.internal.ccl.ClassData;
import cisco.dsbu.cms.boot.internal.jobq.JobHandler;
import cisco.dsbu.cms.boot.internal.jobq.JobOwner;
import cisco.dsbu.cms.boot.internal.jobq.JobQueue;
import cisco.dsbu.cms.boot.internal.util.JreVersion;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.*;

// Referenced classes of package cisco.dsbu.cms.boot.internal:
//            VersionFile, Distribution, Component, VersionReadHandler, 
//            VersionIntgHandler, PackageLoadHandler, VersionIntegrator, Package, 
//            DynamicDiscoveryDb

class ComponentDb
    implements JobOwner
{

    private static final JreVersion CURR_JRE_VER = new JreVersion(System.getProperty("java.version"));
    private Map compMap;
    private DynamicDiscoveryDb dynDiscDb;
    private List versionFiles;
    private boolean parsedFileSeen;
    private boolean majorCompatibleFileSeen;
    private boolean jreCompatibleFileSeen;
    private JreVersion minJre;
    private VersionIntegrator integrator;
    private JobQueue verReadQ;
    private JobQueue verIntgQ;
    private JobQueue pkgLoadQ;

    ComponentDb(DynamicDiscoveryDb dynamicdiscoverydb, VersionIntegrator versionintegrator)
    {
        compMap = new HashMap();
        versionFiles = new ArrayList(20);
        verReadQ = new JobQueue(this, 0);
        verIntgQ = new JobQueue(this, 1);
        pkgLoadQ = new JobQueue(this, 0);
        dynDiscDb = dynamicdiscoverydb;
        integrator = versionintegrator;
        versionintegrator.setComponentDb(this);
    }

    void integrateFile(URL url, InputStream inputstream)
    {
        VersionFile versionfile = new VersionFile(url, inputstream);
        verReadQ.submit(versionfile, false);
    }

    void waitForCompletion()
    {
        verReadQ.waitForCompletion();
        verIntgQ.waitForCompletion();
    }

    boolean addVersionFile(VersionFile versionfile)
    {
        versionFiles.add(versionfile);
        if(versionfile.getParseException() != null)
            return false;
        parsedFileSeen = true;
        if(versionfile.getMajorVersion() != 1)
            return false;
        majorCompatibleFileSeen = true;
        JreVersion jreversion = versionfile.getJreVersion();
        if(minJre == null || jreversion.compareTo(minJre) < 0)
            minJre = jreversion;
        if(jreversion.compareTo(CURR_JRE_VER) > 0)
        {
            return false;
        } else
        {
            jreCompatibleFileSeen = true;
            return true;
        }
    }

    int getStartupError()
    {
        if(!parsedFileSeen)
            return 1;
        if(!majorCompatibleFileSeen)
            return 2;
        return jreCompatibleFileSeen ? 0 : 3;
    }

    List getContribDists()
    {
        ArrayList arraylist = new ArrayList();
        for(Iterator iterator = versionFiles.iterator(); iterator.hasNext();)
        {
            VersionFile versionfile = (VersionFile)iterator.next();
            if(versionfile.isContributing())
            {
                for(Iterator iterator1 = versionfile.getDistributions().iterator(); iterator1.hasNext();)
                {
                    Distribution distribution = (Distribution)iterator1.next();
                    if(distribution.isContributing())
                        arraylist.add(distribution.getName());
                }

            }
        }

        return arraylist;
    }

    void integrateWithoutChecking(Package package1)
    {
        List list = package1.getComponents();
        Component component;
        for(Iterator iterator = list.iterator(); iterator.hasNext(); replaceComponent(null, component))
        {
            component = (Component)iterator.next();
            String s = component.getName();
            compMap.put(s, component);
        }

    }

    void integrateWithChecking(Package package1)
    {
        List list = package1.getComponents();
        for(Iterator iterator = list.iterator(); iterator.hasNext();)
        {
            Component component = (Component)iterator.next();
            String s = component.getName();
            Component component1 = (Component)compMap.get(s);
            if(component1 == null)
            {
                compMap.put(s, component);
                replaceComponent(null, component);
            } else
            if(component.isNewerThan(component1))
            {
                compMap.put(s, component);
                replaceComponent(component1, component);
            }
        }

    }

    private void replaceComponent(Component component, Component component1)
    {
        String s = null;
        String s1 = null;
        if(component != null)
        {
            component.setLatest(false);
            s = component.getMarkedSuper();
        }
        component1.setLatest(true);
        s1 = component1.getMarkedSuper();
        if(s != null)
        {
            if(s.equals(s1))
                return;
            dynDiscDb.removeDiscovered(s, component.getClassName());
        }
        if(s1 != null)
            dynDiscDb.addDiscovered(s1, component1.getClassName());
    }

    ClassData getClassData(String s)
    {
        String s1 = s.replace('.', '/') + ".class";
        Component component = (Component)compMap.get(s1);
        if(component == null)
            return null;
        byte abyte0[] = getContents(component);
        if(abyte0 == null)
            return null;
        else
            return component;
    }

    InputStream getStream(String s)
    {
        Component component = (Component)compMap.get(s);
        if(component == null)
            return null;
        byte abyte0[] = getContents(component);
        if(abyte0 == null)
        {
            return null;
        } else
        {
            ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(abyte0);
            return bytearrayinputstream;
        }
    }

    protected boolean contains(String s)
    {
        return compMap.get(s) != null;
    }

    private byte[] getContents(Component component)
    {
        byte abyte2[];
        synchronized(component)
        {
            if(component.isContentsLoaded())
            {
                byte abyte0[] = component.getContents();
                return abyte0;
            }
            if(component.isContentsNotFound())
            {
                byte abyte1[] = null;
                return abyte1;
            }
            Package package1 = component.getPackage();
            pkgLoadQ.submit(package1, false);
            do
                try
                {
                    component.wait();
                }
                catch(InterruptedException interruptedexception) { }
            while(!component.isContentsLoaded() && !component.isContentsNotFound());
            abyte2 = component.getContents();
        }
        return abyte2;
    }

    public JobHandler createHandler(JobQueue jobqueue)
    {
        Object obj = null;
        if(jobqueue == verReadQ)
            obj = new VersionReadHandler(verIntgQ);
        else
        if(jobqueue == verIntgQ)
            obj = new VersionIntgHandler(this, integrator);
        else
        if(jobqueue == pkgLoadQ)
            obj = new PackageLoadHandler();
        return ((JobHandler) (obj));
    }

}

⌨️ 快捷键说明

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