de.kaiserpfalzEdv.tenant.TenantDO.java Source code

Java tutorial

Introduction

Here is the source code for de.kaiserpfalzEdv.tenant.TenantDO.java

Source

/*
 * 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();
    }
}