View Javadoc
1   /*
2    * Copyright (c) 2002-2024, City of Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.identitystore.v3.web.rs;
35  
36  import fr.paris.lutece.plugins.identitystore.business.application.ClientApplication;
37  import fr.paris.lutece.plugins.identitystore.business.attribute.AttributeCertificate;
38  import fr.paris.lutece.plugins.identitystore.business.attribute.AttributeKey;
39  import fr.paris.lutece.plugins.identitystore.business.attribute.KeyType;
40  import fr.paris.lutece.plugins.identitystore.business.contract.AttributeCertification;
41  import fr.paris.lutece.plugins.identitystore.business.contract.AttributeRequirement;
42  import fr.paris.lutece.plugins.identitystore.business.contract.AttributeRight;
43  import fr.paris.lutece.plugins.identitystore.business.contract.ServiceContract;
44  import fr.paris.lutece.plugins.identitystore.business.duplicates.suspicions.SuspiciousIdentityHome;
45  import fr.paris.lutece.plugins.identitystore.business.identity.Identity;
46  import fr.paris.lutece.plugins.identitystore.business.identity.IdentityAttribute;
47  import fr.paris.lutece.plugins.identitystore.business.identity.IdentityHome;
48  import fr.paris.lutece.plugins.identitystore.business.referentiel.RefAttributeCertificationLevel;
49  import fr.paris.lutece.plugins.identitystore.business.referentiel.RefAttributeCertificationProcessus;
50  import fr.paris.lutece.plugins.identitystore.business.referentiel.RefCertificationLevel;
51  import fr.paris.lutece.plugins.identitystore.business.referentiel.RefCertificationLevelHome;
52  import fr.paris.lutece.plugins.identitystore.service.attribute.IdentityAttributeService;
53  import fr.paris.lutece.plugins.identitystore.service.contract.AttributeCertificationDefinitionService;
54  import fr.paris.lutece.plugins.identitystore.service.contract.RefAttributeCertificationDefinitionNotFoundException;
55  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.application.ClientApplicationDto;
56  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.AttributeDto;
57  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.AttributeKeyDto;
58  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.AttributeType;
59  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.AttributeValueDto;
60  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.ExpirationDefinition;
61  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.IdentityDto;
62  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.common.MergeDefinition;
63  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.contract.AttributeDefinitionDto;
64  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.contract.AttributeRequirementDto;
65  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.contract.AttributeRightDto;
66  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.contract.CertificationProcessusDto;
67  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.contract.ServiceContractDto;
68  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.referentiel.AttributeCertificationLevelDto;
69  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.referentiel.AttributeCertificationProcessusDto;
70  import fr.paris.lutece.plugins.identitystore.v3.web.rs.dto.referentiel.LevelDto;
71  import fr.paris.lutece.plugins.identitystore.web.exception.IdentityStoreException;
72  import org.apache.commons.collections.CollectionUtils;
73  import org.apache.commons.collections.MapUtils;
74  import org.apache.commons.lang3.StringUtils;
75  
76  import java.sql.Timestamp;
77  import java.util.ArrayList;
78  import java.util.Collections;
79  import java.util.List;
80  import java.util.Optional;
81  import java.util.stream.Collectors;
82  
83  /**
84   *
85   * class to help managing rest feature
86   *
87   */
88  public final class DtoConverter
89  {
90      /**
91       * private constructor
92       */
93      private DtoConverter( )
94      {
95      }
96  
97      /**
98       * returns a identityDto initialized from provided identity
99       *
100      * @param identity
101      *            business identity to convert
102      * @return identityDto initialized from provided identity
103      */
104     public static IdentityDto convertIdentityToDto( final Identity identity )
105     {
106         final IdentityDto identityDto = new IdentityDto( );
107         identityDto.setConnectionId( identity.getConnectionId( ) );
108         identityDto.setCustomerId( identity.getCustomerId( ) );
109         identityDto.setLastUpdateDate( identity.getLastUpdateDate( ) );
110         identityDto.setCreationDate( identity.getCreationDate( ) );
111         identityDto.setMonParisActive( identity.isMonParisActive( ) );
112 
113         if ( identity.isMerged( ) )
114         {
115             final MergeDefinition merge = new MergeDefinition( );
116             merge.setMerged( identity.isMerged( ) );
117             merge.setMergeDate( identity.getMergeDate( ) );
118             if ( identity.getMasterIdentityId( ) != null )
119             {
120                 merge.setMasterCustomerId( IdentityHome.findByPrimaryKey( identity.getMasterIdentityId( ) ).getCustomerId( ) );
121             }
122             identityDto.setMerge( merge );
123         }
124 
125         if ( identity.getExpirationDate( ) != null || identity.isDeleted( ) || identity.getDeleteDate( ) != null )
126         {
127             final ExpirationDefinition expiration = new ExpirationDefinition( );
128             expiration.setExpirationDate( identity.getExpirationDate( ) );
129             expiration.setDeleted( identity.isDeleted( ) );
130             expiration.setDeleteDate( identity.getDeleteDate( ) );
131             identityDto.setExpiration( expiration );
132         }
133 
134         identityDto.setSuspicious( SuspiciousIdentityHome.hasSuspicious( Collections.singletonList( identity.getCustomerId( ) ) ) );
135 
136         if ( MapUtils.isNotEmpty( identity.getAttributes( ) ) )
137         {
138             for ( final IdentityAttribute attribute : identity.getAttributes( ).values( ) )
139             {
140                 identityDto.getAttributes( ).add( convertAttributeToDto( attribute ) );
141             }
142         }
143 
144         return identityDto;
145     }
146 
147     public static Identity convertDtoToIdentity( final IdentityDto dto )
148     {
149         final Identityins/identitystore/business/identity/Identity.html#Identity">Identity identity = new Identity( );
150         identity.setConnectionId( dto.getConnectionId( ) );
151         identity.setCustomerId( dto.getCustomerId( ) );
152         identity.setLastUpdateDate( dto.getLastUpdateDate( ) );
153         identity.setMonParisActive( dto.isMonParisActive( ) );
154         identity.setCreationDate( dto.getCreationDate( ) );
155 
156         if ( dto.getExpiration( ) != null )
157         {
158             identity.setDeleted( dto.getExpiration( ).isDeleted( ) );
159             identity.setExpirationDate( dto.getExpiration( ).getExpirationDate( ) );
160             identity.setDeleteDate( dto.getExpiration( ).getDeleteDate( ) );
161         }
162 
163         if ( dto.getMerge( ) != null )
164         {
165             identity.setMerged( dto.isMerged( ) );
166             identity.setMergeDate( dto.getMerge( ).getMergeDate( ) );
167         }
168 
169         identity.getAttributes( ).putAll( dto.getAttributes( ).stream( ).map( DtoConverter::convertDtoToAttribute )
170                 .collect( Collectors.toMap( o -> o.getAttributeKey( ).getKeyName( ), o -> o ) ) );
171 
172         return identity;
173     }
174 
175     private static AttributeDto convertAttributeToDto( final IdentityAttribute attribute )
176     {
177         final AttributeKey attributeKey = attribute.getAttributeKey( );
178 
179         final AttributeDto attributeDto = new AttributeDto( );
180         attributeDto.setKey( attributeKey.getKeyName( ) );
181         attributeDto.setValue( attribute.getValue( ) );
182         attributeDto.setType( attributeKey.getKeyType( ).getCode( ) );
183         attributeDto.setLastUpdateClientCode( attribute.getLastUpdateClientCode( ) );
184         attributeDto.setLastUpdateDate( attribute.getLastUpdateDate( ) );
185 
186         if ( attribute.getCertificate( ) != null )
187         {
188             attributeDto.setCertifier( attribute.getCertificate( ).getCertifierCode( ) );
189             attributeDto.setCertificationLevel( AttributeCertificationDefinitionService.instance( )
190                     .getLevelAsInteger( attribute.getCertificate( ).getCertifierCode( ), attributeKey.getKeyName( ) ) );
191             attributeDto.setCertificationDate( attribute.getCertificate( ).getCertificateDate( ) );
192 
193         }
194         return attributeDto;
195     }
196 
197     private static IdentityAttribute convertDtoToAttribute( final AttributeDto dto )
198     {
199         final IdentityAttributetystore/business/identity/IdentityAttribute.html#IdentityAttribute">IdentityAttribute attribute = new IdentityAttribute( );
200         attribute.setValue( dto.getValue( ) );
201         attribute.setLastUpdateClientCode( dto.getLastUpdateClientCode( ) );
202         attribute.setLastUpdateDate( dto.getLastUpdateDate( ) );
203 
204         final AttributeKeytitystore/business/attribute/AttributeKey.html#AttributeKey">AttributeKey attributeKey = new AttributeKey( );
205         attributeKey.setKeyName( dto.getKey( ) );
206         attributeKey.setKeyType( KeyType.valueByCode( dto.getType( ) ) );
207         attribute.setAttributeKey( attributeKey );
208 
209         if ( dto.getCertificationDate( ) != null )
210         {
211             final AttributeCertificatere/business/attribute/AttributeCertificate.html#AttributeCertificate">AttributeCertificate certificate = new AttributeCertificate( );
212             certificate.setCertificateDate( Timestamp.from( dto.getCertificationDate( ).toInstant( ) ) );
213             certificate.setCertifierName( dto.getCertifier( ) );
214             certificate.setCertifierCode( dto.getCertifier( ) );
215             attribute.setCertificate( certificate );
216         }
217 
218         return attribute;
219     }
220 
221     /**
222      * returns a serviceContractDto initialized from provided serviceContract
223      *
224      * @param serviceContract
225      *            business service contract to convert
226      * @return serviceContractDto initialized from provided serviceContract
227      */
228     public static ServiceContractDto convertContractToDto( final ServiceContract serviceContract )
229     {
230         final ServiceContractDto serviceContractDto = new ServiceContractDto( );
231         serviceContractDto.setId( serviceContract.getId( ) );
232         serviceContractDto.setClientCode( serviceContract.getClientCode( ) );
233         serviceContractDto.setName( serviceContract.getName( ) );
234         serviceContractDto.setServiceType( serviceContract.getServiceType( ) );
235         serviceContractDto.setMoaContactName( serviceContract.getMoaContactName( ) );
236         serviceContractDto.setMoaEntityName( serviceContract.getMoaEntityName( ) );
237         serviceContractDto.setMoeResponsibleName( serviceContract.getMoeResponsibleName( ) );
238         serviceContractDto.setMoeEntityName( serviceContract.getMoeEntityName( ) );
239         serviceContractDto.setStartingDate( serviceContract.getStartingDate( ) );
240         serviceContractDto.setEndingDate( serviceContract.getEndingDate( ) );
241         serviceContractDto.setAuthorizedCreation( serviceContract.getAuthorizedCreation( ) );
242         serviceContractDto.setAuthorizedUpdate( serviceContract.getAuthorizedUpdate( ) );
243         serviceContractDto.setAuthorizedSearch( serviceContract.getAuthorizedSearch( ) );
244         serviceContractDto.setAuthorizedAccountUpdate( serviceContract.getAuthorizedAccountUpdate( ) );
245         serviceContractDto.setAuthorizedDeletion( serviceContract.getAuthorizedDeletion( ) );
246         serviceContractDto.setAuthorizedExport( serviceContract.getAuthorizedExport( ) );
247         serviceContractDto.setAuthorizedImport( serviceContract.getAuthorizedImport( ) );
248         serviceContractDto.setAuthorizedMerge( serviceContract.getAuthorizedMerge( ) );
249         serviceContractDto.setAuthorizedDecertification( serviceContract.getAuthorizedDecertification( ) );
250         serviceContractDto.setAuthorizedAgentHistoryRead( serviceContract.getAuthorizedAgentHistoryRead( ) );
251         serviceContractDto.setDataRetentionPeriodInMonths( serviceContract.getDataRetentionPeriodInMonths( ) );
252 
253         final List<AttributeDefinitionDto> attributeDefinitions = new ArrayList<>( );
254 
255         for ( final AttributeRight attributeRight : serviceContract.getAttributeRights( ) )
256         {
257             final AttributeDefinitionDto attributeDefinitionDto = extractAttributeDefinition( attributeRight.getAttributeKey( ) );
258             attributeDefinitionDto.setAttributeRight( new AttributeRightDto( ) );
259             attributeDefinitionDto.getAttributeRight( ).setMandatory( attributeRight.isMandatory( ) );
260             attributeDefinitionDto.getAttributeRight( ).setReadable( attributeRight.isReadable( ) );
261             attributeDefinitionDto.getAttributeRight( ).setSearchable( attributeRight.isSearchable( ) );
262             attributeDefinitionDto.getAttributeRight( ).setWritable( attributeRight.isWritable( ) );
263             attributeDefinitions.add( attributeDefinitionDto );
264         }
265 
266         for ( final AttributeCertification attributeCertification : serviceContract.getAttributeCertifications( ) )
267         {
268             AttributeDefinitionDto current = attributeDefinitions.stream( )
269                     .filter( attributeDefinitionDto -> attributeDefinitionDto.getKeyName( ).equals( attributeCertification.getAttributeKey( ).getKeyName( ) ) )
270                     .findFirst( ).orElse( null );
271             if ( current == null )
272             {
273                 current = extractAttributeDefinition( attributeCertification.getAttributeKey( ) );
274                 attributeDefinitions.add( current );
275             }
276 
277             final List<CertificationProcessusDto> certificationProcesses = attributeCertification.getRefAttributeCertificationProcessus( ).stream( )
278                     .map( ref -> {
279                         final CertificationProcessusDto certificationProcessus = new CertificationProcessusDto( );
280                         certificationProcessus.setCode( ref.getCode( ) );
281                         certificationProcessus.setLabel( ref.getLabel( ) );
282                         certificationProcessus.setLevel( ref.getLevel( ).getRefCertificationLevel( ).getLevel( ) );
283                         return certificationProcessus;
284                     } ).collect( Collectors.toList( ) );
285             current.getAttributeCertifications( ).addAll( certificationProcesses );
286         }
287 
288         // TODO améliorer car la remontée n'est pas optimale pour ce UC
289         final List<AttributeRequirement> attributeRequirements = serviceContract.getAttributeRequirements( ).stream( )
290                 .filter( attributeRequirement -> attributeRequirement.getRefCertificationLevel( ).getLevel( ) != null ).collect( Collectors.toList( ) );
291         for ( final AttributeRequirement attributeRequirement : attributeRequirements )
292         {
293             AttributeDefinitionDto current = attributeDefinitions.stream( )
294                     .filter( attributeDefinitionDto -> attributeDefinitionDto.getKeyName( ).equals( attributeRequirement.getAttributeKey( ).getKeyName( ) ) )
295                     .findFirst( ).orElse( null );
296             if ( current == null )
297             {
298                 current = extractAttributeDefinition( attributeRequirement.getAttributeKey( ) );
299                 attributeDefinitions.add( current );
300             }
301             final AttributeRequirementDto requirement = new AttributeRequirementDto( );
302             requirement.setLevel( attributeRequirement.getRefCertificationLevel( ).getLevel( ) );
303             requirement.setName( attributeRequirement.getRefCertificationLevel( ).getName( ) );
304             requirement.setDescription( attributeRequirement.getRefCertificationLevel( ).getDescription( ) );
305             current.setAttributeRequirement( requirement );
306         }
307 
308         serviceContractDto.getAttributeDefinitions( ).addAll( attributeDefinitions );
309 
310         return serviceContractDto;
311     }
312 
313     private static AttributeDefinitionDto extractAttributeDefinition( final AttributeKey attributeRight )
314     {
315         final AttributeDefinitionDto attributeDefinitionDto = new AttributeDefinitionDto( );
316         attributeDefinitionDto.setName( attributeRight.getName( ) );
317         attributeDefinitionDto.setKeyName( attributeRight.getKeyName( ) );
318         attributeDefinitionDto.setDescription( attributeRight.getDescription( ) );
319         attributeDefinitionDto.setType( AttributeType.valueOf( attributeRight.getKeyType( ).name( ) ) );
320         attributeDefinitionDto.setCertifiable( attributeRight.getCertifiable( ) );
321         attributeDefinitionDto.setPivot( attributeRight.getPivot( ) );
322         attributeDefinitionDto.setKeyWeight( attributeRight.getKeyWeight( ) );
323         attributeDefinitionDto.setMandatoryForCreation( attributeRight.isMandatoryForCreation( ) );
324         attributeDefinitionDto.setValidationRegex( attributeRight.getValidationRegex( ) );
325         attributeDefinitionDto.setValidationErrorMessage( attributeRight.getValidationErrorMessage( ) );
326         attributeDefinitionDto.setValidationErrorMessageKey( attributeRight.getValidationErrorMessageKey( ) );
327         return attributeDefinitionDto;
328     }
329 
330     /**
331      * returns a serviceContractDto initialized from provided serviceContractDto
332      *
333      * @param serviceContractDto
334      *            business service contract to convert
335      * @return serviceContractDto initialized from provided serviceContractDto
336      */
337     public static ServiceContract convertDtoToContract( final ServiceContractDto serviceContractDto ) throws IdentityStoreException
338     {
339         final ServiceContractore/business/contract/ServiceContract.html#ServiceContract">ServiceContract serviceContract = new ServiceContract( );
340         serviceContract.setId( serviceContractDto.getId( ) );
341         serviceContract.setName( serviceContractDto.getName( ) );
342         serviceContract.setServiceType( serviceContractDto.getServiceType( ) );
343         serviceContract.setMoaContactName( serviceContractDto.getMoaContactName( ) );
344         serviceContract.setMoaEntityName( serviceContractDto.getMoaEntityName( ) );
345         serviceContract.setMoeResponsibleName( serviceContractDto.getMoeResponsibleName( ) );
346         serviceContract.setMoeEntityName( serviceContractDto.getMoeEntityName( ) );
347         serviceContract.setStartingDate( serviceContractDto.getStartingDate( ) );
348         serviceContract.setEndingDate( serviceContractDto.getEndingDate( ) );
349         serviceContract.setAuthorizedCreation( serviceContractDto.isAuthorizedCreation( ) );
350         serviceContract.setAuthorizedUpdate( serviceContractDto.isAuthorizedUpdate( ) );
351         serviceContract.setAuthorizedSearch( serviceContractDto.isAuthorizedSearch( ) );
352         serviceContract.setAuthorizedAccountUpdate( serviceContractDto.isAuthorizedAccountUpdate( ) );
353         serviceContract.setAuthorizedDeletion( serviceContractDto.isAuthorizedDeletion( ) );
354         serviceContract.setAuthorizedExport( serviceContractDto.isAuthorizedExport( ) );
355         serviceContract.setAuthorizedImport( serviceContractDto.isAuthorizedImport( ) );
356         serviceContract.setAuthorizedMerge( serviceContractDto.isAuthorizedMerge( ) );
357         serviceContract.setAuthorizedDecertification( serviceContractDto.isAuthorizedDecertification( ) );
358         serviceContract.setAuthorizedAgentHistoryRead( serviceContractDto.isAuthorizedAgentHistoryRead( ) );
359         serviceContract.setDataRetentionPeriodInMonths( serviceContractDto.getDataRetentionPeriodInMonths( ) );
360 
361         for ( final AttributeDefinitionDto attributeDefinition : serviceContractDto.getAttributeDefinitions( ) )
362         {
363             final AttributeKey attributeKey = IdentityAttributeService.instance( ).getAttributeKey( attributeDefinition.getKeyName( ) );
364             final AttributeRightstore/business/contract/AttributeRight.html#AttributeRight">AttributeRight attributeRight = new AttributeRight( );
365             attributeRight.setMandatory( attributeDefinition.getAttributeRight( ).isMandatory( ) );
366             attributeRight.setReadable( attributeDefinition.getAttributeRight( ).isReadable( ) );
367             attributeRight.setWritable( attributeDefinition.getAttributeRight( ).isWritable( ) );
368             attributeRight.setSearchable( attributeDefinition.getAttributeRight( ).isSearchable( ) );
369             attributeRight.setAttributeKey( attributeKey );
370             serviceContract.getAttributeRights( ).add( attributeRight );
371 
372             if ( attributeDefinition.getAttributeRequirement( ) != null )
373             {
374                 final AttributeRequirementre/business/contract/AttributeRequirement.html#AttributeRequirement">AttributeRequirement requirement = new AttributeRequirement( );
375                 requirement.setAttributeKey( attributeKey );
376                 final Optional<RefCertificationLevel> refCertificationLevel = RefCertificationLevelHome.getRefCertificationLevelsList( ).stream( )
377                         .filter( level -> level.getLevel( ).equals( attributeDefinition.getAttributeRequirement( ).getLevel( ) ) ).findFirst( );
378                 requirement.setRefCertificationLevel( refCertificationLevel.orElseThrow( ( ) -> new IdentityStoreException(
379                         "No certification level found with value " + attributeDefinition.getAttributeRequirement( ).getLevel( ) ) ) );
380                 serviceContract.getAttributeRequirements( ).add( requirement );
381             }
382 
383             if ( CollectionUtils.isNotEmpty( attributeDefinition.getAttributeCertifications( ) ) )
384             {
385                 final AttributeCertificationusiness/contract/AttributeCertification.html#AttributeCertification">AttributeCertification certification = new AttributeCertification( );
386                 certification.setAttributeKey( attributeKey );
387                 serviceContract.getAttributeCertifications( ).add( certification );
388                 for ( final CertificationProcessusDto attributeCertification : attributeDefinition.getAttributeCertifications( ) )
389                 {
390                     final RefAttributeCertificationLevel refAttributeCertificationLevel = AttributeCertificationDefinitionService.instance( )
391                             .get( attributeCertification.getCode( ), attributeKey.getKeyName( ) );
392                     if ( refAttributeCertificationLevel == null )
393                     {
394                         throw new IdentityStoreException(
395                                 "No processus could be found with code " + attributeCertification.getCode( ) + " for attribute " + attributeKey.getKeyName( ) );
396                     }
397                     certification.getRefAttributeCertificationProcessus( ).add( refAttributeCertificationLevel.getRefAttributeCertificationProcessus( ) );
398                 }
399             }
400 
401         }
402 
403         return serviceContract;
404     }
405 
406     public static ClientApplicationDto convertClientToDto( final ClientApplication clientApplication )
407     {
408         final ClientApplicationDto dto = new ClientApplicationDto( );
409         dto.setId( clientApplication.getId( ) );
410         dto.setName( clientApplication.getName( ) );
411         dto.setClientCode( clientApplication.getClientCode( ) );
412         dto.setApplicationCode( clientApplication.getApplicationCode( ) );
413         return dto;
414     }
415 
416     public static ClientApplication convertDtoToClient( final ClientApplicationDto clientApplicationDto )
417     {
418         final ClientApplicationbusiness/application/ClientApplication.html#ClientApplication">ClientApplication clientApplication = new ClientApplication( );
419         clientApplication.setId( clientApplicationDto.getId( ) );
420         clientApplication.setName( clientApplicationDto.getName( ) );
421         clientApplication.setClientCode( clientApplicationDto.getClientCode( ) );
422         clientApplication.setApplicationCode( clientApplicationDto.getApplicationCode( ) );
423         return clientApplication;
424     }
425 
426     public static List<LevelDto> convertRefLevelsToListDto( List<RefCertificationLevel> refCertificationLevelsList )
427     {
428         final List<LevelDto> dtos = new ArrayList<>( );
429         for ( final RefCertificationLevel refCertificationLevel : refCertificationLevelsList )
430         {
431             final LevelDto levelDto = new LevelDto( );
432             levelDto.setLevel( refCertificationLevel.getLevel( ) );
433             levelDto.setName( refCertificationLevel.getName( ) );
434             levelDto.setDescription( refCertificationLevel.getDescription( ) );
435             dtos.add( levelDto );
436         }
437         return dtos;
438     }
439 
440     public static AttributeCertificationProcessusDto convertProcessusToDto( RefAttributeCertificationProcessus processus,
441             List<RefAttributeCertificationLevel> refAttributeCertificationLevels )
442     {
443         final AttributeCertificationProcessusDto dto = new AttributeCertificationProcessusDto( );
444         dto.setCode( processus.getCode( ) );
445         dto.setLabel( processus.getLabel( ) );
446         for ( final RefAttributeCertificationLevel refAttributeCertificationLevel : refAttributeCertificationLevels )
447         {
448             if ( StringUtils.isNotEmpty( refAttributeCertificationLevel.getRefCertificationLevel( ).getLevel( ) ) )
449             {
450                 final AttributeCertificationLevelDto levelDto = new AttributeCertificationLevelDto( );
451                 levelDto.setAttributeKey( refAttributeCertificationLevel.getAttributeKey( ).getKeyName( ) );
452                 final LevelDto level = new LevelDto( );
453                 level.setDescription( refAttributeCertificationLevel.getRefCertificationLevel( ).getDescription( ) );
454                 level.setLevel( refAttributeCertificationLevel.getRefCertificationLevel( ).getLevel( ) );
455                 level.setName( refAttributeCertificationLevel.getRefCertificationLevel( ).getName( ) );
456                 levelDto.setLevel( level );
457                 dto.getAttributeCertificationLevels( ).add( levelDto );
458             }
459         }
460         return dto;
461     }
462 
463     public static List<AttributeKeyDto> convertRefAttributesToListDto( List<AttributeKey> allAtributeKeys )
464     {
465         return allAtributeKeys.stream( ).map( DtoConverter::convertRefAttributeToDto ).collect( Collectors.toList( ) );
466     }
467 
468     public static AttributeKeyDto convertRefAttributeToDto( AttributeKey attributeKey )
469     {
470         final AttributeKeyDto dto = new AttributeKeyDto( );
471         dto.setCertifiable( attributeKey.getCertifiable( ) );
472         dto.setDescription( attributeKey.getDescription( ) );
473         dto.setKeyName( attributeKey.getKeyName( ) );
474         dto.setName( attributeKey.getName( ) );
475         dto.setKeyWeight( attributeKey.getKeyWeight( ) );
476         dto.setPivot( attributeKey.getPivot( ) );
477         dto.setType( AttributeType.valueOf( attributeKey.getKeyType( ).name( ) ) );
478         dto.setValidationRegex( attributeKey.getValidationRegex( ) );
479         dto.setMandatoryForCreation( attributeKey.isMandatoryForCreation( ) );
480         dto.setValidationErrorMessage( attributeKey.getValidationErrorMessage( ) );
481         dto.setValidationErrorMessageKey( attributeKey.getValidationErrorMessageKey( ) );
482         dto.setValues( attributeKey.getAttributeValues( ).stream( ).map( attributeValue -> {
483             final AttributeValueDto valueDto = new AttributeValueDto( );
484             valueDto.setValue( attributeValue.getValue( ) );
485             valueDto.setLabel( attributeValue.getLabel( ) );
486             return valueDto;
487         } ).collect( Collectors.toList( ) ) );
488         return dto;
489     }
490 }