Resolve OSGi wiring issue in TL1
Change-Id: Ic749d0739e2faa0fc913dbffa78c38af56142834
diff --git a/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java
new file mode 100644
index 0000000..2213698
--- /dev/null
+++ b/protocols/tl1/api/src/main/java/org/onosproject/tl1/DefaultTl1Command.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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 org.onosproject.tl1;
+
+import java.util.Optional;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Default implementation of a TL1 command.
+ */
+public final class DefaultTl1Command implements Tl1Command {
+ private static final char HYPHEN = '-';
+ private static final char COLON = ':';
+ private static final char SEMICOLON = ';';
+
+ private String verb;
+ private String modifier;
+ private Optional<String> tid;
+ private String aid;
+ private int ctag;
+ private String parameters;
+
+ private DefaultTl1Command(String verb, String modifier, String tid, String aid, int ctag, String parameters) {
+ this.verb = verb;
+ this.modifier = modifier;
+ this.tid = Optional.ofNullable(tid);
+ this.aid = aid;
+ this.ctag = ctag;
+ this.parameters = parameters;
+ }
+
+ @Override
+ public String verb() {
+ return verb;
+ }
+
+ @Override
+ public String modifier() {
+ return modifier;
+ }
+
+ @Override
+ public Optional<String> tid() {
+ return tid;
+ }
+
+ @Override
+ public Optional<String> aid() {
+ return Optional.ofNullable(aid);
+ }
+
+ @Override
+ public int ctag() {
+ return ctag;
+ }
+
+ @Override
+ public Optional<String> parameters() {
+ return Optional.ofNullable(parameters);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder()
+ .append(verb).append(HYPHEN)
+ .append(modifier).append(COLON)
+ .append(tid().orElse("")).append(COLON)
+ .append(aid().orElse("")).append(COLON)
+ .append(ctag);
+
+ if (parameters().isPresent()) {
+ sb.append(COLON).append(COLON).append(parameters);
+ }
+
+ return sb.append(SEMICOLON).toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static final class Builder implements Tl1Command.Builder {
+ private String verb;
+ private String modifier;
+ private String tid;
+ private String aid;
+ private int ctag;
+ private String parameters;
+
+ @Override
+ public Tl1Command.Builder withVerb(String verb) {
+ this.verb = verb;
+ return this;
+ }
+
+ @Override
+ public Tl1Command.Builder withModifier(String modifier) {
+ this.modifier = modifier;
+ return this;
+ }
+
+ @Override
+ public Tl1Command.Builder forTid(String tid) {
+ this.tid = tid;
+ return this;
+ }
+
+ @Override
+ public Tl1Command.Builder withAid(String aid) {
+ this.aid = aid;
+ return this;
+ }
+
+ @Override
+ public Tl1Command.Builder withCtag(int ctag) {
+ this.ctag = ctag;
+ return this;
+ }
+
+ @Override
+ public Tl1Command.Builder withParameters(String parameters) {
+ this.parameters = parameters;
+ return this;
+ }
+
+ @Override
+ public Tl1Command build() {
+ checkNotNull(verb, "Must supply a verb");
+ checkNotNull(modifier, "Must supply a modifier");
+
+ checkArgument(MIN_CTAG < ctag, "ctag cannot be less than " + MIN_CTAG);
+ checkArgument(ctag <= MAX_CTAG, "ctag cannot be larger than " + MAX_CTAG);
+
+ return new DefaultTl1Command(verb, modifier, tid, aid, ctag, parameters);
+ }
+ }
+}