/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.domain.beans;
import org.esupportail.helpdesk.domain.DomainService;
import org.esupportail.helpdesk.domain.TicketScope;
/**
* The class that represents categories.
*/
public class Category extends AbstractTicketContainer {
/**
* The serialization id.
*/
private static final long serialVersionUID = 9200534915162339376L;
/**
* The department of the category.
*/
private Department department;
/**
* The parent category.
*/
private Category parent;
/**
* The real category.
*/
private Category realCategory;
/**
* The current state of the assignment algorithm.
*/
private String assignmentAlgorithmState;
/**
* True if the members of the category are inherited (from its parent).
*/
private Boolean inheritMembers;
/**
* v2 not null stuff.
*/
@SuppressWarnings("unused")
private Integer oldDefaultPriorityLevel;
/**
* True if users can put tickets in the category.
*/
private Boolean addNewTickets;
/**
* True if the FAQ links of the category are inherited (from its parent).
*/
private Boolean inheritFaqLinks;
/**
* Bean constructor.
*/
public Category() {
super();
this.oldDefaultPriorityLevel = 0;
this.inheritMembers = Boolean.TRUE;
this.inheritFaqLinks = Boolean.TRUE;
}
/**
* Copy.
* @param c
*/
public Category(final Category c) {
super(c);
this.oldDefaultPriorityLevel = 0;
this.department = c.department;
this.parent = c.parent;
this.realCategory = c.realCategory;
this.inheritMembers = c.inheritMembers;
this.inheritFaqLinks = c.inheritFaqLinks;
this.assignmentAlgorithmState = c.assignmentAlgorithmState;
this.addNewTickets = c.addNewTickets;
}
/**
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof Category)) {
return false;
}
return ((Category) obj).getId() == getId();
}
/**
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return (int) getId();
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return getClass().getSimpleName() + "#" + hashCode() + "[" + toStringInternal()
+ ", department=[" + department + "]"
+ ", assignmentAlgorithmState=[" + assignmentAlgorithmState + "]"
+ ", inheritMembers=[" + inheritMembers + "]"
+ ", inheritFaqLinks=[" + inheritFaqLinks + "]"
+ "]";
}
/**
* Compute the effective scope (using default policy if needed).
* @param updateObject true to update the object, false just to test
* @return true if the object needs to be updated.
*/
public boolean computeEffectiveDefaultTicketScope(final boolean updateObject) {
String oldEffectiveTicketScope = getEffectiveDefaultTicketScope();
String oldTicketScope = getDefaultTicketScope();
String newEffectiveTicketScope = oldEffectiveTicketScope;
String newTicketScope = oldTicketScope;
if (newTicketScope == null) {
newTicketScope = TicketScope.DEFAULT;
}
if (!newTicketScope.equals(TicketScope.DEFAULT)) {
newEffectiveTicketScope = newTicketScope;
} else if (parent == null) {
newEffectiveTicketScope = getDepartment().getEffectiveDefaultTicketScope();
} else {
newEffectiveTicketScope = parent.getEffectiveDefaultTicketScope();
}
boolean updateNeeded = !newEffectiveTicketScope.equals(oldEffectiveTicketScope)
|| !newTicketScope.equals(oldTicketScope);
if (updateNeeded && updateObject) {
setDefaultTicketScope(newTicketScope);
setEffectiveDefaultTicketScope(newEffectiveTicketScope);
}
return updateNeeded;
}
/**
* @return the default default scope.
*/
public String getDefaultDefaultTicketScope() {
if (parent != null) {
return parent.getEffectiveDefaultTicketScope();
}
return this.getDepartment().getEffectiveDefaultTicketScope();
}
/**
* @return the effective default priority (using default policy if needed).
*/
public int getEffectiveDefaultTicketPriority() {
if (getDefaultTicketPriority() != DomainService.DEFAULT_PRIORITY_VALUE) {
return getDefaultTicketPriority();
}
return getDefaultDefaultTicketPriority();
}
/**
* @return the default default priority.
*/
public int getDefaultDefaultTicketPriority() {
if (parent != null) {
return parent.getEffectiveDefaultTicketPriority();
}
return this.getDepartment().getDefaultTicketPriority();
}
/**
* @return the effective default message (using default policy if needed).
*/
public String getEffectiveDefaultTicketMessage() {
if (getDefaultTicketMessage() != null) {
return getDefaultTicketMessage();
}
if (parent != null) {
return parent.getEffectiveDefaultTicketMessage();
}
return this.getDepartment().getDefaultTicketMessage();
}
/**
* @return the effective default label (using default policy if needed).
*/
public String getEffectiveDefaultTicketLabel() {
if (getDefaultTicketLabel() != null) {
return getDefaultTicketLabel();
}
if (parent != null) {
return parent.getEffectiveDefaultTicketLabel();
}
return this.getDepartment().getDefaultTicketLabel();
}
/**
* @return the effective assignment algorithm name (using default policy if needed).
*/
public String getEffectiveAssignmentAlgorithmName() {
if (getAssignmentAlgorithmName() != null) {
return getAssignmentAlgorithmName();
}
if (parent != null) {
return parent.getEffectiveAssignmentAlgorithmName();
}
return this.getDepartment().getAssignmentAlgorithmName();
}
/**
* @return the default monitoring email.
*/
public String getDefaultMonitoringEmail() {
if (parent != null) {
return parent.getEffectiveMonitoringEmail();
}
return this.getDepartment().getMonitoringEmail();
}
/**
* @return the effective monitoring email (using default policy if needed).
*/
public String getEffectiveMonitoringEmail() {
if (!getInheritMonitoring()) {
return getMonitoringEmail();
}
return getDefaultMonitoringEmail();
}
/**
* @return the default monitoring email auth type.
*/
public String getDefaultMonitoringEmailAuthType() {
if (parent != null) {
return parent.getEffectiveMonitoringEmailAuthType();
}
return this.getDepartment().getMonitoringEmailAuthType();
}
/**
* @return the effective monitoring email auth type (using default policy if needed).
*/
public String getEffectiveMonitoringEmailAuthType() {
if (!getInheritMonitoring()) {
return getMonitoringEmailAuthType();
}
return getDefaultMonitoringEmailAuthType();
}
/**
* @return the default monitoring level.
*/
public Integer getDefaultMonitoringLevel() {
if (!getInheritMonitoring()) {
return getMonitoringLevel();
}
if (parent != null) {
return parent.getEffectiveMonitoringLevel();
}
return this.getDepartment().getMonitoringLevel();
}
/**
* @return the effective monitoring level (using default policy if needed).
*/
public Integer getEffectiveMonitoringLevel() {
if (!getInheritMonitoring()) {
return getMonitoringLevel();
}
return getDefaultMonitoringLevel();
}
/**
* @see org.esupportail.helpdesk.domain.beans.TicketContainer#getEffectiveIcon()
*/
@Override
public Icon getEffectiveIcon() {
if (getIcon() != null) {
return getIcon();
}
if (parent != null) {
return parent.getEffectiveIcon();
}
return getDepartment().getEffectiveIcon();
}
/**
* @return true if the category is virtual.
*/
public boolean isVirtual() {
return realCategory != null;
}
/**
* @return the department
*/
public Department getDepartment() {
return department;
}
/**
* @param department the department to set
*/
public void setDepartment(final Department department) {
this.department = department;
}
/**
* @return the parent
*/
public Category getParent() {
return parent;
}
/**
* @param parent the parent to set
*/
public void setParent(final Category parent) {
this.parent = parent;
}
/**
* @return the realCategory
*/
public Category getRealCategory() {
return realCategory;
}
/**
* @param realCategory the realCategory to set
*/
public void setRealCategory(final Category realCategory) {
this.realCategory = realCategory;
}
/**
* @return the assignmentAlgorithmState
*/
public String getAssignmentAlgorithmState() {
return assignmentAlgorithmState;
}
/**
* @param assignmentAlgorithmState the assignmentAlgorithmState to set
*/
public void setAssignmentAlgorithmState(final String assignmentAlgorithmState) {
this.assignmentAlgorithmState = assignmentAlgorithmState;
}
/**
* @return the inheritMembers
*/
public Boolean getInheritMembers() {
return inheritMembers;
}
/**
* @param inheritMembers the inheritMembers to set
*/
public void setInheritMembers(final Boolean inheritMembers) {
this.inheritMembers = inheritMembers;
}
/**
* @return the oldDefaultPriorityLevel
*/
public Integer getOldDefaultPriorityLevel() {
return 0;
}
/**
* @param oldDefaultPriorityLevel the oldDefaultPriorityLevel to set
*/
public void setOldDefaultPriorityLevel(
@SuppressWarnings("unused")
final Integer oldDefaultPriorityLevel) {
this.oldDefaultPriorityLevel = 0;
}
/**
* @return the addNewTickets
*/
public Boolean getAddNewTickets() {
if (addNewTickets == null) {
return true;
}
return addNewTickets;
}
/**
* @param addNewTickets the addNewTickets to set
*/
public void setAddNewTickets(final Boolean addNewTickets) {
this.addNewTickets = addNewTickets;
}
/**
* @return the inheritFaqLinks
*/
public Boolean getInheritFaqLinks() {
if (inheritFaqLinks == null) {
return true;
}
return inheritFaqLinks;
}
/**
* @param inheritFaqLinks the inheritFaqLinks to set
*/
public void setInheritFaqLinks(final Boolean inheritFaqLinks) {
this.inheritFaqLinks = inheritFaqLinks;
}
}