BrightSide Workbench Full Report + Source Code
Dossier.java
Go to the documentation of this file.
1 /*
2  * TurrĂ³ i Cutiller Foundation. License notice.
3  * Copyright (C) 2011 Lluis TurrĂ³ Cutiller <http://www.turro.org/>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU Affero General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU Affero General Public License for more details.
14  *
15  * You should have received a copy of the GNU Affero General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 package org.turro.dossier.entity;
19 
20 import java.time.Instant;
21 import java.util.*;
22 import javax.persistence.*;
23 import org.turro.string.Strings;
24 import org.turro.action.Contacts;
25 import org.turro.dossier.db.DossierPU;
26 import org.turro.dossier.dossier.DescriptorSet;
27 import org.turro.dossier.dossier.DescriptorValueSet;
28 import org.turro.dossier.dossier.DossierParticipationsList;
29 import org.turro.dossier.dossier.DossierStageWrapper;
30 import org.turro.dossier.dossier.FieldValueComparator;
31 import org.turro.dossier.dossier.FieldValueMap;
32 import org.turro.dossier.dossier.ParticipantSet;
33 import org.turro.dossier.dossier.WorthSet;
34 import org.turro.dossier.dw.DossierDWReport;
35 import org.turro.dossier.gantt.DossierGanttWrapper;
36 import org.turro.dossier.graph.html.IssueGraphModel;
37 import org.turro.jpa.Dao;
38 import org.turro.jpa.entity.IDaoEntity;
39 import org.turro.plugin.contacts.IContact;
40 import org.turro.reflection.MappingSet;
41 import org.turro.related.RelatedItem;
42 import org.turro.util.Chars;
43 
48 @Entity
49 @Table(indexes={
50  @Index(name="StatusIndex", columnList="status"),
51  @Index(name="PathIndex", columnList="uniquePath"),
52 })
53 public class Dossier implements java.io.Serializable, IDaoEntity {
54 
55  @Id
56  @GeneratedValue(strategy=GenerationType.IDENTITY)
57  @Column(name="IDENTIFIER")
58  private Long id;
59 
60  @Temporal(value = javax.persistence.TemporalType.TIMESTAMP)
61  private java.util.Date creation;
62 
63  @Lob
64  @Column(length=4096)
65  private String description;
66 
67  private DossierType type;
68 
69  private DossierStatus status;
70 
71  @OneToOne(cascade = CascadeType.ALL, orphanRemoval=true)
72  private Project project;
73 
74  @ManyToOne
75  private Category category;
76 
77  private String uniquePath;
78 
79  private boolean publishable;
80 
81  @Lob
82  @Column(length=4096)
83  private String searching;
84 
85  @OneToMany(mappedBy = "dossier", fetch = FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
86  private Set<DossierVersion> versions = new TreeSet<DossierVersion>();
87 
88  @OneToMany(mappedBy = "dossier", fetch = FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
89  @OrderBy(value="name")
90  private Set<Participant> participants = new HashSet<Participant>();
91 
92  @OneToMany(mappedBy = "dossier", fetch = FetchType.EAGER, cascade=CascadeType.ALL, orphanRemoval=true)
93  @org.hibernate.annotations.SortComparator(FieldValueComparator.class)
94  private Set<FieldValue> fieldValues = new TreeSet<FieldValue>(new FieldValueComparator());
95 
96  @OneToMany(mappedBy = "dossier", fetch = FetchType.LAZY, orphanRemoval=true)
97  @OrderBy(value="issueDate")
98  private Set<Issue> issues = new HashSet<Issue>();
99 
100  @OneToMany(mappedBy = "dossier", fetch = FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
101  private Set<DescriptorValue> descriptors = new HashSet<DescriptorValue>();
102 
103  @OneToMany(mappedBy = "dossier", fetch = FetchType.LAZY, orphanRemoval=true)
104  private Set<WorthValue> worths = new HashSet<WorthValue>();
105 
106  @OneToMany(mappedBy = "dossier", fetch = FetchType.LAZY, orphanRemoval=true)
107  private Set<DossierOffer> offers = new HashSet<DossierOffer>();
108 
109  private final transient RelatedItem related = new RelatedItem();
110 
111  public Category getCategory() {
112  return category;
113  }
114 
115  public void setCategory(Category category) {
116  this.category = category;
117  }
118 
119  public String getUniquePath() {
120  return uniquePath;
121  }
122 
123  public void setUniquePath(String uniquePath) {
124  this.uniquePath = uniquePath;
125  }
126 
127  public Project getProject() {
128  return project;
129  }
130 
131  public void setProject(Project project) {
132  this.project = project;
133  }
134 
135  public Date getCreation() {
136  return creation;
137  }
138 
139  public void setCreation(Date creation) {
140  this.creation = creation;
141  }
142 
143  public String getDescription() {
144  return description;
145  }
146 
147  public void setDescription(String description) {
148  this.description = description;
149  }
150 
151  public Set<FieldValue> getFieldValues() {
152  return fieldValues;
153  }
154 
155  public void setFieldValues(Set<FieldValue> fieldValues) {
156  this.fieldValues = fieldValues;
157  }
158 
159  public Long getId() {
160  return id;
161  }
162 
163  public void setId(Long id) {
164  this.id = id;
165  }
166 
167  public Set<Issue> getIssues() {
168  return issues;
169  }
170 
171  public void setIssues(Set<Issue> issues) {
172  this.issues = issues;
173  }
174 
175  public Set<Participant> getParticipants() {
176  Dao dao = new DossierPU();
177  if(id != null && id > 0 && dao.isNotLoaded(participants)) {
178  participants = dao.lazyLoader(Dossier.class, this, "participants").participants;
179  }
180  return participants;
181  }
182 
183  public void setParticipants(Set<Participant> participants) {
184  this.participants = participants;
185  }
186 
188  return related;
189  }
190 
192  return status;
193  }
194 
195  public void setStatus(DossierStatus status) {
196  this.status = status;
197  }
198 
199  public boolean isPublishable() {
200  return publishable;
201  }
202 
203  public void setPublishable(boolean publishable) {
204  this.publishable = publishable;
205  }
206 
207  public DossierType getType() {
208  return type;
209  }
210 
211  public void setType(DossierType type) {
212  this.type = type;
213  }
214 
215  public Set<DossierVersion> getVersions() {
216  return versions;
217  }
218 
219  public String getSearching() {
220  return searching;
221  }
222 
223  public void setSearching(String searching) {
224  this.searching = searching;
225  }
226 
227  public void setVersions(Set<DossierVersion> versions) {
228  this.versions = versions;
229  }
230 
231  public Set<DescriptorValue> getDescriptors() {
232  Dao dao = new DossierPU();
233  if(id != null && id > 0 && dao.isNotLoaded(descriptors)) {
234  descriptors = dao.lazyLoader(Dossier.class, this, "descriptors").descriptors;
235  }
236  return descriptors;
237  }
238 
239  public void setDescriptors(Set<DescriptorValue> descriptors) {
240  this.descriptors = descriptors;
241  }
242 
243  public Set<WorthValue> getWorths() {
244  Dao dao = new DossierPU();
245  if(id != null && id > 0 && dao.isNotLoaded(worths)) {
246  worths = dao.lazyLoader(Dossier.class, this, "worths").worths;
247  }
248  return worths;
249  }
250 
251  public void setWorths(Set<WorthValue> worths) {
252  this.worths = worths;
253  }
254 
255  public Set<DossierOffer> getOffers() {
256  Dao dao = new DossierPU();
257  if(id != null && id > 0 && dao.isNotLoaded(offers)) {
258  offers = dao.lazyLoader(Dossier.class, this, "offers").offers;
259  }
260  return offers;
261  }
262 
263  public void setOffers(Set<DossierOffer> offers) {
264  this.offers = offers;
265  }
266 
267  /* Versions helper */
268 
269  public Set<DossierVersion> getActiveVersions() {
270  TreeSet<DossierVersion> tdv = new TreeSet<>();
271  for(DossierVersion dv : versions) {
272  if(dv.isActive()) {
273  tdv.add(dv);
274  }
275  }
276  return tdv;
277  }
278 
279  /* Issues Helper */
280 
281  public Collection<Issue> getAllIssues() {
282  return getAllIssues(false);
283  }
284 
285  public Collection<Issue> getAllPublishableIssues() {
286  return getAllIssues(true);
287  }
288 
289  public Collection<Issue> getAllIssues(boolean publicOnly) {
290  Dao dao = new DossierPU();
291  return dao.getResultList(
292  "select issue from Issue as issue " +
293  "where issue.dossier = ? " +
294  (publicOnly ? "and issue.publishable = TRUE " : "") +
295  "order by issue.issueDate",
296  new Object[] {
297  this
298  }
299  );
300  }
301 
302  public Collection<Issue> getOpenIssues() {
303  return getOpenIssues(false);
304  }
305 
306  public Collection<Issue> getOpenPublishableIssues() {
307  return getOpenIssues(true);
308  }
309 
310  public Collection<Issue> getOpenIssues(boolean publicOnly) {
311  Dao dao = new DossierPU();
312  return dao.getResultList(
313  "select issue from Issue as issue " +
314  "where issue.dossier = ? " +
315  (publicOnly ? "and issue.publishable = TRUE " : "") +
316  "and (issue.status = ? " +
317  "or issue.status = ? " +
318  "or issue.status = ? " +
319  "or issue.status = ? " +
320  "or issue.status = ? " +
321  "or issue.status = ?) " +
322  "order by issue.issueDate",
323  new Object[] {
324  this,
331  }
332  );
333  }
334 
335  public Collection<Issue> getClosedIssues() {
336  return getClosedIssues(false);
337  }
338 
339  public Collection<Issue> getClosedPublishableIssues() {
340  return getClosedIssues(false);
341  }
342 
343  public Collection<Issue> getClosedIssues(boolean publicOnly) {
344  Dao dao = new DossierPU();
345  return dao.getResultList(
346  "select issue from Issue as issue " +
347  "where issue.dossier = ? " +
348  (publicOnly ? "and issue.publishable = TRUE " : "") +
349  "and (issue.status = ? " +
350  "or issue.status = ? " +
351  "or issue.status = ?) " +
352  "order by issue.issueDate",
353  new Object[] {
354  this,
358  }
359  );
360  }
361 
362  public Collection<Issue> getIssuesByType(IssueType type) {
363  Dao dao = new DossierPU();
364  return dao.getResultList(
365  "select i " +
366  "from Issue i " +
367  "where i.dossier = ? " +
368  "and i.type = ?",
369  new Object[] { this, type });
370  }
371 
372  /* Grouping */
373 
374  public Collection<String> getGroupings() {
375  Dao dao = new DossierPU();
376  return dao.getResultList(
377  "select distinct i.grouping " +
378  "from Issue i " +
379  "where i.dossier = ?",
380  new Object[] { this });
381  }
382 
383  public Collection<Issue> getIssuesByGrouping(String grouping) {
384  Dao dao = new DossierPU();
385  return dao.getResultList(
386  "select i " +
387  "from Issue i " +
388  "where i.dossier = ? " +
389  "and i.grouping = ?",
390  new Object[] { this, grouping });
391  }
392 
393  /* End grouping */
394 
395  /* Participants helper */
396 
397  private transient ParticipantSet<IDossierParticipant> _participants;
398 
400  if(_participants == null) {
401  _participants = new ParticipantSet<>(getParticipants());
402  if(category != null) {
403  _participants.addAll(category.getFullParticipants());
404  }
405  }
406  return _participants;
407  }
408 
409  public void resetParticipants() {
410  _participants = null;
411  }
412 
413  public boolean existsParticipant(IDossierParticipant participant) {
414  for(Participant p : getParticipants()) {
415  if(!Strings.isBlank(p.getIdContact()) && p.getIdContact().equals(participant.getIdContact())) {
416  return true;
417  }
418  }
419  return false;
420  }
421 
422  public List<IDossierParticipant> getRoleParticipants() {
423  return new ParticipantSet<IDossierParticipant>(getParticipants()).stream().filter(p -> p.hasRole()).toList();
424  }
425 
426  public List<IDossierParticipant> getFullRoleParticipants() {
427  return getFullParticipants().stream().filter(p -> p.hasRole()).toList();
428  }
429 
430  /* End participants */
431 
432  /* Participations helper */
433 
434  private transient DossierParticipationsList _participations;
435 
437  if(_participations == null) {
438  _participations = new DossierParticipationsList(this);
439  }
440  return _participations;
441  }
442 
443  public void resetParticipations() {
444  _participations = null;
445  }
446 
447  /* End participations */
448 
449  public Collection<String> getPossibleDiscriminators() {
450  Dao dao = new DossierPU();
451  return dao.getResultList("select distinct discriminator from Participant");
452  }
453 
454  /* Fields helper */
455 
456  transient Map fieldMap = null;
457 
458  public Map<String, Object> getFieldMap() {
459  if(fieldMap == null) {
460  fieldMap = new FieldValueMap(this);
461  }
462  return fieldMap;
463  }
464 
465  /* Description helper */
466 
467  public String getFullDescription() {
468  return getFullDescription(true);
469  }
470 
471  public String getFullDescription(boolean withSubject) {
472  Participant subject = withSubject ? getSubject() : null;
473  StringBuilder sb = new StringBuilder();
474  if(subject != null) {
475  sb.append(subject.getName());
476  sb.append(Chars.forward().spaced());
477  }
478  sb.append(description);
479  if(category != null) {
480  sb.append(Chars.forward().spaced());
481  sb.append(category.getFullDescription());
482  }
483  return sb.toString();
484  }
485 
486  public String getExtraDescription() {
487  String s = "";
488  for(FieldValue fv : getFieldValues()) {
489  if(!Strings.isEmpty(fv.getValue()) && fv.getFieldDef().isDescription()) {
490  if(s.length() != 0) s += ", ";
491  s += fv.getObjectString(false).trim();
492  }
493  }
494  return s;
495  }
496 
497  public String getPublishableDescription() {
498  String s = "";
499  for(FieldValue fv : getFieldValues()) {
500  if(!Strings.isEmpty(fv.getValue()) &&
501  fv.getFieldDef().isDescription() &&
502  fv.getFieldDef().isPublishable()) {
503  if(s.length() != 0 && !s.endsWith(", ")) s += ", ";
504  s += fv.getObjectString(false).trim();
505  }
506  }
507  return s;
508  }
509 
511  String s = "";
512  for(FieldValue fv : getFieldValues()) {
513  if(!Strings.isEmpty(fv.getValue()) &&
514  fv.getFieldDef().isDescription() &&
515  fv.getFieldDef().isPublishable()) {
516  if(s.length() != 0 && !s.endsWith(", ")) s += ", ";
517  s += fv.getLabeledObjectString().trim();
518  }
519  }
520  return s;
521  }
522 
523  /* Owner helper */
524 
525  public Participant addOwner(IContact contact) {
526  if(contact == null) return null;
527  Participant p = new Participant();
528  p.setDossier(this);
529  p.setCreation(new Date());
530  p.setIdContact(contact.getId());
531  p.setName(contact.getName());
533  getParticipants().add(p);
534  return p;
535  }
536 
537  public void addSubject(IContact contact) {
538  if(contact == null) return;
539  Participant p = new Participant();
540  p.setDossier(this);
541  p.setCreation(new Date());
542  p.setIdContact(contact.getId());
543  p.setName(contact.getName());
545  getParticipants().add(p);
546  }
547 
549  if(contact == null) return null;
550  Participant p = new Participant();
551  p.setDossier(this);
552  p.setCreation(new Date());
553  p.setIdContact(contact.getId());
554  p.setName(contact.getName());
556  getParticipants().add(p);
557  return p;
558  }
559 
561  for(Participant p : getParticipants()) {
562  if(p.getIdContact().equals(contact.getId())) {
563  return p;
564  }
565  }
566  return addAssistant(contact);
567  }
568 
569  public boolean isDirectOwner(IContact contact) {
570  for(IDossierParticipant p : getDirectOwners()) {
571  if(p.getRole().equals(ParticipantRole.PARTICIPANT_OWNER)) {
572  if(contact.getId().equals(p.getIdContact())) {
573  return true;
574  }
575  }
576  }
577  return category.isDirectOwner(contact);
578  }
579 
580  public boolean isBranchAdmin(IContact contact) {
581  for(IDossierParticipant p : getParticipationsList()) {
582  if(p.getRole().equals(ParticipantRole.PARTICIPANT_OWNER) &&
583  contact.getId().equals(p.getIdContact()) &&
584  p.isAdmin()) {
585  return true;
586  }
587  }
588  return false;
589  }
590 
591  public List<IDossierParticipant> getDirectOwners() {
592  List<IDossierParticipant> list = new ArrayList<>();
593  for(Participant p : getParticipants()) {
594  if(p.getRole().equals(ParticipantRole.PARTICIPANT_OWNER)) {
595  list.add(p);
596  }
597  }
598  list.addAll(category.getDirectOwners());
599  return list;
600  }
601 
603  for(Participant p : getParticipants()) {
604  if(p.getRole().equals(ParticipantRole.PARTICIPANT_SUBJECT)) {
605  return p;
606  }
607  }
608  return null;
609  }
610 
611  public void setSubject(IContact subject) {
612  Participant p = getSubject();
613  if(p != null) {
614  p.setIdContact(subject.getId());
615  } else {
616  addSubject(subject);
617  }
618  }
619 
621  for(Participant p : getParticipants()) {
622  if(p.getRole().equals(ParticipantRole.PARTICIPANT_OWNER)) {
623  return Contacts.getContactById(p.getIdContact());
624  }
625  }
626  if(getCategory() != null) {
627  IContact contact = getCategory().getDefaultResponsible(ParticipantRole.PARTICIPANT_OWNER);
628  if(contact != null && contact.isValid()) {
629  return contact;
630  }
631  }
632  for(Participant p : getParticipants()) {
633  if(p.getRole().equals(ParticipantRole.PARTICIPANT_ASSISTANT)) {
634  return Contacts.getContactById(p.getIdContact());
635  }
636  }
637  if(getCategory() != null) {
638  IContact contact = getCategory().getDefaultResponsible(ParticipantRole.PARTICIPANT_ASSISTANT);
639  if(contact != null && contact.isValid()) {
640  return contact;
641  }
642  }
643  return null;
644  }
645 
646  /* Descriptors helpers */
647 
648  transient DescriptorSet _descriptors;
649 
651  if(_descriptors == null) {
652  _descriptors = new DescriptorSet(this);
653  }
654  return _descriptors;
655  }
656 
657  transient DescriptorValueSet _descriptorValues;
658 
660  if(_descriptorValues == null) {
661  _descriptorValues = new DescriptorValueSet(this);
662  }
663  return _descriptorValues;
664  }
665 
666  /* Worth helpers */
667 
668  transient WorthSet _worths;
669 
671  if(_worths == null) {
672  _worths = new WorthSet(this);
673  }
674  return _worths;
675  }
676 
677  /* Report helper */
678 
679  transient DossierDWReport _report;
680 
682  if(_report == null) {
683  _report = new DossierDWReport();
684  _report.setReportValues(this);
685  }
686  return _report;
687  }
688 
689  public String getDossierURL() {
690  String path = null;
691  if(getStatus().isOpen()) {
692  path = (String) getFieldMap().get("dossierOpenUrl");
693  } else {
694  path = (String) getFieldMap().get("dossierClosedUrl");
695  }
696  return path == null ? null : path + getId();
697  }
698 
699  /* Milestones */
700 
701  public IssueGraphModel getIssueGraphModel(boolean onlyMilestones, boolean onlyOpen) {
702  return new IssueGraphModel(this, onlyMilestones, onlyOpen);
703  }
704 
706  return new DossierGanttWrapper(this);
707  }
708 
709  /* IDaoEntity */
710 
711  @Override
712  public Object entityId() {
713  return id;
714  }
715 
716  @Override
717  public boolean isEmpty() {
718  return Strings.isBlank(description) || category == null;
719  }
720 
721  /* Helpers */
722 
723  public boolean isKnowledgeBase() {
724  if(category != null) {
725  return category.isKnowledgeBase();
726  }
727  return false;
728  }
729 
731  if(status == null) {
732  status = DossierStatus.DOSSIER_OPENED;
733  }
734  return new DossierStageWrapper(this);
735  }
736 
737  /* Dates */
738 
739  public Date getLastActivity() {
740  Date last = getCreation();
741  if(project != null) {
742  last = assignLast(project.getStartDate(), last);
743  last = assignLast(project.getApprovedDate(), last);
744  last = assignLast(project.getChangePhase(), last);
745  last = assignLast(project.getEndDate(), last);
746  last = assignLast(project.getOppositingEndDate(), last);
747  }
748  return last;
749  }
750 
751  private Date assignLast(Date date, Date last) {
752  if(last == null || (date != null && date.after(last) && !Instant.now().isAfter(date.toInstant()))) {
753  return date;
754  }
755  return last;
756  }
757 
758  /* XML Serializer */
759 
760  public MappingSet getSerializerMappings() {
761  MappingSet set = new MappingSet();
762  set.addMapping(Dossier.class, 1,
763  new String[] { "id", "description", "creation", "type", "status", "publishable" },
764  new String[] { "category", "versions", "participants", "fieldValues",
765  "project", "descriptors" });
766  set.addMapping(Category.class, 2,
767  new String[] { "id", "description" },
768  null);
769  set.addMapping(DossierVersion.class, 2,
770  new String[] { "versionId", "releaseDate", "active" },
771  null);
772  set.addMapping(Participant.class, 2,
773  new String[] { "name", "idContact", "role", "showAllAttachments", "showParticipants",
774  "showAllIssues", "receiveAllEmails", "bindingVote", "discriminator", "driver", "coordinator",
775  "beneficiary", "offerer", "research", "funding", "support", "consortium", "admin" },
776  null);
777  set.addMapping(FieldValue.class, 2,
778  new String[] { "value" },
779  null);
780  set.addMapping(Project.class, 2,
781  new String[] { "projectCode", "projectTitle", "phase", "estimatedBudget",
782  "assignedBudget", "startDate", "approvedDate", "oppositingEndDate", "endDate", "goal" },
783  new String[] { "matchCriteria" });
784  set.addMapping(GrantMatchCriteria.class, 3,
785  new String[] { "hiring", "idi", "investment", "startUp" },
786  null);
787  set.addMapping(DescriptorValue.class, 2,
788  new String[] { "wiki" },
789  null);
790  return set;
791  }
792 
793 }
static IContact getContactById(String id)
Definition: Contacts.java:72
void setCategory(Category category)
Definition: Dossier.java:115
DossierDWReport getReport()
Definition: Dossier.java:681
void setParticipants(Set< Participant > participants)
Definition: Dossier.java:183
Participant addOwner(IContact contact)
Definition: Dossier.java:525
Collection< Issue > getAllIssues(boolean publicOnly)
Definition: Dossier.java:289
Set< DossierVersion > getActiveVersions()
Definition: Dossier.java:269
DescriptorSet getDescriptorSet()
Definition: Dossier.java:650
Collection< Issue > getClosedIssues(boolean publicOnly)
Definition: Dossier.java:343
IssueGraphModel getIssueGraphModel(boolean onlyMilestones, boolean onlyOpen)
Definition: Dossier.java:701
Set< Participant > getParticipants()
Definition: Dossier.java:175
Collection< String > getPossibleDiscriminators()
Definition: Dossier.java:449
String getFullDescription(boolean withSubject)
Definition: Dossier.java:471
boolean existsParticipant(IDossierParticipant participant)
Definition: Dossier.java:413
void setType(DossierType type)
Definition: Dossier.java:211
boolean isDirectOwner(IContact contact)
Definition: Dossier.java:569
void setDescriptors(Set< DescriptorValue > descriptors)
Definition: Dossier.java:239
Collection< Issue > getAllPublishableIssues()
Definition: Dossier.java:285
ParticipantSet< IDossierParticipant > getFullParticipants()
Definition: Dossier.java:399
void setCreation(Date creation)
Definition: Dossier.java:139
void setPublishable(boolean publishable)
Definition: Dossier.java:203
void setProject(Project project)
Definition: Dossier.java:131
Set< DossierVersion > getVersions()
Definition: Dossier.java:215
void setWorths(Set< WorthValue > worths)
Definition: Dossier.java:251
List< IDossierParticipant > getRoleParticipants()
Definition: Dossier.java:422
Set< FieldValue > getFieldValues()
Definition: Dossier.java:151
List< IDossierParticipant > getDirectOwners()
Definition: Dossier.java:591
Set< DescriptorValue > getDescriptors()
Definition: Dossier.java:231
Collection< Issue > getOpenPublishableIssues()
Definition: Dossier.java:306
void setSubject(IContact subject)
Definition: Dossier.java:611
Set< DossierOffer > getOffers()
Definition: Dossier.java:255
void setDescription(String description)
Definition: Dossier.java:147
Set< WorthValue > getWorths()
Definition: Dossier.java:243
Collection< Issue > getOpenIssues()
Definition: Dossier.java:302
void setSearching(String searching)
Definition: Dossier.java:223
Collection< Issue > getIssuesByType(IssueType type)
Definition: Dossier.java:362
Map< String, Object > getFieldMap()
Definition: Dossier.java:458
Collection< String > getGroupings()
Definition: Dossier.java:374
Collection< Issue > getClosedIssues()
Definition: Dossier.java:335
void setVersions(Set< DossierVersion > versions)
Definition: Dossier.java:227
void setFieldValues(Set< FieldValue > fieldValues)
Definition: Dossier.java:155
DescriptorValueSet getDescriptorValueSet()
Definition: Dossier.java:659
DossierParticipationsList getParticipationsList()
Definition: Dossier.java:436
DossierStageWrapper getStageWrapper()
Definition: Dossier.java:730
Collection< Issue > getIssuesByGrouping(String grouping)
Definition: Dossier.java:383
Collection< Issue > getOpenIssues(boolean publicOnly)
Definition: Dossier.java:310
Participant addOrReturnAssistant(IContact contact)
Definition: Dossier.java:560
void setStatus(DossierStatus status)
Definition: Dossier.java:195
void setIssues(Set< Issue > issues)
Definition: Dossier.java:171
List< IDossierParticipant > getFullRoleParticipants()
Definition: Dossier.java:426
Participant addAssistant(IContact contact)
Definition: Dossier.java:548
Collection< Issue > getAllIssues()
Definition: Dossier.java:281
Collection< Issue > getClosedPublishableIssues()
Definition: Dossier.java:339
void addSubject(IContact contact)
Definition: Dossier.java:537
void setUniquePath(String uniquePath)
Definition: Dossier.java:123
boolean isBranchAdmin(IContact contact)
Definition: Dossier.java:580
DossierGanttWrapper getIssueGantt()
Definition: Dossier.java:705
void setOffers(Set< DossierOffer > offers)
Definition: Dossier.java:263
void setIdContact(String idContact)
void setDossier(Dossier dossier)
void setRole(ParticipantRole role)
boolean isNotLoaded(Object o, String attribute)
Definition: Dao.java:216