Validate all drag and drop events

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>
This commit is contained in:
SirWayne
2016-08-19 13:44:49 +02:00
parent e65849b922
commit ac8fc06036
8 changed files with 273 additions and 262 deletions

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;
@@ -66,7 +65,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
@Autowired
private UploadViewAcceptCriteria uploadViewAcceptCriteria;
@Autowired
private SwMetadataPopupLayout swMetadataPopupLayout;
@@ -202,7 +201,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
}
});
}
@Override
protected List<TableColumn> getTableVisibleColumns() {
final List<TableColumn> columnList = super.getTableVisibleColumns();
@@ -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
@@ -237,8 +228,7 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
artifactUploadState.setNoDataAvilableSoftwareModule(!available);
}
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);
@@ -246,17 +236,17 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
manageMetadataBtn.setDescription(i18n.get("tooltip.metadata.icon"));
return manageMetadataBtn;
}
private String getNameAndVerion(final Object itemId) {
final Item item = getItem(itemId);
final String name = (String) item.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue();
final String version = (String) item.getItemProperty(SPUILabelDefinitions.VAR_VERSION).getValue();
return name + "." + version;
}
private void showMetadataDetails(Long itemId, String nameVersionStr) {
SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
/* display the window */
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule,null));
private void showMetadataDetails(final Long itemId, final String nameVersionStr) {
final SoftwareModule swmodule = softwareManagement.findSoftwareModuleWithDetails(itemId);
/* display the window */
UI.getCurrent().addWindow(swMetadataPopupLayout.getWindow(swmodule, null));
}
}

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 taregtDet = event.getTargetDetails();
final Table targetTable = (Table) taregtDet.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

@@ -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<Distribution
@Autowired
private DistributionsViewAcceptCriteria distributionsViewAcceptCriteria;
@Autowired
private UINotification notification;
@Autowired
private transient TargetManagement targetManagement;
@Autowired
private DsMetadataPopupLayout dsMetadataPopupLayout;
/**
* Initialize the component.
*/
@@ -189,10 +184,10 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
protected void publishEntityAfterValueChange(final DistributionSet distributionSet) {
eventBus.publish(this, new DistributionTableEvent(BaseEntityEventType.SELECTED_ENTITY, distributionSet));
eventBus.publish(this, DistributionsUIEvent.ORDER_BY_DISTRIBUTION);
if(distributionSet!=null){
manageDistUIState.setLastSelectedEntity(new DistributionSetIdName(distributionSet.getId(),
distributionSet.getName(),distributionSet.getVersion()));
}
if (distributionSet != null) {
manageDistUIState.setLastSelectedEntity(new DistributionSetIdName(distributionSet.getId(),
distributionSet.getName(), distributionSet.getVersion()));
}
}
@Override
@@ -201,25 +196,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();
@@ -232,6 +214,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) {
@@ -334,7 +332,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;
@@ -385,31 +384,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() {
@@ -478,7 +460,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
protected void setDataAvailable(final boolean available) {
manageDistUIState.setNoDataAvailableDist(!available);
}
@Override
protected void addCustomGeneratedColumns() {
addGeneratedColumn(SPUILabelDefinitions.METADATA_ICON, new ColumnGenerator() {
@@ -488,12 +470,12 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
final String nameVersionStr = getNameAndVerion(itemId);
final Button manageMetaDataBtn = createManageMetadataButton(nameVersionStr);
manageMetaDataBtn.addClickListener(event -> showMetadataDetails(((DistributionSetIdName) itemId).getId()));
manageMetaDataBtn
.addClickListener(event -> showMetadataDetails(((DistributionSetIdName) itemId).getId()));
return manageMetaDataBtn;
}
});
}
@Override
protected List<TableColumn> getTableVisibleColumns() {
@@ -515,7 +497,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

@@ -56,14 +56,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;
@@ -308,36 +306,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) {
@@ -410,42 +395,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

@@ -22,6 +22,7 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker;
import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent;
import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent;
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;
@@ -57,7 +58,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;
@@ -71,7 +71,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;
@@ -79,7 +78,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;
@@ -99,7 +97,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;
@@ -110,9 +107,6 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
@Autowired
private SpPermissionChecker permChecker;
@Autowired
private UINotification notification;
@Autowired
private ManagementViewAcceptCriteria managementViewAcceptCriteria;
@@ -307,22 +301,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) {
@@ -522,14 +502,16 @@ 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);
}
}
private Boolean isNoTagAssigned(final DragAndDropEvent event) {
@@ -544,17 +526,9 @@ 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()) {
@@ -572,52 +546,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)) {
@@ -628,19 +559,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;
@@ -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<TargetIdName> 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<String> targetList = targetSelected.stream().map(t -> t.getControllerId())
.collect(Collectors.toSet());