1 package org.itracker.web.ptos;
2
3 import java.util.Collections;
4 import java.util.Date;
5 import java.util.Map;
6 import java.util.Set;
7
8 import org.apache.commons.lang.builder.ToStringBuilder;
9 import org.itracker.model.PermissionType;
10 import org.itracker.model.Project;
11 import org.itracker.model.Status;
12 import org.itracker.services.ProjectService;
13 import org.itracker.services.util.UserUtilities;
14 import org.itracker.web.util.ServletContextUtils;
15
16 public class ProjectPTO {
17
18 private final Project project;
19
20 private Long totalOpenIssues = null;
21 private Long totalResolvedIssues = null;
22 private Date lastUpdatedIssueDate = null;
23 private Boolean canCreate = null;
24
25 private final ProjectService projectService;
26 private final Map<Integer, Set<PermissionType>> permissions;
27
28 public ProjectPTO(Project project, Map<Integer, Set<PermissionType>> permissions) {
29 this(project, ServletContextUtils.getItrackerServices().getProjectService(), permissions);
30
31 }
32 public ProjectPTO(Project project, ProjectService projectService, final Map<Integer, Set<PermissionType>> permissions) {
33 if (null == project) {
34 throw new IllegalArgumentException("Project must not be null");
35 }
36 this.project = project;
37 this.projectService = projectService;
38 this.permissions = Collections.unmodifiableMap(permissions);
39 }
40 public Project getProject() {
41 return project;
42 }
43
44 public Long getTotalNumberIssues() {
45 return getTotalOpenIssues() + getTotalResolvedIssues();
46 }
47 public void setTotalNumberIssues(Long totalNumberIssues) {
48 setTotalOpenIssues(totalNumberIssues);
49 setTotalResolvedIssues(0l);
50 }
51
52 public void setTotalOpenIssues(Long totalOpenIssues) {
53 this.totalOpenIssues = totalOpenIssues;
54 }
55 public Long getTotalOpenIssues() {
56 if (null == totalOpenIssues) {
57 setupNumberOfOpenIssues(this, projectService);
58 }
59 return totalOpenIssues;
60 }
61 public void setTotalResolvedIssues(Long totalResolvedIssues) {
62 this.totalResolvedIssues = totalResolvedIssues;
63 }
64 public Long getTotalResolvedIssues() {
65 if (null == totalResolvedIssues) {
66 setupNumberOfResolvedIssues(this, projectService);
67 }
68 return totalResolvedIssues;
69 }
70
71
72
73
74
75 public Date getCreateDate() {
76 return project.getCreateDate();
77 }
78
79
80
81
82 public String getDescription() {
83 return project.getDescription();
84 }
85
86
87
88
89 public Integer getId() {
90 return project.getId();
91 }
92
93
94
95
96 public Date getLastModifiedDate() {
97 return project.getLastModifiedDate();
98 }
99
100
101
102
103 public String getName() {
104 return project.getName();
105 }
106
107
108
109
110 public Status getStatus() {
111 return project.getStatus();
112 }
113
114 public Boolean getActive() {
115 return getStatus() == Status.ACTIVE;
116 }
117 public Boolean isActive() {
118 return getActive();
119 }
120 public Boolean getViewable() {
121 return getProject().getStatus() == Status.VIEWABLE;
122 }
123 public Boolean isViewable() {
124 return getViewable();
125 }
126 public Boolean getCanCreate() {
127 if (null == this.canCreate) {
128 setupCanCreate(this, permissions);
129 }
130 return this.canCreate;
131 }
132 public Boolean isCanCreate() {
133 return getCanCreate();
134 }
135 public void setCanCreate(Boolean canCreate) {
136 this.canCreate = canCreate;
137 }
138
139
140 public void setLastUpdatedIssueDate(Date lastUpdatedIssueDate) {
141 if (null == lastUpdatedIssueDate) {
142 setupLastIssueUpdateDate(this, projectService);
143 }
144 this.lastUpdatedIssueDate = lastUpdatedIssueDate;
145 }
146 public Date getLastUpdatedIssueDate() {
147 return lastUpdatedIssueDate;
148 }
149 @Override
150 public String toString() {
151 return new ToStringBuilder(this).append("project", getProject()).toString();
152 }
153
154
155
156 @SuppressWarnings("unused")
157 private static final void setupNumberOfIssues(ProjectPTO pto,
158 ProjectService service) {
159 pto.setTotalNumberIssues(service.getTotalNumberIssuesByProject(pto
160 .getId()));
161 }
162
163 private static final void setupNumberOfOpenIssues(ProjectPTO pto,
164 ProjectService service) {
165 pto.setTotalOpenIssues(service.getTotalNumberOpenIssuesByProject(pto
166 .getId()));
167 }
168
169 private static final void setupNumberOfResolvedIssues(ProjectPTO pto,
170 ProjectService service) {
171 pto.setTotalResolvedIssues(service
172 .getTotalNumberResolvedIssuesByProject(pto.getId()));
173 }
174
175 private static final void setupCanCreate(ProjectPTO pto,
176 final Map<Integer, Set<PermissionType>> permissions) {
177 pto.setCanCreate(UserUtilities.hasPermission(permissions, pto.getId(),
178 UserUtilities.PERMISSION_CREATE));
179 }
180
181 private static final void setupLastIssueUpdateDate(ProjectPTO pto,
182 ProjectService service) {
183 pto.setLastUpdatedIssueDate(service
184 .getLatestIssueUpdatedDateByProjectId(pto.getId()));
185 }
186 }