Joaquín Reñé
2025-10-07 146a0fb8b0e90f9196e569152f649baf60d6cc8f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
/*
 * Copyright @ 2013 CurisTEC, S.A.S. All Rights Reserved.
 */
package net.curisit.securis.db;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.ManyToMany;
import jakarta.persistence.NamedQueries;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Application
* <p>
* JPA entity that represents an application registered in the licensing server.
* Includes descriptive fields and relationships to <code>LicenseType</code>,
* <code>ApplicationMetadata</code> and <code>User</code>.
*
* Mapping details:
* <ul>
* <li>Table: <code>application</code></li>
* <li>Named queries: <code>list-applications</code>, <code>list-applications-by_ids</code></li>
* <li>Relationships:
* <ul>
* <li><code>@OneToMany</code> <b>licenseTypes</b> (mappedBy="application")</li>
* <li><code>@OneToMany</code> <b>metadata</b> with cascade PERSIST/REMOVE/REFRESH</li>
* <li><code>@ManyToMany</code> <b>users</b> via join table <code>user_application</code></li>
* </ul>
* </li>
* </ul>
*/
@JsonAutoDetect
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name = "application")
@NamedQueries({ @NamedQuery(name = "list-applications", query = "SELECT a FROM Application a"),
       @NamedQuery(name = "list-applications-by_ids", query = "SELECT a FROM Application a where id in :list_ids") })
public class Application implements Serializable {
   private static final Logger LOG = LogManager.getLogger(Application.class);
   private static final long serialVersionUID = 1L;
   // ------------------------------------------------------------------
   // Columns
   // ------------------------------------------------------------------
   /** Surrogate primary key. */
   @Id
   @GeneratedValue
   private Integer id;
   /** Unique short code for the application (business identifier). */
   private String code;
   
   /** Human-friendly application name. */
   private String name;
   
   /** Optional description. */
   private String description;
   /** Default license file name suggested for downloads/exports. */
   @Column(name = "license_filename")
   @JsonProperty("license_filename")
   private String licenseFilename;
   /** Creation timestamp (server-side). */
   @Column(name = "creation_timestamp")
   @JsonProperty("creation_timestamp")
   private Date creationTimestamp;
   // ----------------------- Relationships ---------------------------
   /**
   * License types attached to this application (ignored in default JSON to keep listings small).
   * 
   * We don't include the referenced entities to limit the size of each row at the listing
   */
   @JsonIgnore
   @OneToMany(fetch = FetchType.LAZY, mappedBy = "application")
   private Set<LicenseType> licenseTypes;
   /**
   * Metadata key/value entries for this application.
   */
   @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.REFRESH }, mappedBy = "application")
   @JsonManagedReference
   private Set<ApplicationMetadata> metadata;
   /**
   * Users that have access/relationship with this application (ignored in JSON listings).
   */
   @JsonIgnore
   // We don't include the users to limit the size of each row a the listing
   @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.REMOVE)
   @JoinTable(name = "user_application", //
           joinColumns = { @JoinColumn(name = "application_id", referencedColumnName = "id") }, //
           inverseJoinColumns = { @JoinColumn(name = "username", referencedColumnName = "username") })
   private Set<User> users;
   // ------------------------------------------------------------------
   // Getters & setters
   // ------------------------------------------------------------------
   /** 
    * getId<p>
    * Return the primary key. 
    * 
    * @return id
    */
   public Integer getId() {
       return id;
   }
   /**
    * setId<p>
    * Set the primary key
    * 
    * @param id
    */
   public void setId(Integer id) {
       this.id = id;
   }
   /**
    * getName<p>
    * Get the name
    * 
    * @return name
    */
   public String getName() {
       return name;
   }
   /**
    * setName<p>
    * Set the name
    * 
    * @param name
    */
   public void setName(String name) {
       this.name = name;
   }
   /**
    * getDescription<p>
    * Get the description
    * 
    * @return description
    */
   public String getDescription() {
       return description;
   }
   /**
    * setDescription<p>
    * Set the description
    * 
    * @param description
    */
   public void setDescription(String description) {
       this.description = description;
   }
   /**
    * getCreationTimestamp<p>
    * Get the creation timestamp
    * 
    * @return creationTimestamp
    */
   public Date getCreationTimestamp() {
       return creationTimestamp;
   }
   /**
    * setCreationTimestamp<p>
    * Set the creation timestamp
    * 
    * @param creationTimestamp
    */
   public void setCreationTimestamp(Date creationTimestamp) {
       this.creationTimestamp = creationTimestamp;
   }
   /**
    * getApplicationMetadata<p>
    * Set the application metadata
    * 
    * @return appMetadata
    */
   @JsonProperty("metadata")
   public Set<ApplicationMetadata> getApplicationMetadata() {
       return metadata;
   }
   /**
    * setApplicationMetadata<p>
    * Set the application metadata
    * 
    * @param metadata
    */
   @JsonProperty("metadata")
   public void setApplicationMetadata(Set<ApplicationMetadata> metadata) {
       this.metadata = metadata;
   }
   /**
    * getLicenseFilename<p>
    * Get the license file name
    * 
    * @return licenseFilename
    */
   public String getLicenseFilename() {
       return licenseFilename;
   }
   /**
    * setLicenseFilename<p>
    * Set the license file name
    * 
    * @param licenseFilename
    */
   public void setLicenseFilename(String licenseFilename) {
       this.licenseFilename = licenseFilename;
   }
   /**
    * getLicenseTypes<p>
    * Get the license types
    * 
    * @return licenseTypes
    */
   public Set<LicenseType> getLicenseTypes() {
       LOG.info("Getting list license types!!!!");
       return licenseTypes;
   }
   /**
    * setLicenseTypes<p>
    * Set the license types
    * 
    * @param licenseTypes
    */
   public void setLicenseTypes(Set<LicenseType> licenseTypes) {
       this.licenseTypes = licenseTypes;
   }
   /**
    * getCode<p>
    * Get the application code
    * 
    * @return code
    */
   public String getCode() {
       return code;
   }
   /**
    * setCode<p>
    * Set the application code
    * 
    * @param code
    */
   public void setCode(String code) {
       this.code = code;
   }
   /**
    * equals<p>
    * Compares the current object with the given object
    * 
    * @param object
    * @return isEquals
    */
   @Override
   public boolean equals(Object obj) {
       if (!(obj instanceof Application))
           return false;
       Application other = (Application) obj;
       return id.equals(other.id);
   }
   /**
    * hashCode<p>
    * Get the object hashCode
    * 
    * @param hashCode
    */
   @Override
   public int hashCode() {
       return (id == null ? 0 : id.hashCode());
   }
}