import java.util.Collections;
import java.util.Date;
import java.util.Deque;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
private final Deque<Builder> actualPath = new LinkedList<>();
private final Set<TypeAwareBuilder> dirtyNodes = new HashSet<>();
- final Set<ModuleImport> imports = new HashSet<>();
+ final Map<String, ModuleImport> imports = new HashMap<>();
+ final Map<String, ModuleBuilder> importedModules = new HashMap<>();
private final Set<AugmentationSchema> augments = new LinkedHashSet<>();
private final List<AugmentationSchemaBuilder> augmentBuilders = new ArrayList<>();
return qnameModule.getRevision();
}
- protected Set<ModuleImport> getImports() {
+ public ModuleImport getImport(final String prefix) {
+ return imports.get(prefix);
+ }
+
+ public Map<String, ModuleImport> getImports() {
return imports;
}
+ public ModuleBuilder getImportedModule(final String prefix) {
+ return importedModules.get(prefix);
+ }
+
+ public void addImportedModule(final String prefix, final ModuleBuilder module) {
+ checkPrefix(prefix);
+ importedModules.put(prefix, module);
+ }
+
protected String getSource() {
return source;
}
this.contact = contact;
}
- public boolean addModuleImport(final String moduleName, final Date revision, final String prefix) {
+ public void addModuleImport(final String moduleName, final Date revision, final String prefix) {
+ checkPrefix(prefix);
checkNotSealed();
final ModuleImport moduleImport = createModuleImport(moduleName, revision, prefix);
- return imports.add(moduleImport);
+ imports.put(prefix, moduleImport);
}
- public Set<ModuleImport> getModuleImports() {
- return imports;
+ private void checkPrefix(final String prefix) {
+ if (prefix == null || prefix.isEmpty()) {
+ throw new IllegalArgumentException("Cannot add imported module with undefined prefix");
+ }
+ if (prefix.equals(this.prefix)) {
+ throw new IllegalArgumentException("Cannot add imported module with prefix equals to module prefix");
+ }
}
public ExtensionBuilder addExtension(final QName qname, final int line, final SchemaPath path) {