fix enable save button problem when update

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>
This commit is contained in:
Melanie Retter
2016-06-24 17:26:57 +02:00
parent a9ebb763f6
commit 850b7c6828
14 changed files with 499 additions and 609 deletions

View File

@@ -32,8 +32,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory;
import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventBus;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeEvent;
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.AbstractField; import com.vaadin.ui.AbstractField;
@@ -84,9 +82,15 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
private CommonDialogWindow window; private CommonDialogWindow window;
private String oldDescriptionValue; private String originalDescriptionValue;
private String oldVendorValue; private String originalVendorValue;
private String originalNameValue;
private String originalVersionValue;
private String originalComboBoxValue;
private Boolean editSwModule = Boolean.FALSE; private Boolean editSwModule = Boolean.FALSE;
@@ -135,26 +139,31 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY,
true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME); nameTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_NAME);
nameTextField.addTextChangeListener(this::listenerNameTextFieldChanged); nameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalNameValue));
nameTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, nameTextField));
/* version text field */ /* version text field */
versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "",
ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION); versionTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VERSION);
versionTextField.addTextChangeListener(this::listenerVersionTextFieldChanged); versionTextField
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVersionValue));
versionTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, versionTextField));
/* Vendor text field */ /* Vendor text field */
vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY, vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY,
false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR); vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR);
vendorTextField
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVendorValue));
descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style",
ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"),
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION); descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION);
addDescriptionTextChangeListener(); descTextArea
addVendorTextChangeListener(); .addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDescriptionValue));
typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true, typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true,
null, i18n.get("upload.swmodule.type")); null, i18n.get("upload.swmodule.type"));
@@ -162,43 +171,40 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY); typeComboBox.setStyleName(SPUIDefinitions.COMBO_BOX_SPECIFIC_STYLE + " " + ValoTheme.COMBOBOX_TINY);
typeComboBox.setNewItemsAllowed(Boolean.FALSE); typeComboBox.setNewItemsAllowed(Boolean.FALSE);
typeComboBox.setImmediate(Boolean.TRUE); typeComboBox.setImmediate(Boolean.TRUE);
typeComboBox.addValueChangeListener(this::listenerTypeComboBoxChanged);
populateTypeNameCombo(); populateTypeNameCombo();
typeComboBox.addValueChangeListener(
resetOldValues(); event -> window.checkMandatoryEditedValue(event, typeComboBox, originalComboBoxValue));
}
private void listenerNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, nameTextField);
}
private void listenerVersionTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, versionTextField);
}
private void listenerTypeComboBoxChanged(final ValueChangeEvent event) {
window.checkMandatoryComboBox(event, typeComboBox);
} }
private void populateTypeNameCombo() { private void populateTypeNameCombo() {
typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer( typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer(
new BeanQueryFactory<SoftwareModuleTypeBeanQuery>(SoftwareModuleTypeBeanQuery.class))); new BeanQueryFactory<SoftwareModuleTypeBeanQuery>(SoftwareModuleTypeBeanQuery.class)));
typeComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); typeComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME);
} }
private void resetOldValues() { private void resetComponents() {
oldDescriptionValue = null;
oldVendorValue = null; vendorTextField.clear();
nameTextField.clear();
versionTextField.clear();
descTextArea.clear();
typeComboBox.clear();
originalDescriptionValue = null;
originalVendorValue = null;
originalComboBoxValue = null;
originalNameValue = null;
originalVersionValue = null;
if (window != null) { if (window != null) {
window.resetMandatoryAndEditedFields(); window.reset();
} }
} }
private void createWindow() { private void createWindow() {
resetComponents();
final Label madatoryStarLabel = new Label("*"); final Label madatoryStarLabel = new Label("*");
madatoryStarLabel.setStyleName("v-caption v-required-field-indicator"); madatoryStarLabel.setStyleName("v-caption v-required-field-indicator");
madatoryStarLabel.setWidth(null); madatoryStarLabel.setWidth(null);
@@ -223,9 +229,9 @@ 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), null, i18n); getMandatoryFields(formLayout), geEditedFields(), i18n);
window.getButtonsLayout().removeStyleName("actionButtonsMargin"); window.getButtonsLayout().removeStyleName("actionButtonsMargin");
nameTextField.focus(); typeComboBox.focus();
} }
private Map<String, Boolean> getMandatoryFields(final FormLayout formLayout) { private Map<String, Boolean> getMandatoryFields(final FormLayout formLayout) {
@@ -234,18 +240,20 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), Boolean.FALSE);
} }
} }
return requiredFields; return requiredFields;
} }
private void addDescriptionTextChangeListener() { private Map<String, Boolean> geEditedFields() {
descTextArea.addTextChangeListener(event -> window.setSaveButtonEnabled(hasDescriptionChanged(event))); final Map<String, Boolean> editedFields = new HashMap<>();
} editedFields.put(typeComboBox.getId(), Boolean.FALSE);
editedFields.put(nameTextField.getId(), Boolean.FALSE);
private void addVendorTextChangeListener() { editedFields.put(vendorTextField.getId(), Boolean.FALSE);
vendorTextField.addTextChangeListener(event -> window.setSaveButtonEnabled(hasVendorChanged(event))); editedFields.put(versionTextField.getId(), Boolean.FALSE);
editedFields.put(descTextArea.getId(), Boolean.FALSE);
return editedFields;
} }
/** /**
@@ -309,13 +317,13 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
: HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getVendor())); : HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getVendor()));
descTextArea.setValue(swModle.getDescription() == null ? HawkbitCommonUtil.SP_STRING_EMPTY descTextArea.setValue(swModle.getDescription() == null ? HawkbitCommonUtil.SP_STRING_EMPTY
: HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getDescription())); : HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getDescription()));
oldDescriptionValue = descTextArea.getValue(); originalDescriptionValue = descTextArea.getValue();
oldVendorValue = vendorTextField.getValue(); originalVendorValue = vendorTextField.getValue();
originalComboBoxValue = swModle.getType().getName();
if (swModle.getType().isDeleted()) { if (swModle.getType().isDeleted()) {
typeComboBox.addItem(swModle.getType().getName()); typeComboBox.addItem(swModle.getType().getName());
} }
typeComboBox.setValue(swModle.getType().getName()); typeComboBox.setValue(swModle.getType().getName());
window.setSaveButtonEnabled(Boolean.FALSE);
} }
/** /**
@@ -324,7 +332,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
private void closeThisWindow() { private void closeThisWindow() {
window.close(); window.close();
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -361,15 +368,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
} else { } else {
addNewBaseSoftware(); addNewBaseSoftware();
} }
window.setSaveButtonEnabled(false);
}
private boolean hasDescriptionChanged(final TextChangeEvent event) {
return !(event.getText().equals(oldDescriptionValue) && vendorTextField.getValue().equals(oldVendorValue));
}
private boolean hasVendorChanged(final TextChangeEvent event) {
return !(event.getText().equals(oldVendorValue) && descTextArea.getValue().equals(oldDescriptionValue));
} }
public FormLayout getFormLayout() { public FormLayout getFormLayout() {

View File

@@ -44,7 +44,6 @@ import com.vaadin.ui.UI;
/** /**
* Header of Software module table. * Header of Software module table.
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope

View File

@@ -34,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory;
import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope; import com.vaadin.spring.annotation.ViewScope;
@@ -92,13 +91,15 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true, ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_NAME, true, "", i18n.get("textfield.name"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME); tagName.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_NAME);
tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagName()));
tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName));
typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true, ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_KEY, true, "", i18n.get("textfield.key"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY); typeKey.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_KEY);
typeKey.addTextChangeListener(this::typeKeyTextFieldChanged); typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTypeKey()));
typeKey.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, typeKey));
tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TYPE_DESC, false, "",
@@ -106,19 +107,11 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC); tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC);
tagDesc.setImmediate(true); tagDesc.setImmediate(true);
tagDesc.setNullRepresentation(""); tagDesc.setNullRepresentation("");
tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc()));
singleMultiOptionGroup(); singleMultiOptionGroup();
} }
private void listenerTagNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, tagName);
}
private void typeKeyTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, typeKey);
}
@Override @Override
protected void buildLayout() { protected void buildLayout() {
@@ -142,7 +135,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), Boolean.FALSE);
} }
} }
return requiredFields; return requiredFields;
@@ -164,6 +157,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
} else { } else {
assignOptiongroup.setEnabled(true); assignOptiongroup.setEnabled(true);
} }
assignOptiongroup.select(singleAssignStr);
} }
/** /**
@@ -195,18 +189,19 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
@Override @Override
protected void setTagDetails(final String targetTagSelected) { protected void setTagDetails(final String targetTagSelected) {
tagName.setValue(targetTagSelected); tagName.setValue(targetTagSelected);
setOriginalTagName(targetTagSelected);
final SoftwareModuleType selectedTypeTag = swTypeManagementService final SoftwareModuleType selectedTypeTag = swTypeManagementService
.findSoftwareModuleTypeByName(targetTagSelected); .findSoftwareModuleTypeByName(targetTagSelected);
if (null != selectedTypeTag) { if (null != selectedTypeTag) {
tagDesc.setValue(selectedTypeTag.getDescription()); tagDesc.setValue(selectedTypeTag.getDescription());
setTagDescOriginal(selectedTypeTag.getDescription()); setOriginalTagDesc(selectedTypeTag.getDescription());
typeKey.setValue(selectedTypeTag.getKey()); typeKey.setValue(selectedTypeTag.getKey());
setOriginalTypeKey(selectedTypeTag.getKey());
if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) { if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) {
assignOptiongroup.setValue(multiAssignStr); assignOptiongroup.setValue(multiAssignStr);
} else { } else {
assignOptiongroup.setValue(singleAssignStr); assignOptiongroup.setValue(singleAssignStr);
} }
setColorPickerComponentsColor(selectedTypeTag.getColour()); setColorPickerComponentsColor(selectedTypeTag.getColour());
} }
} }
@@ -245,7 +240,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
updateSWModuleType(existingSMTypeByName); updateSWModuleType(existingSMTypeByName);
} }
window.setSaveButtonEnabled(false); // window.setSaveButtonEnabled(false);
} }
private void createNewSWModuleType() { private void createNewSWModuleType() {

View File

@@ -11,8 +11,10 @@ package org.eclipse.hawkbit.ui.common;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow; import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow;
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
@@ -22,16 +24,14 @@ import org.eclipse.hawkbit.ui.management.targettable.TargetAddUpdateWindowLayout
import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.I18N;
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.FontAwesome; import com.vaadin.server.FontAwesome;
import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.AbstractTextField;
import com.vaadin.ui.Alignment; import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Button.ClickListener;
@@ -74,9 +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; private Map<String, Boolean> editedFields;
@Autowired
private final I18N i18n; private final I18N i18n;
/** /**
@@ -104,41 +103,155 @@ 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;
if (requiredFields == null) {
this.requiredFields = Collections.emptyMap();
}
this.editedFields = editedFields; this.editedFields = editedFields;
if (editedFields == null) {
this.editedFields = Collections.emptyMap();
}
this.i18n = i18n; this.i18n = i18n;
init(); init();
} }
public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) { /**
* Checks if all mandatory fields are filled, and if there are changes in
if (StringUtils.isNotBlank(event.getText())) { * the current field. If yes, the save button will be enabled.
if (StringUtils.isNotBlank(textfield.getCaption())) { *
requiredFields.put(textfield.getCaption(), Boolean.TRUE); * @param event
} * TextChangeEvent
getRequiredFields().put(textfield.getId(), Boolean.TRUE); * @param originalValue
} else { * original Value of the current field
if (StringUtils.isNotBlank(textfield.getCaption())) { */
requiredFields.put(textfield.getCaption(), Boolean.FALSE); public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) {
} final Component component = event.getComponent();
requiredFields.put(textfield.getId(), Boolean.FALSE); if (!(component instanceof AbstractComponent)) {
throw new IllegalStateException("Only AbstractComponent not allow");
} }
checkMandatoryFieldsFilled();
if (requiredFields.containsKey(component.getId())) {
final boolean isTextChangeNotEmpty = StringUtils.isNotBlank(event.getText());
setRequiredFieldChangeValue((AbstractComponent) component, isTextChangeNotEmpty);
}
checkChanges(component.getId(), event.getText(), originalValue);
checkSaveButtonEnabled();
} }
public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) { /**
* Checks if all mandatory fields are filled, and if there are changes in
if (event.getProperty().getValue() != null) { * the current field. If yes, the save button will be enabled.
if (StringUtils.isNotBlank(select.getCaption())) { *
requiredFields.put(select.getCaption(), Boolean.TRUE); * @param event
} * ValueChangeEvent
requiredFields.put(select.getId(), Boolean.TRUE); * @param component
} else { * current Component
if (StringUtils.isNotBlank(select.getCaption())) { * @param originalValue
requiredFields.put(select.getCaption(), Boolean.FALSE); * original Value of the current field
} */
requiredFields.put(select.getId(), Boolean.FALSE); public void checkMandatoryEditedValue(final ValueChangeEvent event, final AbstractComponent component,
final String originalValue) {
final boolean isChangedValueNotNull = event.getProperty().getValue() != null;
if (requiredFields.containsKey(component.getId())) {
setRequiredFieldChangeValue(component, isChangedValueNotNull);
} }
checkMandatoryFieldsFilled(); if (event.getProperty().getValue() != null) {
checkChanges(component.getId(), event.getProperty().getValue().toString(), originalValue);
} else {
checkChanges(component.getId(), null, originalValue);
}
checkSaveButtonEnabled();
}
/**
* Checks if all mandatory fields are filled, and if there are changes in
* the current field. (Boolean) If yes, the save button will be enabled.
*
* @param event
* ValueChangeEvent
* @param component
* current Component
* @param originalValue
* original Boolean Value of the current field
*/
public void checkMandatoryEditedValueBoolean(final ValueChangeEvent event, final AbstractComponent component,
final Boolean originalValue) {
final boolean isChangedValueNotNull = event.getProperty().getValue() != null;
if (requiredFields.containsKey(component.getId())) {
setRequiredFieldChangeValue(component, isChangedValueNotNull);
}
final Boolean changed = (Boolean) event.getProperty().getValue();
editedFields.put(component.getId(), BooleanUtils.compare(changed, originalValue) != 0);
checkSaveButtonEnabled();
}
/**
* Updates the map of required fields if a value is set. (e.g. on Update
* when editing a component)
*
* @param event
* ValueChangeEvent
* @param component
* current Component
*/
public void setRequiredFieldWhenUpdate(final ValueChangeEvent event, final AbstractComponent component) {
final boolean isChangedValueNotNull = event.getProperty().getValue() != null;
setRequiredFieldChangeValue(component, isChangedValueNotNull);
}
/**
* * Updates the map of required fields if a value is set. (e.g. on Update
* when editing a component)
*
* @param fieldId
* Id of the current component
* @param filled
* Boolean if field is filled
*/
public void updateRequiredFields(final String fieldId, final Boolean filled) {
requiredFields.put(fieldId, filled);
checkSaveButtonEnabled();
}
/**
* Checks if Color is changed
*
* @param fieldId
* Id of the current component
* @param newColor
* new Color
* @param oldColor
* old Color
*/
public void checkColorChange(final String fieldId, final Color newColor, final Color oldColor) {
editedFields.put(fieldId, !newColor.equals(oldColor));
checkSaveButtonEnabled();
}
/**
* Updates the map of fields which can be edited.
*
* @param fieldId
* Id of the current component
* @param hasTextValueChanged
* Boolean if value has changed
*/
public void updateEditedFields(final String fieldId, final Boolean hasTextValueChanged) {
editedFields.put(fieldId, hasTextValueChanged);
checkSaveButtonEnabled();
}
/**
* Resets the map of mandatory and edited Fields and disable the save button
*/
public void reset() {
saveButton.setEnabled(false);
resetFields();
}
private void setRequiredFieldChangeValue(final AbstractComponent component, final boolean isTextChangeNotEmpty) {
requiredFields.put(component.getId(), isTextChangeNotEmpty);
} }
/** /**
@@ -146,69 +259,23 @@ 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 checkMandatoryFieldsFilled() { private void checkSaveButtonEnabled() {
saveButton.setEnabled(!requiredFields.containsValue(Boolean.FALSE) && editedFields.containsValue(Boolean.TRUE));
}
private void checkChanges(final String fieldName, final String newText, final String oldText) {
final boolean hasTextValueChanged = (StringUtils.isNotBlank(newText) && !newText.equals(oldText))
|| (StringUtils.isNotBlank(oldText) && !oldText.equals(newText));
editedFields.put(fieldName, hasTextValueChanged);
}
private void resetFields() {
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)) { entry.setValue(Boolean.FALSE);
saveButton.setEnabled(false);
return;
}
} }
saveButton.setEnabled(true);
}
private void checkExistsChanges() {
if (editedFields == null) {
return;
}
for (final Map.Entry<String, Boolean> entry : editedFields.entrySet()) { for (final Map.Entry<String, Boolean> entry : editedFields.entrySet()) {
if (entry.getValue() != null && entry.getValue().equals(Boolean.TRUE)) { entry.setValue(Boolean.FALSE);
saveButton.setEnabled(true);
return;
}
}
saveButton.setEnabled(false);
}
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))
|| (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) {
editedFields.put(fieldName, Boolean.TRUE);
} else {
editedFields.put(fieldName, Boolean.FALSE);
}
checkExistsChanges();
}
public void checkColorChange(final String fieldName, final Color newColor, final Color oldColor) {
if (newColor.equals(oldColor)) {
editedFields.put(fieldName, Boolean.FALSE);
} else {
editedFields.put(fieldName, Boolean.TRUE);
}
checkExistsChanges();
}
public void resetMandatoryAndEditedFields() {
resetFields(requiredFields);
resetFields(editedFields);
}
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);
}
} }
} }
@@ -258,20 +325,22 @@ public class CommonDialogWindow extends Window implements Serializable {
private void createMandatoryLabel() { private void createMandatoryLabel() {
if (existsMandatoryFieldsInWindowContent()) { if (!existsMandatoryFieldsInWindowContent()) {
final Label mandatoryLabel = new Label(i18n.get("label.mandatory.field")); return;
mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY);
if (content instanceof TargetAddUpdateWindowLayout) {
((TargetAddUpdateWindowLayout) content).getFormLayout().addComponent(mandatoryLabel);
} else if (content instanceof SoftwareModuleAddUpdateWindow) {
((SoftwareModuleAddUpdateWindow) content).getFormLayout().addComponent(mandatoryLabel);
} else if (content instanceof AbstractCreateUpdateTagLayout) {
((AbstractCreateUpdateTagLayout) content).getMainLayout().addComponent(mandatoryLabel);
}
mainLayout.addComponent(mandatoryLabel);
} }
final Label mandatoryLabel = new Label(i18n.get("label.mandatory.field"));
mandatoryLabel.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_TINY);
if (content instanceof TargetAddUpdateWindowLayout) {
((TargetAddUpdateWindowLayout) content).getFormLayout().addComponent(mandatoryLabel);
} else if (content instanceof SoftwareModuleAddUpdateWindow) {
((SoftwareModuleAddUpdateWindow) content).getFormLayout().addComponent(mandatoryLabel);
} else if (content instanceof AbstractCreateUpdateTagLayout) {
((AbstractCreateUpdateTagLayout) content).getMainLayout().addComponent(mandatoryLabel);
}
mainLayout.addComponent(mandatoryLabel);
} }
private void createCancelButton() { private void createCancelButton() {
@@ -292,18 +361,14 @@ public class CommonDialogWindow extends Window implements Serializable {
saveButton.setSizeUndefined(); saveButton.setSizeUndefined();
saveButton.addStyleName("default-color"); saveButton.addStyleName("default-color");
saveButton.addClickListener(saveButtonClickListener); saveButton.addClickListener(saveButtonClickListener);
saveButton.setEnabled(!existsMandatoryFieldsInWindowContent()); saveButton.setEnabled(false);
buttonsLayout.addComponent(saveButton); buttonsLayout.addComponent(saveButton);
buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT); buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT);
buttonsLayout.setExpandRatio(saveButton, 1.0F); buttonsLayout.setExpandRatio(saveButton, 1.0F);
} }
private boolean existsMandatoryFieldsInWindowContent() { private boolean existsMandatoryFieldsInWindowContent() {
return !requiredFields.isEmpty();
if (requiredFields != null && requiredFields.size() > 0) {
return true;
}
return false;
} }
private void addHelpLink() { private void addHelpLink() {

View File

@@ -14,7 +14,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareManagement;
@@ -41,7 +40,6 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
import com.vaadin.data.Item; import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.IndexedContainer; import com.vaadin.data.util.IndexedContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.FontAwesome; 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;
@@ -93,6 +91,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
private IndexedContainer originalSelectedTableContainer; private IndexedContainer originalSelectedTableContainer;
private String originalTypeKey;
@Override @Override
protected void createRequiredComponents() { protected void createRequiredComponents() {
@@ -102,13 +102,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "",
i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME); tagName.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_NAME);
tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagName()));
tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName));
typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "", typeKey = SPUIComponentProvider.getTextField(i18n.get("textfield.key"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"), ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"),
true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY); typeKey.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_KEY);
typeKey.addTextChangeListener(this::listenerTypeKeyTextFieldChanged); typeKey.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTypeKey));
typeKey.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, typeKey));
tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "", ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_DESC, false, "",
@@ -116,16 +118,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC); tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC);
tagDesc.setImmediate(true); tagDesc.setImmediate(true);
tagDesc.setNullRepresentation(""); tagDesc.setNullRepresentation("");
tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc()));
}
private void listenerTagNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, tagName);
}
private void listenerTypeKeyTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, typeKey);
} }
@Override @Override
@@ -279,14 +272,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
for (final Long id : selectedIds) { for (final Long id : selectedIds) {
addTargetTableData(id); addTargetTableData(id);
} }
if (optiongroup.getValue().equals(updateTypeStr)) { window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
updateMandatoryFields();
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
} else {
if (!selectedTableContainer.getItemIds().isEmpty()) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
}
}
} }
} }
@@ -298,19 +284,20 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
for (final Long id : selectedIds) { for (final Long id : selectedIds) {
addSourceTableData(id); addSourceTableData(id);
selectedTable.removeItem(id); selectedTable.removeItem(id);
if (optiongroup.getValue().equals(updateTypeStr)) { window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
updateMandatoryFields();
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
}
} }
} }
} }
private Boolean hasContentChanged() { private Boolean hasContentChanged() {
if (originalSelectedTableContainer == null) {
originalSelectedTableContainer = new IndexedContainer();
}
for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) { for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) {
final long itemId = (Long) itemIterator.next(); final long itemId = (Long) itemIterator.next();
if (!originalSelectedTableContainer.containsId(itemId)) { if (!originalSelectedTableContainer.containsId(itemId)) {
window.updateEditedFields(selectedTable.getId(), Boolean.TRUE);
return Boolean.TRUE; return Boolean.TRUE;
} }
} }
@@ -319,23 +306,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
.hasNext();) { .hasNext();) {
final long itemId = (Long) itemIterator.next(); final long itemId = (Long) itemIterator.next();
if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) { if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) {
window.updateEditedFields(selectedTable.getId(), Boolean.TRUE);
return Boolean.TRUE; return Boolean.TRUE;
} }
} }
if (selectedTableContainer.size() > 0) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
}
return Boolean.FALSE; return Boolean.FALSE;
} }
private void updateMandatoryFields() {
if (StringUtils.isNotBlank(tagName.getValue())) {
window.getRequiredFields().put("Name", Boolean.TRUE);
}
if (StringUtils.isNotBlank(typeKey.getValue())) {
window.getRequiredFields().put("Key", Boolean.TRUE);
}
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void getSourceTableData() { private void getSourceTableData() {
@@ -543,6 +524,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
super.optionValueChanged(event); super.optionValueChanged(event);
if (updateTypeStr.equals(event.getProperty().getValue())) { if (updateTypeStr.equals(event.getProperty().getValue())) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
selectedTable.getContainerDataSource().removeAllItems(); selectedTable.getContainerDataSource().removeAllItems();
getSourceTableData(); getSourceTableData();
distTypeSelectLayout.setEnabled(false); distTypeSelectLayout.setEnabled(false);
@@ -600,14 +582,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
protected void setTagDetails(final String distSetTypeSelected) { protected void setTagDetails(final String distSetTypeSelected) {
tagName.setValue(distSetTypeSelected); tagName.setValue(distSetTypeSelected);
setOriginalTagName(distSetTypeSelected);
getSourceTableData(); getSourceTableData();
selectedTable.getContainerDataSource().removeAllItems(); selectedTable.getContainerDataSource().removeAllItems();
final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected); final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected);
if (null != selectedTypeTag) { if (null != selectedTypeTag) {
tagDesc.setValue(selectedTypeTag.getDescription()); tagDesc.setValue(selectedTypeTag.getDescription());
setTagDescOriginal(selectedTypeTag.getDescription()); setOriginalTagDesc(selectedTypeTag.getDescription());
typeKey.setValue(selectedTypeTag.getKey()); typeKey.setValue(selectedTypeTag.getKey());
setTypeKeyOriginal(selectedTypeTag.getKey()); setOriginalTypeKey(selectedTypeTag.getKey());
if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) {
distTypeSelectLayout.setEnabled(true); distTypeSelectLayout.setEnabled(true);
selectedTable.setEnabled(true); selectedTable.setEnabled(true);
@@ -669,7 +652,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
} else { } else {
updateDistributionSetType(existingDistTypeByKey); updateDistributionSetType(existingDistTypeByKey);
} }
window.setSaveButtonEnabled(false);
} }
} }
@@ -687,14 +669,24 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), Boolean.FALSE);
} }
} }
// Selected SoftwareModulesType // Selected SoftwareModulesType
requiredFields.put(selectedTable.getId(), null); requiredFields.put(selectedTable.getId(), Boolean.FALSE);
return requiredFields; return requiredFields;
} }
@Override
protected Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>();
changeMap.put(tagName.getId(), Boolean.FALSE);
changeMap.put(colorPickerLayout.getId(), Boolean.FALSE);
changeMap.put(tagDesc.getId(), Boolean.FALSE);
changeMap.put(selectedTable.getId(), Boolean.FALSE);
return changeMap;
}
@Override @Override
protected void previewButtonClicked() { protected void previewButtonClicked() {
if (!tagPreviewBtnClicked) { if (!tagPreviewBtnClicked) {
@@ -729,4 +721,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID); optiongroup.setId(SPUIDefinitions.CREATE_OPTION_GROUP_DISTRIBUTION_SET_TYPE_ID);
} }
@Override
public String getOriginalTypeKey() {
return originalTypeKey;
}
@Override
public void setOriginalTypeKey(final String originalTypeKey) {
this.originalTypeKey = originalTypeKey;
}
} }

View File

@@ -36,7 +36,6 @@ import org.vaadin.spring.events.EventBus;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.Page; import com.vaadin.server.Page;
import com.vaadin.shared.ui.colorpicker.Color; import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.ui.AbstractField; import com.vaadin.ui.AbstractField;
@@ -110,8 +109,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected String tagNameValue; protected String tagNameValue;
protected String tagDescValue; protected String tagDescValue;
protected Color selectedColorOriginal; private Color originalSelectedColor;
private String tagDescOriginal; private String originalTagDesc;
private String originalTagName;
protected void createWindow() { protected void createWindow() {
reset(); reset();
@@ -126,7 +126,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), null);
} }
} }
return requiredFields; return requiredFields;
@@ -134,8 +134,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected Map<String, Boolean> getEditedFields() { protected Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>(); final Map<String, Boolean> changeMap = new HashMap<>();
changeMap.put(tagDesc.getCaption(), Boolean.FALSE); changeMap.put(tagName.getId(), Boolean.FALSE);
changeMap.put(colorPickerLayout.getId(), Boolean.FALSE); changeMap.put(colorPickerLayout.getId(), Boolean.FALSE);
changeMap.put(tagDesc.getId(), Boolean.FALSE);
return changeMap; return changeMap;
} }
@@ -192,7 +193,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true, ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME); tagName.setId(SPUIDefinitions.NEW_TARGET_TAG_NAME);
tagName.addTextChangeListener(this::listenerTagNameTextFieldChanged); tagName.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagName));
tagName.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, tagName));
tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "", tagDesc = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"), ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_DESC, false, "", i18n.get("textfield.description"),
@@ -200,7 +202,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC); tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC);
tagDesc.setImmediate(true); tagDesc.setImmediate(true);
tagDesc.setNullRepresentation(""); tagDesc.setNullRepresentation("");
tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged); tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagDesc));
tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "", tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "",
i18n.get("label.combobox.tag")); i18n.get("label.combobox.tag"));
@@ -214,16 +216,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE); tagColorPreviewBtn.setStyleName(TAG_DYNAMIC_STYLE);
} }
private void listenerTagNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, tagName);
}
protected void listenerTagDescTextAreaChanged(final TextChangeEvent event) {
window.checkChanges(tagDesc.getCaption(), event.getText(), tagDescOriginal);
}
protected void buildLayout() { protected void buildLayout() {
mainLayout = new GridLayout(3, 2); mainLayout = new GridLayout(3, 2);
@@ -352,7 +344,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox); comboLayout.removeComponent(tagNameComboBox);
} }
window.setSaveButtonEnabled(false); window.reset();
// close the color picker layout // close the color picker layout
tagPreviewBtnClicked = false; tagPreviewBtnClicked = false;
// reset the selected color - Set default color // reset the selected color - Set default color
@@ -383,7 +375,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
tagPreviewBtnClicked = false; tagPreviewBtnClicked = false;
if (window != null) { if (window != null) {
window.resetMandatoryAndEditedFields(); window.reset();
} }
} }
@@ -474,13 +466,12 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor());
} }
window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), originalSelectedColor);
} }
protected void closeWindow() { protected void closeWindow() {
window.close(); window.close();
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -687,23 +678,39 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
} }
public Color getSelectedColorOriginal() { public Color getSelectedColorOriginal() {
return selectedColorOriginal; return originalSelectedColor;
} }
public void setSelectedColorOriginal(final Color selectedColorOriginal) { public void setSelectedColorOriginal(final Color selectedColorOriginal) {
this.selectedColorOriginal = selectedColorOriginal; this.originalSelectedColor = selectedColorOriginal;
}
public String getTagDescOriginal() {
return tagDescOriginal;
}
public void setTagDescOriginal(final String tagDescOriginal) {
this.tagDescOriginal = tagDescOriginal;
} }
public GridLayout getMainLayout() { public GridLayout getMainLayout() {
return mainLayout; return mainLayout;
} }
public Color getOriginalSelectedColor() {
return originalSelectedColor;
}
public void setOriginalSelectedColor(final Color originalSelectedColor) {
this.originalSelectedColor = originalSelectedColor;
}
public String getOriginalTagDesc() {
return originalTagDesc;
}
public void setOriginalTagDesc(final String originalTagDesc) {
this.originalTagDesc = originalTagDesc;
}
public String getOriginalTagName() {
return originalTagName;
}
public void setOriginalTagName(final String originalTagName) {
this.originalTagName = originalTagName;
}
} }

View File

@@ -33,10 +33,8 @@ import com.vaadin.ui.components.colorpicker.ColorSelector;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
/** /**
*
* Superclass defining common properties and methods for creating/updating * Superclass defining common properties and methods for creating/updating
* types. * types.
*
*/ */
public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout { public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
@@ -45,7 +43,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
protected String createTypeStr; protected String createTypeStr;
protected String updateTypeStr; protected String updateTypeStr;
protected TextField typeKey; protected TextField typeKey;
protected String typeKeyOriginal; protected String originalTypeKey;
public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name"; public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name";
private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc"; private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc";
@@ -152,14 +150,13 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
} else { } else {
typeKey.setEnabled(true); typeKey.setEnabled(true);
tagName.setEnabled(true); tagName.setEnabled(true);
window.setSaveButtonEnabled(true);
tagName.clear(); tagName.clear();
tagDesc.clear(); tagDesc.clear();
typeKey.clear(); typeKey.clear();
comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox); comboLayout.removeComponent(tagNameComboBox);
} }
window.setSaveButtonEnabled(false); window.reset();
restoreComponentStyles(); restoreComponentStyles();
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
getColorPickerLayout().getSelPreview() getColorPickerLayout().getSelPreview()
@@ -186,7 +183,8 @@ 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.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal); window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(),
getOriginalSelectedColor());
} }
/** /**
@@ -324,22 +322,12 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
// is implemented in the inherited class // is implemented in the inherited class
} }
@Override public String getOriginalTypeKey() {
public Color getSelectedColorOriginal() { return originalTypeKey;
return selectedColorOriginal;
} }
@Override public void setOriginalTypeKey(final String originalTypeKey) {
public void setSelectedColorOriginal(final Color selectedColorOriginal) { this.originalTypeKey = originalTypeKey;
this.selectedColorOriginal = selectedColorOriginal;
}
public String getTypeKeyOriginal() {
return typeKeyOriginal;
}
public void setTypeKeyOriginal(final String typeKeyOriginal) {
this.typeKeyOriginal = typeKeyOriginal;
} }
} }

View File

@@ -8,10 +8,8 @@
*/ */
package org.eclipse.hawkbit.ui.management.dstable; package org.eclipse.hawkbit.ui.management.dstable;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
@@ -44,10 +42,6 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition;
import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventBus;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
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.AbstractField; import com.vaadin.ui.AbstractField;
@@ -62,8 +56,7 @@ import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
/** /**
* * WindowContent for adding/editing a Distribution
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -104,12 +97,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private String originalDistDescription; private String originalDistDescription;
private Boolean originalReqMigStep; private Boolean originalReqMigStep;
private String originalDistSetType; private String originalDistSetType;
private final List<Component> changedComponents = new ArrayList<>();
private ValueChangeListener reqMigStepCheckboxListerner;
private TextChangeListener descTextAreaListener;
private TextChangeListener distNameTextFieldListener;
private TextChangeListener distVersionTextFieldListener;
private ValueChangeListener distsetTypeNameComboBoxListener;
private FormLayout formLayout; private FormLayout formLayout;
@@ -139,7 +126,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
formLayout.addComponent(reqMigStepCheckbox); formLayout.addComponent(reqMigStepCheckbox);
setCompositionRoot(formLayout); setCompositionRoot(formLayout);
distNameTextField.focus(); distNameTextField.focus();
} }
@@ -151,43 +137,42 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME); distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME);
distNameTextField.setNullRepresentation(""); distNameTextField.setNullRepresentation("");
distNameTextField.addTextChangeListener(this::listenerDistNameTextFieldChanged); distNameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistName));
distNameTextField.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, distNameTextField));
distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "", distVersionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "",
ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true, ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION); distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION);
distVersionTextField.setNullRepresentation(""); distVersionTextField.setNullRepresentation("");
distVersionTextField.addTextChangeListener(this::listenerDistVersionTextFieldChanged); distVersionTextField
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistVersion));
distVersionTextField
.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, distVersionTextField));
distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "", distsetTypeNameComboBox = SPUIComponentProvider.getComboBox(i18n.get("label.combobox.type"), "", "", null, "",
false, "", i18n.get("label.combobox.type")); false, "", i18n.get("label.combobox.type"));
distsetTypeNameComboBox.setImmediate(true); distsetTypeNameComboBox.setImmediate(true);
distsetTypeNameComboBox.setNullSelectionAllowed(false); distsetTypeNameComboBox.setNullSelectionAllowed(false);
distsetTypeNameComboBox.setId(SPUIComponentIdProvider.DIST_ADD_DISTSETTYPE); distsetTypeNameComboBox.setId(SPUIComponentIdProvider.DIST_ADD_DISTSETTYPE);
populateDistSetTypeNameCombo();
distsetTypeNameComboBox.addValueChangeListener(
event -> window.checkMandatoryEditedValue(event, distsetTypeNameComboBox, originalDistSetType));
descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style", descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style",
ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"), ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"),
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC); descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC);
descTextArea.setNullRepresentation(""); descTextArea.setNullRepresentation("");
descTextArea
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistDescription));
reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"), reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"),
"dist-checkbox-style", null, false, ""); "dist-checkbox-style", null, false, "");
reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL); reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL);
reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK); reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK);
} reqMigStepCheckbox.addValueChangeListener(
event -> window.checkMandatoryEditedValueBoolean(event, reqMigStepCheckbox, originalReqMigStep));
private void listenerDistNameTextFieldChanged(final TextChangeEvent event) {
if (!editDistribution) {
window.checkMandatoryTextField(event, distNameTextField);
}
}
private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) {
if (!editDistribution) {
window.checkMandatoryTextField(event, distVersionTextField);
}
} }
/** /**
@@ -209,26 +194,17 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
return disttypeContainer; return disttypeContainer;
} }
private void enableSaveButton() {
window.setSaveButtonEnabled(true);
}
private DistributionSetType getDefaultDistributionSetType() { private DistributionSetType getDefaultDistributionSetType() {
final TenantMetaData tenantMetaData = systemManagement.getTenantMetadata(); final TenantMetaData tenantMetaData = systemManagement.getTenantMetadata();
return tenantMetaData.getDefaultDsType(); return tenantMetaData.getDefaultDsType();
} }
private void disableSaveButton() {
window.setSaveButtonEnabled(false);
}
private void saveDistribution() { private void saveDistribution() {
if (editDistribution) { if (editDistribution) {
updateDistribution(); updateDistribution();
} else { } else {
addNewDistribution(); addNewDistribution();
} }
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -262,19 +238,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
} }
} }
private void addListeners() {
reqMigStepCheckboxListerner = event -> checkValueChanged(originalReqMigStep, event);
descTextAreaListener = event -> checkValueChanged(originalDistDescription, event);
distNameTextFieldListener = event -> checkValueChanged(originalDistName, event);
distVersionTextFieldListener = event -> checkValueChanged(originalDistVersion, event);
distsetTypeNameComboBoxListener = event -> checkValueChanged(originalDistSetType, event);
reqMigStepCheckbox.addValueChangeListener(reqMigStepCheckboxListerner);
descTextArea.addTextChangeListener(descTextAreaListener);
distNameTextField.addTextChangeListener(distNameTextFieldListener);
distVersionTextField.addTextChangeListener(distVersionTextFieldListener);
distsetTypeNameComboBox.addValueChangeListener(distsetTypeNameComboBoxListener);
}
/** /**
* Add new Distribution set. * Add new Distribution set.
*/ */
@@ -308,7 +271,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private void closeThisWindow() { private void closeThisWindow() {
window.close(); window.close();
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -381,7 +343,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
if (distSetTypeName == null) { if (distSetTypeName == null) {
distsetTypeNameComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); distsetTypeNameComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR);
} }
notificationMessage.displayValidationError(i18n.get("message.mandatory.check")); notificationMessage.displayValidationError(i18n.get("message.mandatory.check"));
return false; return false;
} }
@@ -391,7 +352,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private void discardDistribution() { private void discardDistribution() {
/* Just close this window */ /* Just close this window */
distsetTypeNameComboBox.removeValueChangeListener(distsetTypeNameComboBoxListener);
closeThisWindow(); closeThisWindow();
} }
@@ -407,14 +367,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR); distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR);
descTextArea.clear(); descTextArea.clear();
reqMigStepCheckbox.clear(); reqMigStepCheckbox.clear();
if (window != null) {
window.setSaveButtonEnabled(true); originalDistDescription = null;
} originalDistName = null;
removeListeners(); originalDistSetType = null;
changedComponents.clear(); originalDistVersion = null;
originalReqMigStep = Boolean.FALSE;
if (window != null) { if (window != null) {
window.resetMandatoryAndEditedFields(); window.reset();
} }
} }
@@ -422,71 +383,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
populateDistSetTypeNameCombo(); populateDistSetTypeNameCombo();
} }
private void removeListeners() {
reqMigStepCheckbox.removeValueChangeListener(reqMigStepCheckboxListerner);
descTextArea.removeTextChangeListener(descTextAreaListener);
distNameTextField.removeTextChangeListener(distNameTextFieldListener);
distVersionTextField.removeTextChangeListener(distVersionTextFieldListener);
}
public void setOriginalDistName(final String originalDistName) {
this.originalDistName = originalDistName;
}
public void setOriginalDistVersion(final String originalDistVersion) {
this.originalDistVersion = originalDistVersion;
}
public void setOriginalDistDescription(final String originalDistDescription) {
this.originalDistDescription = originalDistDescription;
}
private void checkValueChanged(final String originalValue, final TextChangeEvent event) {
if (editDistribution) {
final String newValue = event.getText();
if (!originalValue.equalsIgnoreCase(newValue)) {
changedComponents.add(event.getComponent());
} else {
changedComponents.remove(event.getComponent());
}
enableDisableSaveButton();
}
}
private void checkValueChanged(final Boolean originalValue, final ValueChangeEvent event) {
if (editDistribution) {
if (!originalValue.equals(event.getProperty().getValue())) {
changedComponents.add(reqMigStepCheckbox);
} else {
changedComponents.remove(reqMigStepCheckbox);
}
enableDisableSaveButton();
}
}
private void checkValueChanged(final String originalValue, final ValueChangeEvent event) {
if (editDistribution) {
if (!originalValue.equals(event.getProperty().getValue())) {
changedComponents.add(distsetTypeNameComboBox);
} else {
changedComponents.remove(distsetTypeNameComboBox);
}
enableDisableSaveButton();
}
}
private void enableDisableSaveButton() {
if (changedComponents.isEmpty()) {
disableSaveButton();
} else {
enableSaveButton();
}
}
private void setOriginalReqMigStep(final Boolean originalReqMigStep) {
this.originalReqMigStep = originalReqMigStep;
}
/** /**
* populate data. * populate data.
* *
@@ -495,7 +391,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
public void populateValuesOfDistribution(final Long editDistId) { public void populateValuesOfDistribution(final Long editDistId) {
this.editDistId = editDistId; this.editDistId = editDistId;
editDistribution = Boolean.TRUE; editDistribution = Boolean.TRUE;
window.setSaveButtonEnabled(false);
final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId); final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId);
if (distSet != null) { if (distSet != null) {
distNameTextField.setValue(distSet.getName()); distNameTextField.setValue(distSet.getName());
@@ -508,23 +403,24 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
if (distSet.getDescription() != null) { if (distSet.getDescription() != null) {
descTextArea.setValue(distSet.getDescription()); descTextArea.setValue(distSet.getDescription());
} }
setOriginalDistName(distSet.getName()); originalDistName = distSet.getName();
setOriginalDistVersion(distSet.getVersion()); originalDistVersion = distSet.getVersion();
setOriginalDistDescription(distSet.getDescription()); originalDistDescription = distSet.getDescription();
setOriginalReqMigStep(distSet.isRequiredMigrationStep()); originalReqMigStep = distSet.isRequiredMigrationStep();
setOriginalDistSetTYpe(distSet.getType().getName()); originalDistSetType = distSet.getType().getName();
addListeners(); window.updateEditedFields(distsetTypeNameComboBox.getId(), Boolean.FALSE);
window.updateEditedFields(reqMigStepCheckbox.getId(), Boolean.FALSE);
} }
} }
public CommonDialogWindow getWindow() { public CommonDialogWindow getWindow() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
populateRequiredComponents();
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, i18n); null, getMandatoryFields(), getEditedFields(), i18n);
window.getButtonsLayout().removeStyleName("actionButtonsMargin"); window.getButtonsLayout().removeStyleName("actionButtonsMargin");
populateRequiredComponents();
resetComponents();
return window; return window;
} }
@@ -534,12 +430,22 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), Boolean.FALSE);
} }
} }
return requiredFields; return requiredFields;
} }
private Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> editedFields = new HashMap<>();
editedFields.put(distsetTypeNameComboBox.getId(), Boolean.FALSE);
editedFields.put(distNameTextField.getId(), Boolean.FALSE);
editedFields.put(distVersionTextField.getId(), Boolean.FALSE);
editedFields.put(descTextArea.getId(), Boolean.FALSE);
editedFields.put(reqMigStepCheckbox.getId(), Boolean.FALSE);
return editedFields;
}
/** /**
* Populate DistributionSet Type name combo. * Populate DistributionSet Type name combo.
*/ */
@@ -549,12 +455,4 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
distsetTypeNameComboBox.setValue(getDefaultDistributionSetType().getName()); distsetTypeNameComboBox.setValue(getDefaultDistributionSetType().getName());
} }
/**
* @param originalDistSetTYpe
* the originalDistSetTYpe to set
*/
public void setOriginalDistSetTYpe(final String originalDistSetType) {
this.originalDistSetType = originalDistSetType;
}
} }

