use celltable for search results, add (InTrash) next to path for trashed files in...
[pithos] / src / gr / ebs / gss / server / domain / UserClass.java
1 /*
2  * Copyright 2007, 2008, 2009, 2010 Electronic Business Systems Ltd.
3  *
4  * This file is part of GSS.
5  *
6  * GSS is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSS is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSS.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 package gr.ebs.gss.server.domain;
20
21 import gr.ebs.gss.server.domain.dto.UserClassDTO;
22
23 import java.io.Serializable;
24 import java.text.DecimalFormat;
25 import java.util.List;
26
27 import javax.persistence.CascadeType;
28 import javax.persistence.Entity;
29 import javax.persistence.GeneratedValue;
30 import javax.persistence.Id;
31 import javax.persistence.OneToMany;
32 import javax.persistence.Version;
33
34 import org.hibernate.annotations.Cache;
35 import org.hibernate.annotations.CacheConcurrencyStrategy;
36
37 /**
38  * A group of users with common attributes.
39  *
40  * @author droutsis
41  */
42 @Entity
43 @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
44 public class UserClass  implements Serializable{
45
46         /**
47          * The persistence ID of the object.
48          */
49         @Id
50         @GeneratedValue
51         private Long id;
52
53         /**
54          * Version field for optimistic locking.
55          */
56         @SuppressWarnings("unused")
57         @Version
58         private int version;
59
60         /**
61          * A name for this class.
62          */
63         private String name;
64
65         /**
66          * The disk quota of this user class.
67          */
68         private long quota;
69
70         /**
71          * The users belonging to this class
72          */
73         @OneToMany(cascade = CascadeType.ALL, mappedBy = "userClass")
74         private List<User> users;
75
76         public Long getId() {
77                 return id;
78         }
79
80         public String getName() {
81                 return name;
82         }
83
84         public void setName(String aName) {
85                 name = aName;
86         }
87
88         public long getQuota() {
89                 return quota;
90         }
91
92         public void setQuota(long aQuota) {
93                 quota = aQuota;
94         }
95
96         @Override
97         public String toString() {
98                 return name;
99         }
100
101         /**
102          * Return a new Data Transfer Object for this user class.
103          *
104          * @return a new DTO with the same contents as this object
105          */
106         public UserClassDTO getDTO() {
107                 UserClassDTO u = new UserClassDTO();
108                 u.setId(id);
109                 u.setName(name);
110                 u.setQuota(quota);
111                 for (final User user : users)
112                         u.getUsers().add(user.getDTO());
113                 return u;
114         }
115
116         /**
117          * Return a new Data Transfer Object for this user class.
118          *
119          * @return a new DTO with the same contents as this object
120          */
121         public UserClassDTO getDTOWithoutUsers() {
122                 UserClassDTO u = new UserClassDTO();
123                 u.setId(id);
124                 u.setName(name);
125                 u.setQuota(quota);
126                 return u;
127         }
128
129         /**
130          * Return the quota size in a humanly readable form.
131          */
132         public String getQuotaAsString() {
133                 if (quota < 1024)
134                         return String.valueOf(quota) + " B";
135                 else if (quota < 1024*1024)
136                         return getSize(quota, 1024D) + " KB";
137                 else if (quota < 1024*1024*1024)
138                         return getSize(quota,(1024D*1024D)) + " MB";
139                 return getSize(quota , (1024D*1024D*1024D)) + " GB";
140         }
141
142         private String getSize(Long size, Double divisor){
143                 DecimalFormat formatter = new DecimalFormat("######");
144                 return formatter.format((Double) (size.doubleValue()/divisor));
145         }
146 }