@@ -53,32 +53,29 @@ public class ApplicationInformationEntity extends IdentifiedObject {
5353
5454 private static final long serialVersionUID = 1L ;
5555
56+ // ========================================
57+ // ESPI 4.0 XSD Fields in Sequence Order
58+ // Lines follow espi.xsd lines 62-246
59+ // ========================================
60+
5661 /**
57- * Kind/type classification for this application information.
62+ * Data custodian ID.
63+ * ESPI 4.0 XSD field #1
5864 */
59- @ Column (name = "kind" )
60- private String kind ;
65+ @ Size (min = 2 , max = 64 )
66+ @ Column (name = "data_custodian_id" )
67+ private String dataCustodianId ;
6168
6269 /**
6370 * Data custodian application status.
71+ * ESPI 4.0 XSD field #2
6472 */
6573 @ Column (name = "data_custodian_application_status" )
6674 private String dataCustodianApplicationStatus ;
6775
68- /**
69- * Data custodian default batch resource URI.
70- */
71- @ Column (name = "data_custodian_default_batch_resource" )
72- private String dataCustodianDefaultBatchResource ;
73-
74- /**
75- * Data custodian default subscription resource URI.
76- */
77- @ Column (name = "data_custodian_default_subscription_resource" )
78- private String dataCustodianDefaultSubscriptionResource ;
79-
8076 /**
8177 * Third party application description.
78+ * ESPI 4.0 XSD field #3
8279 */
8380 @ Column (name = "third_party_application_description" )
8481 private String thirdPartyApplicationDescription ;
@@ -139,42 +136,28 @@ public class ApplicationInformationEntity extends IdentifiedObject {
139136
140137 /**
141138 * Data custodian bulk request URI.
139+ * ESPI 4.0 XSD field #14
142140 */
143141 @ Column (name = "data_custodian_bulk_request_uri" )
144142 private String dataCustodianBulkRequestURI ;
145143
146- /**
147- * Data custodian third party selection screen URI.
148- */
149- @ Column (name = "data_custodian_third_party_selection_screen_uri" )
150- private String dataCustodianThirdPartySelectionScreenURI ;
151-
152144 /**
153145 * Data custodian resource endpoint.
146+ * ESPI 4.0 XSD field #15
154147 */
155148 @ Column (name = "data_custodian_resource_endpoint" )
156149 private String dataCustodianResourceEndpoint ;
157150
158- /**
159- * Third party data custodian selection screen URI.
160- */
161- @ Column (name = "third_party_data_custodian_selection_screen_uri" )
162- private String thirdPartyDataCustodianSelectionScreenURI ;
163-
164- /**
165- * Third party login screen URI.
166- */
167- @ Column (name = "third_party_login_screen_uri" )
168- private String thirdPartyLoginScreenURI ;
169-
170151 /**
171152 * Third party scope selection screen URI.
153+ * ESPI 4.0 XSD field #16
172154 */
173155 @ Column (name = "third_party_scope_selection_screen_uri" )
174156 private String thirdPartyScopeSelectionScreenURI ;
175157
176158 /**
177159 * Third party user portal screen URI.
160+ * ESPI 4.0 XSD field #17
178161 */
179162 @ Column (name = "third_party_user_portal_screen_uri" )
180163 private String thirdPartyUserPortalScreenURI ;
@@ -268,32 +251,9 @@ public class ApplicationInformationEntity extends IdentifiedObject {
268251 @ Column (name = "token_endpoint_auth_method" )
269252 private String tokenEndpointAuthMethod ;
270253
271- /**
272- * Data custodian scope selection screen URI.
273- */
274- @ Column (name = "data_custodian_scope_selection_screen_uri" )
275- private String dataCustodianScopeSelectionScreenURI ;
276-
277- /**
278- * Data custodian ID.
279- * Required field with size constraints.
280- */
281- @ Size (min = 2 , max = 64 )
282- @ Column (name = "data_custodian_id" )
283- private String dataCustodianId ;
284-
285- /**
286- * Third party application name.
287- * Required field with size constraints and default value.
288- */
289- @ NotEmpty
290- @ Size (min = 2 , max = 64 )
291- @ Column (name = "third_party_application_name" , nullable = false )
292- private String thirdPartyApplicationName = "Default Third Party Application Name" ;
293-
294254 /**
295255 * OAuth2 scopes for this application.
296- * Stored as element collection in separate table.
256+ * ESPI 4.0 XSD field #33
297257 */
298258 @ ElementCollection
299259 @ LazyCollection (LazyCollectionOption .FALSE )
@@ -306,11 +266,12 @@ public class ApplicationInformationEntity extends IdentifiedObject {
306266
307267 /**
308268 * OAuth2 grant types supported by this application.
309- * Stored as element collection with enum mapping.
269+ * ESPI 4.0 XSD field #34
270+ * FIXED: Changed from @JoinTable to @CollectionTable for @ElementCollection
310271 */
311272 @ ElementCollection (targetClass = GrantType .class )
312273 @ LazyCollection (LazyCollectionOption .FALSE )
313- @ JoinTable (
274+ @ CollectionTable (
314275 name = "application_information_grant_types" ,
315276 joinColumns = @ JoinColumn (name = "application_information_id" )
316277 )
@@ -320,28 +281,38 @@ public class ApplicationInformationEntity extends IdentifiedObject {
320281
321282 /**
322283 * OAuth2 response types supported by this application.
284+ * ESPI 4.0 XSD field #35
323285 */
324286 @ Enumerated (EnumType .STRING )
325287 @ Column (name = "response_types" )
326288 private ResponseType responseTypes ;
327289
328290 /**
329291 * Registration client URI.
292+ * ESPI 4.0 XSD field #36
330293 */
331294 @ Column (name = "registration_client_uri" )
332295 private String registrationClientUri ;
333296
334297 /**
335298 * Registration access token.
299+ * ESPI 4.0 XSD field #37
336300 * Encrypted at rest using AES-256-GCM.
337301 */
338- @ Column (name = "registration_access_token" )
302+ @ Column (name = "registration_access_token" )
339303 @ Convert (converter = FieldEncryptionConverter .class )
340304 private String registrationAccessToken ;
341305
306+ /**
307+ * Data custodian scope selection screen URI.
308+ * ESPI 4.0 XSD field #38 (last field in XSD sequence)
309+ */
310+ @ Column (name = "data_custodian_scope_selection_screen_uri" )
311+ private String dataCustodianScopeSelectionScreenURI ;
312+
342313 /**
343314 * Gets the scope array for backward compatibility.
344- *
315+ *
345316 * @return array of scope strings
346317 */
347318 public String [] getScopeArray () {
@@ -351,67 +322,6 @@ public String[] getScopeArray() {
351322 return scope .toArray (new String [0 ]);
352323 }
353324
354- /**
355- * Merges data from another ApplicationInformationEntity.
356- *
357- * @param other the other application information entity to merge from
358- */
359- public void merge (ApplicationInformationEntity other ) {
360- if (other != null ) {
361- super .merge (other );
362-
363- // OAuth2 and client information
364- this .clientId = other .clientId ;
365- this .clientSecret = other .clientSecret ;
366- this .scope = new HashSet <>(other .scope );
367- this .grantTypes = new HashSet <>(other .grantTypes );
368- this .redirectUri = other .redirectUri ;
369- this .responseTypes = other .responseTypes ;
370-
371- // Application status and configuration
372- this .dataCustodianApplicationStatus = other .dataCustodianApplicationStatus ;
373- this .thirdPartyApplicationStatus = other .thirdPartyApplicationStatus ;
374- this .thirdPartyApplicationType = other .thirdPartyApplicationType ;
375- this .thirdPartyApplicationUse = other .thirdPartyApplicationUse ;
376- this .thirdPartyApplicationDescription = other .thirdPartyApplicationDescription ;
377- this .thirdPartyApplicationName = other .thirdPartyApplicationName ;
378-
379- // URIs and endpoints
380- this .authorizationServerUri = other .authorizationServerUri ;
381- this .thirdPartyNotifyUri = other .thirdPartyNotifyUri ;
382- this .authorizationServerAuthorizationEndpoint = other .authorizationServerAuthorizationEndpoint ;
383- this .authorizationServerRegistrationEndpoint = other .authorizationServerRegistrationEndpoint ;
384- this .authorizationServerTokenEndpoint = other .authorizationServerTokenEndpoint ;
385- this .dataCustodianBulkRequestURI = other .dataCustodianBulkRequestURI ;
386- this .dataCustodianResourceEndpoint = other .dataCustodianResourceEndpoint ;
387- this .dataCustodianScopeSelectionScreenURI = other .dataCustodianScopeSelectionScreenURI ;
388-
389- // Additional application metadata
390- this .logoUri = other .logoUri ;
391- this .clientName = other .clientName ;
392- this .clientUri = other .clientUri ;
393- this .tosUri = other .tosUri ;
394- this .policyUri = other .policyUri ;
395- this .softwareId = other .softwareId ;
396- this .softwareVersion = other .softwareVersion ;
397- this .clientIdIssuedAt = other .clientIdIssuedAt ;
398- this .clientSecretExpiresAt = other .clientSecretExpiresAt ;
399- this .contacts = other .contacts ;
400- this .tokenEndpointAuthMethod = other .tokenEndpointAuthMethod ;
401- this .registrationClientUri = other .registrationClientUri ;
402- this .registrationAccessToken = other .registrationAccessToken ;
403-
404- // Data custodian information
405- this .dataCustodianId = other .dataCustodianId ;
406- this .dataCustodianDefaultBatchResource = other .dataCustodianDefaultBatchResource ;
407- this .dataCustodianDefaultSubscriptionResource = other .dataCustodianDefaultSubscriptionResource ;
408-
409- // Contact and additional information
410- this .thirdPartyPhone = other .thirdPartyPhone ;
411- this .kind = other .kind ;
412- }
413- }
414-
415325 @ Override
416326 public final boolean equals (Object o ) {
417327 if (this == o ) return true ;
@@ -432,49 +342,42 @@ public final int hashCode() {
432342 public String toString () {
433343 return getClass ().getSimpleName () + "(" +
434344 "id = " + getId () + ", " +
435- "kind = " + getKind () + ", " +
436- "dataCustodianApplicationStatus = " + getDataCustodianApplicationStatus () + ", " +
437- "dataCustodianDefaultBatchResource = " + getDataCustodianDefaultBatchResource () + ", " +
438- "dataCustodianDefaultSubscriptionResource = " + getDataCustodianDefaultSubscriptionResource () + ", " +
439- "thirdPartyApplicationDescription = " + getThirdPartyApplicationDescription () + ", " +
440- "thirdPartyApplicationStatus = " + getThirdPartyApplicationStatus () + ", " +
441- "thirdPartyApplicationType = " + getThirdPartyApplicationType () + ", " +
442- "thirdPartyApplicationUse = " + getThirdPartyApplicationUse () + ", " +
443- "thirdPartyPhone = " + getThirdPartyPhone () + ", " +
444- "authorizationServerUri = " + getAuthorizationServerUri () + ", " +
445- "thirdPartyNotifyUri = " + getThirdPartyNotifyUri () + ", " +
446- "authorizationServerAuthorizationEndpoint = " + getAuthorizationServerAuthorizationEndpoint () + ", " +
447- "authorizationServerRegistrationEndpoint = " + getAuthorizationServerRegistrationEndpoint () + ", " +
448- "authorizationServerTokenEndpoint = " + getAuthorizationServerTokenEndpoint () + ", " +
449- "dataCustodianBulkRequestURI = " + getDataCustodianBulkRequestURI () + ", " +
450- "dataCustodianThirdPartySelectionScreenURI = " + getDataCustodianThirdPartySelectionScreenURI () + ", " +
451- "dataCustodianResourceEndpoint = " + getDataCustodianResourceEndpoint () + ", " +
452- "thirdPartyDataCustodianSelectionScreenURI = " + getThirdPartyDataCustodianSelectionScreenURI () + ", " +
453- "thirdPartyLoginScreenURI = " + getThirdPartyLoginScreenURI () + ", " +
454- "thirdPartyScopeSelectionScreenURI = " + getThirdPartyScopeSelectionScreenURI () + ", " +
455- "thirdPartyUserPortalScreenURI = " + getThirdPartyUserPortalScreenURI () + ", " +
456- "clientSecret = " + getClientSecret () + ", " +
457- "logoUri = " + getLogoUri () + ", " +
458- "clientName = " + getClientName () + ", " +
459- "clientUri = " + getClientUri () + ", " +
460- "redirectUri = " + getRedirectUri () + ", " +
461- "clientId = " + getClientId () + ", " +
462- "tosUri = " + getTosUri () + ", " +
463- "policyUri = " + getPolicyUri () + ", " +
464- "softwareId = " + getSoftwareId () + ", " +
465- "softwareVersion = " + getSoftwareVersion () + ", " +
466- "clientIdIssuedAt = " + getClientIdIssuedAt () + ", " +
467- "clientSecretExpiresAt = " + getClientSecretExpiresAt () + ", " +
468- "contacts = " + getContacts () + ", " +
469- "tokenEndpointAuthMethod = " + getTokenEndpointAuthMethod () + ", " +
470- "dataCustodianScopeSelectionScreenURI = " + getDataCustodianScopeSelectionScreenURI () + ", " +
471- "dataCustodianId = " + getDataCustodianId () + ", " +
472- "thirdPartyApplicationName = " + getThirdPartyApplicationName () + ", " +
473- "scope = " + getScope () + ", " +
474- "grantTypes = " + getGrantTypes () + ", " +
475- "responseTypes = " + getResponseTypes () + ", " +
476- "registrationClientUri = " + getRegistrationClientUri () + ", " +
477- "registrationAccessToken = " + getRegistrationAccessToken () + ", " +
345+ "dataCustodianId = " + dataCustodianId + ", " +
346+ "dataCustodianApplicationStatus = " + dataCustodianApplicationStatus + ", " +
347+ "thirdPartyApplicationDescription = " + thirdPartyApplicationDescription + ", " +
348+ "thirdPartyApplicationStatus = " + thirdPartyApplicationStatus + ", " +
349+ "thirdPartyApplicationType = " + thirdPartyApplicationType + ", " +
350+ "thirdPartyApplicationUse = " + thirdPartyApplicationUse + ", " +
351+ "thirdPartyPhone = " + thirdPartyPhone + ", " +
352+ "authorizationServerUri = " + authorizationServerUri + ", " +
353+ "thirdPartyNotifyUri = " + thirdPartyNotifyUri + ", " +
354+ "authorizationServerAuthorizationEndpoint = " + authorizationServerAuthorizationEndpoint + ", " +
355+ "authorizationServerRegistrationEndpoint = " + authorizationServerRegistrationEndpoint + ", " +
356+ "authorizationServerTokenEndpoint = " + authorizationServerTokenEndpoint + ", " +
357+ "dataCustodianBulkRequestURI = " + dataCustodianBulkRequestURI + ", " +
358+ "dataCustodianResourceEndpoint = " + dataCustodianResourceEndpoint + ", " +
359+ "thirdPartyScopeSelectionScreenURI = " + thirdPartyScopeSelectionScreenURI + ", " +
360+ "thirdPartyUserPortalScreenURI = " + thirdPartyUserPortalScreenURI + ", " +
361+ "clientSecret = [PROTECTED], " +
362+ "logoUri = " + logoUri + ", " +
363+ "clientName = " + clientName + ", " +
364+ "clientUri = " + clientUri + ", " +
365+ "redirectUri = " + redirectUri + ", " +
366+ "clientId = " + clientId + ", " +
367+ "tosUri = " + tosUri + ", " +
368+ "policyUri = " + policyUri + ", " +
369+ "softwareId = " + softwareId + ", " +
370+ "softwareVersion = " + softwareVersion + ", " +
371+ "clientIdIssuedAt = " + clientIdIssuedAt + ", " +
372+ "clientSecretExpiresAt = " + clientSecretExpiresAt + ", " +
373+ "contacts = " + contacts + ", " +
374+ "tokenEndpointAuthMethod = " + tokenEndpointAuthMethod + ", " +
375+ "scope = " + scope + ", " +
376+ "grantTypes = " + grantTypes + ", " +
377+ "responseTypes = " + responseTypes + ", " +
378+ "registrationClientUri = " + registrationClientUri + ", " +
379+ "registrationAccessToken = [PROTECTED], " +
380+ "dataCustodianScopeSelectionScreenURI = " + dataCustodianScopeSelectionScreenURI + ", " +
478381 "description = " + getDescription () + ", " +
479382 "created = " + getCreated () + ", " +
480383 "updated = " + getUpdated () + ", " +
0 commit comments