Merge pull request #207 from bsinno/fix_Consitent_table_muliselect

Select all table entries with "CTRL+A"
This commit is contained in:
Kai Zimmermann
2016-06-22 17:07:37 +02:00
committed by GitHub
23 changed files with 134 additions and 208 deletions

View File

@@ -12,17 +12,11 @@ import org.eclipse.hawkbit.repository.model.SoftwareModuleType;
/** /**
* Event to represent software module type add, update or delete. * Event to represent software module type add, update or delete.
*
*
*
*/ */
public class SoftwareModuleTypeEvent { public class SoftwareModuleTypeEvent {
/** /**
* Software module type events in the Upload UI. * Software module type events in the Upload UI.
*
*
*
*/ */
public enum SoftwareModuleTypeEnum { public enum SoftwareModuleTypeEnum {
ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE ADD_SOFTWARE_MODULE_TYPE, DELETE_SOFTWARE_MODULE_TYPE, UPDATE_SOFTWARE_MODULE_TYPE

View File

@@ -211,4 +211,5 @@ public class SoftwareModuleTable extends AbstractNamedVersionTable<SoftwareModul
protected void setDataAvailable(final boolean available) { protected void setDataAvailable(final boolean available) {
artifactUploadState.setNoDataAvilableSoftwareModule(!available); artifactUploadState.setNoDataAvilableSoftwareModule(!available);
} }
} }

View File

@@ -17,10 +17,7 @@ import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
/** /**
* Software module table layout. * Software module table layout. (Upload Management)
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -44,4 +41,5 @@ public class SoftwareModuleTableLayout extends AbstractTableLayout {
void init() { void init() {
super.init(smTableHeader, smTable, softwareModuleDetails); super.init(smTableHeader, smTable, softwareModuleDetails);
} }
} }

View File

@@ -34,10 +34,6 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Parent class for filter button layout. * Parent class for filter button layout.
*
*
*
*
*/ */
public abstract class AbstractFilterButtons extends Table { public abstract class AbstractFilterButtons extends Table {

View File

@@ -28,6 +28,16 @@ public abstract class AbstractNamedVersionTable<E extends NamedVersionedEntity,
private static final long serialVersionUID = 780050712209750719L; private static final long serialVersionUID = 780050712209750719L;
/**
* Initialize the component.
*/
@Override
protected void init() {
super.init();
setMultiSelect(true);
setSelectable(true);
}
@Override @Override
protected List<TableColumn> getTableVisibleColumns() { protected List<TableColumn> getTableVisibleColumns() {
final List<TableColumn> columnList = super.getTableVisibleColumns(); final List<TableColumn> columnList = super.getTableVisibleColumns();

View File

@@ -153,6 +153,16 @@ public abstract class AbstractTable<E extends NamedEntity, I> extends Table {
} }
} }
/**
* Select all rows in the table.
*/
protected void selectAll() {
if (isMultiSelect()) {
// only contains the ItemIds of the visible items in the table
setValue(getItemIds());
}
}
private void setColumnProperties() { private void setColumnProperties() {
final List<TableColumn> columnList = getTableVisibleColumns(); final List<TableColumn> columnList = getTableVisibleColumns();
final List<Object> swColumnIds = new ArrayList<>(); final List<Object> swColumnIds = new ArrayList<>();

View File

@@ -36,10 +36,6 @@ import com.vaadin.ui.VerticalLayout;
/** /**
* Parent class for table header. * Parent class for table header.
*
*
*
*
*/ */
public abstract class AbstractTableHeader extends VerticalLayout { public abstract class AbstractTableHeader extends VerticalLayout {

View File

@@ -9,8 +9,11 @@
package org.eclipse.hawkbit.ui.common.table; package org.eclipse.hawkbit.ui.common.table;
import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout; import org.eclipse.hawkbit.ui.common.detailslayout.AbstractTableDetailsLayout;
import org.eclipse.hawkbit.ui.utils.ShortCutModifierUtils;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler; import com.vaadin.event.Action.Handler;
import com.vaadin.event.ShortcutAction;
import com.vaadin.ui.Alignment; import com.vaadin.ui.Alignment;
import com.vaadin.ui.Panel; import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
@@ -18,23 +21,19 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Parent class for table layout. * Parent class for table layout.
*
*
*
*
*/ */
public abstract class AbstractTableLayout extends VerticalLayout { public abstract class AbstractTableLayout extends VerticalLayout {
private static final long serialVersionUID = 8611248179949245460L; private static final long serialVersionUID = 1L;
private AbstractTableHeader tableHeader; private AbstractTableHeader tableHeader;
private AbstractTable table; private AbstractTable<?, ?> table;
private AbstractTableDetailsLayout detailsLayout; private AbstractTableDetailsLayout<?> detailsLayout;
protected void init(final AbstractTableHeader tableHeader, final AbstractTable table, protected void init(final AbstractTableHeader tableHeader, final AbstractTable<?, ?> table,
final AbstractTableDetailsLayout detailsLayout) { final AbstractTableDetailsLayout<?> detailsLayout) {
this.tableHeader = tableHeader; this.tableHeader = tableHeader;
this.table = table; this.table = table;
this.detailsLayout = detailsLayout; this.detailsLayout = detailsLayout;
@@ -58,33 +57,33 @@ public abstract class AbstractTableLayout extends VerticalLayout {
if (isShortCutKeysRequired()) { if (isShortCutKeysRequired()) {
final Panel tablePanel = new Panel(); final Panel tablePanel = new Panel();
tablePanel.setStyleName("table-panel"); tablePanel.setStyleName("table-panel");
tablePanel.setHeight(100.0f, Unit.PERCENTAGE); tablePanel.setHeight(100.0F, Unit.PERCENTAGE);
tablePanel.setContent(table); tablePanel.setContent(table);
tablePanel.addActionHandler(getShortCutKeysHandler()); tablePanel.addActionHandler(getShortCutKeysHandler());
tablePanel.addStyleName(ValoTheme.PANEL_BORDERLESS); tablePanel.addStyleName(ValoTheme.PANEL_BORDERLESS);
tableHeaderLayout.addComponent(tablePanel); tableHeaderLayout.addComponent(tablePanel);
tableHeaderLayout.setComponentAlignment(tablePanel, Alignment.TOP_CENTER); tableHeaderLayout.setComponentAlignment(tablePanel, Alignment.TOP_CENTER);
tableHeaderLayout.setExpandRatio(tablePanel, 1.0f); tableHeaderLayout.setExpandRatio(tablePanel, 1.0F);
} else { } else {
tableHeaderLayout.addComponent(table); tableHeaderLayout.addComponent(table);
tableHeaderLayout.setComponentAlignment(table, Alignment.TOP_CENTER); tableHeaderLayout.setComponentAlignment(table, Alignment.TOP_CENTER);
tableHeaderLayout.setExpandRatio(table, 1.0f); tableHeaderLayout.setExpandRatio(table, 1.0F);
} }
addComponent(tableHeaderLayout); addComponent(tableHeaderLayout);
addComponent(detailsLayout); addComponent(detailsLayout);
setComponentAlignment(tableHeaderLayout, Alignment.TOP_CENTER); setComponentAlignment(tableHeaderLayout, Alignment.TOP_CENTER);
setComponentAlignment(detailsLayout, Alignment.TOP_CENTER); setComponentAlignment(detailsLayout, Alignment.TOP_CENTER);
setExpandRatio(tableHeaderLayout, 1.0f); setExpandRatio(tableHeaderLayout, 1.0F);
} }
/** /**
* If any short cut keys required on the table. * If any short cut keys required on the table.
* *
* @return true if required else false. Default is 'false'. * @return true if required else false. Default is 'true'.
*/ */
protected boolean isShortCutKeysRequired() { protected boolean isShortCutKeysRequired() {
return false; return true;
} }
/** /**
@@ -94,11 +93,38 @@ public abstract class AbstractTableLayout extends VerticalLayout {
* Default is null. * Default is null.
*/ */
protected Handler getShortCutKeysHandler() { protected Handler getShortCutKeysHandler() {
return null; return new TableShortCutHandler();
}
protected void publishEvent() {
// can be override by subclasses
} }
public void setShowFilterButtonVisible(final boolean visible) { public void setShowFilterButtonVisible(final boolean visible) {
tableHeader.setFilterButtonsIconVisible(visible); tableHeader.setFilterButtonsIconVisible(visible);
} }
private class TableShortCutHandler implements Handler {
private static final String SELECT_ALL_TEXT = "Select All";
private final ShortcutAction selectAllAction = new ShortcutAction(SELECT_ALL_TEXT, ShortcutAction.KeyCode.A,
new int[] { ShortCutModifierUtils.getCtrlOrMetaModifier() });
private static final long serialVersionUID = 1L;
@Override
public void handleAction(final Action action, final Object sender, final Object target) {
if (!selectAllAction.equals(action)) {
return;
}
table.selectAll();
publishEvent();
}
@Override
public Action[] getActions(final Object target, final Object sender) {
return new Action[] { selectAllAction };
}
}
} }

View File

@@ -31,9 +31,6 @@ import com.vaadin.spring.annotation.ViewScope;
/** /**
* Distribution Set Type filter buttons. * Distribution Set Type filter buttons.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope

View File

@@ -65,7 +65,6 @@ import com.vaadin.ui.UI;
/** /**
* Distribution set table. * Distribution set table.
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -468,7 +467,6 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
@Override @Override
protected void setDataAvailable(final boolean available) { protected void setDataAvailable(final boolean available) {
manageDistUIState.setNoDataAvailableDist(!available); manageDistUIState.setNoDataAvailableDist(!available);
} }
} }

View File

@@ -17,16 +17,14 @@ import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
/** /**
* Software module table layout. * DistributionSet table layout
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
public class DistributionSetTableLayout extends AbstractTableLayout { public class DistributionSetTableLayout extends AbstractTableLayout {
private static final long serialVersionUID = 6464291374980641235L; private static final long serialVersionUID = 6464291374980641235L;
/** /**
* Details to be autowired before table as details listens to value change * Details to be autowired before table as details listens to value change
* of table. * of table.

View File

@@ -11,16 +11,12 @@ package org.eclipse.hawkbit.ui.distributions.event;
import org.eclipse.hawkbit.repository.model.DistributionSetType; import org.eclipse.hawkbit.repository.model.DistributionSetType;
/** /**
* * DistributionSetTypeEvent
*
*/ */
public class DistributionSetTypeEvent { public class DistributionSetTypeEvent {
/** /**
* DistributionSet type events in the Distribution UI. * DistributionSet type events in the Distribution UI.
*
*
*
*/ */
public enum DistributionSetTypeEnum { public enum DistributionSetTypeEnum {
ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE ADD_DIST_SET_TYPE, DELETE_DIST_SET_TYPE, UPDATE_DIST_SET_TYPE, ON_VALUE_CHANGE

View File

@@ -17,10 +17,7 @@ import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
/** /**
* Implementation of software module Layout . * Implementation of software module Layout
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope

View File

@@ -638,9 +638,9 @@ public class DistributionTable extends AbstractNamedVersionTable<DistributionSet
/** /**
* Added by Saumya Target pin listener. * Added by Saumya Target pin listener.
* *
* @param installedDistItemIds * @param installedDistItemId
* Item ids of installed distribution set * Item ids of installed distribution set
* @param assignedDistTableItemIds * @param assignedDistTableItemId
* Item ids of assigned distribution set * Item ids of assigned distribution set
*/ */
public void styleDistributionSetTable(final Long installedDistItemId, final Long assignedDistTableItemId) { public void styleDistributionSetTable(final Long installedDistItemId, final Long assignedDistTableItemId) {

View File

@@ -18,9 +18,6 @@ import com.vaadin.spring.annotation.ViewScope;
/** /**
* Software module table layout. * Software module table layout.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope

View File

@@ -13,9 +13,8 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent;
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
/** /**
* * Class which contains the Event when selecting all entries of the
* * distributions table
*
*/ */
public class DistributionTableEvent extends BaseEntityEvent<DistributionSet> { public class DistributionTableEvent extends BaseEntityEvent<DistributionSet> {

View File

@@ -13,9 +13,7 @@ import org.eclipse.hawkbit.ui.common.table.BaseEntityEvent;
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType; import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
/** /**
* * Class which contains the Event when selecting all entries of the target table
*
*
*/ */
public class TargetTableEvent extends BaseEntityEvent<Target> { public class TargetTableEvent extends BaseEntityEvent<Target> {
@@ -24,7 +22,7 @@ public class TargetTableEvent extends BaseEntityEvent<Target> {
* *
*/ */
public enum TargetComponentEvent { public enum TargetComponentEvent {
REFRESH_TARGETS, SELLECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED REFRESH_TARGETS, SELECT_ALL, BULK_TARGET_CREATED, BULK_UPLOAD_COMPLETED, BULK_TARGET_UPLOAD_STARTED, BULK_UPLOAD_PROCESS_STARTED
} }
private TargetComponentEvent targetComponentEvent; private TargetComponentEvent targetComponentEvent;

View File

@@ -95,7 +95,7 @@ public class CountMessageLabel extends Label {
@EventBusListenerMethod(scope = EventScope.SESSION) @EventBusListenerMethod(scope = EventScope.SESSION)
void onEvent(final TargetTableEvent event) { void onEvent(final TargetTableEvent event) {
if (TargetTableEvent.TargetComponentEvent.SELLECT_ALL == event.getTargetComponentEvent() if (TargetTableEvent.TargetComponentEvent.SELECT_ALL == event.getTargetComponentEvent()
|| TargetComponentEvent.REFRESH_TARGETS == event.getTargetComponentEvent()) { || TargetComponentEvent.REFRESH_TARGETS == event.getTargetComponentEvent()) {
displayTargetCountStatus(); displayTargetCountStatus();
} }

View File

@@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.management.targettable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -19,13 +18,11 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent; import org.eclipse.hawkbit.eventbus.event.TargetDeletedEvent;
import org.eclipse.hawkbit.repository.OffsetBasedPageRequest;
import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.SpPermissionChecker;
import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetCreatedEvent;
import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent; import org.eclipse.hawkbit.repository.eventbus.event.TargetInfoUpdateEvent;
import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetIdName;
import org.eclipse.hawkbit.repository.model.TargetInfo; import org.eclipse.hawkbit.repository.model.TargetInfo;
import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult; import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult;
@@ -64,8 +61,6 @@ import org.eclipse.hawkbit.ui.utils.UINotification;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory;
import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition;
@@ -73,12 +68,8 @@ import org.vaadin.spring.events.EventScope;
import org.vaadin.spring.events.annotation.EventBusListenerMethod; import org.vaadin.spring.events.annotation.EventBusListenerMethod;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import com.vaadin.data.Container; import com.vaadin.data.Container;
import com.vaadin.data.Item; import com.vaadin.data.Item;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ShortcutAction;
import com.vaadin.event.dd.DragAndDropEvent; import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler; import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
@@ -97,11 +88,10 @@ import com.vaadin.ui.themes.ValoTheme;
/** /**
* Concrete implementation of Target table. * Concrete implementation of Target table.
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
public class TargetTable extends AbstractTable<Target, TargetIdName> implements Handler { public class TargetTable extends AbstractTable<Target, TargetIdName> {
private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class); private static final Logger LOG = LoggerFactory.getLogger(TargetTable.class);
private static final String TARGET_PINNED = "targetPinned"; private static final String TARGET_PINNED = "targetPinned";
@@ -129,15 +119,10 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> implements
private Button targetPinnedBtn; private Button targetPinnedBtn;
private Boolean isTargetPinned = Boolean.FALSE; private Boolean isTargetPinned = Boolean.FALSE;
private ShortcutAction actionSelectAll;
private ShortcutAction actionUnSelectAll;
@Override @Override
protected void init() { protected void init() {
super.init(); super.init();
addActionHandler(this);
actionSelectAll = new ShortcutAction(i18n.get("action.target.table.selectall"));
actionUnSelectAll = new ShortcutAction(i18n.get("action.target.table.clear"));
setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator()); setItemDescriptionGenerator(new AssignInstalledDSTooltipGenerator());
} }
@@ -262,22 +247,6 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> implements
HawkbitCommonUtil.addTargetTableContainerProperties(container); HawkbitCommonUtil.addTargetTableContainerProperties(container);
} }
@Override
public Action[] getActions(final Object target, final Object sender) {
return new Action[] { actionSelectAll, actionUnSelectAll };
}
@Override
public void handleAction(final Action action, final Object sender, final Object target) {
if (actionSelectAll.equals(action)) {
selectAll();
eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELLECT_ALL));
}
if (actionUnSelectAll.equals(action)) {
unSelectAll();
}
}
@Override @Override
protected void addCustomGeneratedColumns() { protected void addCustomGeneratedColumns() {
addGeneratedColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON, addGeneratedColumn(SPUIDefinitions.TARGET_STATUS_PIN_TOGGLE_ICON,
@@ -931,52 +900,10 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> implements
* Select all rows in the table. * Select all rows in the table.
*/ */
public void selectAll() { public void selectAll() {
final PageRequest pageRequest = new OffsetBasedPageRequest(0, size(),
new Sort(SPUIDefinitions.TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt"));
List<TargetIdName> targetIdList;
// is custom filter selected
if (managementUIState.getTargetTableFilters().getTargetFilterQuery().isPresent()) {
targetIdList = getTargetIdsByCustomFilters(pageRequest);
} else {
targetIdList = getTargetIdsBySimpleFilters(pageRequest);
}
setValue(targetIdList);
}
private List<TargetIdName> getTargetIdsBySimpleFilters(final PageRequest pageRequest) { // As Vaadin Table only returns the current ItemIds which are visible
final Long filterByDistId = managementUIState.getTargetTableFilters().getDistributionSet().isPresent() // you don't need to search explicit for them.
? managementUIState.getTargetTableFilters().getDistributionSet().get().getId() : null; setValue(getItemIds());
final List<TargetUpdateStatus> statusList = new ArrayList<>();
if (isFilteredByStatus()) {
statusList.addAll(managementUIState.getTargetTableFilters().getClickedStatusTargetTags());
}
final List<String> tagList = new ArrayList<>();
if (isFilteredByTags()) {
tagList.addAll(managementUIState.getTargetTableFilters().getClickedTargetTags());
}
String searchText = managementUIState.getTargetTableFilters().getSearchText().isPresent()
? managementUIState.getTargetTableFilters().getSearchText().get() : null;
if (!Strings.isNullOrEmpty(searchText)) {
searchText = String.format("%%%s%%", searchText);
}
final Boolean noTagSelected = managementUIState.getTargetTableFilters().isNoTagSelected();
final String[] tagArray = tagList.toArray(new String[tagList.size()]);
List<TargetIdName> targetIdList;
targetIdList = targetManagement.findAllTargetIdsByFilters(pageRequest, statusList, searchText, filterByDistId,
noTagSelected, tagList.toArray(tagArray));
Collections.reverse(targetIdList);
return targetIdList;
}
private List<TargetIdName> getTargetIdsByCustomFilters(final PageRequest pageRequest) {
List<TargetIdName> targetIdList;
final TargetFilterQuery targetFilterQuery = managementUIState.getTargetTableFilters().getTargetFilterQuery()
.isPresent() ? managementUIState.getTargetTableFilters().getTargetFilterQuery().get() : null;
targetIdList = targetManagement.findAllTargetIdsByTargetFilterQuery(pageRequest, targetFilterQuery);
Collections.reverse(targetIdList);
return targetIdList;
} }
/** /**
@@ -1065,10 +992,6 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> implements
return targetManagement.countTargetsAll(); return targetManagement.countTargetsAll();
} }
private static TargetIdName getLastSelectedItem(final Set<TargetIdName> values) {
return Iterables.getLast(values);
}
private boolean isFilteredByStatus() { private boolean isFilteredByStatus() {
return !managementUIState.getTargetTableFilters().getClickedStatusTargetTags().isEmpty(); return !managementUIState.getTargetTableFilters().getClickedStatusTargetTags().isEmpty();
} }

View File

@@ -65,9 +65,6 @@ public class TargetTableHeader extends AbstractTableHeader {
@Autowired @Autowired
private ManagementUIState managementUIState; private ManagementUIState managementUIState;
@Autowired
private transient EventBus.SessionEventBus eventBus;
@Autowired @Autowired
private ManagementViewAcceptCriteria managementViewAcceptCriteria; private ManagementViewAcceptCriteria managementViewAcceptCriteria;
@@ -231,14 +228,14 @@ public class TargetTableHeader extends AbstractTableHeader {
@Override @Override
protected void showFilterButtonsLayout() { protected void showFilterButtonsLayout() {
managementUIState.setTargetTagFilterClosed(false); managementUIState.setTargetTagFilterClosed(false);
eventBus.publish(this, ManagementUIEvent.SHOW_TARGET_TAG_LAYOUT); eventbus.publish(this, ManagementUIEvent.SHOW_TARGET_TAG_LAYOUT);
} }
@Override @Override
protected void resetSearchText() { protected void resetSearchText() {
if (managementUIState.getTargetTableFilters().getSearchText().isPresent()) { if (managementUIState.getTargetTableFilters().getSearchText().isPresent()) {
managementUIState.getTargetTableFilters().setSearchText(null); managementUIState.getTargetTableFilters().setSearchText(null);
eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT); eventbus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_TEXT);
} }
} }
@@ -255,13 +252,13 @@ public class TargetTableHeader extends AbstractTableHeader {
@Override @Override
public void maximizeTable() { public void maximizeTable() {
managementUIState.setTargetTableMaximized(Boolean.TRUE); managementUIState.setTargetTableMaximized(Boolean.TRUE);
eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MAXIMIZED,null)); eventbus.publish(this, new TargetTableEvent(BaseEntityEventType.MAXIMIZED,null));
} }
@Override @Override
public void minimizeTable() { public void minimizeTable() {
managementUIState.setTargetTableMaximized(Boolean.FALSE); managementUIState.setTargetTableMaximized(Boolean.FALSE);
eventBus.publish(this, new TargetTableEvent(BaseEntityEventType.MINIMIZED,null)); eventbus.publish(this, new TargetTableEvent(BaseEntityEventType.MINIMIZED,null));
} }
@Override @Override
@@ -277,12 +274,12 @@ public class TargetTableHeader extends AbstractTableHeader {
@Override @Override
protected void searchBy(final String newSearchText) { protected void searchBy(final String newSearchText) {
managementUIState.getTargetTableFilters().setSearchText(newSearchText); managementUIState.getTargetTableFilters().setSearchText(newSearchText);
eventBus.publish(this, TargetFilterEvent.FILTER_BY_TEXT); eventbus.publish(this, TargetFilterEvent.FILTER_BY_TEXT);
} }
@Override @Override
protected void addNewItem(final ClickEvent event) { protected void addNewItem(final ClickEvent event) {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventbus.publish(this, DragEvent.HIDE_DROP_HINT);
targetAddUpdateWindow.resetComponents(); targetAddUpdateWindow.resetComponents();
final Window addTargetWindow = targetAddUpdateWindow.getWindow(); final Window addTargetWindow = targetAddUpdateWindow.getWindow();
addTargetWindow.setCaption(i18n.get("caption.add.new.target")); addTargetWindow.setCaption(i18n.get("caption.add.new.target"));
@@ -401,13 +398,13 @@ public class TargetTableHeader extends AbstractTableHeader {
getFilterDroppedInfo().setSizeFull(); getFilterDroppedInfo().setSizeFull();
getFilterDroppedInfo().addComponent(filteredDistLabel); getFilterDroppedInfo().addComponent(filteredDistLabel);
getFilterDroppedInfo().addComponent(filterLabelClose); getFilterDroppedInfo().addComponent(filterLabelClose);
getFilterDroppedInfo().setExpandRatio(filteredDistLabel, 1.0f); getFilterDroppedInfo().setExpandRatio(filteredDistLabel, 1.0F);
eventBus.publish(this, TargetFilterEvent.FILTER_BY_DISTRIBUTION); eventbus.publish(this, TargetFilterEvent.FILTER_BY_DISTRIBUTION);
} }
private void closeFilterByDistribution() { private void closeFilterByDistribution() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventbus.publish(this, DragEvent.HIDE_DROP_HINT);
/* Remove filter by distribution information. */ /* Remove filter by distribution information. */
getFilterDroppedInfo().removeAllComponents(); getFilterDroppedInfo().removeAllComponents();
getFilterDroppedInfo().setSizeUndefined(); getFilterDroppedInfo().setSizeUndefined();
@@ -415,7 +412,7 @@ public class TargetTableHeader extends AbstractTableHeader {
managementUIState.getTargetTableFilters().setDistributionSet(null); managementUIState.getTargetTableFilters().setDistributionSet(null);
/* Reload the table */ /* Reload the table */
eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION); eventbus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_DISTRIBUTION);
} }
@Override @Override

View File

@@ -16,28 +16,17 @@ import org.eclipse.hawkbit.ui.management.event.TargetTableEvent.TargetComponentE
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventBus;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ShortcutAction;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
/** /**
* Target table layout. * Target table layout.
*
*
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
public class TargetTableLayout extends AbstractTableLayout { public class TargetTableLayout extends AbstractTableLayout {
private static final long serialVersionUID = 2248703121998709112L; private static final long serialVersionUID = 2248703121998709112L;
/**
* action for the shortcut key ctrl + 'A'.
*/
private static final ShortcutAction ACTION_CTRL_A = new ShortcutAction("Select All", ShortcutAction.KeyCode.A,
new int[] { ShortcutAction.ModifierKey.CTRL });
@Autowired @Autowired
private transient EventBus.SessionEventBus eventBus; private transient EventBus.SessionEventBus eventBus;
@@ -56,45 +45,14 @@ public class TargetTableLayout extends AbstractTableLayout {
*/ */
@PostConstruct @PostConstruct
void init() { void init() {
super.init(targetTableHeader, targetTable, targetDetails); super.init(targetTableHeader, targetTable, targetDetails);
} }
/*
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout#
* isShortCutKeysRequired()
*/
@Override @Override
protected boolean isShortCutKeysRequired() { protected void publishEvent() {
return true;
}
/* eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELECT_ALL));
* (non-Javadoc)
*
* @see org.eclipse.hawkbit.server.ui.common.table.AbstractTableLayout#
* getShortCutKeysHandler()
*/
@Override
protected Handler getShortCutKeysHandler() {
return new Handler() {
private static final long serialVersionUID = 1L;
@Override
public void handleAction(final Action action, final Object sender, final Object target) {
if (ACTION_CTRL_A.equals(action)) {
targetTable.selectAll();
eventBus.publish(this, new TargetTableEvent(TargetComponentEvent.SELLECT_ALL));
}
}
@Override
public Action[] getActions(final Object target, final Object sender) {
return new Action[] { ACTION_CTRL_A };
}
};
} }
} }

View File

@@ -0,0 +1,41 @@
/**
* Copyright (c) 2015 Bosch Software Innovations GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.hawkbit.ui.utils;
import com.vaadin.event.ShortcutAction;
import com.vaadin.server.Page;
import com.vaadin.server.WebBrowser;
/**
* On different systems there are different modifier for short cuts. This
* utility class handles the cross-platform functionality.
*/
public final class ShortCutModifierUtils {
private ShortCutModifierUtils() {
}
/**
* Returns the ctrl or meta modifier depending on the platform.
*
* @return on mac return
* {@link com.vaadin.event.ShortcutAction.ModifierKey#META} other
* platform return
* {@link com.vaadin.event.ShortcutAction.ModifierKey#CTRL}
*/
public static int getCtrlOrMetaModifier() {
final WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
if (webBrowser.isMacOSX()) {
return ShortcutAction.ModifierKey.META;
}
return ShortcutAction.ModifierKey.CTRL;
}
}

View File

@@ -299,10 +299,6 @@ message.tag.use.bulk.upload = {0} cannot be deleted .It is in use in targets bul
message.bulk.upload.tag.assignment.failed = Tag {0} assignment failed as tag no longer exists message.bulk.upload.tag.assignment.failed = Tag {0} assignment failed as tag no longer exists
message.bulk.upload.tag.assignments.failed= Few tag assignments failed as tags no longer exists message.bulk.upload.tag.assignments.failed= Few tag assignments failed as tags no longer exists
# action info
action.target.table.selectall = Select all (Ctrl+A)
action.target.table.clear = Clear selections
#reused messages #reused messages
soft.module.jvm =Runtime soft.module.jvm =Runtime
soft.module.application =Application soft.module.application =Application