public JarDetails read()

in archiva-jarinfo/archiva-jarinfo-lib/src/main/java/org/apache/archiva/jarinfo/model/io/JarDetailsReader.java [41:113]


    public JarDetails read(Reader reader) throws IOException {
        Digester digester = new Digester();
        digester.setNamespaceAware(false);
        ConvertUtils.register(new TimestampConverter(), Calendar.class);

        String path;
        digester.addObjectCreate(DOC_ROOT, JarDetails.class);

        // Base variables
        path = DOC_ROOT;
        addNestedElem(digester, path, FILENAME, "setFilename", String.class);
        addNestedElem(digester, path, TIMESTAMP, "setTimestamp", Calendar.class);
        addNestedElem(digester, path, SIZE, "setSize", Long.class);
        addNestedElem(digester, path, SIZE_UNCOMPRESSED, "setSizeUncompressed", Long.class);
        addNestedElem(digester, path, SEALED, "setSealed", Boolean.class);
        addHashes(digester, path);

        // Assigned Id
        path = DOC_ROOT + "/" + ASSIGNED_ID;
        digester.addObjectCreate(path, AssignedId.class);
        digester.addSetNestedProperties(path);
        digester.addSetNext(path, "setAssignedId", AssignedId.class.getName());

        // Entries
        path = DOC_ROOT + "/" + ENTRIES + "/" + DIRECTORY;
        digester.addObjectCreate(path, EntryDetail.class);
        digester.addSetProperties(path);
        digester.addSetNext(path, "addDirectory", EntryDetail.class.getName());

        path = DOC_ROOT + "/" + ENTRIES + "/" + FILE;
        digester.addObjectCreate(path, EntryDetail.class);
        digester.addSetProperties(path);
        addHashes(digester, path);
        digester.addSetNext(path, "addFile", EntryDetail.class.getName());

        // Bytecode
        path = DOC_ROOT + "/" + BYTECODE;
        digester.addObjectCreate(path, BytecodeDetails.class);
        addHashes(digester, path);
        addNestedElem(digester, path, "jdk", "setRequiredJdk", String.class);
        addNestedElem(digester, path, "debug", "setDebug", Boolean.class);
        digester.addSetNext(path, "setBytecode", BytecodeDetails.class.getName());

        // Bytecode / Class
        path = DOC_ROOT + "/" + BYTECODE + "/" + CLASS;
        digester.addObjectCreate(path, ClassDetail.class);
        digester.addSetProperties(path);
        digester.addSetProperties(path, "jdk", "targetJdk");
        digester.addSetProperties(path, "version", "classVersion");
        addHashes(digester, path);
        digester.addCallMethod(path + "/" + IMPORT, "addImport", 1, new Class[] {String.class });
        digester.addCallParam(path + "/" + IMPORT, 0);
        digester.addCallMethod(path + "/" + METHOD, "addMethod", 1, new Class[] {String.class });
        digester.addCallParam(path + "/" + METHOD, 0);
        digester.addSetNext(path, "addClass", ClassDetail.class.getName());

        // Inspected
        path = DOC_ROOT + "/" + INSPECTED;
        digester.addObjectCreate(path, InspectedIds.class);
        addIdValueList(digester, path, "addGroupId", GROUP_IDS, GROUP_ID);
        addIdValueList(digester, path, "addArtifactId", ARTIFACT_IDS, ARTIFACT_ID);
        addIdValueList(digester, path, "addVersion", VERSIONS, VERSION);
        addIdValueList(digester, path, "addName", NAMES, NAME);
        addIdValueList(digester, path, "addVendor", VENDORS, VENDOR);
        digester.addSetNext(path, "setInspectedIds", InspectedIds.class.getName());

        // Parse it
        try {
            return (JarDetails) digester.parse(reader);
        } catch (SAXException e) {
            throw new IOException("Unable to parse jardetails: " + e.getMessage(), e);
        }
    }