blob: 22136987ca2c51850238a39613c48bcc51d9f50c [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 */
Yuta HIGUCHIc6358352017-06-23 11:56:27 -070016package org.onosproject.tl1;
Marc De Leenheer57a5af02016-12-02 20:54:41 -080017
18import java.util.Optional;
19
20import static com.google.common.base.Preconditions.checkArgument;
21import static com.google.common.base.Preconditions.checkNotNull;
22
23/**
24 * Default implementation of a TL1 command.
25 */
26public final class DefaultTl1Command implements Tl1Command {
27 private static final char HYPHEN = '-';
28 private static final char COLON = ':';
29 private static final char SEMICOLON = ';';
30
31 private String verb;
32 private String modifier;
33 private Optional<String> tid;
34 private String aid;
35 private int ctag;
36 private String parameters;
37
38 private DefaultTl1Command(String verb, String modifier, String tid, String aid, int ctag, String parameters) {
39 this.verb = verb;
40 this.modifier = modifier;
41 this.tid = Optional.ofNullable(tid);
42 this.aid = aid;
43 this.ctag = ctag;
44 this.parameters = parameters;
45 }
46
47 @Override
48 public String verb() {
49 return verb;
50 }
51
52 @Override
53 public String modifier() {
54 return modifier;
55 }
56
57 @Override
58 public Optional<String> tid() {
59 return tid;
60 }
61
62 @Override
63 public Optional<String> aid() {
64 return Optional.ofNullable(aid);
65 }
66
67 @Override
68 public int ctag() {
69 return ctag;
70 }
71
72 @Override
73 public Optional<String> parameters() {
74 return Optional.ofNullable(parameters);
75 }
76
77 @Override
78 public String toString() {
79 StringBuilder sb = new StringBuilder()
80 .append(verb).append(HYPHEN)
81 .append(modifier).append(COLON)
82 .append(tid().orElse("")).append(COLON)
83 .append(aid().orElse("")).append(COLON)
84 .append(ctag);
85
86 if (parameters().isPresent()) {
87 sb.append(COLON).append(COLON).append(parameters);
88 }
89
90 return sb.append(SEMICOLON).toString();
91 }
92
93 public static Builder builder() {
94 return new Builder();
95 }
96
97 public static final class Builder implements Tl1Command.Builder {
98 private String verb;
99 private String modifier;
100 private String tid;
101 private String aid;
102 private int ctag;
103 private String parameters;
104
105 @Override
106 public Tl1Command.Builder withVerb(String verb) {
107 this.verb = verb;
108 return this;
109 }
110
111 @Override
112 public Tl1Command.Builder withModifier(String modifier) {
113 this.modifier = modifier;
114 return this;
115 }
116
117 @Override
118 public Tl1Command.Builder forTid(String tid) {
119 this.tid = tid;
120 return this;
121 }
122
123 @Override
124 public Tl1Command.Builder withAid(String aid) {
125 this.aid = aid;
126 return this;
127 }
128
129 @Override
130 public Tl1Command.Builder withCtag(int ctag) {
131 this.ctag = ctag;
132 return this;
133 }
134
135 @Override
136 public Tl1Command.Builder withParameters(String parameters) {
137 this.parameters = parameters;
138 return this;
139 }
140
141 @Override
142 public Tl1Command build() {
143 checkNotNull(verb, "Must supply a verb");
144 checkNotNull(modifier, "Must supply a modifier");
145
146 checkArgument(MIN_CTAG < ctag, "ctag cannot be less than " + MIN_CTAG);
147 checkArgument(ctag <= MAX_CTAG, "ctag cannot be larger than " + MAX_CTAG);
148
149 return new DefaultTl1Command(verb, modifier, tid, aid, ctag, parameters);
150 }
151 }
152}