AliasBuilder.java

package org.sterling.source.translator;

import java.util.*;

public class AliasBuilder {

    private final List<String> from;
    private final List<String> imports;
    private final Map<String, String> aliases;

    public AliasBuilder() {
        from = new ArrayList<>();
        imports = new ArrayList<>();
        aliases = new HashMap<>();
    }

    public void addImport(String importName) {
        imports.add(importName);
        setAlias(importName);
    }

    public void appendFrom(String modulePart) {
        from.add(modulePart);
    }

    public List<Alias> acceptImports() {
        String module = acceptModule();
        List<Alias> accepted = acceptImports(module);
        reset();
        return accepted;
    }

    public void setAlias(String alias) {
        aliases.put(imports.get(imports.size() - 1), alias);
    }

    private List<Alias> acceptImports(String module) {
        List<Alias> imports = new ArrayList<>();
        for (String importName : this.imports) {
            imports.add(new Alias(module + '/' + importName, aliases.get(importName)));
        }
        return imports;
    }

    private String acceptModule() {
        StringBuilder builder = new StringBuilder();
        Iterator<String> iterator = from.iterator();
        builder.append(iterator.next());
        while (iterator.hasNext()) {
            builder.append('/');
            builder.append(iterator.next());
        }
        from.clear();
        return builder.toString();
    }

    private void reset() {
        from.clear();
        imports.clear();
    }
}