View File

@@ -32,9 +32,7 @@ import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
/** /**
*
* Class for Create/Update Tag Layout of distribution set * Class for Create/Update Tag Layout of distribution set
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -98,7 +96,6 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
updateExistingTag(existingDistTag); updateExistingTag(existingDistTag);
} }
} }
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -157,10 +154,11 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
@Override @Override
public void setTagDetails(final String distTagSelected) { public void setTagDetails(final String distTagSelected) {
tagName.setValue(distTagSelected); tagName.setValue(distTagSelected);
setOriginalTagName(distTagSelected);
final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected); final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected);
if (null != selectedDistTag) { if (null != selectedDistTag) {
tagDesc.setValue(selectedDistTag.getDescription()); tagDesc.setValue(selectedDistTag.getDescription());
setTagDescOriginal(selectedDistTag.getDescription()); setOriginalTagDesc(selectedDistTag.getDescription());
if (null == selectedDistTag.getColour()) { if (null == selectedDistTag.getColour()) {
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());

View File

@@ -14,7 +14,6 @@ import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.TargetManagement; import org.eclipse.hawkbit.repository.TargetManagement;
import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.Target;
@@ -35,15 +34,12 @@ import org.eclipse.hawkbit.ui.utils.UINotification;
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.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.VaadinSessionScope; import com.vaadin.spring.annotation.VaadinSessionScope;
import com.vaadin.ui.AbstractField; import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Component; import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent; import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.FormLayout; import com.vaadin.ui.FormLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea; import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField; import com.vaadin.ui.TextField;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
@@ -57,7 +53,7 @@ import com.vaadin.ui.themes.ValoTheme;
@VaadinSessionScope @VaadinSessionScope
public class TargetAddUpdateWindowLayout extends CustomComponent { public class TargetAddUpdateWindowLayout extends CustomComponent {
private static final long serialVersionUID = -6659290471705262389L; private static final long serialVersionUID = -6659290471705262389L;
@Autowired @Autowired
private I18N i18n; private I18N i18n;
@@ -69,10 +65,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
@Autowired @Autowired
private transient UINotification uINotification; private transient UINotification uINotification;
@Autowired @Autowired
private transient EntityFactory entityFactory; private transient EntityFactory entityFactory;
private TextField controllerIDTextField; private TextField controllerIDTextField;
private TextField nameTextField; private TextField nameTextField;
private TextArea descTextArea; private TextArea descTextArea;
@@ -81,47 +77,47 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
private FormLayout formLayout; private FormLayout formLayout;
private CommonDialogWindow window; private CommonDialogWindow window;
private String oldTargetName; private String originalTargetName;
private String oldTargetDesc; private String originalTargetDesc;
private String originalControllerId;
/** /**
* Initialize the Add Update Window Component for Target. * Initialize the Add Update Window Component for Target.
*/ */
public void init() { public void init() {
/* create components */
createRequiredComponents(); createRequiredComponents();
/* display components in layout */
buildLayout(); buildLayout();
/* register all listeners related to the Window */
addListeners();
setCompositionRoot(formLayout); setCompositionRoot(formLayout);
} }
private void createRequiredComponents() { private void createRequiredComponents() {
/* Textfield for controller Id */ /* Textfield for controller Id */
controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null, controllerIDTextField = SPUIComponentProvider.getTextField(i18n.get("prompt.target.id"), "",
i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("prompt.target.id"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID); controllerIDTextField.setId(SPUIComponentIdProvider.TARGET_ADD_CONTROLLER_ID);
controllerIDTextField.addTextChangeListener(this::listenerControllerIDTextFieldChanged); controllerIDTextField
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalControllerId));
controllerIDTextField
.addValueChangeListener(event -> window.setRequiredFieldWhenUpdate(event, controllerIDTextField));
/* Textfield for target name */ /* Textfield for target name */
nameTextField = SPUIComponentProvider.getTextField( i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY, false, null, nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY,
i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); false, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
nameTextField.setId(SPUIComponentIdProvider.TARGET_ADD_NAME); nameTextField.setId(SPUIComponentIdProvider.TARGET_ADD_NAME);
nameTextField.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTargetName));
/* Textarea for target description */ /* Textarea for target description */
descTextArea = SPUIComponentProvider.getTextArea( i18n.get("textfield.description"), "text-area-style", ValoTheme.TEXTFIELD_TINY, false, null, descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style",
i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); ValoTheme.TEXTFIELD_TINY, false, null, i18n.get("textfield.description"),
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC); descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC);
descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
} descTextArea.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTargetDesc));
private void listenerControllerIDTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, controllerIDTextField);
} }
private void buildLayout() { private void buildLayout() {
/* /*
* The main layout of the window contains mandatory info, textboxes * The main layout of the window contains mandatory info, textboxes
* (controller Id, name & description) and action buttons layout * (controller Id, name & description) and action buttons layout
@@ -131,56 +127,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
formLayout.addComponent(controllerIDTextField); formLayout.addComponent(controllerIDTextField);
formLayout.addComponent(nameTextField); formLayout.addComponent(nameTextField);
formLayout.addComponent(descTextArea); formLayout.addComponent(descTextArea);
controllerIDTextField.focus(); controllerIDTextField.focus();
} }
private void addListeners() {
addTargetNameChangeListner();
addTargetDescChangeListner();
}
private void addTargetNameChangeListner() {
nameTextField.addTextChangeListener(new TextChangeListener() {
/**
*
*/
private static final long serialVersionUID = 1761855781481115921L;
@Override
public void textChange(final TextChangeEvent event) {
if (event.getText().equals(oldTargetName) && descTextArea.getValue().equals(oldTargetDesc)) {
window.setSaveButtonEnabled(false);
} else {
window.setSaveButtonEnabled(true);
}
}
});
}
private void addTargetDescChangeListner() {
descTextArea.addTextChangeListener(new TextChangeListener() {
/**
*
*/
private static final long serialVersionUID = 5770734934988115068L;
@Override
public void textChange(final TextChangeEvent event) {
if (event.getText().equals(oldTargetDesc) && nameTextField.getValue().equals(oldTargetName)) {
window.setSaveButtonEnabled(false);
} else {
window.setSaveButtonEnabled(true);
}
}
});
}
/** /**
* Update the Target if modified. * Update the Target if modified.
*/ */
@@ -210,7 +160,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
} else { } else {
addNewTarget(); addNewTarget();
} }
window.setSaveButtonEnabled(false);
} }
private void discardTargetListner() { private void discardTargetListner() {
@@ -244,37 +193,49 @@ 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(), null, i18n); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),
event -> discardTargetListner(), null, getMandatoryFields(), getEditedFields(), i18n);
return window; return window;
} }
private Map<String, Boolean> getMandatoryFields() { private Map<String, Boolean> getMandatoryFields() {
final Map<String, Boolean> requiredFields = new HashMap<>(); final Map<String, Boolean> requiredFields = new HashMap<>();
final Iterator<Component> iterate = formLayout.iterator(); final Iterator<Component> iterate = formLayout.iterator();
while (iterate.hasNext()) { while (iterate.hasNext()) {
final Component c = iterate.next(); final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getId(), Boolean.FALSE);
} }
} }
return requiredFields; return requiredFields;
} }
private Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> editedFields = new HashMap<>();
editedFields.put(controllerIDTextField.getId(), Boolean.FALSE);
editedFields.put(nameTextField.getId(), Boolean.FALSE);
editedFields.put(descTextArea.getId(), Boolean.FALSE);
return editedFields;
}
/** /**
* clear all fields of Target Edit Window. * clear all fields of Target Edit Window.
*/ */
public void resetComponents() { public void resetComponents() {
nameTextField.clear(); nameTextField.clear();
nameTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); nameTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR);
controllerIDTextField.setEnabled(true); controllerIDTextField.setEnabled(Boolean.TRUE);
controllerIDTextField.setReadOnly(false);
controllerIDTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR); controllerIDTextField.removeStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR);
controllerIDTextField.clear(); controllerIDTextField.clear();
descTextArea.clear(); descTextArea.clear();
editTarget = Boolean.FALSE; editTarget = Boolean.FALSE;
originalControllerId = null;
originalTargetDesc = null;
originalTargetName = null;
if (window != null) { if (window != null) {
window.resetMandatoryAndEditedFields(); window.reset();
} }
} }
@@ -282,7 +243,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
editTarget = Boolean.FALSE; editTarget = Boolean.FALSE;
window.close(); window.close();
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
private void setTargetValues(final Target target, final String name, final String description) { private void setTargetValues(final Target target, final String name, final String description) {
@@ -303,7 +263,8 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
private boolean duplicateCheck(final String newControlllerId) { private boolean duplicateCheck(final String newControlllerId) {
final Target existingTarget = targetManagement.findTargetByControllerID(newControlllerId.trim()); final Target existingTarget = targetManagement.findTargetByControllerID(newControlllerId.trim());
if (existingTarget != null) { if (existingTarget != null) {
uINotification.displayValidationError(i18n.get("message.target.duplicate.check", new Object[] {newControlllerId})); uINotification.displayValidationError(
i18n.get("message.target.duplicate.check", new Object[] { newControlllerId }));
return false; return false;
} else { } else {
return true; return true;
@@ -319,15 +280,15 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
editTarget = Boolean.TRUE; editTarget = Boolean.TRUE;
final Target target = targetManagement.findTargetByControllerID(controllerId); final Target target = targetManagement.findTargetByControllerID(controllerId);
controllerIDTextField.setValue(target.getControllerId()); controllerIDTextField.setValue(target.getControllerId());
controllerIDTextField.setReadOnly(Boolean.TRUE); controllerIDTextField.setEnabled(Boolean.FALSE);
nameTextField.setValue(target.getName()); nameTextField.setValue(target.getName());
if (target.getDescription() != null) { if (target.getDescription() != null) {
descTextArea.setValue(target.getDescription()); descTextArea.setValue(target.getDescription());
} }
window.setSaveButtonEnabled(Boolean.FALSE);
oldTargetDesc = descTextArea.getValue(); originalTargetDesc = descTextArea.getValue();
oldTargetName = nameTextField.getValue(); originalTargetName = nameTextField.getValue();
originalControllerId = controllerIDTextField.getValue();
window.addStyleName("target-update-window"); window.addStyleName("target-update-window");
} }

View File

@@ -88,10 +88,11 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa
@Override @Override
public void setTagDetails(final String targetTagSelected) { public void setTagDetails(final String targetTagSelected) {
tagName.setValue(targetTagSelected); tagName.setValue(targetTagSelected);
setOriginalTagName(targetTagSelected);
final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected); final TargetTag selectedTargetTag = tagManagement.findTargetTag(targetTagSelected);
if (null != selectedTargetTag) { if (null != selectedTargetTag) {
tagDesc.setValue(selectedTargetTag.getDescription()); tagDesc.setValue(selectedTargetTag.getDescription());
setTagDescOriginal(selectedTargetTag.getDescription()); setOriginalTagDesc(selectedTargetTag.getDescription());
if (null == selectedTargetTag.getColour()) { if (null == selectedTargetTag.getColour()) {
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor()); setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
@@ -115,7 +116,6 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa
updateExistingTag(existingTag); updateExistingTag(existingTag);
} }
} }
window.setSaveButtonEnabled(false);
} }
/** /**

View File

@@ -75,9 +75,7 @@ import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
/** /**
*
* Rollout add or update popup layout. * Rollout add or update popup layout.
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -150,19 +148,21 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private TextArea targetFilterQuery; private TextArea targetFilterQuery;
private Boolean updateMode = Boolean.FALSE; private String originalDistributionSet;
private String distributionSetOriginal; private Object originalActionGroup;
private Object actionGroupOriginal; private String originalRolloutName;
private String rolloutNameOriginal; private String originalErrorThreshold;
private String errorThresholdOriginal;; private String originalTriggerThreshold;
private String triggerThresholdOriginal; private String originalDescription;
private String descriptionOriginal; private String originalTargetFilterQueryCombo;
private String originalNoOfGroups;
/** /**
* Create components and layout. * Create components and layout.
@@ -174,6 +174,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
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(), getEditedFields(), uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields(),
@@ -181,25 +182,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
return window; return window;
} }
public CommonDialogWindow createUpdateWindow() {
updateMode = Boolean.TRUE;
return getWindow();
}
public CommonDialogWindow createAddWindow() {
updateMode = Boolean.FALSE;
return getWindow();
}
private Map<String, Boolean> getMandatoryFields() { 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(), Boolean.FALSE);
requiredFields.put(distributionSet.getId(), null); requiredFields.put(distributionSet.getId(), Boolean.FALSE);
requiredFields.put(targetFilterQueryCombo.getId(), null); requiredFields.put(targetFilterQueryCombo.getId(), Boolean.FALSE);
requiredFields.put(noOfGroups.getId(), null); requiredFields.put(noOfGroups.getId(), Boolean.FALSE);
requiredFields.put(triggerThreshold.getId(), null); requiredFields.put(triggerThreshold.getId(), Boolean.FALSE);
requiredFields.put(errorThreshold.getId(), null); requiredFields.put(errorThreshold.getId(), Boolean.FALSE);
return requiredFields; return requiredFields;
} }
@@ -224,7 +214,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
rolloutForEdit = null; rolloutForEdit = null;
if (window != null) { if (window != null) {
window.resetMandatoryAndEditedFields(); window.reset();
} }
} }
@@ -319,13 +309,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerActionGroupValueChanged(final ValueChangeEvent event) { private void listenerActionGroupValueChanged(final ValueChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedValue(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup(),
window.checkMandatoryComboBox(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup()); originalActionGroup.toString());
}
if (event.getProperty().getValue() != null) {
window.checkChanges(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(),
event.getProperty().getValue().toString(), actionGroupOriginal.toString());
}
} }
} }
@@ -346,9 +331,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY); filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
filterField.setEnabled(false); filterField.setEnabled(false);
filterField.setSizeUndefined(); filterField.setSizeUndefined();
filterField.addValueChangeListener(event -> listenerFilterFieldValueChanged(event, filterField));
return filterField; return filterField;
} }
private void listenerFilterFieldValueChanged(final ValueChangeEvent event, final TextArea filterField) {
if (window != null) {
window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo);
}
}
private Label createTotalTargetsLabel() { private Label createTotalTargetsLabel() {
final Label targetCountLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE); final Label targetCountLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE);
targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message"); targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message");
@@ -404,9 +396,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
totalTargetsCount = 0L; totalTargetsCount = 0L;
totalTargetsLabel.setVisible(false); totalTargetsLabel.setVisible(false);
} }
onGroupNumberChange(); onGroupNumberChange(event);
window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo);
window.checkMandatoryComboBox(event, targetFilterQueryCombo); window.checkMandatoryEditedValue(event, targetFilterQueryCombo, originalTargetFilterQueryCombo);
} }
private String getTotalTargetMessage() { private String getTotalTargetMessage() {
@@ -618,11 +610,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) { private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedTextField(event, originalDescription);
window.checkMandatoryTextField(event, description);
return;
}
window.checkChanges(description.getId(), event.getText(), descriptionOriginal);
} }
} }
@@ -633,16 +621,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
errorField.setMaxLength(7); errorField.setMaxLength(7);
errorField.setSizeUndefined(); errorField.setSizeUndefined();
errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged); errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged);
errorField.addValueChangeListener(event -> listenerErrorThresholdValueChanged(event, errorField));
return errorField; return errorField;
} }
private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) { private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedTextField(event, originalErrorThreshold);
window.checkMandatoryTextField(event, errorThreshold); }
return; }
}
window.checkChanges(errorThreshold.getId(), event.getText(), errorThresholdOriginal); private void listenerErrorThresholdValueChanged(final ValueChangeEvent event, final TextField errorField) {
if (window != null) {
window.setRequiredFieldWhenUpdate(event, errorField);
} }
} }
@@ -653,16 +644,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
thresholdField.setSizeUndefined(); thresholdField.setSizeUndefined();
thresholdField.setMaxLength(3); thresholdField.setMaxLength(3);
thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged); thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged);
thresholdField.addValueChangeListener(event -> listenerTriggerTresholdValueChanged(event, thresholdField));
return thresholdField; return thresholdField;
} }
private void listenerTriggerTresholdValueChanged(final ValueChangeEvent event, final TextField thresholdField) {
if (window != null) {
window.setRequiredFieldWhenUpdate(event, thresholdField);
}
}
private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) { private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedTextField(event, originalTriggerThreshold);
window.checkMandatoryTextField(event, triggerThreshold);
return;
}
window.checkChanges(triggerThreshold.getId(), event.getText(), triggerThresholdOriginal);
} }
} }
@@ -672,28 +666,27 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
noOfGroupsField.addValidator(new GroupNumberValidator()); noOfGroupsField.addValidator(new GroupNumberValidator());
noOfGroupsField.setSizeUndefined(); noOfGroupsField.setSizeUndefined();
noOfGroupsField.setMaxLength(3); noOfGroupsField.setMaxLength(3);
noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); noOfGroupsField.addValueChangeListener(this::onGroupNumberChange);
noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged); noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged);
return noOfGroupsField; return noOfGroupsField;
} }
private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) { private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedTextField(event, originalNoOfGroups);
window.checkMandatoryTextField(event, noOfGroups);
return;
}
window.checkChanges(noOfGroups.getId(), event.getText(), noOfGroups.getValue());
} }
} }
private void onGroupNumberChange() { private void onGroupNumberChange(final ValueChangeEvent event) {
if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) { if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) {
groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize()))); groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize())));
groupSizeLabel.setVisible(true); groupSizeLabel.setVisible(true);
} else { } else {
groupSizeLabel.setVisible(false); groupSizeLabel.setVisible(false);
} }
if (window != null) {
window.setRequiredFieldWhenUpdate(event, noOfGroups);
}
} }
private ComboBox createDistributionSetCombo() { private ComboBox createDistributionSetCombo() {
@@ -710,14 +703,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerDistributionSetChanged(final ValueChangeEvent event) { private void listenerDistributionSetChanged(final ValueChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedValue(event, distributionSet, originalDistributionSet);
window.checkMandatoryComboBox(event, distributionSet);
return;
}
if (event.getProperty().getValue() != null) {
window.checkChanges(distributionSet.getId(), event.getProperty().getValue().toString(),
distributionSetOriginal);
}
} }
} }
@@ -732,7 +718,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
return new LazyQueryContainer( return new LazyQueryContainer(
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME),
distributionQF); distributionQF);
} }
private TextField createRolloutNameField() { private TextField createRolloutNameField() {
@@ -740,16 +725,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID);
rolloutNameField.setSizeUndefined(); rolloutNameField.setSizeUndefined();
rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged); rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged);
rolloutNameField.addValueChangeListener(event -> listenerRolloutNameValueChanged(event, rolloutNameField));
return rolloutNameField; return rolloutNameField;
} }
private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) { private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) {
if (window != null) { if (window != null) {
if (!updateMode) { window.checkMandatoryEditedTextField(event, originalRolloutName);
window.checkMandatoryTextField(event, rolloutName); }
return; }
}
window.checkChanges(rolloutName.getId(), event.getText(), rolloutNameOriginal); private void listenerRolloutNameValueChanged(final ValueChangeEvent event, final TextField rolloutNameField) {
if (window != null) {
window.setRequiredFieldWhenUpdate(event, rolloutNameField);
} }
} }
@@ -851,7 +839,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
description.setValue(rolloutForEdit.getDescription()); description.setValue(rolloutForEdit.getDescription());
distributionSet.setValue(DistributionSetIdName.generate(rolloutForEdit.getDistributionSet())); distributionSet.setValue(DistributionSetIdName.generate(rolloutForEdit.getDistributionSet()));
final List<RolloutGroup> rolloutGroups = rolloutForEdit.getRolloutGroups(); final List<RolloutGroup> rolloutGroups = rolloutForEdit.getRolloutGroups();
setThresoldValues(rolloutGroups); setThresholdValues(rolloutGroups);
setActionType(rolloutForEdit); setActionType(rolloutForEdit);
if (rolloutForEdit.getStatus() != RolloutStatus.READY) { if (rolloutForEdit.getStatus() != RolloutStatus.READY) {
disableRequiredFieldsOnEdit(); disableRequiredFieldsOnEdit();
@@ -870,30 +858,28 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void setOriginalValues() { private void setOriginalValues() {
distributionSetOriginal = distributionSet.getValue().toString(); originalDistributionSet = distributionSet.getValue().toString();
actionGroupOriginal = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue(); originalActionGroup = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue();
rolloutNameOriginal = rolloutName.getValue(); originalRolloutName = rolloutName.getValue();
triggerThresholdOriginal = triggerThreshold.getValue(); originalTriggerThreshold = triggerThreshold.getValue();
errorThresholdOriginal = errorThreshold.getValue(); originalErrorThreshold = errorThreshold.getValue();
descriptionOriginal = description.getValue(); originalDescription = description.getValue();
originalNoOfGroups = noOfGroups.getValue();
if (targetFilterQueryCombo.getValue() != null) {
originalTargetFilterQueryCombo = targetFilterQueryCombo.getValue().toString();
}
} }
private Map<String, Boolean> getEditedFields() { private Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>(); final Map<String, Boolean> changeMap = new HashMap<>();
if (rolloutForEdit == null) { changeMap.put(rolloutName.getId(), Boolean.FALSE);
return changeMap; changeMap.put(distributionSet.getId(), Boolean.FALSE);
} changeMap.put(targetFilterQueryCombo.getId(), Boolean.FALSE);
if (rolloutForEdit.getStatus() != RolloutStatus.READY) { changeMap.put(noOfGroups.getId(), Boolean.FALSE);
changeMap.put(rolloutName.getId(), Boolean.FALSE); changeMap.put(triggerThreshold.getId(), Boolean.FALSE);
changeMap.put(description.getId(), Boolean.FALSE); changeMap.put(errorThreshold.getId(), Boolean.FALSE);
} else { changeMap.put(description.getId(), Boolean.FALSE);
changeMap.put(rolloutName.getId(), Boolean.FALSE); changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().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; return changeMap;
} }
@@ -933,7 +919,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
/** /**
* @param rolloutGroups * @param rolloutGroups
*/ */
private void setThresoldValues(final List<RolloutGroup> rolloutGroups) { private void setThresholdValues(final List<RolloutGroup> rolloutGroups) {
if (null != rolloutGroups && !rolloutGroups.isEmpty()) { if (null != rolloutGroups && !rolloutGroups.isEmpty()) {
errorThreshold.setValue(rolloutGroups.get(0).getErrorConditionExp()); errorThreshold.setValue(rolloutGroups.get(0).getErrorConditionExp());
triggerThreshold.setValue(rolloutGroups.get(0).getSuccessConditionExp()); triggerThreshold.setValue(rolloutGroups.get(0).getSuccessConditionExp());

View File

@@ -67,9 +67,7 @@ import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent;
import com.vaadin.ui.renderers.HtmlRenderer; import com.vaadin.ui.renderers.HtmlRenderer;
/** /**
*
* Rollout list grid component. * Rollout list grid component.
*
*/ */
@SpringComponent @SpringComponent
@ViewScope @ViewScope
@@ -159,7 +157,6 @@ public class RolloutListGrid extends AbstractGrid {
} }
item.getItemProperty(ROLLOUT_RENDERER_DATA) item.getItemProperty(ROLLOUT_RENDERER_DATA)
.setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); .setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString()));
} }
@Override @Override
@@ -200,7 +197,6 @@ public class RolloutListGrid extends AbstractGrid {
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class,
FontAwesome.CIRCLE_O.getHtml(), false, false); FontAwesome.CIRCLE_O.getHtml(), false, false);
} }
@Override @Override
@@ -292,7 +288,6 @@ public class RolloutListGrid extends AbstractGrid {
for (final Object propertyId : columnsToBeHidden) { for (final Object propertyId : columnsToBeHidden) {
getColumn(propertyId).setHidden(true); getColumn(propertyId).setHidden(true);
} }
} }
@Override @Override
@@ -315,7 +310,6 @@ public class RolloutListGrid extends AbstractGrid {
final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class); final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class);
customObjectRenderer.addClickListener(this::onClickOfRolloutName); customObjectRenderer.addClickListener(this::onClickOfRolloutName);
getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer); getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer);
} }
private void createRolloutStatusToFontMap() { private void createRolloutStatusToFontMap() {
@@ -437,8 +431,8 @@ public class RolloutListGrid extends AbstractGrid {
} }
private void onUpdate(final ContextMenuData contextMenuData) { private void onUpdate(final ContextMenuData contextMenuData) {
final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.getWindow();
addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId());
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);
@@ -684,7 +678,6 @@ public class RolloutListGrid extends AbstractGrid {
public Class<String> getPresentationType() { public Class<String> getPresentationType() {
return String.class; return String.class;
} }
} }
} }

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.createAddWindow(); final Window addTargetWindow = addUpdateRolloutWindow.getWindow();
UI.getCurrent().addWindow(addTargetWindow); UI.getCurrent().addWindow(addTargetWindow);
addTargetWindow.setVisible(Boolean.TRUE); addTargetWindow.setVisible(Boolean.TRUE);