net.rrm.ehour.domain.Project.java Source code

Java tutorial

Introduction

Here is the source code for net.rrm.ehour.domain.Project.java

Source

/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

package net.rrm.ehour.domain;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Type;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "PROJECT")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Project extends DomainObject<Integer, Project> {
    private static final long serialVersionUID = 6553709211219335091L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "PROJECT_ID")
    private Integer projectId;

    @Column(name = "PROJECT_CODE", length = 32, nullable = false)
    @NotNull
    private String projectCode;

    @Column(name = "CONTACT", length = 255)
    private String contact;

    @Column(name = "DESCRIPTION", length = 1024)
    private String description;

    @Column(name = "NAME", length = 255, nullable = false)
    @NotNull
    private String name;

    @Column(name = "DEFAULT_PROJECT")
    @Type(type = "yes_no")
    private Boolean defaultProject = Boolean.FALSE;

    @Column(name = "ACTIVE")
    @Type(type = "yes_no")
    private Boolean active = Boolean.TRUE;

    @ManyToOne
    @JoinColumn(name = "CUSTOMER_ID", nullable = true)
    @NotNull
    private Customer customer;

    @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE }, mappedBy = "project")
    @Basic(fetch = FetchType.LAZY)
    private Set<ProjectAssignment> projectAssignments;

    @ManyToOne
    @JoinColumn(name = "PROJECT_MANAGER", nullable = true)
    private User projectManager;

    @Column(name = "BILLABLE")
    @Type(type = "yes_no")
    private Boolean billable = Boolean.TRUE;

    @Transient
    private Double bookedHours;

    // Constructors

    public boolean isBillable() {
        return billable;
    }

    public void setBillable(boolean billable) {
        this.billable = billable;
    }

    /**
     * default constructor
     */
    public Project() {
    }

    public Project(Integer projectId) {
        this.projectId = projectId;
    }

    public Project(Integer projectId, Customer customer) {
        this(projectId);
        this.customer = customer;
    }

    public String getFullName() {
        return (StringUtils.isBlank(projectCode)) ? name : projectCode + " - " + name;
    }

    public String getFullNameWithCustomer() {
        return getCustomer().getCode() + ": "
                + ((StringUtils.isBlank(projectCode)) ? name : projectCode + " - " + name);
    }

    /**
     * Get primary key
     */
    public Integer getPK() {
        return projectId;
    }

    // Property accessors

    public Integer getProjectId() {
        return this.projectId;
    }

    public void setProjectId(Integer projectId) {
        this.projectId = projectId;
    }

    public String getProjectCode() {
        return this.projectCode;
    }

    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }

    public String getContact() {
        return this.contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public String getDescription() {
        return this.description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getName() {
        return this.name;
    }

    public Project setName(String name) {
        this.name = name;
        return this;
    }

    public boolean isDefaultProject() {
        return this.defaultProject;
    }

    public void setDefaultProject(boolean defaultProject) {
        this.defaultProject = defaultProject;
    }

    public Customer getCustomer() {
        return this.customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    /**
     * @return the active
     */
    public boolean isActive() {
        return active;
    }

    /**
     * @param active the active to set
     */
    public void setActive(boolean active) {
        this.active = active;
    }

    /**
     * @return the projectAssignments
     */
    public Set<ProjectAssignment> getProjectAssignments() {
        return projectAssignments;
    }

    /**
     * @param projectAssignments the projectAssignments to set
     */
    public void setProjectAssignments(Set<ProjectAssignment> projectAssignments) {
        this.projectAssignments = projectAssignments;
    }

    /**
     * @see java.lang.Comparable#compareTo(Object)
     */
    public int compareTo(Project object) {
        return new CompareToBuilder().append(this.getName(), object.getName())
                .append(this.getProjectCode(), object.getProjectCode())
                .append(this.getCustomer(), object.getCustomer()).append(this.getProjectId(), object.getProjectId())
                .toComparison();
    }

    /**
     * @return the projectManager
     */
    public User getProjectManager() {
        return projectManager;
    }

    /**
     * @param projectManager the projectManager to set
     */
    public void setProjectManager(User projectManager) {
        this.projectManager = projectManager;
    }

    /**
     * @see java.lang.Object#toString()
     */
    public String toString() {
        return new ToStringBuilder(this).append("active", this.active).append("PK", this.getPK())
                .append("defaultProject", this.defaultProject).append("fullname", this.getFullName())
                .append("projectCode", this.getProjectCode()).append("name", this.getName())
                .append("projectId", this.getProjectId()).append("billable", this.isBillable())
                .append("pm", this.getProjectManager()).toString();
    }

    /**
     * @return the deletable
     */
    public boolean isDeletable() {
        return !(bookedHours != null && bookedHours > 0);
    }

    public void addProjectAssignment(ProjectAssignment assignment) {
        if (projectAssignments == null) {
            projectAssignments = new HashSet<>();
        }

        projectAssignments.add(assignment);
    }

    @Override
    public boolean equals(final Object other) {
        if (!(other instanceof Project)) {
            return false;
        }
        Project castOther = (Project) other;
        return new EqualsBuilder().append(projectCode, castOther.projectCode).append(contact, castOther.contact)
                .append(description, castOther.description).append(name, castOther.name)
                .append(defaultProject, castOther.defaultProject).append(active, castOther.active)
                .append(customer, castOther.customer).append(billable, castOther.billable).isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder().append(projectCode).append(contact).append(description).append(name)
                .append(defaultProject).append(active).append(customer).append(billable).toHashCode();
    }

    public void setBookedHours(Double bookedHours) {
        this.bookedHours = bookedHours;
    }

    public Double getBookedHours() {
        return bookedHours;
    }
}