/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.cxf.tools.common.toolspec.parser;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.cxf.common.logging.LogUtils;
public class ErrorVisitor {
public static final long serialVersionUID = 1L;
private static final Logger LOG = LogUtils.getL7dLogger(ErrorVisitor.class);
private final Set<CommandLineError> errors = new HashSet<>();
public static class MissingOption implements CommandLineError {
private final Option o;
public MissingOption(Option op) {
this.o = op;
}
public String toString() {
return "Missing option: " + o.getPrimarySwitch();
}
public Option getOption() {
return o;
}
public String getOptionSwitch() {
return o.getPrimarySwitch();
}
}
public static class DuplicateOption implements CommandLineError {
private final String option;
public DuplicateOption(String opt) {
option = opt;
}
public String toString() {
return "Duplicated option: " + option;
}
public String getOptionSwitch() {
return option;
}
}
public static class DuplicateArgument implements CommandLineError {
private final String argument;
public DuplicateArgument(String arg) {
this.argument = arg;
}
public String toString() {
return "Duplicated argument: " + argument;
}
public String getOptionSwitch() {
return argument;
}
}
public static class UnexpectedOption implements CommandLineError {
private final String option;
public UnexpectedOption(String opt) {
this.option = opt;
}
public String toString() {
return "Unexpected option: " + option;
}
public String getOptionSwitch() {
return option;
}
}
public static class UnexpectedArgument implements CommandLineError {
private final String arg;
public UnexpectedArgument(String a) {
this.arg = a;
}
public String toString() {
return "Unexpected argument: " + arg;
}
public String getArgument() {
return arg;
}
}
public static class InvalidOption implements CommandLineError {
private final String option;
public InvalidOption(String opt) {
this.option = opt;
}
public String toString() {
return "Invalid option: " + option + " is missing its associated argument";
}
public String getOptionSwitch() {
return option;
}
}
public static class MissingArgument implements CommandLineError {
private final String arg;
public MissingArgument(String a) {
this.arg = a;
}
public String toString() {
return "Missing argument: " + arg;
}
public String getArgument() {
return arg;
}
}
public static class UserError implements CommandLineError {
private final String msg;
public UserError(String m) {
this.msg = m;
}
public String toString() {
return msg;
}
public String getMessage() {
return msg;
}
}
public Collection<CommandLineError> getErrors() {
return errors;
}
public void add(CommandLineError err) {
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Adding error: " + err);
}
errors.add(err);
}
public String toString() {
StringBuilder res = new StringBuilder();
for (Object o : errors) {
res.append(o.toString()).append(System.getProperty("line.separator"));
}
return res.toString();
}
}