blob: ab55427a14bac0779c99d35957601e2ed742f880 [file] [log] [blame]
Marc De Leenheer57a5af02016-12-02 20:54:41 -08001/*
2 * Copyright 2017-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.tl1.impl;
17
18import org.onosproject.tl1.Tl1Command;
19
20import java.util.Optional;
21
22import static com.google.common.base.Preconditions.checkArgument;
23import static com.google.common.base.Preconditions.checkNotNull;
24
25/**
26 * Default implementation of a TL1 command.
27 */
28public final class DefaultTl1Command implements Tl1Command {
29 private static final char HYPHEN = '-';
30 private static final char COLON = ':';
31 private static final char SEMICOLON = ';';
32
33 private String verb;
34 private String modifier;
35 private Optional<String> tid;
36 private String aid;
37 private int ctag;
38 private String parameters;
39
40 private DefaultTl1Command(String verb, String modifier, String tid, String aid, int ctag, String parameters) {
41 this.verb = verb;
42 this.modifier = modifier;
43 this.tid = Optional.ofNullable(tid);
44 this.aid = aid;
45 this.ctag = ctag;
46 this.parameters = parameters;
47 }
48
49 @Override
50 public String verb() {
51 return verb;
52 }
53
54 @Override
55 public String modifier() {
56 return modifier;
57 }
58
59 @Override
60 public Optional<String> tid() {
61 return tid;
62 }
63
64 @Override
65 public Optional<String> aid() {
66 return Optional.ofNullable(aid);
67 }
68
69 @Override
70 public int ctag() {
71 return ctag;
72 }
73
74 @Override
75 public Optional<String> parameters() {
76 return Optional.ofNullable(parameters);
77 }
78
79 @Override
80 public String toString() {
81 StringBuilder sb = new StringBuilder()
82 .append(verb).append(HYPHEN)
83 .append(modifier).append(COLON)
84 .append(tid().orElse("")).append(COLON)
85 .append(aid().orElse("")).append(COLON)
86 .append(ctag);
87
88 if (parameters().isPresent()) {
89 sb.append(COLON).append(COLON).append(parameters);
90 }
91
92 return sb.append(SEMICOLON).toString();
93 }
94
95 public static Builder builder() {
96 return new Builder();
97 }
98
99 public static final class Builder implements Tl1Command.Builder {
100 private String verb;
101 private String modifier;
102 private String tid;
103 private String aid;
104 private int ctag;
105 private String parameters;
106
107 @Override
108 public Tl1Command.Builder withVerb(String verb) {
109 this.verb = verb;
110 return this;
111 }
112
113 @Override
114 public Tl1Command.Builder withModifier(String modifier) {
115 this.modifier = modifier;
116 return this;
117 }
118
119 @Override
120 public Tl1Command.Builder forTid(String tid) {
121 this.tid = tid;
122 return this;
123 }
124
125 @Override
126 public Tl1Command.Builder withAid(String aid) {
127 this.aid = aid;
128 return this;
129 }
130
131 @Override
132 public Tl1Command.Builder withCtag(int ctag) {
133 this.ctag = ctag;
134 return this;
135 }
136
137 @Override
138 public Tl1Command.Builder withParameters(String parameters) {
139 this.parameters = parameters;
140 return this;
141 }
142
143 @Override
144 public Tl1Command build() {
145 checkNotNull(verb, "Must supply a verb");
146 checkNotNull(modifier, "Must supply a modifier");
147
148 checkArgument(MIN_CTAG < ctag, "ctag cannot be less than " + MIN_CTAG);
149 checkArgument(ctag <= MAX_CTAG, "ctag cannot be larger than " + MAX_CTAG);
150
151 return new DefaultTl1Command(verb, modifier, tid, aid, ctag, parameters);
152 }
153 }
154}