From 33466e13bc168c352fc05c7cfaaafaccedd3d553 Mon Sep 17 00:00:00 2001 From: Claudio Mezzasalma Date: Wed, 8 Nov 2017 16:44:18 +0100 Subject: [PATCH] Prevent adding the same job target multiple times Fixes #903 Signed-off-by: Claudio Mezzasalma --- .../client/targets/JobTargetAddDialog.java | 2 +- .../job/server/GwtJobTargetServiceImpl.java | 29 ++++++++++++------- .../shared/service/GwtJobTargetService.java | 4 ++- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/client/targets/JobTargetAddDialog.java b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/client/targets/JobTargetAddDialog.java index c89f7d0981e..34e7fbb7282 100644 --- a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/client/targets/JobTargetAddDialog.java +++ b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/client/targets/JobTargetAddDialog.java @@ -133,7 +133,7 @@ private void doSubmit(List targets) { creator.setJobTargetId(target.getId()); creatorList.add(creator); } - GWT_JOB_TARGET_SERVICE.create(xsrfToken, creatorList, new AsyncCallback>() { + GWT_JOB_TARGET_SERVICE.create(xsrfToken, currentSession.getSelectedAccountId(), jobId, creatorList, new AsyncCallback>() { @Override public void onSuccess(List arg0) { diff --git a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/server/GwtJobTargetServiceImpl.java b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/server/GwtJobTargetServiceImpl.java index 6e7a0ec00f6..625d3a48774 100644 --- a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/server/GwtJobTargetServiceImpl.java +++ b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/server/GwtJobTargetServiceImpl.java @@ -59,12 +59,7 @@ public PagingLoadResult query(PagingLoadConfig loadConfig, GwtJobT // If there are results if (!jobTargetList.isEmpty()) { // count - if (jobTargetList.getSize() >= loadConfig.getLimit()) { - totalLength = Long.valueOf(jobTargetService.count(jobTargetQuery)).intValue(); - } else { - totalLength = jobTargetList.getSize(); - } - + totalLength = Long.valueOf(jobTargetService.count(jobTargetQuery)).intValue(); // Converto to GWT entity for (JobTarget jt : jobTargetList.getItems()) { gwtJobTargetList.add(KapuaGwtJobModelConverter.convertJobTarget(jt)); @@ -75,7 +70,7 @@ public PagingLoadResult query(PagingLoadConfig loadConfig, GwtJobT KapuaExceptionHandler.handle(t); } - return new BasePagingLoadResult(gwtJobTargetList, loadConfig.getOffset(), totalLength); + return new BasePagingLoadResult(gwtJobTargetList, loadConfig != null ? loadConfig.getOffset() : 0, totalLength); } @Override @@ -102,17 +97,20 @@ public List findByJobId(String scopeId, String jobId, boolean fetc } @Override - public List create(GwtXSRFToken xsrfToken, List gwtJobTargetCreatorList) throws GwtKapuaException { + public List create(GwtXSRFToken xsrfToken, String scopeId, String jobId, List gwtJobTargetCreatorList) throws GwtKapuaException { checkXSRFToken(xsrfToken); - + List existingTargets = findByJobId(scopeId, jobId, false); List gwtJobTargetList = new ArrayList(); try { KapuaLocator locator = KapuaLocator.getInstance(); JobTargetFactory jobTargetFactory = locator.getFactory(JobTargetFactory.class); for (GwtJobTargetCreator gwtJobTargetCreator : gwtJobTargetCreatorList) { - KapuaId scopeId = KapuaEid.parseCompactId(gwtJobTargetCreator.getScopeId()); - JobTargetCreator jobTargetCreator = jobTargetFactory.newCreator(scopeId); + if (findExtistingTarget(gwtJobTargetCreator.getJobTargetId(), existingTargets)) { + continue; + } + KapuaId creatorScopeId = KapuaEid.parseCompactId(gwtJobTargetCreator.getScopeId()); + JobTargetCreator jobTargetCreator = jobTargetFactory.newCreator(creatorScopeId); jobTargetCreator.setJobId(GwtKapuaCommonsModelConverter.convertKapuaId(gwtJobTargetCreator.getJobId())); jobTargetCreator.setJobTargetId(GwtKapuaCommonsModelConverter.convertKapuaId(gwtJobTargetCreator.getJobTargetId())); @@ -131,6 +129,15 @@ public List create(GwtXSRFToken xsrfToken, List existingTargets) { + for (GwtJobTarget existingTarget : existingTargets) { + if (existingTarget.getJobTargetId().equals(jobTargetId)) { + return true; + } + } + return false; + } + @Override public void delete(GwtXSRFToken xsrfToken, String gwtScopeId, String gwtJobTargetId) throws GwtKapuaException { checkXSRFToken(xsrfToken); diff --git a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/shared/service/GwtJobTargetService.java b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/shared/service/GwtJobTargetService.java index b2b27b70851..bc60a4aed3d 100644 --- a/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/shared/service/GwtJobTargetService.java +++ b/console/module/job/src/main/java/org/eclipse/kapua/app/console/module/job/shared/service/GwtJobTargetService.java @@ -38,11 +38,13 @@ List findByJobId(String scopeId, String jobId, boolean fetchDetail /** * Creates a new job target under the account specified in the JobTargetCreator. * + * @param scopeId + * @param jobId * @param gwtJobTargetCreatorList * @return * @throws GwtKapuaException */ - List create(GwtXSRFToken xsrfToken, List gwtJobTargetCreatorList) + List create(GwtXSRFToken xsrfToken, String scopeId, String jobId, List gwtJobTargetCreatorList) throws GwtKapuaException; /**