/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
* This program and the accompanying materials are made available under the
* 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.parser.util;
import static java.util.Arrays.asList;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
-import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.net.URI;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.model.api.Module;
*/
public final class ModuleDependencySort {
- private static final Date DEFAULT_REVISION = new Date(0);
+ private static final Date DEFAULT_REVISION = SimpleDateFormatUtil.DEFAULT_DATE_REV;
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleDependencySort.class);
private static final Function<Node, Module> TOPOLOGY_FUNCTION = new Function<TopologicalSort.Node, Module>() {
@Override
public Module apply(final TopologicalSort.Node input) {
+ if (input == null) {
+ return null;
+ }
ModuleOrModuleBuilder moduleOrModuleBuilder = ((ModuleNodeImpl) input).getReference();
return moduleOrModuleBuilder.getModule();
}
@Override
public ModuleBuilder apply(final TopologicalSort.Node input) {
// Cast to ModuleBuilder from Node and return
+ if (input == null) {
+ return null;
+ }
ModuleOrModuleBuilder moduleOrModuleBuilder = ((ModuleNodeImpl) input).getReference();
return moduleOrModuleBuilder.getModuleBuilder();
}
/**
* Topological sort of module builder dependency graph.
*
+ * @param builders builders of Module object
* @return Sorted list of Module builders. Modules can be further processed
* in returned order.
+ * @deprecated Pre-Beryllium implementation, scheduled for removal.
*/
+ @Deprecated
public static List<ModuleBuilder> sort(final ModuleBuilder... builders) {
return sort(asList(builders));
}
+ /**
+ * @deprecated Pre-Beryllium implementation, scheduled for removal.
+ */
+ @Deprecated
public static List<ModuleBuilder> sort(final Collection<ModuleBuilder> builders) {
List<TopologicalSort.Node> sorted = sortInternal(ModuleOrModuleBuilder.fromAll(
- Collections.<Module>emptySet(),builders));
+ Collections.emptySet(),builders));
return Lists.transform(sorted, NODE_TO_MODULEBUILDER);
}
@Override
public ModuleBuilder apply(final TopologicalSort.Node input) {
+ if (input == null) {
+ return null;
+ }
ModuleOrModuleBuilder moduleOrModuleBuilder = ((ModuleNodeImpl) input).getReference();
if (moduleOrModuleBuilder.isModuleBuilder()) {
return moduleOrModuleBuilder.getModuleBuilder();
/**
* Topological sort of module dependency graph.
*
+ * @param modules YANG modules
* @return Sorted list of Modules. Modules can be further processed in
* returned order.
*/
public static List<Module> sort(final Module... modules) {
List<TopologicalSort.Node> sorted = sortInternal(ModuleOrModuleBuilder.fromAll(asList(modules),
- Collections.<ModuleBuilder>emptyList()));
+ Collections.emptyList()));
// Cast to Module from Node and return
return Lists.transform(sorted, TOPOLOGY_FUNCTION);
}
}
if (moduleGraph.get(name) == null) {
- moduleGraph.put(name, Maps.<Date, ModuleNodeImpl> newHashMap());
+ moduleGraph.put(name, Maps.newHashMap());
}
if (moduleGraph.get(name).get(rev) != null) {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((revision == null) ? 0 : revision.hashCode());
+ result = prime * result + Objects.hashCode(name);
+ result = prime * result + Objects.hashCode(revision);
return result;
}
}
}
-class ModuleOrModuleBuilder {
- private final Optional<Module> maybeModule;
- private final Optional<ModuleBuilder> maybeModuleBuilder;
-
- ModuleOrModuleBuilder(final Module module) {
- maybeModule = Optional.of(module);
- maybeModuleBuilder = Optional.absent();
- }
-
- ModuleOrModuleBuilder(final ModuleBuilder moduleBuilder) {
- maybeModule = Optional.absent();
- maybeModuleBuilder = Optional.of(moduleBuilder);
- }
- boolean isModule(){
- return maybeModule.isPresent();
- }
- boolean isModuleBuilder(){
- return maybeModuleBuilder.isPresent();
- }
- Module getModule(){
- return maybeModule.get();
- }
- ModuleBuilder getModuleBuilder(){
- return maybeModuleBuilder.get();
- }
-
- static List<ModuleOrModuleBuilder> fromAll(final Collection<Module> modules, final Collection<ModuleBuilder> moduleBuilders) {
- List<ModuleOrModuleBuilder> result = new ArrayList<>(modules.size() + moduleBuilders.size());
- for(Module m: modules){
- result.add(new ModuleOrModuleBuilder(m));
- }
- for (ModuleBuilder mb : moduleBuilders) {
- result.add(new ModuleOrModuleBuilder(mb));
- }
- return result;
- }
-}