Search in sources :

Example 1 with Version

use of org.jboss.modules.Version in project jboss-modules by jboss-modules.

the class ModuleXmlParser method parseResources.

private static void parseResources(final MavenResolver mavenResolver, final ResourceRootFactory factory, final String rootPath, final XmlPullParser reader, final ModuleSpec.Builder specBuilder) throws XmlPullParserException, IOException {
    assertNoAttributes(reader);
    final List<Version> detectedVersions = new ArrayList<>();
    // xsd:choice
    int eventType;
    for (; ; ) {
        eventType = reader.nextTag();
        switch(eventType) {
            case END_TAG:
                {
                    final Version specifiedVersion = specBuilder.getVersion();
                    if (specifiedVersion == null) {
                        final Iterator<Version> iterator = detectedVersions.iterator();
                        if (iterator.hasNext()) {
                            Version guess = iterator.next();
                            while (iterator.hasNext()) {
                                if (!guess.equals(iterator.next())) {
                                    guess = null;
                                    break;
                                }
                            }
                            if (guess != null)
                                specBuilder.setVersion(guess);
                        }
                    }
                    specBuilder.addResourceRoot(ResourceLoaderSpec.createResourceLoaderSpec(new NativeLibraryResourceLoader(new File(rootPath, "lib")), PathFilters.rejectAll()));
                    return;
                }
            case START_TAG:
                {
                    validateNamespace(reader);
                    switch(reader.getName()) {
                        case E_RESOURCE_ROOT:
                            {
                                final Version version = parseResourceRoot(factory, rootPath, reader, specBuilder);
                                if (version != null)
                                    detectedVersions.add(version);
                                break;
                            }
                        case E_ARTIFACT:
                            {
                                final Version version = parseArtifact(mavenResolver, reader, specBuilder);
                                if (version != null)
                                    detectedVersions.add(version);
                                break;
                            }
                        case E_NATIVE_ARTIFACT:
                            {
                                parseNativeArtifact(mavenResolver, reader, specBuilder);
                                break;
                            }
                        default:
                            throw unexpectedContent(reader);
                    }
                    break;
                }
            default:
                {
                    throw unexpectedContent(reader);
                }
        }
    }
}
Also used : Version(org.jboss.modules.Version) NativeLibraryResourceLoader(org.jboss.modules.NativeLibraryResourceLoader) ArrayList(java.util.ArrayList) Iterator(java.util.Iterator) JarFile(java.util.jar.JarFile) ZipFile(java.util.zip.ZipFile) File(java.io.File)

Example 2 with Version

use of org.jboss.modules.Version in project jboss-modules by jboss-modules.

the class ModuleXmlParser method parseModuleContents.

