All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.swarm.plugin.process.ModuleRewriteConf Maven / Gradle / Ivy

/**
 * Copyright 2015-2016 Red Hat, Inc, and individual contributors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.wildfly.swarm.plugin.process;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import org.jboss.shrinkwrap.descriptor.api.jbossmodule13.ModuleDescriptor;

/**
 * @author Bob McWhirter
 */
public class ModuleRewriteConf {

    public ModuleRewriteConf(Path file) throws IOException {
        if (Files.exists(file)) {
            load(file);
        }
    }

    ModuleDescriptor rewrite(ModuleDescriptor desc) {
        String descName = desc.getName();
        String descSlot = desc.getSlot();

        if (descSlot == null) {
            descSlot = MAIN;
        }

        ModuleRewriteRules rules = this.rules.get(descName + ":" + descSlot);
        if (rules != null) {
            desc = rules.rewrite(desc);
        }

        ModuleRewriteRules all = this.rules.get("ALL:ALL");

        if (all != null) {
            desc = all.rewrite(desc);
        }

        return desc;


    }

    private void load(Path file) throws IOException {
        try (BufferedReader in = new BufferedReader(new FileReader(file.toFile()))) {

            ModuleRewriteRules current = null;

            String line;

            int lineNumber = 0;

            while ((line = in.readLine()) != null) {
                ++lineNumber;
                line = line.trim();
                if (line.isEmpty()) {
                    continue;
                }
                if (line.startsWith(REPLACE)) {
                    String[] chunks = line.substring(REPLACE.length()).trim().split(">");

                    String origName = null;
                    String origSlot = MAIN;

                    String[] origParts = chunks[0].trim().split(":");
                    origName = origParts[0];
                    if (origParts.length > 1) {
                        origSlot = origParts[1];
                    }

                    String replaceName = null;
                    String replaceSlot = MAIN;

                    String[] replaceParts = chunks[1].trim().split(":");
                    replaceName = replaceParts[0];
                    if (replaceParts.length > 1) {
                        replaceSlot = replaceParts[1];
                    }

                    current.replace(origName, origSlot, replaceName, replaceSlot);
                } else if (line.startsWith(OPTIONAL)) {
                    String name = null;
                    String slot = MAIN;

                    String[] parts = line.substring(OPTIONAL.length()).trim().split(":");
                    name = parts[0];
                    if (parts.length > 1) {
                        slot = parts[1];
                    }

                    current.makeOptional(name, slot);
                } else if (line.startsWith(MODULE)) {
                    String name = null;
                    String slot = MAIN;

                    String[] parts = line.substring(MODULE.length()).trim().split(":");
                    name = parts[0];
                    if (parts.length > 1) {
                        slot = parts[1];
                    }

                    current = rules.get(name + ":" + slot);
                    if (current == null) {
                        current = new ModuleRewriteRules();
                        this.rules.put(name + ":" + slot, current);
                    }
                } else if (line.startsWith(INCLUDE)) {
                    String name = null;
                    String slot = null;

                    String[] parts = line.substring(INCLUDE.length()).trim().split(":");
                    name = parts[0];
                    if (parts.length > 1) {
                        slot = parts[1];
                    }

                    current.include(name, slot);
                } else if (line.startsWith(EXPORT)) {
                    String name = null;
                    String slot = null;

                    String[] parts = line.substring(EXPORT.length()).trim().split(":");
                    name = parts[0];
                    if (parts.length > 1) {
                        slot = parts[1];
                    }

                    current.export(name, slot);
                } else {
                    System.err.println(lineNumber + ":Lines should be blank or start with " + MODULE + ", " + INCLUDE + ", " + EXPORT + " or " + OPTIONAL + " - " + line);
                }
            }
        }
    }

    private static final String MODULE = "module:";

    private static final String INCLUDE = "include:";

    private static final String EXPORT = "export:";

    private static final String OPTIONAL = "optional:";

    private static final String REPLACE = "replace:";

    private static final String MAIN = "main";

    private Map rules = new HashMap<>();
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy