package com.hypnoticocelot.jaxrs.doclet.translator; import com.google.common.base.Objects; import com.google.common.base.Strings; import com.sun.javadoc.FieldDoc; import com.sun.javadoc.MethodDoc; import com.sun.javadoc.Type; public interface Translator { OptionalName typeName(Type type); OptionalName fieldName(FieldDoc field); OptionalName methodName(MethodDoc method); class OptionalName { private final Status status; private final String name; private OptionalName(Status status, String name) { this.status = status; this.name = name; } public static OptionalName presentOrMissing(String name) { if (!Strings.isNullOrEmpty(name)) { return new OptionalName(Status.PRESENT, name); } else { return new OptionalName(Status.MISSING, null); } } public static OptionalName ignored() { return new OptionalName(Status.IGNORED, null); } public String value() { return name; } public boolean isPresent() { return status == Status.PRESENT; } public boolean isMissing() { return status == Status.MISSING; } private static enum Status { PRESENT, IGNORED, MISSING } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; OptionalName that = (OptionalName) o; return Objects.equal(status, that.status) && Objects.equal(name, that.name); } @Override public int hashCode() { return Objects.hashCode(status, name); } @Override public String toString() { return Objects.toStringHelper(this) .add("status", status) .add("name", name) .toString(); } } }