package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf;
-
import com.google.common.base.CharMatcher;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Iterables;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
-import java.util.Objects;
+import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.model.api.Deviation;
+import org.opendaylight.yangtools.yang.model.api.Deviation.Deviate;
import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.Status;
private static final Splitter SPACE_SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults();
private static final Pattern PATH_ABS = Pattern.compile("/[^/].*");
+ private static final Map<String, Deviate> KEYWORD_TO_DEVIATE_MAP;
+ static {
+ Builder<String, Deviate> keywordToDeviateMapBuilder = ImmutableMap.builder();
+ for (Deviate deviate : Deviation.Deviate.values()) {
+ keywordToDeviateMapBuilder.put(deviate.getKeyword(), deviate);
+ }
+ KEYWORD_TO_DEVIATE_MAP = keywordToDeviateMapBuilder.build();
+ }
+
private static final ThreadLocal<XPathFactory> XPATH_FACTORY = new ThreadLocal<XPathFactory>() {
@Override
protected XPathFactory initialValue() {
ctx.getRoot().rawStatementArgument(), value);
final QNameModule resultQNameModule;
if (qNameModule.getRevision() == null) {
- resultQNameModule = QNameModule.cachedReference(
- QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV));
+ resultQNameModule = QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV)
+ .intern();
} else {
resultQNameModule = qNameModule;
}
return qNameModule;
}
- return QNameModule.cachedReference(
- QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV));
+ return QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV).intern();
}
@Nullable
.isAssignableFrom(UnknownStatementImpl.class);
}
- public static Deviation.Deviate parseDeviateFromString(final String deviate) {
-
- // Yang constants should be lowercase so we have throw if value does not
- // suit this
- String deviateUpper = deviate.toUpperCase();
- Preconditions.checkArgument(!Objects.equals(deviate, deviateUpper),
- "String %s is not valid deviate argument", deviate);
-
- // but Java enum is uppercase so we cannot use lowercase here
- try {
- return Deviation.Deviate.valueOf(deviateUpper);
- } catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(String.format("String %s is not valid deviate argument", deviate), e);
- }
+ public static Deviation.Deviate parseDeviateFromString(final String deviateKeyword) {
+ return Preconditions.checkNotNull(KEYWORD_TO_DEVIATE_MAP.get(deviateKeyword),
+ "String '%s' is not valid deviate argument", deviateKeyword);
}
public static Status parseStatus(final String value) {
-
- Status status = null;
switch (value) {
case "current":
- status = Status.CURRENT;
- break;
+ return Status.CURRENT;
case "deprecated":
- status = Status.DEPRECATED;
- break;
+ return Status.DEPRECATED;
case "obsolete":
- status = Status.OBSOLETE;
- break;
+ return Status.OBSOLETE;
default:
- LOG.warn("Invalid 'status' statement: " + value);
+ LOG.warn("Invalid 'status' statement: {}", value);
+ return null;
}
-
- return status;
}
public static Date getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {