Project.java
- /*
- * This software was designed and created by Jason Carroll.
- * Copyright (c) 2002, 2003, 2004 Jason Carroll.
- * The author can be reached at jcarroll@cowsultants.com
- * ITracker website: http://www.cowsultants.com
- * ITracker forums: http://www.cowsultants.com/phpBB/index.php
- *
- * This program is free software; you can redistribute it and/or modify
- * it only 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.
- */
- package org.itracker.model;
- import org.apache.commons.lang.builder.CompareToBuilder;
- import org.apache.commons.lang.builder.ToStringBuilder;
- import java.io.Serializable;
- import java.util.*;
- /**
- * This is a POJO Business Domain Object modelling a project.
- * <p/>
- * <p>
- * Hibernate Bean.
- * </p>
- *
- * @author ready
- */
- public class Project extends AbstractEntity implements Comparable<Entity> {
- public static final ProjectComparator PROJECT_COMPARATOR = new ProjectComparator();
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private String name;
- private String description;
- /**
- * Project's current status.
- * <p/>
- * <p>
- * Invariant : never <tt>null</tt>.
- * </p>
- */
- private Status status;
- private int options;
- /**
- * The list of Components that belong to this project.
- * <p/>
- * <p>
- * Project - Component is a 1-N relationship.
- * </p>
- */
- private List<Component> components = new ArrayList<Component>();
- /**
- * The list of Versions of this Project.
- * <p/>
- * <p>
- * Project - Version is a 1-N relationship.
- * </p>
- */
- private List<Version> versions = new ArrayList<Version>();
- /**
- * The Permissions of all Users on this Project.
- * <p/>
- * <p>
- * Project - Permission is a 1-N relationship.
- * </p>
- * <p/>
- * PENDING: Does this relationship need to be navigatable ?
- */
- // TODO: it would be a Set, not list
- private Set<Permission> permissions = new TreeSet<Permission>(Permission.PERMISSION_PROPERTIES_COMPARATOR);
- /**
- * The Users who are responsible for this Project.
- * <p/>
- * Project - User (owners) is a M-N relationship.
- */
- private List<User> owners = new ArrayList<User>();
- /**
- * The custom fields associated to this Project.
- * <p/>
- * <p>
- * Project - CustomField is a M-N relationship.
- * </p>
- * <p/>
- * <p>
- * All Issues of this Project will have these custom fields.
- * </p>
- */
- private List<CustomField> customFields = new ArrayList<CustomField>();
- /**
- * Project - ProjectScript is a 1-N relationship.
- */
- private List<ProjectScript> scripts = new ArrayList<ProjectScript>();
- /*
- * This class used to have a <code>issues</code> attribute, which was a
- * Collection<Issue>. This has been removed because the association Project -
- * Issue doesn't need to be navigatable in this direction.
- */
- /**
- * Default constructor (required by Hibernate).
- * <p/>
- * <p>
- * PENDING: should be <code>private</code> so that it can only be used by
- * Hibernate, to ensure that the fields which form an instance's identity
- * are always initialized/never <tt>null</tt>.
- * </p>
- */
- public Project() {
- }
- public Project(String name) {
- setName(name);
- this.status = Status.ACTIVE;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- if (name == null) {
- throw new IllegalArgumentException("null name");
- }
- this.name = name;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- /**
- * @return project's current status
- */
- public Status getStatus() {
- return status;
- }
- /**
- * @throws IllegalArgumentException status is <tt>null</tt>
- */
- public void setStatus(Status status) {
- if (status == null) {
- throw new IllegalArgumentException("null status");
- }
- this.status = status;
- }
- public int getOptions() {
- return options;
- }
- public void setOptions(int options) {
- this.options = options;
- }
- public List<Component> getComponents() {
- return components;
- }
- public void setComponents(List<Component> getComponents) {
- this.components = getComponents;
- }
- public List<Version> getVersions() {
- return versions;
- }
- public void setVersions(List<Version> getVersions) {
- this.versions = getVersions;
- }
- public List<CustomField> getCustomFields() {
- return customFields;
- }
- public void setCustomFields(List<CustomField> getCustomFields) {
- this.customFields = getCustomFields;
- }
- public List<User> getOwners() {
- return owners;
- }
- public void setOwners(List<User> getOwners) {
- this.owners = getOwners;
- }
- public Set<Permission> getPermissions() {
- return permissions;
- }
- public void setPermissions(Set<Permission> getPermissions) {
- this.permissions = getPermissions;
- }
- public List<ProjectScript> getScripts() {
- return scripts;
- }
- public void setScripts(List<ProjectScript> getScripts) {
- this.scripts = getScripts;
- }
- /**
- * @return <tt>Project [id=id, name=name]</tt>
- */
- @Override
- public String toString() {
- return new ToStringBuilder(this).append("id", this.getId()).append("name",
- this.getName()).append("description", getDescription()).append("owners", getOwners()).toString();
- }
- /**
- * Comparator for comparing projects by name
- */
- public static final class ProjectComparator implements Comparator<Project>, Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- public int compare(Project o1, Project o2) {
- return new CompareToBuilder().append(o1.getName(), o2.getName()).append(
- o1.getId(), o2.getId()).toComparison();
- }
- }
- }