blob: 22136987ca2c51850238a39613c48bcc51d9f50c [file] [log] [blame]
/*
* 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);
}
}
}