correct save button enabled when changes exists. Changed lower/uppercase

spelling

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>
This commit is contained in:
Melanie Retter
2016-06-23 09:33:43 +02:00
parent 8507626b69
commit f567461993
17 changed files with 223 additions and 77 deletions

View File

@@ -193,7 +193,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
oldVendorValue = null; oldVendorValue = null;
if (window != null) { if (window != null) {
window.resetRequiredFieldsValues(); window.resetMandatoryAndEditedFields();
} }
} }
@@ -223,7 +223,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
/* add main layout to the window */ /* add main layout to the window */
window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null, window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null,
getMandatoryFields(formLayout)); getMandatoryFields(formLayout), null);
window.getButtonsLayout().removeStyleName("actionButtonsMargin"); window.getButtonsLayout().removeStyleName("actionButtonsMargin");
nameTextField.focus(); nameTextField.focus();
} }

View File

@@ -132,7 +132,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
public void createWindow() { public void createWindow() {
reset(); reset();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(),
getEditedFields());
} }
private Map<String, Boolean> getMandatoryFields() { private Map<String, Boolean> getMandatoryFields() {

View File

@@ -74,6 +74,8 @@ public class CommonDialogWindow extends Window implements Serializable {
private Map<String, Boolean> requiredFields; private Map<String, Boolean> requiredFields;
private final Map<String, Boolean> editedFields;
@Autowired @Autowired
private I18N i18n; private I18N i18n;
@@ -93,7 +95,7 @@ public class CommonDialogWindow extends Window implements Serializable {
*/ */
public CommonDialogWindow(final String caption, final Component content, final String helpLink, public CommonDialogWindow(final String caption, final Component content, final String helpLink,
final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener, final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener,
final Map<String, Boolean> requiredFields) { final Map<String, Boolean> requiredFields, final Map<String, Boolean> editedFields) {
checkNotNull(saveButtonClickListener); checkNotNull(saveButtonClickListener);
checkNotNull(cancelButtonClickListener); checkNotNull(cancelButtonClickListener);
this.caption = caption; this.caption = caption;
@@ -102,6 +104,7 @@ public class CommonDialogWindow extends Window implements Serializable {
this.saveButtonClickListener = saveButtonClickListener; this.saveButtonClickListener = saveButtonClickListener;
this.cancelButtonClickListener = cancelButtonClickListener; this.cancelButtonClickListener = cancelButtonClickListener;
this.requiredFields = requiredFields; this.requiredFields = requiredFields;
this.editedFields = editedFields;
init(); init();
} }
@@ -110,32 +113,32 @@ public class CommonDialogWindow extends Window implements Serializable {
if (StringUtils.isNotBlank(event.getText())) { if (StringUtils.isNotBlank(event.getText())) {
if (StringUtils.isNotBlank(textfield.getCaption())) { if (StringUtils.isNotBlank(textfield.getCaption())) {
getRequiredFields().put(textfield.getCaption(), Boolean.TRUE); requiredFields.put(textfield.getCaption(), Boolean.TRUE);
} }
getRequiredFields().put(textfield.getId(), Boolean.TRUE); getRequiredFields().put(textfield.getId(), Boolean.TRUE);
} else { } else {
if (StringUtils.isNotBlank(textfield.getCaption())) { if (StringUtils.isNotBlank(textfield.getCaption())) {
getRequiredFields().put(textfield.getCaption(), Boolean.FALSE); requiredFields.put(textfield.getCaption(), Boolean.FALSE);
} }
getRequiredFields().put(textfield.getId(), Boolean.FALSE); requiredFields.put(textfield.getId(), Boolean.FALSE);
} }
checkMandatoryFields(); checkMandatoryFieldsFilled();
} }
public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) { public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) {
if (event.getProperty().getValue() != null) { if (event.getProperty().getValue() != null) {
if (StringUtils.isNotBlank(select.getCaption())) { if (StringUtils.isNotBlank(select.getCaption())) {
getRequiredFields().put(select.getCaption(), Boolean.TRUE); requiredFields.put(select.getCaption(), Boolean.TRUE);
} }
getRequiredFields().put(select.getId(), Boolean.TRUE); requiredFields.put(select.getId(), Boolean.TRUE);
} else { } else {
if (StringUtils.isNotBlank(select.getCaption())) { if (StringUtils.isNotBlank(select.getCaption())) {
getRequiredFields().put(select.getCaption(), Boolean.FALSE); requiredFields.put(select.getCaption(), Boolean.FALSE);
} }
getRequiredFields().put(select.getId(), Boolean.FALSE); requiredFields.put(select.getId(), Boolean.FALSE);
} }
checkMandatoryFields(); checkMandatoryFieldsFilled();
} }
/** /**
@@ -143,7 +146,7 @@ public class CommonDialogWindow extends Window implements Serializable {
* mandatory fields are filled the save button is enabled. Otherwise the * mandatory fields are filled the save button is enabled. Otherwise the
* save button is disabled. * save button is disabled.
*/ */
private void checkMandatoryFields() { private void checkMandatoryFieldsFilled() {
for (final Map.Entry<String, Boolean> entry : requiredFields.entrySet()) { for (final Map.Entry<String, Boolean> entry : requiredFields.entrySet()) {
if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) {
@@ -154,35 +157,56 @@ public class CommonDialogWindow extends Window implements Serializable {
saveButton.setEnabled(true); saveButton.setEnabled(true);
} }
public void updateRequiredFields(final String fieldId, final Boolean filled) { private void checkExistsChanges() {
getRequiredFields().put(fieldId, filled); if (editedFields == null) {
checkMandatoryFields(); return;
}
for (final Map.Entry<String, Boolean> entry : editedFields.entrySet()) {
if (entry.getValue() != null && entry.getValue().equals(Boolean.TRUE)) {
saveButton.setEnabled(true);
return;
}
}
saveButton.setEnabled(false);
} }
public void checkChanges(final String newText, final String oldText) { public void updateRequiredFields(final String fieldId, final Boolean filled) {
requiredFields.put(fieldId, filled);
checkMandatoryFieldsFilled();
}
public void checkChanges(final String fieldName, final String newText, final String oldText) {
if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText)) if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText))
|| (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) { || (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) {
saveButton.setEnabled(true); editedFields.put(fieldName, Boolean.TRUE);
} else { } else {
saveButton.setEnabled(false); editedFields.put(fieldName, Boolean.FALSE);
} }
checkExistsChanges();
} }
public void checkColorChange(final Color newColor, final Color oldColor) { public void checkColorChange(final String fieldName, final Color newColor, final Color oldColor) {
if (newColor.equals(oldColor)) { if (newColor.equals(oldColor)) {
setSaveButtonEnabled(false); editedFields.put(fieldName, Boolean.FALSE);
} else { } else {
setSaveButtonEnabled(true); editedFields.put(fieldName, Boolean.TRUE);
} }
checkExistsChanges();
} }
public void resetRequiredFieldsValues() { public void resetMandatoryAndEditedFields() {
// Reset mandatory fields are filled marker resetFields(requiredFields);
if (getRequiredFields() != null) { resetFields(editedFields);
for (final Map.Entry<String, Boolean> entry : getRequiredFields().entrySet()) { }
private void resetFields(final Map<String, Boolean> fields) {
// Reset mandatory fields are filled marker / fields are edited marker
if (fields != null) {
for (final Map.Entry<String, Boolean> entry : fields.entrySet()) {
entry.setValue(null); entry.setValue(null);
} }
} }

View File

@@ -154,9 +154,9 @@ public final class SPUIComponentProvider {
public static CommonDialogWindow getWindow(final String caption, final String id, final String type, public static CommonDialogWindow getWindow(final String caption, final String id, final String type,
final Component content, final ClickListener saveButtonClickListener, final Component content, final ClickListener saveButtonClickListener,
final ClickListener cancelButtonClickListener, final String helpLink, final ClickListener cancelButtonClickListener, final String helpLink,
final Map<String, Boolean> requiredFields) { final Map<String, Boolean> requiredFields, final Map<String, Boolean> editedFields) {
return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener, return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener,
cancelButtonClickListener, helpLink, requiredFields); cancelButtonClickListener, helpLink, requiredFields, editedFields);
} }
/** /**

View File

@@ -47,10 +47,10 @@ public final class SPUIWindowDecorator {
public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type, public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type,
final Component content, final ClickListener saveButtonClickListener, final Component content, final ClickListener saveButtonClickListener,
final ClickListener cancelButtonClickListener, final String helpLink, final ClickListener cancelButtonClickListener, final String helpLink,
final Map<String, Boolean> requiredFields) { final Map<String, Boolean> requiredFields, final Map<String, Boolean> editedFields) {
final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener, final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener,
cancelButtonClickListener, requiredFields); cancelButtonClickListener, requiredFields, editedFields);
if (null != id) { if (null != id) {
window.setId(id); window.setId(id);
} }

View File

@@ -677,7 +677,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
public void createWindow() { public void createWindow() {
reset(); reset();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(),
getEditedFields());
} }
private Map<String, Boolean> getMandatoryFields() { private Map<String, Boolean> getMandatoryFields() {

View File

@@ -115,8 +115,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected void createWindow() { protected void createWindow() {
reset(); reset();
setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, setWindow(
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields())); SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW,
this, this::save, this::discard, null, getMandatoryFields(), getEditedFields()));
} }
private Map<String, Boolean> getMandatoryFields() { private Map<String, Boolean> getMandatoryFields() {
@@ -131,6 +132,13 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
return requiredFields; return requiredFields;
} }
protected Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>();
changeMap.put(tagDesc.getCaption(), Boolean.FALSE);
changeMap.put(colorPickerLayout.getId(), Boolean.FALSE);
return changeMap;
}
/** /**
* Save new tag / update new tag. * Save new tag / update new tag.
* *
@@ -213,7 +221,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) { protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) {
window.checkChanges(event.getText(), tagDescOriginal); window.checkChanges(tagDesc.getCaption(), event.getText(), tagDescOriginal);
} }
protected void buildLayout() { protected void buildLayout() {
@@ -375,7 +383,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
tagPreviewBtnClicked = false; tagPreviewBtnClicked = false;
if (window != null) { if (window != null) {
window.resetRequiredFieldsValues(); window.resetMandatoryAndEditedFields();
} }
} }
@@ -466,7 +474,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor());
} }
window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal);
} }
protected void closeWindow() { protected void closeWindow() {

View File

@@ -186,7 +186,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview); createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview);
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor()); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor());
} }
window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal); window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal);
} }
/** /**
@@ -206,6 +206,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) { protected void createOptionGroup(final boolean hasCreatePermission, final boolean hasUpdatePermission) {
optiongroup = new OptionGroup("Select Action"); optiongroup = new OptionGroup("Select Action");
optiongroup.setId(SPUIComponentIdProvider.OPTION_GROUP);
optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL); optiongroup.addStyleName(ValoTheme.OPTIONGROUP_SMALL);
optiongroup.addStyleName("custom-option-group"); optiongroup.addStyleName("custom-option-group");
optiongroup.setNullSelectionAllowed(false); optiongroup.setNullSelectionAllowed(false);

View File

@@ -179,11 +179,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
} }
private void listenerDistNameTextFieldChanged(final TextChangeEvent event) { private void listenerDistNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, distNameTextField); if (!editDistribution) {
window.checkMandatoryTextField(event, distNameTextField);
}
} }
private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) { private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, distVersionTextField); if (!editDistribution) {
window.checkMandatoryTextField(event, distVersionTextField);
}
} }
/** /**
@@ -410,7 +414,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
changedComponents.clear(); changedComponents.clear();
if (window != null) { if (window != null) {
window.resetRequiredFieldsValues(); window.resetMandatoryAndEditedFields();
} }
} }
@@ -519,9 +523,8 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
resetComponents(); resetComponents();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(), SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(),
null, getMandatoryFields()); null, getMandatoryFields(), null);
window.getButtonsLayout().removeStyleName("actionButtonsMargin"); window.getButtonsLayout().removeStyleName("actionButtonsMargin");
return window; return window;
} }

View File

@@ -17,6 +17,7 @@ import javax.annotation.PostConstruct;
import org.eclipse.hawkbit.repository.model.Action.ActionType; import org.eclipse.hawkbit.repository.model.Action.ActionType;
import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.I18N;
import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroup; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroup;
import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroupItemComponent; import org.vaadin.hene.flexibleoptiongroup.FlexibleOptionGroupItemComponent;
@@ -78,6 +79,7 @@ public class ActionTypeOptionGroupLayout extends HorizontalLayout {
private void createOptionGroup() { private void createOptionGroup() {
actionTypeOptionGroup = new FlexibleOptionGroup(); actionTypeOptionGroup = new FlexibleOptionGroup();
actionTypeOptionGroup.setId(SPUIComponentIdProvider.ROLLOUT_ACTION_BUTTON_ID);
actionTypeOptionGroup.addItem(ActionTypeOption.SOFT); actionTypeOptionGroup.addItem(ActionTypeOption.SOFT);
actionTypeOptionGroup.addItem(ActionTypeOption.FORCED); actionTypeOptionGroup.addItem(ActionTypeOption.FORCED);
actionTypeOptionGroup.addItem(ActionTypeOption.AUTO_FORCED); actionTypeOptionGroup.addItem(ActionTypeOption.AUTO_FORCED);

View File

@@ -244,7 +244,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
public Window getWindow() { public Window getWindow() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.target"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields()); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields(), null);
return window; return window;
} }
@@ -259,7 +259,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
} }
return requiredFields; return requiredFields;
} }
/** /**
* clear all fields of Target Edit Window. * clear all fields of Target Edit Window.
*/ */
@@ -274,7 +274,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
editTarget = Boolean.FALSE; editTarget = Boolean.FALSE;
if (window != null) { if (window != null) {
window.resetRequiredFieldsValues(); window.resetMandatoryAndEditedFields();
} }
} }