private static ModuleSpec.Builder parseModuleContents(final MavenResolver mavenResolver, final XmlPullParser reader, final ResourceRootFactory factory, final ModuleLoader moduleLoader, final String moduleName, final String rootPath) throws XmlPullParserException, IOException {
    final int count = reader.getAttributeCount();
    String name = null;
    String slot = null;
    boolean is1_6 = atLeast1_6(reader);
    Version version = null;
    final Set<String> required = is1_6 ? new HashSet<>(LIST_A_NAME) : new HashSet<>(LIST_A_NAME);
    for (int i = 0; i < count; i++) {
        validateAttributeNamespace(reader, i);
        final String attribute = reader.getAttributeName(i);
        required.remove(attribute);
        switch(attribute) {
            case A_NAME:
                name = reader.getAttributeValue(i);
                break;
            case A_SLOT:
                if (is1_6)
                    throw unknownAttribute(reader, i);
                else
                    slot = reader.getAttributeValue(i);
                break;
            case A_VERSION:
                try {
                    version = Version.parse(reader.getAttributeValue(i));
                    break;
                } catch (IllegalArgumentException ex) {
                    throw new XmlPullParserException(ex.getMessage(), reader, ex);
                }
            default:
                throw unknownAttribute(reader, i);
        }
    }
    if (!required.isEmpty()) {
        throw missingAttributes(reader, required);
    }
    final String realModuleName;
    if (is1_6) {
        realModuleName = name;
    } else {
        realModuleName = ModuleIdentifier.create(name, slot).toString();
    }
    if (moduleName != null && !realModuleName.equals(moduleName)) {
        throw invalidModuleName(reader, realModuleName);
    }
    final ModuleSpec.Builder specBuilder = ModuleSpec.build(realModuleName);
    specBuilder.setVersion(version);
    // xsd:all
    MultiplePathFilterBuilder exportsBuilder = PathFilters.multiplePathFilterBuilder(true);
    ArrayList<DependencySpec> dependencies = new ArrayList<>();
    final boolean is1_8 = atLeast1_8(reader);
    if (!is1_8) {
        // add default system dependencies
        specBuilder.addDependency(DEP_JAVA_SE);
        specBuilder.addDependency(DEP_JDK_UNSUPPORTED);
    }
    Set<String> visited = new HashSet<>();
    int eventType;
    boolean gotPerms = false;
    for (; ; ) {
        eventType = reader.nextTag();
        switch(eventType) {
            case END_TAG:
                {
                    specBuilder.addDependency(new LocalDependencySpecBuilder().setExportFilter(exportsBuilder.create()).build());
                    for (DependencySpec dependency : dependencies) {
                        specBuilder.addDependency(dependency);
                    }
                    if (!gotPerms)
                        specBuilder.setPermissionCollection(DEFAULT_PERMISSION_COLLECTION);
                    return specBuilder;
                }
            case START_TAG:
                {
                    validateNamespace(reader);
                    final String element = reader.getName();
                    if (visited.contains(element)) {
                        throw unexpectedContent(reader);
                    }
                    visited.add(element);
                    switch(element) {
                        case E_EXPORTS:
                            parseFilterList(reader, exportsBuilder);
                            break;
                        case E_DEPENDENCIES:
                            parseDependencies(reader, dependencies);
                            break;
                        case E_MAIN_CLASS:
                            parseMainClass(reader, specBuilder);
                            break;
                        case E_RESOURCES:
                            parseResources(mavenResolver, factory, rootPath, reader, specBuilder);
                            break;
                        case E_PROPERTIES:
                            parseProperties(reader, specBuilder);
                            break;
                        case E_PERMISSIONS:
                            parsePermissions(reader, moduleLoader, realModuleName, specBuilder);
                            gotPerms = true;
                            break;
                        case E_PROVIDES:
                            if (is1_8)
                                parseProvidesType(reader, specBuilder);
                            else
                                throw unexpectedContent(reader);
                            break;
                        default:
                            throw unexpectedContent(reader);
                    }
                    break;
                }
            default:
                {
                    throw unexpectedContent(reader);
                }
        }
    }
}
Also used : LocalDependencySpecBuilder(org.jboss.modules.LocalDependencySpecBuilder) ArrayList(java.util.ArrayList) ModuleSpec(org.jboss.modules.ModuleSpec) Version(org.jboss.modules.Version) DependencySpec(org.jboss.modules.DependencySpec) ModuleDependencySpec(org.jboss.modules.ModuleDependencySpec) MultiplePathFilterBuilder(org.jboss.modules.filter.MultiplePathFilterBuilder) HashSet(java.util.HashSet)

Aggregations

ArrayList (java.util.ArrayList)2 Version (org.jboss.modules.Version)2 File (java.io.File)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 JarFile (java.util.jar.JarFile)1 ZipFile (java.util.zip.ZipFile)1 DependencySpec (org.jboss.modules.DependencySpec)1 LocalDependencySpecBuilder (org.jboss.modules.LocalDependencySpecBuilder)1 ModuleDependencySpec (org.jboss.modules.ModuleDependencySpec)1 ModuleSpec (org.jboss.modules.ModuleSpec)1 NativeLibraryResourceLoader (org.jboss.modules.NativeLibraryResourceLoader)1 MultiplePathFilterBuilder (org.jboss.modules.filter.MultiplePathFilterBuilder)1