public static Document serialize()

in archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/archiva/jarinfo/model/xml/JarDetailsXmlSerializer.java [113:250]


    public static Document serialize( JarDetails details )
        throws JarInfoException
    {
        Document doc = DocumentFactory.getInstance().createDocument();
        Element root = doc.addElement( DOC_ROOT );

        root.add( DEFAULT_NAMESPACE );
        root.addNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
        root.addAttribute( "xsi:schemaLocation", "http://archiva.apache.org/jarinfo-v1_0_0.xsd" );

        // Assigned Id
        if ( ( details.getAssignedId() != null ) && details.getAssignedId().valid() )
        {
            Element elemId = root.addElement( ASSIGNED_ID );
            addRequiredElement( elemId, GROUP_ID, details.getAssignedId().getGroupId() );
            addRequiredElement( elemId, ARTIFACT_ID, details.getAssignedId().getArtifactId() );
            addRequiredElement( elemId, VERSION, details.getAssignedId().getVersion() );
            addOptionalElement( elemId, NAME, details.getAssignedId().getName() );
            addOptionalElement( elemId, VENDOR, details.getAssignedId().getVendor() );
        }

        // Basics
        addRequiredElement( root, FILENAME, details.getFilename() );
        addRequiredElement( root, TIMESTAMP, Timestamp.convert( details.getTimestamp() ) );
        addRequiredElement( root, SIZE, String.valueOf( details.getSize() ) );
        addOptionalElement( root, SIZE_UNCOMPRESSED, String.valueOf( details.getSizeUncompressed() ) );
        addHashes( root, details.getHashes() );
        addRequiredElement( root, SEALED, toBool( details.isSealed() ) );

        // Generator
        if ( ( details.getGenerator() != null ) && details.getGenerator().exists() )
        {
            Element generatorElem = root.addElement( GENERATOR );
            addRequiredElement( generatorElem, NAME, details.getGenerator().getName() );
            addOptionalElement( generatorElem, VERSION, details.getGenerator().getVersion() );
            addRequiredElement( generatorElem, TIMESTAMP, Timestamp.convert( details.getGenerator().getTimestamp() ) );
        }

        // Jar Entries
        if ( !EmptyUtils.isEmpty( details.getEntries() ) )
        {
            Element entries = root.addElement( ENTRIES );

            int countDir = 0;
            int countFile = 0;

            for ( EntryDetail edetail : details.getEntries() )
            {
                if ( edetail.isDirectory() )
                {
                    countDir++;
                    Element entry = entries.addElement( DIRECTORY );
                    entry.addAttribute( NAME, edetail.getName() );
                    entry.addAttribute( TIMESTAMP, Timestamp.convert( edetail.getTimestamp() ) );
                }
                else
                {
                    countFile++;
                    Element entry = entries.addElement( FILE );
                    entry.addAttribute( NAME, edetail.getName() );
                    entry.addAttribute( SIZE, String.valueOf( edetail.getSize() ) );
                    entry.addAttribute( TIMESTAMP, Timestamp.convert( edetail.getTimestamp() ) );
                    // Only files with content are important to deal with.
                    if ( edetail.getSize() > 0 )
                    {
                        addHashes( entry, edetail.getHashes() );
                    }
                }
            }

            entries.addAttribute( COUNT_DIRS, String.valueOf( countDir ) );
            entries.addAttribute( COUNT_FILES, String.valueOf( countFile ) );
            entries.addAttribute( COUNT_TOTAL, String.valueOf( countDir + countFile ) );
        }

        // Bytecode
        if ( ( details.getBytecode() != null ) && !EmptyUtils.isEmpty( details.getBytecode().getClasses() ) )
        {
            Element bytecode = root.addElement( BYTECODE );

            int countClasses = 0;
            Set<String> packages = new TreeSet<String>();

            addHashes( bytecode, details.getBytecode().getHashes() );
            addOptionalElement( bytecode, JDK, details.getBytecode().getRequiredJdk() );
            addOptionalElement( bytecode, DEBUG, toBool( details.getBytecode().hasDebug() ) );

            for ( ClassDetail classDetail : details.getBytecode().getClasses() )
            {
                countClasses++;
                Element classElem = bytecode.addElement( CLASS );
                classElem.addAttribute( NAME, classDetail.getName() );
                classElem.addAttribute( VERSION, classDetail.getClassVersion() );
                classElem.addAttribute( JDK, classDetail.getTargetJdk() );
                classElem.addAttribute( DEBUG, toBool( classDetail.hasDebug() ) );
                addHashes( classElem, classDetail.getHashes() );

                for ( String importName : classDetail.getImports() )
                {
                    addOptionalElement( classElem, IMPORT, importName );
                }

                for ( String methodName : classDetail.getMethods() )
                {
                    addOptionalElement( classElem, METHOD, methodName );
                }

                packages.add( classDetail.getPackage() );
            }

            bytecode.addAttribute( COUNT_CLASSES, String.valueOf( countClasses ) );
            bytecode.addAttribute( COUNT_PACKAGES, String.valueOf( packages.size() ) );

            if ( !EmptyUtils.isEmpty( packages ) )
            {
                for ( String packageName : packages )
                {
                    bytecode.addElement( PACKAGE ).setText( packageName );
                }
            }
        }

        // InspectedIds
        if ( ( details != null ) && !details.getInspectedIds().isEmpty() )
        {
            Element idelem = root.addElement( INSPECTED );

            addWeightedValues( idelem, GROUP_IDS, GROUP_ID, details.getInspectedIds().getGroupIdList() );
            addWeightedValues( idelem, ARTIFACT_IDS, ARTIFACT_ID, details.getInspectedIds().getArtifactIdList() );
            addWeightedValues( idelem, VERSIONS, VERSION, details.getInspectedIds().getVersionList() );
            addWeightedValues( idelem, NAMES, NAME, details.getInspectedIds().getNameList() );
            addWeightedValues( idelem, VENDORS, VENDOR, details.getInspectedIds().getVendorList() );
        }

        fixDefaultNamespace( root );

        return doc;
    }