View File

@@ -150,26 +150,47 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private TextArea targetFilterQuery; private TextArea targetFilterQuery;
private Boolean updateMode = Boolean.FALSE;
private String distributionSetOriginal;
private Object actionGroupOriginal;
private String rolloutNameOriginal;
private String errorThresholdOriginal;;
private String triggerThresholdOriginal;
private String descriptionOriginal;
/** /**
* Create components and layout. * Create components and layout.
*/ */
public void init() { public void init() {
setSizeUndefined(); setSizeUndefined();
createRequiredComponents(); createRequiredComponents();
buildLayout(); buildLayout();
} }
public CommonDialogWindow getWindow() { public CommonDialogWindow getWindow() {
window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(), SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(),
uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields()); uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields());
return window; return window;
} }
private Map<String, Boolean> getMandatoryFields() { public CommonDialogWindow createUpdateWindow() {
updateMode = Boolean.TRUE;
return getWindow();
}
public CommonDialogWindow createAddWindow() {
updateMode = Boolean.FALSE;
return getWindow();
}
private Map<String, Boolean> getMandatoryFields() {
final Map<String, Boolean> requiredFields = new HashMap<>(); final Map<String, Boolean> requiredFields = new HashMap<>();
requiredFields.put(rolloutName.getId(), null); requiredFields.put(rolloutName.getId(), null);
requiredFields.put(distributionSet.getId(), null); requiredFields.put(distributionSet.getId(), null);
@@ -195,16 +216,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
setDefaultSaveStartGroupOption(); setDefaultSaveStartGroupOption();
totalTargetsLabel.setVisible(false); totalTargetsLabel.setVisible(false);
groupSizeLabel.setVisible(false); groupSizeLabel.setVisible(false);
removeComponent(targetFilterQuery); removeComponent(1, 2);
if (getComponent(1, 3) == null) { addComponent(targetFilterQueryCombo, 1, 2);
addComponent(targetFilterQueryCombo, 1, 3);
}
actionTypeOptionGroupLayout.selectDefaultOption(); actionTypeOptionGroupLayout.selectDefaultOption();
totalTargetsCount = 0L; totalTargetsCount = 0L;
rolloutForEdit = null; rolloutForEdit = null;
if (window != null) { if (window != null) {
window.resetRequiredFieldsValues(); window.resetMandatoryAndEditedFields();
} }
} }
@@ -284,7 +303,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
noOfGroups = createNoOfGroupsField(); noOfGroups = createNoOfGroupsField();
groupSizeLabel = createGroupSizeLabel(); groupSizeLabel = createGroupSizeLabel();
triggerThreshold = createTriggerThresold(); triggerThreshold = createTriggerThreshold();
errorThreshold = createErrorThreshold(); errorThreshold = createErrorThreshold();
description = createDescription(); description = createDescription();
errorThresholdOptionGroup = createErrorThresholdOptionGroup(); errorThresholdOptionGroup = createErrorThresholdOptionGroup();
@@ -293,6 +312,20 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
totalTargetsLabel = createTotalTargetsLabel(); totalTargetsLabel = createTotalTargetsLabel();
targetFilterQuery = createTargetFilterQuery(); targetFilterQuery = createTargetFilterQuery();
actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT); actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT);
actionTypeOptionGroupLayout.getActionTypeOptionGroup()
.addValueChangeListener(this::listenerActionGroupValueChanged);
}
private void listenerActionGroupValueChanged(final ValueChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryComboBox(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup());
}
if (event.getProperty().getValue() != null) {
window.checkChanges(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(),
event.getProperty().getValue().toString(), actionGroupOriginal.toString());
}
}
} }
private Label createGroupSizeLabel() { private Label createGroupSizeLabel() {
@@ -578,9 +611,20 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
descriptionField.setId(SPUIComponentIdProvider.ROLLOUT_DESCRIPTION_ID); descriptionField.setId(SPUIComponentIdProvider.ROLLOUT_DESCRIPTION_ID);
descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
descriptionField.setSizeUndefined(); descriptionField.setSizeUndefined();
descriptionField.addTextChangeListener(this::listenerDescriptionTextFieldChanged);
return descriptionField; return descriptionField;
} }
private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, description);
return;
}
window.checkChanges(description.getId(), event.getText(), descriptionOriginal);
}
}
private TextField createErrorThreshold() { private TextField createErrorThreshold() {
final TextField errorField = getTextfield("prompt.error.threshold"); final TextField errorField = getTextfield("prompt.error.threshold");
errorField.addValidator(new ThresholdFieldValidator()); errorField.addValidator(new ThresholdFieldValidator());
@@ -592,11 +636,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) { private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
window.checkMandatoryTextField(event, errorThreshold); if (!updateMode) {
window.checkMandatoryTextField(event, errorThreshold);
return;
}
window.checkChanges(errorThreshold.getId(), event.getText(), errorThresholdOriginal);
}
} }
private TextField createTriggerThresold() { private TextField createTriggerThreshold() {
final TextField thresholdField = getTextfield("prompt.tigger.threshold"); final TextField thresholdField = getTextfield("prompt.tigger.threshold");
thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID);
thresholdField.addValidator(new ThresholdFieldValidator()); thresholdField.addValidator(new ThresholdFieldValidator());
@@ -607,7 +656,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) { private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, triggerThreshold); if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, triggerThreshold);
return;
}
window.checkChanges(triggerThreshold.getId(), event.getText(), triggerThresholdOriginal);
}
} }
private TextField createNoOfGroupsField() { private TextField createNoOfGroupsField() {
@@ -622,7 +677,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) { private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, noOfGroups); if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, noOfGroups);
return;
}
window.checkChanges(noOfGroups.getId(), event.getText(), noOfGroups.getValue());
}
} }
private void onGroupNumberChange() { private void onGroupNumberChange() {
@@ -647,7 +708,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void listenerDistributionSetChanged(final ValueChangeEvent event) { private void listenerDistributionSetChanged(final ValueChangeEvent event) {
window.checkMandatoryComboBox(event, distributionSet); if (window != null) {
if (!updateMode) {
window.checkMandatoryComboBox(event, distributionSet);
return;
}
if (event.getProperty().getValue() != null) {
window.checkChanges(distributionSet.getId(), event.getProperty().getValue().toString(),
distributionSetOriginal);
}
}
} }
private void populateDistributionSet() { private void populateDistributionSet() {
@@ -673,7 +743,13 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) { private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, rolloutName); if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, rolloutName);
return;
}
window.checkChanges(rolloutName.getId(), event.getText(), rolloutNameOriginal);
}
} }
private String getRolloutName() { private String getRolloutName() {
@@ -691,7 +767,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
public void validate(final Object value) { public void validate(final Object value) {
try { try {
if (HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null if (HawkbitCommonUtil.trimAndNullIfEmpty(noOfGroups.getValue()) == null
|| HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null) { || (HawkbitCommonUtil.trimAndNullIfEmpty((String) targetFilterQueryCombo.getValue()) == null
&& targetFilterQuery.getValue() == null)) {
uiNotification uiNotification
.displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing")); .displayValidationError(i18n.get("message.rollout.noofgroups.or.targetfilter.missing"));
} else { } else {
@@ -781,12 +858,42 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
noOfGroups.setEnabled(false); noOfGroups.setEnabled(false);
targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery()); targetFilterQuery.setValue(rolloutForEdit.getTargetFilterQuery());
removeComponent(targetFilterQueryCombo); removeComponent(1, 2);
addComponent(targetFilterQuery, 1, 3); addComponent(targetFilterQuery, 1, 2);
totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery()); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(rolloutForEdit.getTargetFilterQuery());
totalTargetsLabel.setValue(getTotalTargetMessage()); totalTargetsLabel.setValue(getTotalTargetMessage());
totalTargetsLabel.setVisible(true); totalTargetsLabel.setVisible(true);
setOriginalValues();
}
private void setOriginalValues() {
distributionSetOriginal = distributionSet.getValue().toString();
actionGroupOriginal = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue();
rolloutNameOriginal = rolloutName.getValue();
triggerThresholdOriginal = triggerThreshold.getValue();
errorThresholdOriginal = errorThreshold.getValue();
descriptionOriginal = description.getValue();
}
private Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>();
if (rolloutForEdit == null) {
return changeMap;
}
if (rolloutForEdit.getStatus() != RolloutStatus.READY) {
changeMap.put(rolloutName.getId(), Boolean.FALSE);
changeMap.put(description.getId(), Boolean.FALSE);
} else {
changeMap.put(rolloutName.getId(), Boolean.FALSE);
changeMap.put(distributionSet.getId(), Boolean.FALSE);
changeMap.put(triggerThreshold.getId(), Boolean.FALSE);
changeMap.put(errorThreshold.getId(), Boolean.FALSE);
changeMap.put(description.getId(), Boolean.FALSE);
changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), Boolean.FALSE);
}
return changeMap;
} }
private void disableRequiredFieldsOnEdit() { private void disableRequiredFieldsOnEdit() {
@@ -852,7 +959,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
public String getValue() { public String getValue() {
return value; return value;
} }
} }
enum ERRORTHRESOLDOPTIONS { enum ERRORTHRESOLDOPTIONS {
@@ -870,6 +976,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
public String getValue() { public String getValue() {
return value; return value;
} }
} }
} }

