Overdue filter: Add simple filter for overdue in UI

Signed-off-by: Marcel Mager (INST-IOT/ESB) <Marcel.Mager@bosch-si.com>
This commit is contained in:
Marcel Mager (INST-IOT/ESB)
2016-09-07 11:29:01 +02:00
parent 1d69026184
commit 2433742abf
23 changed files with 1328 additions and 183 deletions

View File

@@ -370,7 +370,7 @@ public class DistributionSetTable extends AbstractNamedVersionTable<Distribution
}
private boolean validateSoftwareModule(final SoftwareModule sm, final DistributionSet ds) {
if (targetManagement.countTargetByFilters(null, null, ds.getId(), Boolean.FALSE, new String[] {}) > 0) {
if (targetManagement.countTargetByFilters(null, null, null, ds.getId(), Boolean.FALSE, new String[] {}) > 0) {
/* Distribution is already assigned */
notification.displayValidationError(i18n.get("message.dist.inuse",
HawkbitCommonUtil.concatStrings(":", ds.getName(), ds.getVersion())));

View File

@@ -14,5 +14,22 @@ package org.eclipse.hawkbit.ui.management.event;
*
*/
public enum ManagementUIEvent {
SHOW_COUNT_MESSAGE, UPDATE_COUNT, UPDATE_FILTERCOUNT_MESSAGE, HIDE_TARGET_TAG_LAYOUT, SHOW_TARGET_TAG_LAYOUT, HIDE_DISTRIBUTION_TAG_LAYOUT, SHOW_DISTRIBUTION_TAG_LAYOUT, MAX_ACTION_HISTORY, MIN_ACTION_HISTORY, CLOSE_SAVE_ACTIONS_WINDOW, UNASSIGN_TARGET_TAG, UNASSIGN_DISTRIBUTION_TAG, ASSIGN_TARGET_TAG, ASSIGN_DISTRIBUTION_TAG, TARGET_TABLE_FILTER, RESET_SIMPLE_FILTERS, RESET_TARGET_FILTER_QUERY
SHOW_COUNT_MESSAGE, //
UPDATE_COUNT, //
UPDATE_FILTERCOUNT_MESSAGE, //
HIDE_TARGET_TAG_LAYOUT, //
SHOW_TARGET_TAG_LAYOUT, //
HIDE_DISTRIBUTION_TAG_LAYOUT, //
SHOW_DISTRIBUTION_TAG_LAYOUT, //
MAX_ACTION_HISTORY, //
MIN_ACTION_HISTORY, //
CLOSE_SAVE_ACTIONS_WINDOW, //
UNASSIGN_TARGET_TAG, //
UNASSIGN_DISTRIBUTION_TAG, //
ASSIGN_TARGET_TAG, //
ASSIGN_DISTRIBUTION_TAG, //
TARGET_TABLE_FILTER, //
RESET_SIMPLE_FILTERS, //
RESET_TARGET_FILTER_QUERY
}

View File

@@ -14,5 +14,14 @@ package org.eclipse.hawkbit.ui.management.event;
*
*/
public enum TargetFilterEvent {
FILTER_BY_TEXT, FILTER_BY_TAG, REMOVE_FILTER_BY_TEXT, REMOVE_FILTER_BY_TAG, FILTER_BY_STATUS, FILTER_BY_DISTRIBUTION, REMOVE_FILTER_BY_STATUS, REMOVE_FILTER_BY_DISTRIBUTION, FILTER_BY_TARGET_FILTER_QUERY, REMOVE_FILTER_BY_TARGET_FILTER_QUERY
FILTER_BY_TEXT, //
FILTER_BY_TAG, //
REMOVE_FILTER_BY_TEXT, //
REMOVE_FILTER_BY_TAG, //
FILTER_BY_STATUS, //
FILTER_BY_DISTRIBUTION, //
REMOVE_FILTER_BY_STATUS, //
REMOVE_FILTER_BY_DISTRIBUTION, //
FILTER_BY_TARGET_FILTER_QUERY, //
REMOVE_FILTER_BY_TARGET_FILTER_QUERY
}

View File

@@ -143,6 +143,7 @@ public class CountMessageLabel extends Label {
}
message.append(HawkbitCommonUtil.SP_STRING_SPACE);
final String status = i18n.get("label.filter.status");
final String overdue = i18n.get("label.filter.overdue");
final String tags = i18n.get("label.filter.tags");
final String text = i18n.get("label.filter.text");
final String dists = i18n.get("label.filter.dist");
@@ -150,6 +151,7 @@ public class CountMessageLabel extends Label {
final StringBuilder filterMesgBuf = new StringBuilder(i18n.get("label.filter"));
filterMesgBuf.append(HawkbitCommonUtil.SP_STRING_SPACE);
filterMesgBuf.append(getStatusMsg(targFilParams.getClickedStatusTargetTags(), status));
filterMesgBuf.append(getOverdueStateMsg(targFilParams.isOverdueFilterEnabled(), overdue));
filterMesgBuf
.append(getTagsMsg(targFilParams.isNoTagSelected(), targFilParams.getClickedTargetTags(), tags));
filterMesgBuf.append(getSerachMsg(
@@ -230,6 +232,17 @@ public class CountMessageLabel extends Label {
return status.isEmpty() ? HawkbitCommonUtil.SP_STRING_SPACE : param;
}
/**
* Get Overdue State Message.
*
* @param overdueState
* as flag
* @return String as msg.
*/
private static String getOverdueStateMsg(final boolean overdueState, final String param) {
return !overdueState ? HawkbitCommonUtil.SP_STRING_SPACE : param;
}
/**
* Get Tags Message.
*

View File

@@ -31,6 +31,8 @@ public class TargetTableFilters implements Serializable {
private final List<String> clickedTargetTags = new ArrayList<>();
private final List<TargetUpdateStatus> clickedStatusTargetTags = new ArrayList<>();
private boolean isOverdueFilterEnabled = Boolean.FALSE;
private String searchText;
private DistributionSetIdName distributionSet;
private Long pinnedDistId;
@@ -130,7 +132,8 @@ public class TargetTableFilters implements Serializable {
* {@code false}
*/
public boolean hasFilter() {
return isFilteredByTextOrDs() || hasTagsSelected() || isFilteredByStatusOrCustomFilter();
return isFilteredByTextOrDs() || hasTagsSelected() || isFilteredByStatusOrCustomFilter()
|| isOverdueFilterEnabled();
}
private boolean hasTagsSelected() {
@@ -160,4 +163,12 @@ public class TargetTableFilters implements Serializable {
this.targetFilterQuery = targetFilterQuery;
}
public boolean isOverdueFilterEnabled() {
return isOverdueFilterEnabled;
}
public void setOverdueFilterEnabled(boolean isOverdueFilterEnabled) {
this.isOverdueFilterEnabled = isOverdueFilterEnabled;
}
}

View File

@@ -51,6 +51,7 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
private Sort sort = new Sort(TARGET_TABLE_CREATE_AT_SORT_ORDER, "createdAt");
private transient Collection<TargetUpdateStatus> status = null;
private transient Boolean overdueState = null;
private String[] targetTags = null;
private Long distributionId = null;
private String searchText = null;
@@ -80,6 +81,7 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
if (isNotNullOrEmpty(queryConfig)) {
status = (Collection<TargetUpdateStatus>) queryConfig.get(SPUIDefinitions.FILTER_BY_STATUS);
overdueState = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_OVERDUE_STATE);
targetTags = (String[]) queryConfig.get(SPUIDefinitions.FILTER_BY_TAG);
noTagClicked = (Boolean) queryConfig.get(SPUIDefinitions.FILTER_BY_NO_TAG);
distributionId = (Long) queryConfig.get(SPUIDefinitions.FILTER_BY_DISTRIBUTION);
@@ -113,7 +115,7 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
if (pinnedDistId != null) {
targetBeans = getTargetManagement().findTargetsAllOrderByLinkedDistributionSet(
new OffsetBasedPageRequest(startIndex, SPUIDefinitions.PAGE_SIZE, sort), pinnedDistId,
distributionId, status, searchText, noTagClicked, targetTags);
distributionId, status, overdueState, searchText, noTagClicked, targetTags);
} else if (null != targetFilterQuery) {
targetBeans = getTargetManagement().findTargetsAll(targetFilterQuery,
new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort));
@@ -123,7 +125,7 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
} else {
targetBeans = getTargetManagement().findTargetByFilters(
new PageRequest(startIndex / SPUIDefinitions.PAGE_SIZE, SPUIDefinitions.PAGE_SIZE, sort), status,
searchText, distributionId, noTagClicked, targetTags);
overdueState, searchText, distributionId, noTagClicked, targetTags);
}
for (final Target targ : targetBeans) {
final ProxyTarget prxyTarget = new ProxyTarget();
@@ -169,6 +171,13 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
return true;
}
private Boolean isOverdueFilterEnabled() {
if (Boolean.TRUE.equals(overdueState)) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
@Override
protected void saveBeans(final List<ProxyTarget> addedTargets, final List<ProxyTarget> modifiedTargets,
final List<ProxyTarget> removedTargets) {
@@ -176,7 +185,8 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
}
private Boolean anyFilterSelected() {
if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()) {
if (status == null && distributionId == null && Strings.isNullOrEmpty(searchText) && !isTagSelected()
&& !isOverdueFilterEnabled()) {
return false;
}
return true;
@@ -191,8 +201,8 @@ public class TargetBeanQuery extends AbstractBeanQuery<ProxyTarget> {
} else if (!anyFilterSelected()) {
size = totSize;
} else {
size = getTargetManagement().countTargetByFilters(status, searchText, distributionId, noTagClicked,
targetTags);
size = getTargetManagement().countTargetByFilters(status, overdueState, searchText, distributionId,
noTagClicked, targetTags);
}
final ManagementUIState tmpManagementUIState = getManagementUIState();

View File

@@ -369,6 +369,9 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
.getClickedStatusTargetTags();
queryConfig.put(SPUIDefinitions.FILTER_BY_STATUS, statusList);
}
if (managementUIState.getTargetTableFilters().isOverdueFilterEnabled()) {
queryConfig.put(SPUIDefinitions.FILTER_BY_OVERDUE_STATE, Boolean.TRUE);
}
return queryConfig;
}
@@ -873,6 +876,7 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
managementUIState.setTargetsCountAll(totalTargetsCount);
Collection<TargetUpdateStatus> status = null;
Boolean overdueState = null;
String[] targetTags = null;
Long distributionId = null;
String searchText = null;
@@ -884,6 +888,9 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
if (isFilteredByStatus()) {
status = managementUIState.getTargetTableFilters().getClickedStatusTargetTags();
}
if (managementUIState.getTargetTableFilters().isOverdueFilterEnabled()) {
overdueState = managementUIState.getTargetTableFilters().isOverdueFilterEnabled();
}
if (managementUIState.getTargetTableFilters().getDistributionSet().isPresent()) {
distributionId = managementUIState.getTargetTableFilters().getDistributionSet().get().getId();
}
@@ -895,8 +902,8 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
pinnedDistId = managementUIState.getTargetTableFilters().getPinnedDistId().get();
}
final long size = getTargetsCountWithFilter(totalTargetsCount, status, targetTags, distributionId, searchText,
noTagClicked, pinnedDistId);
final long size = getTargetsCountWithFilter(totalTargetsCount, status, overdueState, targetTags, distributionId,
searchText, noTagClicked, pinnedDistId);
if (size > SPUIDefinitions.MAX_TABLE_ENTRIES) {
managementUIState.setTargetsTruncated(size - SPUIDefinitions.MAX_TABLE_ENTRIES);
@@ -904,8 +911,8 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
}
private long getTargetsCountWithFilter(final long totalTargetsCount, final Collection<TargetUpdateStatus> status,
final String[] targetTags, final Long distributionId, final String searchText, final Boolean noTagClicked,
final Long pinnedDistId) {
final Boolean overdueState, final String[] targetTags, final Long distributionId, final String searchText,
final Boolean noTagClicked, final Long pinnedDistId) {
final long size;
if (managementUIState.getTargetTableFilters().getTargetFilterQuery().isPresent()) {
size = targetManagement.countTargetByTargetFilterQuery(
@@ -913,7 +920,8 @@ public class TargetTable extends AbstractTable<Target, TargetIdName> {
} else if (!anyFilterSelected(status, pinnedDistId, noTagClicked, targetTags, searchText)) {
size = totalTargetsCount;
} else {
size = targetManagement.countTargetByFilters(status, searchText, distributionId, noTagClicked, targetTags);
size = targetManagement.countTargetByFilters(status, overdueState, searchText, distributionId, noTagClicked,
targetTags);
}
return size;
}

View File

@@ -54,16 +54,20 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
@Autowired
private ManagementUIState managementUIState;
private static final String overdueCaption = "overdue";
private Button unknown;
private Button inSync;
private Button pending;
private Button error;
private Button registered;
private Button overdue;
private Boolean unknownBtnClicked = false;
private Boolean errorBtnClicked = false;
private Boolean pendingBtnClicked = false;
private Boolean inSyncBtnClicked = false;
private Boolean registeredBtnClicked = false;
private Boolean overdueBtnClicked = false;
private Button buttonClicked;
private static final String BTN_CLICKED = "btnClicked";
@@ -105,6 +109,15 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
addComponent(buttonLayout);
setComponentAlignment(buttonLayout, Alignment.MIDDLE_CENTER);
final HorizontalLayout overdueLayout = new HorizontalLayout();
final Label overdueLabel = new LabelBuilder().name(i18n.get("label.filter.by.overdue")).buildLabel();
overdueLayout.setStyleName("overdue-button-layout");
overdueLayout.addComponent(overdue);
overdueLayout.setComponentAlignment(overdue, Alignment.MIDDLE_LEFT);
overdueLayout.addComponent(overdueLabel);
overdueLayout.setComponentAlignment(overdueLabel, Alignment.MIDDLE_LEFT);
addComponent(overdueLayout);
}
private void restorePreviousState() {
@@ -129,6 +142,10 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
}
}
}
if (managementUIState.getTargetTableFilters().isOverdueFilterEnabled()) {
overdue.addStyleName(BTN_CLICKED);
overdueBtnClicked = Boolean.TRUE;
}
}
/**
@@ -150,18 +167,23 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
registered = SPUIComponentProvider.getButton(UIComponentIdProvider.REGISTERED_STATUS_ICON,
TargetUpdateStatus.REGISTERED.toString(), i18n.get("tooltip.status.registered"),
SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class);
overdue = SPUIComponentProvider.getButton(SPUIComponentIdProvider.OVERDUE_STATUS_ICON,
overdueCaption, i18n.get("tooltip.status.overdue"),
SPUIButtonDefinitions.SP_BUTTON_STATUS_STYLE, false, FontAwesome.SQUARE, SPUIButtonStyleSmall.class);
applyStatusBtnStyle();
unknown.setData("filterStatusOne");
inSync.setData("filterStatusTwo");
pending.setData("filterStatusThree");
error.setData("filterStatusFour");
registered.setData("filterStatusFive");
overdue.setData("filterStatusSix");
unknown.addClickListener(this);
inSync.addClickListener(this);
pending.addClickListener(this);
error.addClickListener(this);
registered.addClickListener(this);
overdue.addClickListener(this);
}
/**
@@ -173,6 +195,7 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
pending.addStyleName("pendingBtn");
error.addStyleName("errorBtn");
registered.addStyleName("registeredBtn");
overdue.addStyleName("overdueBtn");
}
@Override
@@ -188,6 +211,8 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
processErrorFilterStatus();
} else if (event.getButton().getCaption().equalsIgnoreCase(TargetUpdateStatus.REGISTERED.toString())) {
processRegisteredFilterStatus();
} else if (event.getButton().getCaption().equalsIgnoreCase(overdueCaption)) {
processOverdueFilterStatus();
}
}
@@ -231,9 +256,26 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
processCommonFilterStatus(TargetUpdateStatus.REGISTERED, registeredBtnClicked);
}
/**
* Process - OVERDUE.
*/
private void processOverdueFilterStatus() {
overdueBtnClicked = !overdueBtnClicked;
managementUIState.getTargetTableFilters().setOverdueFilterEnabled(overdueBtnClicked);
if (overdueBtnClicked) {
buttonClicked.addStyleName(BTN_CLICKED);
eventBus.publish(this, TargetFilterEvent.FILTER_BY_STATUS);
} else {
buttonClicked.removeStyleName(BTN_CLICKED);
eventBus.publish(this, TargetFilterEvent.REMOVE_FILTER_BY_STATUS);
}
}
/**
* Process - COMMON PROCESS.
*
*
* @param status
* as enum
* @param buttonReset
@@ -268,11 +310,12 @@ public class FilterByStatusLayout extends VerticalLayout implements Button.Click
inSync.removeStyleName(BTN_CLICKED);
error.removeStyleName(BTN_CLICKED);
pending.removeStyleName(BTN_CLICKED);
overdue.removeStyleName(BTN_CLICKED);
}
/**
* Check if any status button in clicked.
*
*
* @return
*/
private boolean isStatusFilterApplied() {

View File

@@ -0,0 +1,846 @@
/**
* 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;
/**
* Interface to provide the unchanged constants.
*
*
*
*
*
*/
public final class SPUIComponentIdProvider {
/**
* ID-Target.
*/
public static final String TARGET_TABLE_ID = "target.tableId";
/**
* ID- Targ.Cont ID.
*/
public static final String TARGET_ADD_CONTROLLER_ID = "target.add.ctrlId";
/**
* ID-Targ.Name.
*/
public static final String TARGET_ADD_NAME = "target.add.name";
/**
* ID-Targ.Disc.
*/
public static final String TARGET_ADD_DESC = "target.add.desc";
/**
* ID-Targ.DEL.
*/
public static final String TARGET_DELETE_ALL = "target.delete.all";
/**
* ID-SW.DEL.
*/
public static final String SW_DELETE_ALL = "swmodule.delete.all";
/**
* ID-Targ.Edit.icon.
*/
public static final String TARGET_EDIT_ICON = "target.edit.icon";
/**
* ID-Targ.PIN.
*/
public static final String TARGET_PIN_ICON = "target.pin.icon";
/**
* Target search text id.
*/
public static final String TARGET_TEXT_FIELD = "target.search.textfield";
/**
* ID for add target filter icon
*/
public static final String TARGET_FILTER_ADD_ICON_ID = "target.filter.add.id";
/**
* ID-Dist.
*/
public static final String DIST_TABLE_ID = "dist.tableId";
/**
* ID-Dist.Name.
*/
public static final String DIST_ADD_NAME = "dist.add.name";
/**
* ID-Dist.Version.
*/
public static final String DIST_ADD_VERSION = "dist.add.version";
/**
* ID-Dist.DistSetType.
*/
public static final String DIST_ADD_DISTSETTYPE = "dist.add.distsettype";
/**
* ID-Dist.desc.
*/
public static final String DIST_ADD_DESC = "dist.add.desc";
/**
* /** ID-Dist.DELETE.
*/
public static final String DIST_DELETE_ALL = "dist.delete.all";
/**
* ID-Dist.MigCheck.
*/
public static final String DIST_ADD_MIGRATION_CHECK = "dist.add.required.migration";
/**
* ID-Dist.Search.icon.
*/
public static final String DIST_SEARCH_ICON = "dist.search.rest.icon";
/**
* ID-Dist.Search.txt.
*/
public static final String DIST_SEARCH_TEXTFIELD = "dist.search.textfield";
/**
* ID - Dist.Add.
*/
public static final String DIST_ADD_ICON = "dist.add.icon";
/**
* ID for Distribution Tag ComboBox
*/
public static final String DIST_TAG_COMBO = "dist.tag.combo";
/**
* ID-Dist.PIN.
*/
public static final String DIST_PIN_BUTTON = "dist.pin.button";
/**
* ID - soft.module.name.
*/
public static final String SOFT_MODULE_NAME = "soft.module.name";
/**
* ID - soft.module.version.
*/
public static final String SOFT_MODULE_VERSION = "soft.module.version";
/**
* ID - soft.module.vendor.
*/
public static final String SOFT_MODULE_VENDOR = "soft.module.vendor";
/**
* ID - Save Assign.
*/
public static final String SAVE_ASSIGNMENT = "save.actions.popup.assign";
/**
* ID - Discard Assign.
*/
public static final String DISCARD_ASSIGNMENT = "discard.actions.popup.assign";
/**
* ID - Delete Distribution SetType Save.
*/
public static final String SAVE_DELETE_DIST_SET_TYPE = "save.actions.popup.delete.dist.set.type";
/**
* ID - Discard Distribution SetType.
*/
public static final String DISCARD_DIST_SET_TYPE = "save.actions.popup.discard.dist.set.type";
/**
* ID Delete Software Module Type save.
*/
public static final String SAVE_DELETE_SW_MODULE_TYPE = "save.actions.popup.delete.sw.module.type";
/**
* ID - Discard SW Module Type.
*/
public static final String DISCARD_SW_MODULE_TYPE = "save.actions.popup.discard.sw.module.type";
/**
* Action history table cancel Id.
*/
public static final String ACTION_DETAILS_SOFT_ID = "action.details.soft.group";
/**
* ID - Label.
*/
public static final String ACTION_LABEL = "save.actions.popup.actionMsg";
/**
* ID - Count.
*/
public static final String COUNT_LABEL = "count.message.label";
/**
* UNKNOWN_STATUS_ICON ID.
*/
public static final String UNKNOWN_STATUS_ICON = "unknown.status.icon";
/**
* INSYNCH_STATUS_ICON ID.
*/
public static final String INSYNCH_STATUS_ICON = "insynch.status.icon";
/**
* PENDING_STATUS_ICON ID.
*/
public static final String PENDING_STATUS_ICON = "pending.status.icon";
/**
* ERROR_STATUS_ICON ID.
*/
public static final String ERROR_STATUS_ICON = "error.status.icon";
/**
* REGISTERED_STATUS_ICON ID.
*/
public static final String REGISTERED_STATUS_ICON = "registered.status.icon";
/**
* OVERDUE_STATUS_ICON ID.
*/
public static final String OVERDUE_STATUS_ICON = "overdue.status.icon";
/**
* DROP filter icon id.
*/
public static final String TARGET_DROP_FILTER_ICON = "target.drop.filter.icon";
/**
* Pending action button id.
*/
public static final String PENDING_ACTION_BUTTON = "pending.action.button";
/**
* Action history table Id.
*/
public static final String ACTION_HISTORY_TABLE_ID = "action.history.tableId";
/**
* Action history table cancel Id.
*/
public static final String ACTION_HISTORY_TABLE_CANCEL_ID = "action.history.table.action.cancel";
/**
* Action history table force Id.
*/
public static final String ACTION_HISTORY_TABLE_FORCE_ID = "action.history.table.action.force";
/**
* Action history table force quit Id.
*/
public static final String ACTION_HISTORY_TABLE_FORCE_QUIT_ID = "action.history.table.action.force.quit";
/**
* Target filter wrapper id.
*/
public static final String TARGET_FILTER_WRAPPER_ID = "target-drop-filter";
/**
* Delete button wrapper id.
*/
public static final String DELETE_BUTTON_WRAPPER_ID = "delete.button";
/**
* tag color preview button id.
*/
public static final String TAG_COLOR_PREVIEW_ID = "tag.color.preview";
/**
* Id for ColorPickerLayout
*/
public static final String COLOR_PICKER_LAYOUT = "color.picker.layout";
/**
* Id for ColorPickerLayout's red slider
*/
public static final String COLOR_PICKER_RED_SLIDER = "color.picker.red.slider";
/**
* Id for Color preview field with the color code
*/
public static final String COLOR_PREVIEW_FIELD = "color-preview-field";
/**
* Id for OptionGroup Create/Update tag
*/
public static final String OPTION_GROUP = "create.update.tag";
/**
* Confirmation dialogue OK button id.
*/
public static final String OK_BUTTON = "ok.button";
/**
* Upload - type button id.
*/
public static final String UPLOAD_TYPE_BUTTON_PREFIX = "upload.type.button.";
/**
* Upload - process button id.
*/
public static final String UPLOAD_PROCESS_BUTTON = "upload.process.button";
/**
* Upload - discard button id.
*/
public static final String UPLOAD_DISCARD_BUTTON = "upload.discard.button";
/**
* Upload - artifact detail close button.
*/
public static final String UPLOAD_ARTIFACT_DETAILS_CLOSE = "upload.artifactdetails.close.button";
/**
* Upload - artifact detail table.
*/
public static final String UPLOAD_ARTIFACT_DETAILS_TABLE = "upload.artifactdetails.table";
/**
* Upload - artifact upload button.
*/
public static final String UPLOAD_BUTTON = "artifact.upload.button";
/**
* Upload - process button id.
*/
public static final String UPLOAD_DISCARD_DETAILS_BUTTON = "upload.discard.details.button";
/**
* Upload - delete button id.
*/
public static final String UPLOAD_DELETE_ICON = "upload.delete.button";
/**
* Upload- file delete button id.
*/
public static final String UPLOAD_FILE_DELETE_ICON = "upload.file.delete.button";
/**
* ID-Dist.
*/
public static final String UPLOAD_SOFTWARE_MODULE_TABLE = "upload.swModule.table";
/**
* Upload result popup close button.
*/
public static final String UPLOAD_ARTIFACT_RESULT_POPUP_CLOSE = "upload.resultwindow.close.button";
/**
* Upload result popup close button.
*/
public static final String UPLOAD_ARTIFACT_RESULT_CLOSE = "upload.results.close.button";
/**
* Upload - artifact result table.
*/
public static final String UPLOAD_RESULT_TABLE = "upload.result.table";
/**
* Upload - software module search text id.
*/
public static final String SW_MODULE_SEARCH_TEXT_FIELD = "swmodule.search.textfield";
/**
* Upload - software module search reset icon id.
*/
public static final String SW_MODULE_SEARCH_RESET_ICON = "sw.search.reset.icon";
/**
* Upload - artifact upload error reason.
*/
public static final String UPLOAD_ERROR_REASON = "upload-error-reason";
/**
* Upload - artifact upload - Software module add button.
*/
public static final String SW_MODULE_ADD_BUTTON = "sw.module.add.button";
/**
* Upload - artifact upload - Software module type combo id.
*/
public static final String SW_MODULE_TYPE = "sw.module.select.type";
/**
* Upload - artifact upload - Software module description.
*/
public static final String ADD_SW_MODULE_DESCRIPTION = "sw.module.description";
/**
* ID-Targ.Detail.icon.
*/
public static final String SW_TABLE_ATRTIFACT_DETAILS_ICON = "swmodule.artifact.details.icon";
/**
* Artifact upload - sw module edit button id.
*/
public static final String UPLOAD_SW_MODULE_EDIT_BUTTON = "swmodule.edit.button";
/**
* Ds edit button id.
*/
public static final String DS_EDIT_BUTTON = "ds.edit.button";
/**
* Upload Artifact details max table Id.
*/
public static final String UPLOAD_ARTIFACT_DETAILS_TABLE_MAX = "upload.artifactdetails.table.max";
/**
* Target tag close button.
*/
public static final String HIDE_TARGET_TAGS = "hide.target.tags";
/**
* Show target tag layout icon.
*/
public static final String SHOW_TARGET_TAGS = "show.target.tags.icon";
/**
* ID-Target tag table.
*/
public static final String TARGET_TAG_TABLE_ID = "target.tag.tableId";
/**
* ID-Distibution tag table.
*/
public static final String DISTRIBUTION_TAG_TABLE_ID = "distriution.tag.tableId";
/**
* ID-Software module type table.
*/
public static final String SW_MODULE_TYPE_TABLE_ID = "sw.module.type.table";
/**
* ID-Target tag table.
*/
public static final String DISTRIBUTION_SET_TYPE_TABLE_ID = "dist.set.type.tableId";
/**
* Tab sheet id.
*/
public static final String TARGET_DETAILS_TABSHEET = "target.details.tabsheet";
/**
* Tab sheet id.
*/
public static final String DISTRIBUTION_DETAILS_TABSHEET = "distribution.details.tabsheet.";
/**
* Combobox id.
*/
public static final String SYSTEM_CONFIGURATION_DEFAULTDIS_COMBOBOX = "default.disset.combobox";
/**
* Button save id.
*/
public static final String SYSTEM_CONFIGURATION_SAVE = "system.configuration.save";
/**
* ID for save button in pop-up-windows instance of commonDialogWindow
*/
public static final String SAVE_BUTTON = "common.dialog.window.save";
/**
* ID for cancel button in pop-up-windows instance of commonDialogWindow
*/
public static final String CANCEL_BUTTON = "common.dialog.window.cancel";
/**
* Cancel button is.
*/
public static final String SYSTEM_CONFIGURATION_CANCEL = "system.configuration.cancel";
/**
* Id of maximize/minimize icon of table - Software module table.
*/
public static final String SW_MAX_MIN_TABLE_ICON = "sw.max.min.table.icon";
/**
* Id of maximize/minimize icon of table - Distribution table.
*/
public static final String DS_MAX_MIN_TABLE_ICON = "ds.max.min.table.icon";
/**
* Software module table in upload UI.
*/
public static final String SM_TYPE_FILTER_BTN_ID = "sm.type.filter.btn.";
/**
* Software module table details header caption id.
*/
public static final String TARGET_DETAILS_HEADER_LABEL_ID = "target.details.header.caption";
/**
* Software module table details header caption id.
*/
public static final String DISTRIBUTION_DETAILS_HEADER_LABEL_ID = "distribution.details.header.caption";
/**
* Software module table details vendor label id.
*/
public static final String DETAILS_VENDOR_LABEL_ID = "details.vendor";
/**
* Software module table details description label id.
*/
public static final String DETAILS_DESCRIPTION_LABEL_ID = "details.description";
/**
* Software module table details type label id.
*/
public static final String DETAILS_TYPE_LABEL_ID = "details.type";
/**
* Id of show filter button in software module table.
*/
public static final String SM_SHOW_FILTER_BUTTON_ID = "show.filter.layout";
/**
* Software module table in upload UI.
*/
public static final String DS_TYPE_FILTER_BTN_ID = "ds.type.filter.btn.";
/**
* Id of target table search reset Icon.
*/
public static final String TARGET_TBL_SEARCH_RESET_ID = "target.search.rest.icon";
/**
* Id of the target table add Icon.
*/
public static final String TARGET_TBL_ADD_ICON_ID = "target.add";
/**
* Id of IP address label in target details.
*/
public static final String TARGET_IP_ADDRESS = "target.ip.address";
/**
* Id of Last query date label in target details.
*/
public static final String TARGET_LAST_QUERY_DT = "target.last.query.date";
/**
* Id of Controller Id label in target details.
*/
public static final String TARGET_CONTROLLER_ID = "target.controller.id";
/**
* Id of security token label in target details.
*/
public static final String TARGET_SECURITY_TOKEN = "target.security.token";
/**
* Id of maximize/minimize icon of table - Software module table.
*/
public static final String TARGET_MAX_MIN_TABLE_ICON = "target.max.min.table.icon";
/**
* Software module table in upload UI.
*/
public static final String SWM_DTLS_MAX_ASSIGN = "max.assign";
/**
* Documentation Link in Login view and menu.
*/
public static final String LINK_DOCUMENTATION = "link.documentation";
/**
* Demo Link in Login view and menu.
*/
public static final String LINK_DEMO = "link.demo";
/**
* Request account Link in Login view and menu.
*/
public static final String LINK_REQUESTACCOUNT = "link.requestaccount";
/**
* Support Link in Login view and menu.
*/
public static final String LINK_SUPPORT = "link.support";
/**
* User management Link in Login view and menu.
*/
public static final String LINK_USERMANAGEMENT = "link.usermanagement";
/**
* New Target tag add icon id.
*/
public static final String ADD_TARGET_TAG = "target.tag.add";
/**
* New distribution set tag add icon id.
*/
public static final String ADD_DISTRIBUTION_TAG = "distribution.tag.add";
/**
* Bulk target upload - distribution set combo.
*/
public static final String BULK_UPLOAD_DS_COMBO = "bulkupload.ds.combo";
/**
* Bulk target upload - description.
*/
public static final String BULK_UPLOAD_DESC = "bulkupload.description";
/**
* Bulk target upload - tag field.
*/
public static final String BULK_UPLOAD_TAG = "bulkupload.tag";
/**
* Bulk target upload - count label.
*/
public static final String BULK_UPLOAD_COUNT = "bulkupload.upload.count";
/**
* Id of the target table bulk upload Icon.
*/
public static final String TARGET_TBL_BULK_UPLOAD_ICON_ID = "target.bulk.upload";
/**
* Id of target filter table search reset Icon.
*/
public static final String TARGET_FILTER_TBL_SEARCH_RESET_ID = "target.filter.search.rest.icon";
/**
* ID- Customfilter.Name.
*/
public static final String CUSTOM_FILTER_ADD_NAME = "custom.filter.add.name";
/**
* custom filter - delete button id.
*/
public static final String CUSTOM_FILTER_DELETE_ICON = "custom.filter.delete.button";
/**
* custom filter - update button id.
*/
public static final String CUSTOM_FILTER_DETAIL_LINK = "custom.filter.detail.link";
/**
* custom filter - save button id.
*/
public static final String CUSTOM_FILTER_SAVE_ICON = "custom.filter.save.button.Id";
/**
* ID-Custom target tag table.
*/
public static final String CUSTOM_TARGET_TAG_TABLE_ID = "custom.target.tag.tableId";
/**
* Target filter table id.
*/
public static final String TAEGET_FILTER_TABLE_ID = "target.query.filter.table.Id";
/**
* create or update target filter query - name label id.
*/
public static final String TARGET_FILTER_QUERY_NAME_LABEL_ID = "target.filter.name.label.id";
/**
* create or update target filter query - name layout id.
*/
public static final String TARGET_FILTER_QUERY_NAME_LAYOUT_ID = "target.filter.name.layout.id";
/**
* * create or update target filter query - target table id.
*/
public static final String CUSTOM_FILTER_TARGET_TABLE_ID = "custom.filter.target.table.id";
/**
* Bulk upload notification button id.
*/
public static final String BULK_UPLOAD_STATUS_BUTTON = "bulk.upload.notification.id";
/**
* Target bulk upload minimize button id.
*/
public static final String BULK_UPLOAD_MINIMIZE_BUTTON_ID = "bulk.upload.minimize.button.id";
/**
* Target bulk upload minimize button id.
*/
public static final String BULK_UPLOAD_CLOSE_BUTTON_ID = "bulk.upload.close.button.id";
/**
* Rollout list view - search box id.
*/
public static final String ROLLOUT_LIST_SEARCH_BOX_ID = "rollout.list.search.id";
/**
* Rollout list view - search reset icon id.
*/
public static final String ROLLOUT_LIST_SEARCH_RESET_ICON_ID = "rollout.list.search.reset.icon.id";
/**
* Rollout list view - add icon id.
*/
public static final String ROLLOUT_ADD_ICON_ID = "rollout.add.button.id";
/**
* Rollout list grid id.
*/
public static final String ROLLOUT_LIST_GRID_ID = "rollout.grid.id";
/**
* Rollout group list grid id.
*/
public static final String ROLLOUT_GROUP_LIST_GRID_ID = "rollout.group.grid.id";
/**
* Rollout group list grid id.
*/
public static final String ROLLOUT_GROUP_TARGETS_LIST_GRID_ID = "rollout.group.targets.grid.id";
/**
* Rollout text field name id.
*/
public static final String ROLLOUT_NAME_FIELD_ID = "rollout.name.field.id";
/**
* Rollout number of groups id.
*/
public static final String ROLLOUT_NO_OF_GROUPS_ID = "rollout.no.ofgroups.id";
/**
* Rollout trigger threshold field if.
*/
public static final String ROLLOUT_TRIGGER_THRESOLD_ID = "rollout.trigger.thresold.id";
/**
* Rollout error thresold field id.
*/
public static final String ROLLOUT_ERROR_THRESOLD_ID = "rollout.error.thresold.id";
/**
* Rollout distribution set combo id.
*/
public static final String ROLLOUT_DS_ID = "rollout.ds.id";
/**
* Rollout description field id.
*/
public static final String ROLLOUT_DESCRIPTION_ID = "rollout.description.id";
/**
* Rollout target filter query combo id.
*/
public static final String ROLLOUT_TARGET_FILTER_COMBO_ID = "rollout.target.filter.combo.id";
/**
* Rollout action button id.
*/
public static final String ROLLOUT_ACTION_ID = "rollout.action.button.id";
/**
* Rollout start button id.
*/
public static final String ROLLOUT_RUN_BUTTON_ID = ROLLOUT_ACTION_ID + ".9";
/**
* Rollout pause button id.
*/
public static final String ROLLOUT_PAUSE_BUTTON_ID = ROLLOUT_ACTION_ID + ".10";
/**
* Rollout resume button id.
*/
public static final String ROLLOUT_UPDATE_BUTTON_ID = ROLLOUT_ACTION_ID + ".11";
/**
* Rollout status label id.
*/
public static final String ROLLOUT_STATUS_LABEL_ID = "rollout.status.id";
/**
* Rollout group status label id.
*/
public static final String ROLLOUT_GROUP_STATUS_LABEL_ID = "rollout.group.status.id";
/**
* Rollout % or count option group id.
*/
public static final String ROLLOUT_ERROR_THRESOLD_OPTION_ID = "rollout.error.thresold.option.id";
/**
* Rollout target filter query value text area id.
*/
public static final String ROLLOUT_TARGET_FILTER_QUERY_FIELD = "rollout.target.filter.query.field.id";
/**
* Rollout target view- close button id.
*/
public static final String ROLLOUT_TARGET_VIEW_CLOSE_BUTTON_ID = "rollout.group.target.close.id";
/**
* Rollout group header caption.
*/
public static final String ROLLOUT_GROUP_HEADER_CAPTION = "rollout.group.header.caption";
/**
* Rollout group close id.
*/
public static final String ROLLOUT_GROUP_CLOSE = "rollout.group.close.id";
/**
* Rollout group targets count message label.
*/
public static final String ROLLOUT_GROUP_TARGET_LABEL = "rollout.group.target.label";
/**
* Action confirmation popup id.
*/
public static final String CONFIRMATION_POPUP_ID = "action.confirmation.popup.id";
/**
* Validation status icon .
*/
public static final String VALIDATION_STATUS_ICON_ID = "validation.status.icon";
/**
* Artifact upload status popup - minimize button id.
*/
public static final String UPLOAD_STATUS_POPUP_MINIMIZE_BUTTON_ID = "artifact.upload.minimize.button.id";
/**
* Artifact upload status popup - close button id.
*/
public static final String UPLOAD_STATUS_POPUP_CLOSE_BUTTON_ID = "artifact.upload.close.button.id";
/**
* Artifact upload status popup - resize button id.
*/
public static final String UPLOAD_STATUS_POPUP_RESIZE_BUTTON_ID = "artifact.upload.resize.button.id";
/**
* Artifact upload view - upload status button id.
*/
public static final String UPLOAD_STATUS_BUTTON = "artficat.upload.status.button.id";
/**
* Artifact uplaod view - uplod status popup id.
*/
public static final String UPLOAD_STATUS_POPUP_ID = "artifact.upload.status.popup.id";
/**
* Software module table - Manage metadata id.
*/
public static final String SW_TABLE_MANAGE_METADATA_ID = "swtable.manage.metadata.id";
/**
* Metadata key id.
*/
public static final String METADATA_KEY_FIELD_ID = "metadata.key.id";
/**
* Metadata value id.
*/
public static final String METADATA_VALUE_ID = "metadata.value.id";
/**
* Metadata add icon id.
*/
public static final String METADTA_ADD_ICON_ID = "metadata.add.icon.id";
/**
* Metadata table id.
*/
public static final String METDATA_TABLE_ID = "metadata.table.id";
/**
* Distribution set table - Manage metadata id.
*/
public static final String DS_TABLE_MANAGE_METADATA_ID = "dstable.manage.metadata.id";
/**
* DistributionSet - Metadata button id.
*/
public static final String DS_METADATA_DETAIL_LINK = "distributionset.metadata.detail.link";
/**
* Metadata popup id.
*/
public static final String METADATA_POPUP_ID = "metadata.popup.id";
/**
* DistributionSet table details tab id in Distributions .
*/
public static final String DISTRIBUTIONSET_DETAILS_TABSHEET_ID = "distributionset.details.tabsheet";
/**
* Software module table details tab id in Distributions .
*/
public static final String DIST_SW_MODULE_DETAILS_TABSHEET_ID = "dist.sw.module.details.tabsheet";
/**
* Software Module - Metadata button id.
*/
public static final String SW_METADATA_DETAIL_LINK = "softwaremodule.metadata.detail.link";
/**
* /* Private Constructor.
*/
private SPUIComponentIdProvider() {
}
}

View File

@@ -205,6 +205,12 @@ public final class SPUIDefinitions {
* Filter by status key.
*/
public static final String FILTER_BY_STATUS = "FilterByStatus";
/**
* Filter by overdue state key.
*/
public static final String FILTER_BY_OVERDUE_STATE = "FilterByOverdueState";
/**
* Filter by tag key.
*/
@@ -407,7 +413,7 @@ public final class SPUIDefinitions {
/**
* Filter by type layout width.
*/
public static final float FILTER_BY_TYPE_WIDTH = 150.0F;
public static final float FILTER_BY_TYPE_WIDTH = 190.0F;
/**
* Confirmation jukebox type.

View File

@@ -13,8 +13,9 @@
$unknown-color: $status-unknown-color;
$in-sync-color: $signal-green-color;
$pending-color: $signal-yellow-color;
$error-color: $signal-red-color;
$registered-color: $bosch-color-light-blue;
$error-color: $signal-red-color;
$overdue-color: $signal-black-color;
$registered-color: $signal-light-blue-color;
//Filter by status buttons group alignment
.target-status-filters {
@@ -27,6 +28,10 @@
.status-button-layout {
height: 40px !important;
}
.overdue-button-layout {
height: 40px !important;
}
//Filter Button applied with below styles based on the color
.unknownBtn {
@@ -68,6 +73,16 @@
.errorBtn:active:after {
border-color: $error-color;
}
.overdueBtn {
background: $overdue-color;
border: solid 3px $overdue-color;
}
.overdueBtn:focus:after,
.overdueBtn:active:after {
border-color: $overdue-color;
}
.registeredBtn {
background: $registered-color;

View File

@@ -101,10 +101,12 @@ $details-tab-caption-font-scale: .8;
//Generic text style
$generic-text-font-scale: .85;
$status-unknown-color: #3085cb;
$status-unknown-color: #d5d5d5;
$signal-green-color: #6eb553;
$signal-yellow-color: #ff0;
$signal-light-blue-color: #3085cb;
$signal-red-color: #f00;
$signal-black-color: #000;
$signal-orange-color: #ffa500;
$grey-light: #d5d5d5;

View File

@@ -178,7 +178,7 @@
}
.statusIconLightBlue {
color: $bosch-color-light-blue;
color: $signal-light-blue-color;
}
.v-button-statusIconLightBlue:after {
@@ -219,7 +219,7 @@
pointer-events: auto !important;
}
.blueSpinner{
@include valo-spinner($size: $v-font-size--small,$color: $bosch-color-light-blue);
@include valo-spinner($size: $v-font-size--small,$color: $signal-light-blue-color);
pointer-events: auto !important;
}

View File

@@ -44,7 +44,7 @@
.target-filter-spinner{
@include valo-spinner(
$size: $v-font-size--small,
$color: $bosch-color-light-blue
$color: $signal-light-blue-color
);
}

View File

@@ -128,8 +128,6 @@ label.combobox.type = Select Type
label.combobox.tag = Select Tag
label.choose.tag = Choose Tag to update
label.choose.tag.color = Choose Tag Color
label.filter = Filter:
label.target.filter.count = Total Targets:
label.target.filtered.total = Total filtered targets :
label.filter.selected = Selected:
label.filter.shown = Shown:
@@ -139,6 +137,7 @@ label.filter.selected = Selected :
label.filter.shown = Shown :
label.filter.targets = Filtered targets :
label.filter.status = Status,
label.filter.overdue = Overdue,
label.filter.tags = Tags,
label.filter.text = Search Text
label.filter.dist = Distribution,
@@ -159,6 +158,7 @@ label.target.id = Controller Id :
label.target.ip = Controller IP :
label.target.security.token = Security token :
label.filter.by.status = Filter by Status
label.filter.by.overdue = Filter by Overdue State
label.target.controller.attrs = <b>Controller attributes</b>
label.target.lastpolldate = Last poll :
label.no.tag.assigned = NO TAG
@@ -192,6 +192,7 @@ tooltip.status.registered = Registered
tooltip.status.pending = Pending
tooltip.status.error = Error
tooltip.status.insync = In-sync
tooltip.status.overdue = Overdue
tooltip.delete.module = Select and delete Software Module
tooltip.forced.item=Forced update action
tooltip.soft.item=Soft update action which interacts with an user as a attempt update action for example

View File

@@ -128,8 +128,6 @@ label.combobox.type = Select Type
label.combobox.tag = Select Tag
label.choose.tag = Choose Tag to update
label.choose.tag.color = Choose Tag Color
label.filter = Filter:
label.target.filter.count = Total Targets:
label.target.filtered.total = Total filtered targets :
label.filter.selected = Selected:
label.filter.shown = Shown:
@@ -138,6 +136,7 @@ label.target.filter.count = Total Targets :
label.filter.selected = Selected :
label.filter.shown = Shown :
label.filter.status = Status,
label.filter.overdue = Overdue,
label.filter.tags = Tags,
label.filter.text = Search Text
label.filter.dist = Distribution,
@@ -158,6 +157,7 @@ label.target.id = Controller Id :
label.target.ip = Controller IP :
label.target.security.token = Security token :
label.filter.by.status = Filter by Status
label.filter.by.overdue = Filter by Overdue State
label.target.controller.attrs = <b>Controller attributes</b>
label.target.lastpolldate = Last poll :
label.no.tag.assigned = NO TAG
@@ -191,6 +191,7 @@ tooltip.status.registered = Registered
tooltip.status.pending = Pending
tooltip.status.error = Error
tooltip.status.insync = In-sync
tooltip.status.overdue = Overdue
tooltip.delete.module = Select and delete Software Module
tooltip.forced.item=Forced update action
tooltip.soft.item=Soft update action which interacts with an user as a attempt update action for example

View File

@@ -127,8 +127,6 @@ label.combobox.type = Select Type
label.combobox.tag = Select Tag
label.choose.tag = Choose Tag to update
label.choose.tag.color = Choose Tag Color
label.filter = Filter:
label.target.filter.count = Total Targets:
label.target.filtered.total = Total filtered targets :
label.filter.selected = Selected:
label.filter.shown = Shown:
@@ -138,6 +136,7 @@ label.target.filter.count = Total Targets :
label.filter.selected = Selected :
label.filter.shown = Shown :
label.filter.status = Status,
label.filter.overdue = Overdue,
label.filter.tags = Tags,
label.filter.text = Search Text
label.filter.dist = Distribution,
@@ -158,6 +157,7 @@ label.target.id = Controller Id :
label.target.ip = Controller IP :
label.target.security.token = Security token :
label.filter.by.status = Filter by Status
label.filter.by.overdue = Filter by Overdue State
label.target.controller.attrs = <b>Controller attributes</b>
label.target.lastpolldate = Last poll :
label.no.tag.assigned = NO TAG
@@ -191,6 +191,7 @@ tooltip.status.registered = Registered
tooltip.status.pending = Pending
tooltip.status.error = Error
tooltip.status.insync = In-sync
tooltip.status.overdue = Overdue
tooltip.delete.module = Select and delete Software Module
tooltip.forced.item=Forced update action
tooltip.soft.item=Soft update action which interacts with an user as a attempt update action for example