Java tutorial
/* * Copyright 2015 Kaiserpfalz EDV-Service Roland Lichti * * 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 de.kaiserpfalzEdv.commons.dto; import com.google.common.base.Preconditions; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.io.Serializable; import static org.apache.commons.lang3.StringUtils.isNotBlank; /** * @author klenkes >rlichti@kaiserpfalz-edv.de< * @since 2014Q1 */ public class NameDTO implements NameableWritable, Serializable, Comparable<Nameable> { private static final long serialVersionUID = -3586485266882182080L; /** * The maximum length of a short name. */ public static final int MAX_SHORT_NAME = 10; /** * The maximum length of a canonical name. */ public static final int MAX_CANONICAL_NAME = 200; /** * The maximum length of a display name. */ public static final int MAX_DISPLAY_NAME = 100; private String shortName; private String canonicalName; private String displayName; /** * @deprecated Please don't use this constructor directly. It is only needed for using this object with * specifications like JAX-B or JPA. */ @SuppressWarnings("UnusedDeclaration") @Deprecated // Only used by JAX-B and JPA public NameDTO() { } NameDTO(final String name, final String shortName, final String canonicalName) { setDisplayName(name); setShortName(shortName); setCanonicalName(canonicalName); } @Override public String getShortName() { return shortName; } @Override public String getCanonicalName() { return canonicalName; } @Override public String getDisplayName() { return displayName; } @Override public void setShortName(final String name) { checkArgument(name, MAX_SHORT_NAME); this.shortName = name; } public NameDTO withShortName(final String name) { setShortName(name); return this; } @Override public void setCanonicalName(final String name) { checkArgument(name, MAX_CANONICAL_NAME); this.canonicalName = name; } public NameDTO withCanonicalName(final String name) { setCanonicalName(name); return this; } @Override public void setDisplayName(final String name) { checkArgument(name, MAX_DISPLAY_NAME); this.displayName = name; } public NameDTO withDisplayName(final String name) { setDisplayName(name); return this; } private void checkArgument(final String name, int maxLength) { Preconditions.checkArgument(isNotBlank(name), "Can't set name to '%s'!", name); Preconditions.checkArgument(name.length() <= maxLength, "Given name '%s' is %s chars too long (max %s chars)", name, name.length() - maxLength, maxLength); } @Override public int compareTo(Nameable o) { return canonicalName.compareTo(o.getCanonicalName()); } @Override public int hashCode() { return new HashCodeBuilder().append(canonicalName).build(); } @Override public boolean equals(final Object other) { if (other == this) return true; if (other == null) return false; if (!Nameable.class.isAssignableFrom(other.getClass())) return false; Nameable that = (Nameable) other; return new EqualsBuilder().append(canonicalName, that.getCanonicalName()).build(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append(canonicalName).build(); } }