View File

@@ -28,6 +28,7 @@ import org.eclipse.hawkbit.repository.model.Rollout;
import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus;
import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule;
import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus;
import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.common.grid.AbstractGrid;
import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData; import org.eclipse.hawkbit.ui.customrenderers.client.renderers.RolloutRendererData;
import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer;
@@ -62,7 +63,6 @@ import com.vaadin.server.FontAwesome;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
import com.vaadin.ui.Window;
import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent;
import com.vaadin.ui.renderers.HtmlRenderer; import com.vaadin.ui.renderers.HtmlRenderer;
@@ -438,7 +438,7 @@ public class RolloutListGrid extends AbstractGrid {
private void onUpdate(final ContextMenuData contextMenuData) { private void onUpdate(final ContextMenuData contextMenuData) {
addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId());
final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.createUpdateWindow();
addTargetWindow.setCaption(i18n.get("caption.update.rollout")); addTargetWindow.setCaption(i18n.get("caption.update.rollout"));
UI.getCurrent().addWindow(addTargetWindow); UI.getCurrent().addWindow(addTargetWindow);
addTargetWindow.setVisible(Boolean.TRUE); addTargetWindow.setVisible(Boolean.TRUE);

View File

@@ -92,7 +92,7 @@ public class RolloutListHeader extends AbstractGridHeader {
@Override @Override
protected void addNewItem(final ClickEvent event) { protected void addNewItem(final ClickEvent event) {
addUpdateRolloutWindow.resetComponents(); addUpdateRolloutWindow.resetComponents();
final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); final Window addTargetWindow = addUpdateRolloutWindow.createAddWindow();
UI.getCurrent().addWindow(addTargetWindow); UI.getCurrent().addWindow(addTargetWindow);
addTargetWindow.setVisible(Boolean.TRUE); addTargetWindow.setVisible(Boolean.TRUE);

View File

@@ -468,10 +468,10 @@ rollout.group.label.target.truncated = {0} targets has been truncated in the lis
prompt.number.of.groups = Number of groups prompt.number.of.groups = Number of groups
prompt.tigger.threshold = Trigger threshold prompt.tigger.threshold = Trigger threshold
prompt.error.threshold = Error threshold prompt.error.threshold = Error threshold
prompt.distribution.set = Distribution set prompt.distribution.set = Distribution Set
caption.configure.rollout = Configure Rollout caption.configure.rollout = Configure Rollout
caption.update.rollout = Update Rollout caption.update.rollout = Update Rollout
prompt.target.filter = Custom target filter prompt.target.filter = Custom Target Filter
message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.nonzero.group.number = Number of groups must be greater than zero
message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.max.group.number = Number of groups must not be greater than 500
message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists.

View File

@@ -436,7 +436,7 @@ header.rolloutgroup.target.message = Messages
rollout.group.label.target.truncated = {0} targets has been truncated in the list due the target size limit of {1} rollout.group.label.target.truncated = {0} targets has been truncated in the list due the target size limit of {1}
distribution.details.header = Distribution set distribution.details.header = Distribution Set
target.details.header = Target target.details.header = Target
header.caption.mandatory = Mandatory header.caption.mandatory = Mandatory
header.caption.typename = SoftwareModuleType header.caption.typename = SoftwareModuleType
@@ -461,7 +461,7 @@ prompt.error.threshold = Error threshold
prompt.distribution.set = Distribution Set prompt.distribution.set = Distribution Set
caption.configure.rollout = Configure Rollout caption.configure.rollout = Configure Rollout
caption.update.rollout = Update Rollout caption.update.rollout = Update Rollout
prompt.target.filter = Custom target filter prompt.target.filter = Custom Target Filter
message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.nonzero.group.number = Number of groups must be greater than zero
message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.max.group.number = Number of groups must not be greater than 500
message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists.

View File

@@ -448,10 +448,10 @@ menu.title = Software Provisioning
prompt.number.of.groups = Number of groups prompt.number.of.groups = Number of groups
prompt.tigger.threshold = Trigger threshold prompt.tigger.threshold = Trigger threshold
prompt.error.threshold = Error threshold prompt.error.threshold = Error threshold
prompt.distribution.set = Distribution set prompt.distribution.set = Distribution Set
caption.configure.rollout = Configure Rollout caption.configure.rollout = Configure Rollout
caption.update.rollout = Update Rollout caption.update.rollout = Update Rollout
prompt.target.filter = Custom target filter prompt.target.filter = Custom Target Filter
message.rollout.nonzero.group.number = Number of groups must be greater than zero message.rollout.nonzero.group.number = Number of groups must be greater than zero
message.rollout.max.group.number = Number of groups must not be greater than 500 message.rollout.max.group.number = Number of groups must not be greater than 500
message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists. message.rollout.duplicate.check = Rollout [ {0} ] must be unique, entered value already exists.