/* * 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.impl; import org.onosproject.tl1.Tl1Command; 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); } } }