Java tutorial
/* * Copyright (c) 2014 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.tenant; import de.kaiserpfalzEdv.commons.Identity; import de.kaiserpfalzEdv.commons.Nameable; import de.kaiserpfalzEdv.commons.dto.IdentityDTO; import de.kaiserpfalzEdv.commons.dto.NameBuilder; import de.kaiserpfalzEdv.commons.dto.NameDTO; 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 java.util.UUID; import static com.google.common.base.Preconditions.checkArgument; /** * @author klenkes <rlichti@kaiserpfalz-edv.de< * @since 2014Q1 */ public class TenantDO implements Tenant, TenantWritable, Serializable { private static final long serialVersionUID = -2056667668367307763L; private IdentityDTO id; private NameDTO name; private TenantDO parent; /** * @deprecated Only used for broken specifications like JAX-B and JPA and so on. */ @Deprecated public TenantDO() { } TenantDO(final IdentityDTO id, final NameDTO name) { setIdentity(id); setNameable(name); } @Override public UUID getId() { return id.getId(); } @Override public void setId(UUID uuid) { id.setId(uuid); } public TenantDO withId(UUID id) { setId(id); return this; } public IdentityDTO getIdentity() { return id; } public void setIdentity(final Identity<UUID> id) { this.id = new IdentityDTO(id); } public TenantDO withIdentity(final Identity<UUID> id) { setIdentity(id); return this; } public Nameable getNameable() { return name; } public void setNameable(final Nameable name) { this.name = new NameBuilder().withName(name).build(); } public TenantDO withNameable(final Nameable name) { setNameable(name); return this; } @Override public String getShortName() { return name.getShortName(); } @Override public String getCanonicalName() { return name.getCanonicalName(); } @Override public String getDisplayName() { return name.getDisplayName(); } @Override public void setShortName(String name) { this.name.setShortName(name); } public TenantDO withShortName(String name) { setShortName(name); return this; } @Override public void setCanonicalName(String name) { this.name.setCanonicalName(name); } public TenantDO withCanonicalName(String name) { setCanonicalName(name); return this; } @Override public void setDisplayName(String name) { this.name.setDisplayName(name); } public TenantDO withDisplayName(String name) { setDisplayName(name); return this; } @Override public void setParent(Tenant tenant) { checkArgument(tenant != null, "Can't set <null> as parent. Use unsetParent() instead!"); try { this.parent = (TenantDO) tenant; } catch (ClassCastException e) { this.parent = (TenantDO) new TenantDOBuilder().withTenant(tenant).build(); } } public TenantDO withParent(final Tenant tenant) { setParent(tenant); return this; } @Override public void unsetParent() { this.parent = null; } @Override public Tenant getParent() { return parent; } @Override public TenantWritable getWriter() { return this; } @Override public int hashCode() { return new HashCodeBuilder().append(id).build(); } @Override public boolean equals(Object other) { if (other == this) return true; if (other == null) return false; if (!Tenant.class.isAssignableFrom(other.getClass())) return false; Tenant that = (Tenant) other; return new EqualsBuilder().append(id.getId(), that.getId()).build(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append(id.getId()).build(); } }