From aa5e4d0601394d470a004db6356d39589a02c677 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Mon, 15 Aug 2016 17:57:52 +0200 Subject: [PATCH 1/6] - Fix ds assignment result - Fix drag and drop to assignment Signed-off-by: SirWayne --- .../DistributionSetAssignmentResult.java | 5 ++++ .../jpa/DistributionSetManagementTest.java | 23 +++++++++++++++++++ .../management/targettable/TargetTable.java | 6 +++++ .../targettag/TargetTagFilterButtons.java | 9 +++++++- .../src/main/resources/messages.properties | 1 + .../src/main/resources/messages_de.properties | 1 + .../src/main/resources/messages_en.properties | 1 + 7 files changed, 45 insertions(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java index f21763883..704bb38e9 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/DistributionSetAssignmentResult.java @@ -13,6 +13,7 @@ import java.util.List; import org.eclipse.hawkbit.repository.model.AssignmentResult; import org.eclipse.hawkbit.repository.model.Target; +import org.springframework.util.CollectionUtils; /** * A bean which holds a complex result of an service operation to combine the @@ -61,6 +62,10 @@ public class DistributionSetAssignmentResult extends AssignmentResult { @Override public List getAssignedEntity() { + if (CollectionUtils.isEmpty(assignedTargets)) { + return Collections.emptyList(); + } + return targetManagement.findTargetByControllerID(assignedTargets); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index b7da2ff06..14f1838b0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -16,6 +16,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import org.eclipse.hawkbit.repository.DistributionSetAssignmentResult; import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.exception.DistributionSetTypeUndefinedException; import org.eclipse.hawkbit.repository.exception.EntityAlreadyExistsException; @@ -818,6 +819,28 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { .isEqualTo(2); } + @Test + @Description("Test different assignment results, after assign a ds") + public void testAlreadyAssignedTargetsToDs() { + DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); + + // create assigned DS + dsToTargetAssigned = distributionSetManagement.findDistributionSetByNameAndVersion(dsToTargetAssigned.getName(), + dsToTargetAssigned.getVersion()); + final Target target = new JpaTarget("4712"); + final Target savedTarget = targetManagement.createTarget(target); + final List toAssign = new ArrayList<>(); + toAssign.add(savedTarget); + DistributionSetAssignmentResult assignmentResult = deploymentManagement + .assignDistributionSet(dsToTargetAssigned, toAssign); + assertThat(assignmentResult.getAssignedEntity()).hasSize(1); + + assignmentResult = deploymentManagement.assignDistributionSet(dsToTargetAssigned, toAssign); + assertThat(assignmentResult.getAssignedEntity()).hasSize(0); + + assertThat(distributionSetRepository.findAll()).hasSize(1); + } + private Rollout createRolloutByVariables(final String rolloutName, final String rolloutDescription, final int groupSize, final String filterQuery, final DistributionSet distributionSet, final String successCondition, final String errorCondition) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 4e43ea39b..87ce33e39 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -558,6 +558,12 @@ public class TargetTable extends AbstractTable { } final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); + if (targetList.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return; + } + final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName); final List tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index e9d3f6e1e..7ecea2f9c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -158,7 +158,7 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { final TableTransferable tbl = (TableTransferable) event.getTransferable(); final Table source = tbl.getSourceComponent(); if (source.getId().equals(SPUIComponentIdProvider.TARGET_TABLE_ID)) { - processTargetDrop(event); + UI.getCurrent().access(() -> processTargetDrop(event)); } } } @@ -216,11 +216,18 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { private void processTargetDrop(final DragAndDropEvent event) { final com.vaadin.event.dd.TargetDetails targetDetails = event.getTargetDetails(); final TableTransferable transferable = (TableTransferable) event.getTransferable(); + @SuppressWarnings("unchecked") final AbstractTable targetTable = (AbstractTable) transferable .getSourceComponent(); final Set targetSelected = targetTable.getDeletedEntityByTransferable(transferable); + if (targetSelected.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return; + } + final Set targetList = targetSelected.stream().map(t -> t.getControllerId()) .collect(Collectors.toSet()); diff --git a/hawkbit-ui/src/main/resources/messages.properties b/hawkbit-ui/src/main/resources/messages.properties index bb399ddf1..6a68eeff8 100644 --- a/hawkbit-ui/src/main/resources/messages.properties +++ b/hawkbit-ui/src/main/resources/messages.properties @@ -287,6 +287,7 @@ message.forcequit.action.failed = Force Quitting the action is not possible ! message.forcequit.action.confirm = Attention!\nForce quit should only be used when the assignment action is not working properly.\nForce quitting an action has no effect on the connected target. It is just resetting \nthe data stored on the SP update server. \nAre you absolutely sure that you want to force quit this action? message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name diff --git a/hawkbit-ui/src/main/resources/messages_de.properties b/hawkbit-ui/src/main/resources/messages_de.properties index fa62091fd..e46be6b6e 100644 --- a/hawkbit-ui/src/main/resources/messages_de.properties +++ b/hawkbit-ui/src/main/resources/messages_de.properties @@ -284,6 +284,7 @@ message.force.action.confirm = Are you sure that you want to force this action? message.force.action.success = Action forced successfully ! message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name diff --git a/hawkbit-ui/src/main/resources/messages_en.properties b/hawkbit-ui/src/main/resources/messages_en.properties index 65e63c228..4328b83f8 100644 --- a/hawkbit-ui/src/main/resources/messages_en.properties +++ b/hawkbit-ui/src/main/resources/messages_en.properties @@ -282,6 +282,7 @@ message.force.action.confirm = Are you sure that you want to force this action? message.force.action.success = Action forced successfully ! message.distribution.no.update = distribution {0} set is already assigned to targets and cannot be changed message.action.not.allowed = Action not allowed +message.action.did.not.work = Action did not work. Please try again. message.onlyone.distribution.assigned = Only one distribution set can be assigned message.onlyone.distribution.dropallowed = Only one distribution set can be dropped message.error.missing.typename = Missing Type Name From e65849b9225b56e129212407b1a1857a6d6634af Mon Sep 17 00:00:00 2001 From: SirWayne Date: Tue, 16 Aug 2016 13:20:07 +0200 Subject: [PATCH 2/6] Fix some code smells Signed-off-by: SirWayne --- .../jpa/DistributionSetManagementTest.java | 7 +++---- .../management/targettable/TargetTable.java | 3 +-- .../org/eclipse/hawkbit/ui/utils/I18N.java | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 14f1838b0..223196e93 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -820,8 +820,8 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Test different assignment results, after assign a ds") - public void testAlreadyAssignedTargetsToDs() { + @Description("Verfiy that the DistributionSetAssignmentResult not contains already assigned targets.") + public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() { DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); // create assigned DS @@ -829,8 +829,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { dsToTargetAssigned.getVersion()); final Target target = new JpaTarget("4712"); final Target savedTarget = targetManagement.createTarget(target); - final List toAssign = new ArrayList<>(); - toAssign.add(savedTarget); + final List toAssign = Lists.newArrayList(savedTarget); DistributionSetAssignmentResult assignmentResult = deploymentManagement .assignDistributionSet(dsToTargetAssigned, toAssign); assertThat(assignmentResult.getAssignedEntity()).hasSize(1); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java index 87ce33e39..3864ad3a6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettable/TargetTable.java @@ -518,7 +518,6 @@ public class TargetTable extends AbstractTable { * Set style of target table. * */ - @SuppressWarnings("serial") private void styleTargetTable() { setCellStyleGenerator((source, itemId, propertyId) -> null); } @@ -559,7 +558,7 @@ public class TargetTable extends AbstractTable { final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); if (targetList.isEmpty()) { - final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + final String actionDidNotWork = i18n.get("message.action.did.not.work"); notification.displayValidationError(actionDidNotWork); return; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java index cef37085b..ce57a49a5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/I18N.java @@ -66,6 +66,25 @@ public class I18N implements Serializable { * @see #getLocale() */ public String get(final String code, final Object... args) { + return getMessage(code, args); + } + + /** + * Tries to resolve the message. + * + * @param code + * the code to lookup up. + * + * @return the resolved message, or the message code if the lookup fails. + * + * @see MessageSource#getMessage(String, Object[], Locale) + * @see #getLocale() + */ + public String get(final String code) { + return getMessage(code, null); + } + + private String getMessage(final String code, final Object[] args) { try { return source.getMessage(code, args, getLocale()); } catch (final NoSuchMessageException ex) { From ac8fc0603685d6c9b86efb0b06383645329b5811 Mon Sep 17 00:00:00 2001 From: SirWayne Date: Fri, 19 Aug 2016 13:44:49 +0200 Subject: [PATCH 3/6] Validate all drag and drop events Signed-off-by: SirWayne --- .../smtable/SoftwareModuleTable.java | 40 +++--- .../table/AbstractNamedVersionTable.java | 28 ++++ .../ui/common/table/AbstractTable.java | 112 +++++++++++++++- .../dstable/DistributionSetTable.java | 96 ++++++-------- .../distributions/smtable/SwModuleTable.java | 36 ++---- .../management/dstable/DistributionTable.java | 69 +++------- .../management/targettable/TargetTable.java | 120 +++++------------- .../targettag/TargetTagFilterButtons.java | 34 +++-- 8 files changed, 273 insertions(+), 262 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java index 1cfd28718..8233f47ff 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleTable.java @@ -40,7 +40,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.event.dd.DragAndDropEvent; -import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; @@ -66,7 +65,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable getTableVisibleColumns() { final List columnList = super.getTableVisibleColumns(); @@ -215,21 +214,13 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable extends Table { private static final long serialVersionUID = 4856562746502217630L; + protected static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; + @Autowired protected transient EventBus.SessionEventBus eventBus; @Autowired protected I18N i18n; + @Autowired + protected UINotification notification; + /** * Initialize the components. */ @@ -359,12 +371,100 @@ public abstract class AbstractTable extends Table { return DEFAULT_COLUMN_NAME_MIN_SIZE; } - /** - * Get drop handler for the table. - * - * @return reference of {@link DropHandler} - */ - protected abstract DropHandler getTableDropHandler(); + private DropHandler getTableDropHandler() { + return new DropHandler() { + private static final long serialVersionUID = 1L; + + @Override + public AcceptCriterion getAcceptCriterion() { + return getDropAcceptCriterion(); + } + + @Override + public void drop(final DragAndDropEvent event) { + if (!isDropValid(event)) { + return; + } + if (event.getTransferable().getSourceComponent() instanceof Table) { + onDropEventFromTable(event); + } else if (event.getTransferable().getSourceComponent() instanceof DragAndDropWrapper) { + onDropEventFromWrapper(event); + } + } + }; + } + + protected Set getDraggedTargetList(final DragAndDropEvent event) { + final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); + final Table targetTable = (Table) taregtDet.getTarget(); + final Set targetSelected = getTableValue(targetTable); + + final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); + final Object targetItemId = dropData.getItemIdOver(); + + if (!targetSelected.contains(targetItemId)) { + return Sets.newHashSet((I) targetItemId); + } + + return targetSelected; + } + + private Set getDraggedTargetList(final TableTransferable transferable, final Table source) { + @SuppressWarnings("unchecked") + final AbstractTable table = (AbstractTable) source; + return table.getDeletedEntityByTransferable(transferable); + } + + private boolean validateDropList(final Set droplist) { + if (droplist.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return false; + } + return true; + } + + protected boolean isDropValid(final DragAndDropEvent dragEvent) { + final Transferable transferable = dragEvent.getTransferable(); + final Component compsource = transferable.getSourceComponent(); + + if (!hasDropPermission()) { + notification.displayValidationError(i18n.get("message.permission.insufficient")); + return false; + } + + if (compsource instanceof Table) { + return validateTable((Table) compsource) + && validateDropList(getDraggedTargetList((TableTransferable) transferable, (Table) compsource)); + } + + if (compsource instanceof DragAndDropWrapper) { + return validateDragAndDropWrapper((DragAndDropWrapper) compsource) + && validateDropList(getDraggedTargetList(dragEvent)); + } + notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG)); + return false; + } + + private boolean validateTable(final Table compsource) { + if (!compsource.getId().equals(getDropTableId())) { + notification.displayValidationError(ACTION_NOT_ALLOWED_MSG); + return false; + } + return true; + } + + protected abstract boolean hasDropPermission(); + + protected abstract boolean validateDragAndDropWrapper(final DragAndDropWrapper wrapperSource); + + protected abstract void onDropEventFromWrapper(DragAndDropEvent event); + + protected abstract void onDropEventFromTable(DragAndDropEvent event); + + protected abstract String getDropTableId(); + + protected abstract AcceptCriterion getDropAcceptCriterion(); protected abstract void setDataAvailable(boolean available); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java index fc415f4de..49e2b4e0f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributions/dstable/DistributionSetTable.java @@ -45,7 +45,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.TableColumn; -import org.eclipse.hawkbit.ui.utils.UINotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -58,7 +57,6 @@ import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.event.dd.DragAndDropEvent; -import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; @@ -97,15 +95,12 @@ public class DistributionSetTable extends AbstractNamedVersionTable source = (AbstractTable) transferable.getSourceComponent(); @@ -232,6 +214,22 @@ public class DistributionSetTable extends AbstractNamedVersionTable softwareModulesIdList, final Item item) { @@ -334,7 +332,8 @@ public class DistributionSetTable extends AbstractNamedVersionTable showMetadataDetails(((DistributionSetIdName) itemId).getId())); + manageMetaDataBtn + .addClickListener(event -> showMetadataDetails(((DistributionSetIdName) itemId).getId())); return manageMetaDataBtn; } }); } - @Override protected List getTableVisibleColumns() { @@ -515,7 +497,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable { private static final long serialVersionUID = -2300392868806614568L; private static final int PROPERTY_DEPT = 3; - private static final String ACTION_NOT_ALLOWED_MSG = "message.action.not.allowed"; @Autowired private transient TargetManagement targetManagement; @@ -110,9 +107,6 @@ public class TargetTable extends AbstractTable { @Autowired private SpPermissionChecker permChecker; - @Autowired - private UINotification notification; - @Autowired private ManagementViewAcceptCriteria managementViewAcceptCriteria; @@ -307,22 +301,8 @@ public class TargetTable extends AbstractTable { } @Override - protected DropHandler getTableDropHandler() { - return new DropHandler() { - private static final long serialVersionUID = 1L; - - @Override - public AcceptCriterion getAcceptCriterion() { - return managementViewAcceptCriteria; - } - - @Override - public void drop(final DragAndDropEvent event) { - if (doValidations(event)) { - doAssignments(event); - } - } - }; + public AcceptCriterion getDropAcceptCriterion() { + return managementViewAcceptCriteria; } private void onTargetDeletedEvent(final List events) { @@ -522,14 +502,16 @@ public class TargetTable extends AbstractTable { setCellStyleGenerator((source, itemId, propertyId) -> null); } - private void doAssignments(final DragAndDropEvent event) { - if (event.getTransferable().getSourceComponent() instanceof Table) { - dsToTargetAssignment(event); - } else if (event.getTransferable().getSourceComponent() instanceof DragAndDropWrapper - && isNoTagAssigned(event)) { + @Override + protected void onDropEventFromTable(final DragAndDropEvent event) { + dsToTargetAssignment(event); + } + + @Override + protected void onDropEventFromWrapper(final DragAndDropEvent event) { + if (isNoTagAssigned(event)) { tagAssignment(event); } - } private Boolean isNoTagAssigned(final DragAndDropEvent event) { @@ -544,17 +526,9 @@ public class TargetTable extends AbstractTable { } private void tagAssignment(final DragAndDropEvent event) { - final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); - final Table targetTable = (Table) taregtDet.getTarget(); - final Set targetSelected = getTableValue(targetTable); - final Set targetList = new HashSet<>(); - final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); - final Object targetItemId = dropData.getItemIdOver(); - if (!targetSelected.contains(targetItemId)) { - targetList.add(((TargetIdName) targetItemId).getControllerId()); - } else { - targetList.addAll(targetSelected.stream().map(t -> t.getControllerId()).collect(Collectors.toList())); - } + final List targetList = getDraggedTargetList(event).stream() + .map(targetIdName -> targetIdName.getControllerId()).collect(Collectors.toList()); + final String targTagName = HawkbitCommonUtil.removePrefix(event.getTransferable().getSourceComponent().getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); if (targetList.isEmpty()) { @@ -572,52 +546,9 @@ public class TargetTable extends AbstractTable { } } - /** - * Check Validation on Drop. - * - * @param dragEvent - * as drop event - * @return Boolean as flag - */ - private Boolean doValidations(final DragAndDropEvent dragEvent) { - final Component compsource = dragEvent.getTransferable().getSourceComponent(); - if (compsource instanceof Table) { - return validateTable(compsource, (TableTransferable) dragEvent.getTransferable()); - } else if (compsource instanceof DragAndDropWrapper) { - validateDragAndDropWrapper(compsource); - } else { - notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG)); - return false; - } - return true; - } - - private Boolean validateTable(final Component compsource, final TableTransferable transferable) { - final Table source = (Table) compsource; - if (!(source.getId().equals(SPUIComponentIdProvider.DIST_TABLE_ID) - || source.getId().startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS))) { - notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG)); - return false; - } else if (!permChecker.hasUpdateTargetPermission()) { - notification.displayValidationError(i18n.get("message.permission.insufficient")); - return false; - } else if (getDraggedDistributionSet(transferable, source).size() > 1) { - notification.displayValidationError(i18n.get("message.onlyone.distribution.assigned")); - return false; - } - return true; - } - - private static Set getDraggedDistributionSet(final TableTransferable transferable, - final Table source) { - @SuppressWarnings("unchecked") - final AbstractTable distTable = (AbstractTable) source; - return distTable.getDeletedEntityByTransferable(transferable); - } - - private Boolean validateDragAndDropWrapper(final Component compsource) { - final DragAndDropWrapper wrapperSource = (DragAndDropWrapper) compsource; - final String tagName = HawkbitCommonUtil.removePrefix(compsource.getId(), + @Override + protected boolean validateDragAndDropWrapper(final DragAndDropWrapper wrapperSource) { + final String tagName = HawkbitCommonUtil.removePrefix(wrapperSource.getId(), SPUIDefinitions.TARGET_TAG_ID_PREFIXS); if (wrapperSource.getId().startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS)) { if ("NO TAG".equals(tagName)) { @@ -628,19 +559,32 @@ public class TargetTable extends AbstractTable { notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG)); return false; } + return true; } + @Override + protected String getDropTableId() { + return SPUIComponentIdProvider.DIST_TABLE_ID; + } + + @Override + protected boolean hasDropPermission() { + return permChecker.hasUpdateTargetPermission(); + } + private void dsToTargetAssignment(final DragAndDropEvent event) { final TableTransferable transferable = (TableTransferable) event.getTransferable(); - final Table source = transferable.getSourceComponent(); + final AbstractTable source = (AbstractTable) transferable + .getSourceComponent(); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); final Object targetItemId = dropData.getItemIdOver(); LOG.debug("Adding a log to check if targetItemId is null : {} ", targetItemId); if (targetItemId != null) { final TargetIdName targetId = (TargetIdName) targetItemId; String message = null; - for (final DistributionSetIdName distributionNameId : getDraggedDistributionSet(transferable, source)) { + + for (final DistributionSetIdName distributionNameId : source.getDeletedEntityByTransferable(transferable)) { if (null != distributionNameId) { if (managementUIState.getAssignedList().keySet().contains(targetId) && managementUIState.getAssignedList().get(targetId).equals(distributionNameId)) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java index 7ecea2f9c..5c004da85 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/TargetTagFilterButtons.java @@ -41,6 +41,7 @@ import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Item; +import com.vaadin.event.Transferable; import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; @@ -183,18 +184,28 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { * @return Boolean */ private Boolean validate(final DragAndDropEvent event) { - final Component compsource = event.getTransferable().getSourceComponent(); - if (!(compsource instanceof Table)) { - + final Transferable transferable = event.getTransferable(); + final Component compsource = transferable.getSourceComponent(); + if (!(compsource instanceof AbstractTable)) { notification.displayValidationError(i18n.get(SPUILabelDefinitions.ACTION_NOT_ALLOWED)); return false; - } else { - final Table source = ((TableTransferable) event.getTransferable()).getSourceComponent(); - - if (!validateIfSourceisTargetTable(source) && !checkForTargetUpdatePermission()) { - return false; - } } + + final TableTransferable tabletransferable = (TableTransferable) transferable; + + final AbstractTable source = (AbstractTable) tabletransferable.getSourceComponent(); + + if (!validateIfSourceisTargetTable(source) && !checkForTargetUpdatePermission()) { + return false; + } + + final Set deletedEntityByTransferable = source.getDeletedEntityByTransferable(tabletransferable); + if (deletedEntityByTransferable.isEmpty()) { + final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); + notification.displayValidationError(actionDidNotWork); + return false; + } + return true; } @@ -222,11 +233,6 @@ public class TargetTagFilterButtons extends AbstractFilterButtons { .getSourceComponent(); final Set targetSelected = targetTable.getDeletedEntityByTransferable(transferable); - if (targetSelected.isEmpty()) { - final String actionDidNotWork = i18n.get("message.action.did.not.work", new Object[] {}); - notification.displayValidationError(actionDidNotWork); - return; - } final Set targetList = targetSelected.stream().map(t -> t.getControllerId()) .collect(Collectors.toSet()); From 4e292d48b784d26ecf29acb274435280990c2f90 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 22 Aug 2016 14:57:46 +0200 Subject: [PATCH 4/6] Fix typo Signed-off-by: Melanie Retter --- .../repository/jpa/DistributionSetManagementTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java index 223196e93..b5ba12946 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/DistributionSetManagementTest.java @@ -198,7 +198,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Verfies that a DS is of default type if not specified explicitly at creation time.") + @Description("Verifies that a DS is of default type if not specified explicitly at creation time.") public void createDistributionSetWithImplicitType() { final DistributionSet set = distributionSetManagement .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", null, null)); @@ -209,7 +209,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Verfies that multiple DS are of default type if not specified explicitly at creation time.") + @Description("Verifies that multiple DS are of default type if not specified explicitly at creation time.") public void createMultipleDistributionSetsWithImplicitType() { List sets = new ArrayList<>(); @@ -229,7 +229,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Verfies that a DS entity cannot be used for creation.") + @Description("Verifies that a DS entity cannot be used for creation.") public void createDistributionSetFailsOnExistingEntity() { final DistributionSet set = distributionSetManagement .createDistributionSet(new JpaDistributionSet("newtypesoft", "1", "", null, null)); @@ -820,7 +820,7 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest { } @Test - @Description("Verfiy that the DistributionSetAssignmentResult not contains already assigned targets.") + @Description("Verify that the DistributionSetAssignmentResult not contains already assigned targets.") public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() { DistributionSet dsToTargetAssigned = testdataFactory.createDistributionSet("ds-3"); From 75a404c95fac77a1436812c02b7519e5fad9a3b4 Mon Sep 17 00:00:00 2001 From: Melanie Retter Date: Mon, 22 Aug 2016 15:00:21 +0200 Subject: [PATCH 5/6] Fix typo Signed-off-by: Melanie Retter --- .../org/eclipse/hawkbit/ui/common/table/AbstractTable.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java index 0ea74b16c..fc560c2fa 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/table/AbstractTable.java @@ -395,8 +395,8 @@ public abstract class AbstractTable extends Table { } protected Set getDraggedTargetList(final DragAndDropEvent event) { - final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails(); - final Table targetTable = (Table) taregtDet.getTarget(); + final com.vaadin.event.dd.TargetDetails targetDet = event.getTargetDetails(); + final Table targetTable = (Table) targetDet.getTarget(); final Set targetSelected = getTableValue(targetTable); final AbstractSelectTargetDetails dropData = (AbstractSelectTargetDetails) event.getTargetDetails(); From f779b3aba77a9b24b18301792d8092ac892ee7b1 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 26 Aug 2016 09:15:08 +0200 Subject: [PATCH 6/6] removed unneeded override Signed-off-by: Kai Zimmermann --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0f4270afc..e952f15bd 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,6 @@ - 1.2.0.RELEASE 1.6.1.RELEASE 4.1.2.RELEASE