summaryrefslogtreecommitdiffstats
path: root/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2016-05-04 10:17:39 +0200
committerMarek Gradzki <mgradzki@cisco.com>2016-05-05 08:41:23 +0200
commitf187ae2f6a363616442a8968db1450977ce69078 (patch)
tree7e3c8799f931a47edbbf3a6ec40494a75a2a7d7f /v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po
parentfd5c022142f871c78d29708c89afc941518acbd0 (diff)
HONEYCOMB-10: Porting v3po2vpp to the new Java API
Change-Id: Ic7166b0f578442165595aa44a587ebbc5db0e75c Signed-off-by: Marek Gradzki <mgradzki@cisco.com> Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po')
-rw-r--r--v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/FutureJVppCustomizer.java (renamed from v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/VppApiCustomizer.java)15
-rw-r--r--v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/NamingContext.java94
2 files changed, 103 insertions, 6 deletions
diff --git a/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/VppApiCustomizer.java b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/FutureJVppCustomizer.java
index c9351cdc4..61495b71c 100644
--- a/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/VppApiCustomizer.java
+++ b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/FutureJVppCustomizer.java
@@ -17,17 +17,20 @@
package io.fd.honeycomb.v3po.translate.v3po.util;
import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import javax.annotation.Nonnull;
+import org.openvpp.jvpp.future.FutureJVpp;
/**
* Abstract utility to hold the vppApi reference.
*/
@Beta
-public abstract class VppApiCustomizer {
+public abstract class FutureJVppCustomizer {
- private final org.openvpp.vppjapi.vppApi vppApi;
+ private final FutureJVpp futureJvpp;
- public VppApiCustomizer(final org.openvpp.vppjapi.vppApi vppApi) {
- this.vppApi = vppApi;
+ public FutureJVppCustomizer(@Nonnull final FutureJVpp futureJvpp) {
+ this.futureJvpp = Preconditions.checkNotNull(futureJvpp, "futureJvpp should not be null");
}
/**
@@ -35,7 +38,7 @@ public abstract class VppApiCustomizer {
*
* @return vppApi reference
*/
- public org.openvpp.vppjapi.vppApi getVppApi() {
- return vppApi;
+ public FutureJVpp getFutureJVpp() {
+ return futureJvpp;
}
}
diff --git a/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/NamingContext.java b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/NamingContext.java
new file mode 100644
index 000000000..96d908e1b
--- /dev/null
+++ b/v3po/vpp-translate-utils/src/main/java/io/fd/honeycomb/v3po/translate/v3po/util/NamingContext.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.v3po.translate.v3po.util;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+import javax.annotation.Nonnull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Naming context keeping a mapping between int index and string name.
+ * Provides artificial names to unknown indices.
+ */
+public final class NamingContext implements AutoCloseable {
+
+ private static final Logger LOG = LoggerFactory.getLogger(NamingContext.class);
+
+ private final BiMap<String, Integer> nameMapping = HashBiMap.create();
+ private final String artificialNamePrefix;
+
+ public NamingContext(final String artificialNamePrefix) {
+ this.artificialNamePrefix = artificialNamePrefix;
+ }
+
+ @Nonnull
+ public synchronized String getName(final int index) {
+ if(!nameMapping.inverse().containsKey(index)) {
+ final String artificialName = getArtificialName(index);
+ LOG.info("Assigning artificial name: {} for index: {}", artificialName, index);
+ addName(index, artificialName);
+ }
+ return nameMapping.inverse().get(index);
+ }
+
+ @Nonnull
+ public synchronized boolean containsName(final int index) {
+ return nameMapping.inverse().containsKey(index);
+ }
+
+ @Nonnull
+ public synchronized void addName(final int index, final String name) {
+ nameMapping.put(name, index);
+ }
+
+ @Nonnull
+ public synchronized int removeName(final String name) {
+ return nameMapping.remove(name);
+ }
+
+ /**
+ * Returns index value associated with the given name.
+ *
+ * @param name the name whose associated index value is to be returned
+ * @return integer index value matching supplied name
+ * @throws IllegalArgumentException if name was not found
+ */
+ @Nonnull
+ public synchronized int getIndex(String name) {
+ checkArgument(nameMapping.containsKey(name), "Name %s not found. Known names: %s",
+ name, nameMapping);
+ return nameMapping.get(name);
+ }
+
+ @Nonnull
+ public synchronized boolean containsIndex(String interfaceName) {
+ return nameMapping.containsKey(interfaceName);
+ }
+
+ public String getArtificialName(final int index) {
+ return artificialNamePrefix + index;
+ }
+
+ @Override
+ public void close() throws Exception {
+ nameMapping.clear();
+ }
+}