Merge branch 'feature_boot_13_sec_41' of https://github.com/bsinno/hawkbit.git into feature_boot_13_sec_41

This commit is contained in:
Kai Zimmermann
2016-08-26 10:59:06 +02:00
14 changed files with 317 additions and 242 deletions

View File

@@ -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<Target> {
@Override
public List<Target> getAssignedEntity() {
if (CollectionUtils.isEmpty(assignedTargets)) {
return Collections.emptyList();
}
return targetManagement.findTargetByControllerID(assignedTargets);
}

View File

@@ -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;
@@ -197,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));
@@ -208,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<DistributionSet> sets = new ArrayList<>();
@@ -228,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));
@@ -818,6 +819,27 @@ public class DistributionSetManagementTest extends AbstractJpaIntegrationTest {
.isEqualTo(2);
}
@Test
@Description("Verify that the DistributionSetAssignmentResult not contains already assigned targets.")
public void verifyDistributionSetAssignmentResultNotContainsAlreadyAssignedTargets() {
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<Target> toAssign = Lists.newArrayList(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) {

View File

@@ -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;
@@ -215,21 +214,13 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
}
@Override
protected DropHandler getTableDropHandler() {
return new DropHandler() {
protected AcceptCriterion getDropAcceptCriterion() {
return uploadViewAcceptCriteria;
}
private static final long serialVersionUID = 1L;
@Override
public AcceptCriterion getAcceptCriterion() {
return uploadViewAcceptCriteria;
}
@Override
public void drop(final DragAndDropEvent event) {
/* Not required */
}
};
@Override
protected boolean isDropValid(final DragAndDropEvent dragEvent) {
return false;
}
@Override

View File

@@ -15,6 +15,8 @@ import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
import org.eclipse.hawkbit.ui.utils.TableColumn;
import com.vaadin.data.Item;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.ui.DragAndDropWrapper;
/**
* Abstract table to handling {@link NamedVersionedEntity}
@@ -54,4 +56,30 @@ public abstract class AbstractNamedVersionTable<E extends NamedVersionedEntity,
item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).setValue(baseEntity.getVersion());
}
@Override
protected void onDropEventFromTable(final DragAndDropEvent event) {
// subclass can implement
}
@Override
protected void onDropEventFromWrapper(final DragAndDropEvent event) {
// subclass can implement
}
@Override
protected boolean hasDropPermission() {
return true;
}
@Override
protected String getDropTableId() {
return null;
}
@Override
protected boolean validateDragAndDropWrapper(final DragAndDropWrapper wrapperSource) {
return false;
}
}

View File

@@ -26,13 +26,20 @@ import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
import org.eclipse.hawkbit.ui.utils.TableColumn;
import org.eclipse.hawkbit.ui.utils.UINotification;
import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.spring.events.EventBus;
import com.google.gwt.thirdparty.guava.common.collect.Iterables;
import com.google.gwt.thirdparty.guava.common.collect.Sets;
import com.vaadin.data.Container;
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;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
@@ -51,12 +58,17 @@ public abstract class AbstractTable<E extends NamedEntity, I> 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<E extends NamedEntity, I> 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<I> getDraggedTargetList(final DragAndDropEvent event) {
final com.vaadin.event.dd.TargetDetails targetDet = event.getTargetDetails();
final Table targetTable = (Table) targetDet.getTarget();
final Set<I> 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<Object> getDraggedTargetList(final TableTransferable transferable, final Table source) {
@SuppressWarnings("unchecked")
final AbstractTable<NamedEntity, Object> table = (AbstractTable<NamedEntity, Object>) 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);

View File

@@ -48,7 +48,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;
@@ -61,7 +60,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;
@@ -100,9 +98,6 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
@Autowired
private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria;
@Autowired
private UINotification notification;
@Autowired
private transient TargetManagement targetManagement;
@@ -231,25 +226,12 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
}
@Override
protected DropHandler getTableDropHandler() {
return new DropHandler() {
private static final long serialVersionUID = 1L;
@Override
public AcceptCriterion getAcceptCriterion() {
return distributionsViewAcceptCriteria;
}
@Override
public void drop(final DragAndDropEvent event) {
if (doValidation(event)) {
onDrop(event);
}
}
};
public AcceptCriterion getDropAcceptCriterion() {
return distributionsViewAcceptCriteria;
}
private void onDrop(final DragAndDropEvent event) {
@Override
protected void onDropEventFromTable(final DragAndDropEvent event) {
final TableTransferable transferable = (TableTransferable) event.getTransferable();
@SuppressWarnings("unchecked")
final AbstractTable<?, Long> source = (AbstractTable<SoftwareModule, Long>) transferable.getSourceComponent();
@@ -262,6 +244,22 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
if (item != null && item.getItemProperty("id") != null && item.getItemProperty("name") != null) {
handleDropEvent(source, softwareModulesIdList, item);
}
}
@Override
protected void onDropEventFromWrapper(final DragAndDropEvent event) {
// nothing to do
}
@Override
protected boolean isDropValid(final DragAndDropEvent dragEvent) {
final Component compsource = dragEvent.getTransferable().getSourceComponent();
if (!(compsource instanceof Table)) {
notification.displayValidationError(i18n.get(ACTION_NOT_ALLOWED_MSG));
return false;
}
return super.isDropValid(dragEvent);
}
private void handleDropEvent(final Table source, final Set<Long> softwareModulesIdList, final Item item) {
@@ -364,7 +362,8 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
}
if (distributionSetManagement.isDistributionSetInUse(ds)) {
notification.displayValidationError(i18n.get("message.error.notification.ds.target.assigned", ds.getName(), ds.getVersion()));
notification.displayValidationError(
i18n.get("message.error.notification.ds.target.assigned", ds.getName(), ds.getVersion()));
return false;
}
return true;
@@ -415,31 +414,14 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
return true;
}
/**
* Validate event.
*
* @param dragEvent
* as event
* @return boolean as flag
*/
private Boolean doValidation(final DragAndDropEvent dragEvent) {
if (!permissionChecker.hasUpdateDistributionPermission()) {
notification.displayValidationError(i18n.get("message.permission.insufficient"));
return false;
} else {
final Component compsource = dragEvent.getTransferable().getSourceComponent();
final Table source = (Table) compsource;
if (compsource instanceof Table) {
if (!source.getId().equals(SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE)) {
notification.displayValidationError(i18n.get("message.action.not.allowed"));
return false;
}
} else {
notification.displayValidationError(i18n.get("message.action.not.allowed"));
return false;
}
}
return true;
@Override
protected String getDropTableId() {
return SPUIComponentIdProvider.UPLOAD_SOFTWARE_MODULE_TABLE;
}
@Override
protected boolean hasDropPermission() {
return permissionChecker.hasUpdateDistributionPermission();
}
private void addTableStyleGenerator() {
@@ -550,7 +532,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
private void showMetadataDetails(final Long itemId) {
final DistributionSet ds = distributionSetManagement.findDistributionSetByIdWithDetails(itemId);
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(ds,null));
UI.getCurrent().addWindow(dsMetadataPopupLayout.getWindow(ds, null));
}
private String getNameAndVerion(final Object itemId) {

View File

@@ -43,7 +43,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.server.Page;
@@ -78,7 +77,7 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
@Autowired
private ArtifactDetailsLayout artifactDetailsLayout;
@Autowired
private SwMetadataPopupLayout swMetadataPopupLayout;
@@ -180,9 +179,10 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
addGeneratedColumn(SPUILabelDefinitions.ARTIFACT_ICON, new ColumnGenerator() {
private static final long serialVersionUID = -5982361782989980277L;
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
HorizontalLayout iconLayout = new HorizontalLayout();
final HorizontalLayout iconLayout = new HorizontalLayout();
// add artifactory details popup
final String nameVersionStr = getNameAndVerion(itemId);
final Button showArtifactDtlsBtn = createShowArtifactDtlsButton(nameVersionStr);
@@ -214,7 +214,7 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
@Override
protected void publishEntityAfterValueChange(final SoftwareModule selectedLastEntity) {
eventBus.publish(this, new SoftwareModuleEvent(BaseEntityEventType.SELECTED_ENTITY, selectedLastEntity));
if(selectedLastEntity!=null){
if (selectedLastEntity != null) {
manageDistUIState.setSelectedBaseSwModuleId(selectedLastEntity.getId());
}
}
@@ -252,21 +252,13 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
}
@Override
protected DropHandler getTableDropHandler() {
return new DropHandler() {
protected AcceptCriterion getDropAcceptCriterion() {
return distributionsViewAcceptCriteria;
}
private static final long serialVersionUID = -6175865860867652573L;
@Override
public AcceptCriterion getAcceptCriterion() {
return distributionsViewAcceptCriteria;
}
@Override
public void drop(final DragAndDropEvent event) {
/* sw module dont accept drops */
}
};
@Override
protected boolean isDropValid(final DragAndDropEvent dragEvent) {
return false;
}
/* All Private Methods */
@@ -326,7 +318,7 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
return showArtifactDtlsBtn;
}
private Button createManageMetadataButton(String nameVersionStr) {
private Button createManageMetadataButton(final String nameVersionStr) {
final Button manageMetadataBtn = SPUIComponentProvider.getButton(
SPUIComponentIdProvider.SW_TABLE_MANAGE_METADATA_ID + "." + nameVersionStr, "", "", null, false,
FontAwesome.LIST_ALT, SPUIButtonStyleSmallNoBorder.class);
@@ -407,9 +399,9 @@ public class SwModuleTable extends AbstractNamedVersionTable<SoftwareModule, Lon
}
private void showMetadataDetails(Long itemId) {
SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule,null));
private void showMetadataDetails(final Long itemId) {
final SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule, null));
}
}

View File

@@ -60,14 +60,12 @@ 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;
import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
@@ -356,36 +354,23 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
}
@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 (doValidation(event)) {
if (event.getTransferable().getSourceComponent() instanceof Table) {
assignTargetToDs(event);
} else if (event.getTransferable().getSourceComponent() instanceof DragAndDropWrapper) {
processWrapperDrop(event);
}
}
}
};
public AcceptCriterion getDropAcceptCriterion() {
return managementViewAcceptCriteria;
}
private void processWrapperDrop(final DragAndDropEvent event) {
@Override
protected void onDropEventFromTable(final DragAndDropEvent event) {
assignTargetToDs(event);
}
@Override
protected void onDropEventFromWrapper(final DragAndDropEvent event) {
if (event.getTransferable().getSourceComponent().getId()
.startsWith(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS)) {
assignDsTag(event);
} else {
assignTargetTag(event);
}
}
private void assignDsTag(final DragAndDropEvent event) {
@@ -458,42 +443,26 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
}
}
private Boolean doValidation(final DragAndDropEvent dragEvent) {
final Component compsource = dragEvent.getTransferable().getSourceComponent();
if (compsource instanceof Table) {
return validateTable(compsource);
} else if (compsource instanceof DragAndDropWrapper) {
return validateDragAndDropWrapper(compsource);
} else {
notification.displayValidationError(notAllowedMsg);
return false;
}
@Override
protected boolean hasDropPermission() {
return permissionChecker.hasUpdateTargetPermission();
}
private Boolean validateTable(final Component compsource) {
if (!permissionChecker.hasUpdateTargetPermission()) {
notification.displayValidationError(i18n.get("message.permission.insufficient"));
return false;
} else {
if (compsource instanceof Table && !compsource.getId().equals(SPUIComponentIdProvider.TARGET_TABLE_ID)) {
notification.displayValidationError(notAllowedMsg);
return false;
}
}
return true;
@Override
protected String getDropTableId() {
return SPUIComponentIdProvider.TARGET_TABLE_ID;
}
private Boolean validateDragAndDropWrapper(final Component compsource) {
final DragAndDropWrapper wrapperSource = (DragAndDropWrapper) compsource;
@Override
protected boolean validateDragAndDropWrapper(final DragAndDropWrapper wrapperSource) {
final String tagData = wrapperSource.getData().toString();
if (wrapperSource.getId().startsWith(SPUIDefinitions.DISTRIBUTION_TAG_ID_PREFIXS)) {
return !isNoTagButton(tagData, SPUIDefinitions.DISTRIBUTION_TAG_BUTTON);
} else if (wrapperSource.getId().startsWith(SPUIDefinitions.TARGET_TAG_ID_PREFIXS)) {
return !isNoTagButton(tagData, SPUIDefinitions.TARGET_TAG_BUTTON);
} else {
notification.displayValidationError(notAllowedMsg);
return false;
}
notification.displayValidationError(notAllowedMsg);
return false;
}
private Boolean isNoTagButton(final String tagData, final String targetNoTagData) {

View File

@@ -32,6 +32,7 @@ import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent;
import org.eclipse.hawkbit.repository.eventbus.event.TargetDeletedEvent;
import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent;
import org.eclipse.hawkbit.repository.eventbus.event.TargetUpdatedEvent;
import org.eclipse.hawkbit.repository.model.NamedEntity;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetIdName;
import org.eclipse.hawkbit.repository.model.TargetInfo;
@@ -67,7 +68,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;
@@ -81,7 +81,6 @@ import com.google.common.base.Strings;
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.shared.ui.label.ContentMode;
@@ -89,7 +88,6 @@ import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
@@ -109,7 +107,6 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
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;
@@ -120,9 +117,6 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
@Autowired
private SpPermissionChecker permChecker;
@Autowired
private UINotification notification;
@Autowired
private ManagementViewAcceptCriteria managementViewAcceptCriteria;
@@ -309,22 +303,8 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
}
@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<TargetDeletedEvent> events) {
@@ -516,11 +496,14 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
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);
}
}
@@ -537,19 +520,17 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
}
private void tagAssignment(final DragAndDropEvent event) {
final com.vaadin.event.dd.TargetDetails taregtDet = event.getTargetDetails();
final Table targetTable = (Table) taregtDet.getTarget();
final Set<TargetIdName> targetSelected = getTableValue(targetTable);
final Set<String> 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<String> 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()) {
final String actionDidNotWork = i18n.get("message.action.did.not.work");
notification.displayValidationError(actionDidNotWork);
return;
}
final TargetTagAssignmentResult result = targetManagement.toggleTagAssignment(targetList, targTagName);
final List<String> tagsClickedList = managementUIState.getTargetTableFilters().getClickedTargetTags();
@@ -559,52 +540,9 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
}
}
/**
* 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<DistributionSetIdName> getDraggedDistributionSet(final TableTransferable transferable,
final Table source) {
@SuppressWarnings("unchecked")
final AbstractTable<?, DistributionSetIdName> distTable = (AbstractTable<?, DistributionSetIdName>) 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)) {
@@ -615,19 +553,32 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
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<NamedEntity, DistributionSetIdName> source = (AbstractTable<NamedEntity, DistributionSetIdName>) 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)) {

View File

@@ -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;
@@ -158,7 +159,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));
}
}
}
@@ -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;
}
@@ -216,11 +227,13 @@ 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<?, TargetIdName> targetTable = (AbstractTable<?, TargetIdName>) transferable
.getSourceComponent();
final Set<TargetIdName> targetSelected = targetTable.getDeletedEntityByTransferable(transferable);
final Set<String> targetList = targetSelected.stream().map(t -> t.getControllerId())
.collect(Collectors.toSet());

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -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