2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/eplv10.html
8 package org.opendaylight.yangtools.yang.model.repo.spi;
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
13 import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
14 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
17 * A potential schema source. Instances of this class track the various
18 * representations of a schema source and the cost attached to obtaining
19 * the source from them.
22 public final class PotentialSchemaSource<T extends SchemaSourceRepresentation> {
24 * Each registered source has a cost associated with it. Since a particular
25 * representation can be acquired by various means, here are general constants
30 * The source is immediately available, via a lookup or similar.
34 * The source is available via a computation. For transformation-type
35 * computation, the cost of acquiring the cost needs to be added, too.
39 * The source is available by performing local IO, such that reading
44 * The source is available by performing remote IO, such as fetching
45 * from an HTTP server or similar.
49 private final int value;
51 private Costs(final int value) {
58 * @return Const constant.
60 public int getValue() {
65 private final Class<? extends T> representation;
66 private final SourceIdentifier sourceIdentifier;
67 private final int cost;
69 private PotentialSchemaSource(final SourceIdentifier sourceIdentifier, final Class<? extends T> representation, final int cost) {
70 this.representation = Preconditions.checkNotNull(representation);
71 this.sourceIdentifier = Preconditions.checkNotNull(sourceIdentifier);
72 Preconditions.checkArgument(cost >= 0, "cost has to be non-negative");
76 public static final <T extends SchemaSourceRepresentation> PotentialSchemaSource<T> create(final SourceIdentifier sourceIdentifier, final Class<? extends T> representation, final int cost) {
77 return new PotentialSchemaSource<>(sourceIdentifier, representation, cost);
80 public SourceIdentifier getSourceIdentifier() {
81 return sourceIdentifier;
84 public Class<? extends T> getRepresentation() {
85 return representation;
88 public int getCost() {
93 public int hashCode() {
96 result = prime * result + cost;
97 result = prime * result + representation.hashCode();
98 result = prime * result + sourceIdentifier.hashCode();
103 public boolean equals(final Object obj) {
107 if (!(obj instanceof PotentialSchemaSource)) {
110 final PotentialSchemaSource<?> other = (PotentialSchemaSource<?>) obj;
111 if (cost != other.cost) {
114 if (!representation.equals(other.representation)) {
117 if (!sourceIdentifier.equals(other.sourceIdentifier)) {