6464import java .util .ArrayList ;
6565import java .util .List ;
6666import java .util .Map ;
67+ import java .util .Set ;
6768import java .util .stream .Collectors ;
6869
6970public class NimbleManagerImpl extends ManagerBase implements NimbleService {
@@ -206,25 +207,23 @@ private IacTemplate persistIacTemplate(BaseIacTemplateRegistrationCmd cmd, Accou
206207 if (iacTemplateUpdate ) {
207208 iacTemplateDomainMapDao .removeByIacTemplateId (iacTemplate .getId ());
208209 }
209- // convert to sets -> remove duplicates
210- List <IacTemplateDomainMapVO > domainMappings = persistDomainMappings (cmd .getSharedDomainIds (), persistedTemplate .getId (), owner );
211- persistedTemplate .setDomainMappings (domainMappings );
210+ persistDomainMappings (cmd .getSharedDomainIds (), persistedTemplate .getId (), owner );
212211 }
213212
214- // add project flag to the iactemplatwaccountmapvo -> if not, when updating and removing only projects or accoutns, all of them will be removed
215- if (cmd .getSharedAccountIds () != null ) {
216- if (iacTemplateUpdate ) {
217- iacTemplateAccountMapDao .removeByIacTemplateId (iacTemplate .getId ());
213+ if (cmd .getSharedAccountIds () != null || cmd .getSharedProjectIds () != null ) {
214+ if (iacTemplateUpdate && cmd .getSharedAccountIds () != null ) {
215+ iacTemplateAccountMapDao .removeUserAccountMappingsByIacTemplateId (iacTemplate .getId ());
216+ }
217+ if (iacTemplateUpdate && cmd .getSharedProjectIds () != null ) {
218+ iacTemplateAccountMapDao .removeProjectAccountMappingsByIacTemplateId (iacTemplate .getId ());
218219 }
219- List <IacTemplateAccountMapVO > accountMappings = persistAccountMappings (cmd .getSharedAccountIds (), cmd .getSharedProjectIds (), persistedTemplate .getId (), owner );
220- persistedTemplate .setAccountMappings (accountMappings );
220+ persistAccountMappings (cmd .getSharedAccountIds (), cmd .getSharedProjectIds (), persistedTemplate .getId (), owner );
221221 }
222- return persistedTemplate ;
222+ return iacTemplateDao . findById ( persistedTemplate . getId ()) ;
223223 });
224224 }
225225
226- private List <IacTemplateDomainMapVO > persistDomainMappings (List <Long > sharedDomainIds , long iacTemplateId , Account iacTemplateOwner ) {
227- List <IacTemplateDomainMapVO > domainMappings = new ArrayList <>();
226+ private void persistDomainMappings (Set <Long > sharedDomainIds , long iacTemplateId , Account iacTemplateOwner ) {
228227 for (Long domainId : sharedDomainIds ) {
229228 Domain domain = domainManager .getDomain (domainId );
230229 if (domain == null ) {
@@ -237,36 +236,40 @@ private List<IacTemplateDomainMapVO> persistDomainMappings(List<Long> sharedDoma
237236 }
238237 IacTemplateDomainMapVO domainMapping = new IacTemplateDomainMapVO (iacTemplateId , domainId );
239238 iacTemplateDomainMapDao .persist (domainMapping );
240- domainMappings .add (domainMapping );
241239 }
242- return domainMappings ;
243240 }
244241
245- private List <IacTemplateAccountMapVO > persistAccountMappings (List <Long > sharedAccountIds , List <Long > sharedProjectIds , long iacTemplateId , Account iacTemplateOwner ) {
246- List <IacTemplateAccountMapVO > accountMappings = new ArrayList <>();
247- persistAccountMappingsForAccounts (accountMappings , sharedAccountIds , iacTemplateId , iacTemplateOwner );
248- persistAccountMappingsForProjects (accountMappings , sharedProjectIds , iacTemplateId , iacTemplateOwner );
249- return accountMappings ;
242+ private void persistAccountMappings (Set <Long > sharedAccountIds , Set <Long > sharedProjectIds , long iacTemplateId , Account iacTemplateOwner ) {
243+ if (sharedAccountIds != null ) {
244+ persistAccountMappingsForAccounts (sharedAccountIds , iacTemplateId , iacTemplateOwner );
245+ }
246+ if (sharedProjectIds != null ) {
247+ persistAccountMappingsForProjects (sharedProjectIds , iacTemplateId , iacTemplateOwner );
248+ }
250249 }
251250
252- private void persistAccountMappingsForAccounts (List < IacTemplateAccountMapVO > accountMappings , List <Long > sharedAccountIds , long iacTemplateId , Account iacTemplateOwner ) {
251+ private void persistAccountMappingsForAccounts (Set <Long > sharedAccountIds , long iacTemplateId , Account iacTemplateOwner ) {
253252 for (Long accountId : sharedAccountIds ) {
254253 Account account = accountService .getActiveAccountById (accountId );
255254 if (account == null ) {
256255 throw new InvalidParameterValueException (String .format ("Unable to find account with ID [%s]." , accountId ));
257256 }
257+
258+ if (account .getId () == iacTemplateOwner .getId ()) {
259+ throw new InvalidParameterValueException (String .format ("Account [%s] cannot share IaC template with itself." , iacTemplateOwner .getAccountName ()));
260+ }
261+
258262 try {
259263 accountService .checkAccess (iacTemplateOwner , null , false , account );
260264 } catch (PermissionDeniedException e ) {
261265 throw new InvalidParameterValueException (String .format ("Account [%s] does not have permission to share IaC template with account with ID [%s]." , iacTemplateOwner .getAccountName (), account .getUuid ()));
262266 }
263- IacTemplateAccountMapVO accountMapping = new IacTemplateAccountMapVO (iacTemplateId , accountId );
267+ IacTemplateAccountMapVO accountMapping = new IacTemplateAccountMapVO (iacTemplateId , accountId , false );
264268 iacTemplateAccountMapDao .persist (accountMapping );
265- accountMappings .add (accountMapping );
266269 }
267270 }
268271
269- private void persistAccountMappingsForProjects (List < IacTemplateAccountMapVO > accountMappings , List <Long > sharedProjectIds , long iacTemplateId , Account iacTemplateOwner ) {
272+ private void persistAccountMappingsForProjects (Set <Long > sharedProjectIds , long iacTemplateId , Account iacTemplateOwner ) {
270273 for (Long projectId : sharedProjectIds ) {
271274 Project project = projectManager .getProject (projectId );
272275 if (project == null ) {
@@ -281,9 +284,8 @@ private void persistAccountMappingsForProjects(List<IacTemplateAccountMapVO> acc
281284 } catch (PermissionDeniedException e ) {
282285 throw new InvalidParameterValueException (exceptionMessage );
283286 }
284- IacTemplateAccountMapVO accountMapping = new IacTemplateAccountMapVO (iacTemplateId , project .getProjectAccountId ());
287+ IacTemplateAccountMapVO accountMapping = new IacTemplateAccountMapVO (iacTemplateId , project .getProjectAccountId (), true );
285288 iacTemplateAccountMapDao .persist (accountMapping );
286- accountMappings .add (accountMapping );
287289 }
288290 }
289291
0 commit comments