* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.yangtools.yang.model.util;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.Function;
-import javax.annotation.concurrent.Immutable;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.ModuleImport;
+import org.opendaylight.yangtools.yang.model.api.ModuleLike;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.Submodule;
-@Immutable
public final class FilteringSchemaContextProxy extends AbstractSchemaContext {
- private final Map<QNameModule, Module> moduleMap;
+ private final ImmutableMap<QNameModule, Module> moduleMap;
//collection to be filled with filtered modules
- private final Set<Module> filteredModules;
+ private final ImmutableSet<Module> filteredModules;
//collections to be filled in with filtered data
- private final SetMultimap<URI, Module> namespaceToModules;
- private final SetMultimap<String, Module> nameToModules;
+ private final ImmutableSetMultimap<URI, Module> namespaceToModules;
+ private final ImmutableSetMultimap<String, Module> nameToModules;
/**
* Filters SchemaContext for yang modules.
*/
public FilteringSchemaContextProxy(final SchemaContext delegate, final Collection<ModuleId> rootModules,
final Set<ModuleId> additionalModuleIds) {
- Preconditions.checkNotNull(rootModules, "Base modules cannot be null.");
- Preconditions.checkNotNull(additionalModuleIds, "Additional modules cannot be null.");
+ requireNonNull(rootModules, "Base modules cannot be null.");
+ requireNonNull(additionalModuleIds, "Additional modules cannot be null.");
final Builder<Module> filteredModulesBuilder = new Builder<>();
module -> checkModuleDependency(module, rootModules)));
}
- private static Multimap<String, Module> getStringModuleMap(final SchemaContext delegate) {
+ private static Multimap<String, ? extends Module> getStringModuleMap(final SchemaContext delegate) {
return Multimaps.index(delegate.getModules(), Module::getName);
}
//dealing with imported module other than root and directly importing root
- private static Collection<Module> getImportedModules(final Map<ModuleId, Module> allModules,
- final Set<Module> baseModules, final TreeMultimap<String, Module> nameToModulesAll) {
+ private static Collection<Module> getImportedModules(final Map<ModuleId, ? extends @NonNull Module> allModules,
+ final Collection<? extends @NonNull Module> baseModules,
+ final TreeMultimap<String, Module> nameToModulesAll) {
- List<Module> relatedModules = Lists.newLinkedList();
+ List<Module> relatedModules = new LinkedList<>();
for (Module module : baseModules) {
for (ModuleImport moduleImport : module.getImports()) {
Optional<Revision> revisionDate = moduleImport.getRevision();
- if (!revisionDate.isPresent()) {
+ if (revisionDate.isEmpty()) {
revisionDate = nameToModulesAll.get(moduleImport.getModuleName()).first().getRevision();
}
}
//check for any dependency regarding given string
- private boolean checkModuleDependency(final Module module, final Collection<ModuleId> rootModules) {
-
+ private boolean checkModuleDependency(final ModuleLike module, final Collection<ModuleId> rootModules) {
for (ModuleId rootModule : rootModules) {
-
if (rootModule.equals(new ModuleId(module.getName(), module.getRevision()))) {
return true;
}
//handling/checking imports regarding root modules
for (ModuleImport moduleImport : module.getImports()) {
-
if (moduleImport.getModuleName().equals(rootModule.getName())) {
-
- if (moduleImport.getRevision().isPresent()
- && !moduleImport.getRevision().equals(rootModule.getRev())) {
- return false;
- }
-
- return true;
+ return moduleImport.getRevision().isEmpty()
+ || moduleImport.getRevision().equals(rootModule.getRev());
}
}
//submodules handling
- for (Module moduleSub : module.getSubmodules()) {
+ for (Submodule moduleSub : module.getSubmodules()) {
return checkModuleDependency(moduleSub, rootModules);
}
}
private final Revision rev;
public ModuleId(final String name, final Optional<Revision> rev) {
- Preconditions.checkArgument(!Strings.isNullOrEmpty(name),
- "No module dependency name given. Nothing to do.");
+ checkArgument(!Strings.isNullOrEmpty(name), "No module dependency name given. Nothing to do.");
this.name = name;
- Preconditions.checkArgument(rev.isPresent(), "No revision date given. Nothing to do.");
+ checkArgument(rev.isPresent(), "No revision date given. Nothing to do.");
this.rev = rev.get();
}