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.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.ViewScope;
import com.vaadin.ui.AbstractField;
@@ -84,9 +82,15 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
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;
@@ -135,26 +139,31 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
nameTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.name"), "", ValoTheme.TEXTFIELD_TINY,
true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
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 */
versionTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.version"), "",
ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
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 */
vendorTextField = SPUIComponentProvider.getTextField(i18n.get("textfield.vendor"), "", ValoTheme.TEXTFIELD_TINY,
false, null, i18n.get("textfield.vendor"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
vendorTextField.setId(SPUIComponentIdProvider.SOFT_MODULE_VENDOR);
vendorTextField
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalVendorValue));
descTextArea = SPUIComponentProvider.getTextArea(i18n.get("textfield.description"), "text-area-style",
ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"),
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
descTextArea.setId(SPUIComponentIdProvider.ADD_SW_MODULE_DESCRIPTION);
addDescriptionTextChangeListener();
addVendorTextChangeListener();
descTextArea
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDescriptionValue));
typeComboBox = SPUIComponentProvider.getComboBox(i18n.get("upload.swmodule.type"), "", "", null, null, true,
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.setNewItemsAllowed(Boolean.FALSE);
typeComboBox.setImmediate(Boolean.TRUE);
typeComboBox.addValueChangeListener(this::listenerTypeComboBoxChanged);
populateTypeNameCombo();
resetOldValues();
}
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);
typeComboBox.addValueChangeListener(
event -> window.checkMandatoryEditedValue(event, typeComboBox, originalComboBoxValue));
}
private void populateTypeNameCombo() {
typeComboBox.setContainerDataSource(HawkbitCommonUtil.createLazyQueryContainer(
new BeanQueryFactory<SoftwareModuleTypeBeanQuery>(SoftwareModuleTypeBeanQuery.class)));
typeComboBox.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME);
}
private void resetOldValues() {
oldDescriptionValue = null;
oldVendorValue = null;
private void resetComponents() {
vendorTextField.clear();
nameTextField.clear();
versionTextField.clear();
descTextArea.clear();
typeComboBox.clear();
originalDescriptionValue = null;
originalVendorValue = null;
originalComboBoxValue = null;
originalNameValue = null;
originalVersionValue = null;
if (window != null) {
window.resetMandatoryAndEditedFields();
window.reset();
}
}
private void createWindow() {
resetComponents();
final Label madatoryStarLabel = new Label("*");
madatoryStarLabel.setStyleName("v-caption v-required-field-indicator");
madatoryStarLabel.setWidth(null);
@@ -223,9 +229,9 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
/* add main layout to the window */
window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null,
getMandatoryFields(formLayout), null, i18n);
getMandatoryFields(formLayout), geEditedFields(), i18n);
window.getButtonsLayout().removeStyleName("actionButtonsMargin");
nameTextField.focus();
typeComboBox.focus();
}
private Map<String, Boolean> getMandatoryFields(final FormLayout formLayout) {
@@ -234,18 +240,20 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
requiredFields.put(c.getId(), Boolean.FALSE);
}
}
return requiredFields;
}
private void addDescriptionTextChangeListener() {
descTextArea.addTextChangeListener(event -> window.setSaveButtonEnabled(hasDescriptionChanged(event)));
}
private void addVendorTextChangeListener() {
vendorTextField.addTextChangeListener(event -> window.setSaveButtonEnabled(hasVendorChanged(event)));
private Map<String, Boolean> geEditedFields() {
final Map<String, Boolean> editedFields = new HashMap<>();
editedFields.put(typeComboBox.getId(), Boolean.FALSE);
editedFields.put(nameTextField.getId(), Boolean.FALSE);
editedFields.put(vendorTextField.getId(), Boolean.FALSE);
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()));
descTextArea.setValue(swModle.getDescription() == null ? HawkbitCommonUtil.SP_STRING_EMPTY
: HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getDescription()));
oldDescriptionValue = descTextArea.getValue();
oldVendorValue = vendorTextField.getValue();
originalDescriptionValue = descTextArea.getValue();
originalVendorValue = vendorTextField.getValue();
originalComboBoxValue = swModle.getType().getName();
if (swModle.getType().isDeleted()) {
typeComboBox.addItem(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() {
window.close();
UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
}
/**
@@ -361,15 +368,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
} else {
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() {

View File

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

View File

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

View File

@@ -11,8 +11,10 @@ package org.eclipse.hawkbit.ui.common;
import static com.google.common.base.Preconditions.checkNotNull;
import java.io.Serializable;
import java.util.Collections;
import java.util.Map;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow;
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.SPUIComponentIdProvider;
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.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.FontAwesome;
import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.AbstractOrderedLayout;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.AbstractTextField;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener;
@@ -74,9 +74,8 @@ public class CommonDialogWindow extends Window implements Serializable {
private Map<String, Boolean> requiredFields;
private final Map<String, Boolean> editedFields;
private Map<String, Boolean> editedFields;
@Autowired
private final I18N i18n;
/**
@@ -104,41 +103,155 @@ public class CommonDialogWindow extends Window implements Serializable {
this.saveButtonClickListener = saveButtonClickListener;
this.cancelButtonClickListener = cancelButtonClickListener;
this.requiredFields = requiredFields;
if (requiredFields == null) {
this.requiredFields = Collections.emptyMap();
}
this.editedFields = editedFields;
if (editedFields == null) {
this.editedFields = Collections.emptyMap();
}
this.i18n = i18n;
init();
}
public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) {
if (StringUtils.isNotBlank(event.getText())) {
if (StringUtils.isNotBlank(textfield.getCaption())) {
requiredFields.put(textfield.getCaption(), Boolean.TRUE);
}
getRequiredFields().put(textfield.getId(), Boolean.TRUE);
} else {
if (StringUtils.isNotBlank(textfield.getCaption())) {
requiredFields.put(textfield.getCaption(), Boolean.FALSE);
}
requiredFields.put(textfield.getId(), Boolean.FALSE);
/**
* Checks if all mandatory fields are filled, and if there are changes in
* the current field. If yes, the save button will be enabled.
*
* @param event
* TextChangeEvent
* @param originalValue
* original Value of the current field
*/
public void checkMandatoryEditedTextField(final TextChangeEvent event, final String originalValue) {
final Component component = event.getComponent();
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) {
if (event.getProperty().getValue() != null) {
if (StringUtils.isNotBlank(select.getCaption())) {
requiredFields.put(select.getCaption(), Boolean.TRUE);
}
requiredFields.put(select.getId(), Boolean.TRUE);
} else {
if (StringUtils.isNotBlank(select.getCaption())) {
requiredFields.put(select.getCaption(), Boolean.FALSE);
}
requiredFields.put(select.getId(), Boolean.FALSE);
/**
* Checks if all mandatory fields are filled, and if there are changes in
* the current field. If yes, the save button will be enabled.
*
* @param event
* ValueChangeEvent
* @param component
* current Component
* @param originalValue
* original Value of the current field
*/
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
* 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()) {
if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) {
saveButton.setEnabled(false);
return;
}
entry.setValue(Boolean.FALSE);
}
saveButton.setEnabled(true);
}
private void checkExistsChanges() {
if (editedFields == null) {
return;
}
for (final Map.Entry<String, Boolean> entry : editedFields.entrySet()) {
if (entry.getValue() != null && entry.getValue().equals(Boolean.TRUE)) {
saveButton.setEnabled(true);
return;
}
}
saveButton.setEnabled(false);
}
public void 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);
}
entry.setValue(Boolean.FALSE);
}
}
@@ -258,20 +325,22 @@ public class CommonDialogWindow extends Window implements Serializable {
private void createMandatoryLabel() {
if (existsMandatoryFieldsInWindowContent()) {
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);
if (!existsMandatoryFieldsInWindowContent()) {
return;
}
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() {
@@ -292,18 +361,14 @@ public class CommonDialogWindow extends Window implements Serializable {
saveButton.setSizeUndefined();
saveButton.addStyleName("default-color");
saveButton.addClickListener(saveButtonClickListener);
saveButton.setEnabled(!existsMandatoryFieldsInWindowContent());
saveButton.setEnabled(false);
buttonsLayout.addComponent(saveButton);
buttonsLayout.setComponentAlignment(saveButton, Alignment.MIDDLE_RIGHT);
buttonsLayout.setExpandRatio(saveButton, 1.0F);
}
private boolean existsMandatoryFieldsInWindowContent() {
if (requiredFields != null && requiredFields.size() > 0) {
return true;
}
return false;
return !requiredFields.isEmpty();
}
private void addHelpLink() {

View File

@@ -14,7 +14,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory;
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.Property.ValueChangeEvent;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.FontAwesome;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.ViewScope;
@@ -93,6 +91,8 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
private IndexedContainer originalSelectedTableContainer;
private String originalTypeKey;
@Override
protected void createRequiredComponents() {
@@ -102,13 +102,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_NAME, true, "",
i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
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"), "",
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.DIST_SET_TYPE_KEY, true, "", i18n.get("textfield.key"),
true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
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"), "",
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.setImmediate(true);
tagDesc.setNullRepresentation("");
tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged);
}
private void listenerTagNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, tagName);
}
private void listenerTypeKeyTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, typeKey);
tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc()));
}
@Override
@@ -279,14 +272,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
for (final Long id : selectedIds) {
addTargetTableData(id);
}
if (optiongroup.getValue().equals(updateTypeStr)) {
updateMandatoryFields();
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
} else {
if (!selectedTableContainer.getItemIds().isEmpty()) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
}
}
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
}
}
@@ -298,19 +284,20 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
for (final Long id : selectedIds) {
addSourceTableData(id);
selectedTable.removeItem(id);
if (optiongroup.getValue().equals(updateTypeStr)) {
updateMandatoryFields();
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
}
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
}
}
}
private Boolean hasContentChanged() {
if (originalSelectedTableContainer == null) {
originalSelectedTableContainer = new IndexedContainer();
}
for (final Iterator itemIterator = selectedTableContainer.getItemIds().iterator(); itemIterator.hasNext();) {
final long itemId = (Long) itemIterator.next();
if (!originalSelectedTableContainer.containsId(itemId)) {
window.updateEditedFields(selectedTable.getId(), Boolean.TRUE);
return Boolean.TRUE;
}
}
@@ -319,23 +306,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
.hasNext();) {
final long itemId = (Long) itemIterator.next();
if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) {
window.updateEditedFields(selectedTable.getId(), Boolean.TRUE);
return Boolean.TRUE;
}
}
if (selectedTableContainer.size() > 0) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
}
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")
private void getSourceTableData() {
@@ -543,6 +524,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
super.optionValueChanged(event);
if (updateTypeStr.equals(event.getProperty().getValue())) {
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
selectedTable.getContainerDataSource().removeAllItems();
getSourceTableData();
distTypeSelectLayout.setEnabled(false);
@@ -600,14 +582,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
protected void setTagDetails(final String distSetTypeSelected) {
tagName.setValue(distSetTypeSelected);
setOriginalTagName(distSetTypeSelected);
getSourceTableData();
selectedTable.getContainerDataSource().removeAllItems();
final DistributionSetType selectedTypeTag = fetchDistributionSetType(distSetTypeSelected);
if (null != selectedTypeTag) {
tagDesc.setValue(selectedTypeTag.getDescription());
setTagDescOriginal(selectedTypeTag.getDescription());
setOriginalTagDesc(selectedTypeTag.getDescription());
typeKey.setValue(selectedTypeTag.getKey());
setTypeKeyOriginal(selectedTypeTag.getKey());
setOriginalTypeKey(selectedTypeTag.getKey());
if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) {
distTypeSelectLayout.setEnabled(true);
selectedTable.setEnabled(true);
@@ -669,7 +652,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
} else {
updateDistributionSetType(existingDistTypeByKey);
}
window.setSaveButtonEnabled(false);
}
}
@@ -687,14 +669,24 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
requiredFields.put(c.getId(), Boolean.FALSE);
}
}
// Selected SoftwareModulesType
requiredFields.put(selectedTable.getId(), null);
requiredFields.put(selectedTable.getId(), Boolean.FALSE);
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
protected void previewButtonClicked() {
if (!tagPreviewBtnClicked) {
@@ -729,4 +721,14 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
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.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.server.Page;
import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.ui.AbstractField;
@@ -110,8 +109,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected String tagNameValue;
protected String tagDescValue;
protected Color selectedColorOriginal;
private String tagDescOriginal;
private Color originalSelectedColor;
private String originalTagDesc;
private String originalTagName;
protected void createWindow() {
reset();
@@ -126,7 +126,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
requiredFields.put(c.getId(), null);
}
}
return requiredFields;
@@ -134,8 +134,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected Map<String, Boolean> getEditedFields() {
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(tagDesc.getId(), Boolean.FALSE);
return changeMap;
}
@@ -192,7 +193,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
ValoTheme.TEXTFIELD_TINY + " " + SPUIDefinitions.TAG_NAME, true, "", i18n.get("textfield.name"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
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"), "",
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.setImmediate(true);
tagDesc.setNullRepresentation("");
tagDesc.addTextChangeListener(this::listenerTagDescTextAreaChanged);
tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagDesc));
tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "",
i18n.get("label.combobox.tag"));
@@ -214,16 +216,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
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() {
mainLayout = new GridLayout(3, 2);
@@ -352,7 +344,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox);
}
window.setSaveButtonEnabled(false);
window.reset();
// close the color picker layout
tagPreviewBtnClicked = false;
// reset the selected color - Set default color
@@ -383,7 +375,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
tagPreviewBtnClicked = false;
if (window != null) {
window.resetMandatoryAndEditedFields();
window.reset();
}
}
@@ -474,13 +466,12 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor());
}
window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), selectedColorOriginal);
window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), originalSelectedColor);
}
protected void closeWindow() {
window.close();
UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
}
/**
@@ -687,23 +678,39 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
}
public Color getSelectedColorOriginal() {
return selectedColorOriginal;
return originalSelectedColor;
}
public void setSelectedColorOriginal(final Color selectedColorOriginal) {
this.selectedColorOriginal = selectedColorOriginal;
}
public String getTagDescOriginal() {
return tagDescOriginal;
}
public void setTagDescOriginal(final String tagDescOriginal) {
this.tagDescOriginal = tagDescOriginal;
this.originalSelectedColor = selectedColorOriginal;
}
public GridLayout getMainLayout() {
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;
/**
*
* Superclass defining common properties and methods for creating/updating
* types.
*
*/
public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
@@ -45,7 +43,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
protected String createTypeStr;
protected String updateTypeStr;
protected TextField typeKey;
protected String typeKeyOriginal;
protected String originalTypeKey;
public static final String TYPE_NAME_DYNAMIC_STYLE = "new-tag-name";
private static final String TYPE_DESC_DYNAMIC_STYLE = "new-tag-desc";
@@ -152,14 +150,13 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
} else {
typeKey.setEnabled(true);
tagName.setEnabled(true);
window.setSaveButtonEnabled(true);
tagName.clear();
tagDesc.clear();
typeKey.clear();
comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox);
}
window.setSaveButtonEnabled(false);
window.reset();
restoreComponentStyles();
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
getColorPickerLayout().getSelPreview()
@@ -186,7 +183,8 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview);
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
}
@Override
public Color getSelectedColorOriginal() {
return selectedColorOriginal;
public String getOriginalTypeKey() {
return originalTypeKey;
}
@Override
public void setSelectedColorOriginal(final Color selectedColorOriginal) {
this.selectedColorOriginal = selectedColorOriginal;
}
public String getTypeKeyOriginal() {
return typeKeyOriginal;
}
public void setTypeKeyOriginal(final String typeKeyOriginal) {
this.typeKeyOriginal = typeKeyOriginal;
public void setOriginalTypeKey(final String originalTypeKey) {
this.originalTypeKey = originalTypeKey;
}
}

View File

@@ -8,10 +8,8 @@
*/
package org.eclipse.hawkbit.ui.management.dstable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
@@ -44,10 +42,6 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer;
import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition;
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.ViewScope;
import com.vaadin.ui.AbstractField;
@@ -62,8 +56,7 @@ import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
/**
*
*
* WindowContent for adding/editing a Distribution
*/
@SpringComponent
@ViewScope
@@ -104,12 +97,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private String originalDistDescription;
private Boolean originalReqMigStep;
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;
@@ -139,7 +126,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
formLayout.addComponent(reqMigStepCheckbox);
setCompositionRoot(formLayout);
distNameTextField.focus();
}
@@ -151,43 +137,42 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
true, null, i18n.get("textfield.name"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
distNameTextField.setId(SPUIComponentIdProvider.DIST_ADD_NAME);
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"), "",
ValoTheme.TEXTFIELD_TINY, true, null, i18n.get("textfield.version"), true,
SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH);
distVersionTextField.setId(SPUIComponentIdProvider.DIST_ADD_VERSION);
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, "",
false, "", i18n.get("label.combobox.type"));
distsetTypeNameComboBox.setImmediate(true);
distsetTypeNameComboBox.setNullSelectionAllowed(false);
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",
ValoTheme.TEXTAREA_TINY, false, null, i18n.get("textfield.description"),
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC);
descTextArea.setNullRepresentation("");
descTextArea
.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalDistDescription));
reqMigStepCheckbox = SPUIComponentProvider.getCheckBox(i18n.get("checkbox.dist.required.migration.step"),
"dist-checkbox-style", null, false, "");
reqMigStepCheckbox.addStyleName(ValoTheme.CHECKBOX_SMALL);
reqMigStepCheckbox.setId(SPUIComponentIdProvider.DIST_ADD_MIGRATION_CHECK);
}
private void listenerDistNameTextFieldChanged(final TextChangeEvent event) {
if (!editDistribution) {
window.checkMandatoryTextField(event, distNameTextField);
}
}
private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) {
if (!editDistribution) {
window.checkMandatoryTextField(event, distVersionTextField);
}
reqMigStepCheckbox.addValueChangeListener(
event -> window.checkMandatoryEditedValueBoolean(event, reqMigStepCheckbox, originalReqMigStep));
}
/**
@@ -209,26 +194,17 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
return disttypeContainer;
}
private void enableSaveButton() {
window.setSaveButtonEnabled(true);
}
private DistributionSetType getDefaultDistributionSetType() {
final TenantMetaData tenantMetaData = systemManagement.getTenantMetadata();
return tenantMetaData.getDefaultDsType();
}
private void disableSaveButton() {
window.setSaveButtonEnabled(false);
}
private void saveDistribution() {
if (editDistribution) {
updateDistribution();
} else {
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.
*/
@@ -308,7 +271,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private void closeThisWindow() {
window.close();
UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
}
/**
@@ -381,7 +343,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
if (distSetTypeName == null) {
distsetTypeNameComboBox.addStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR);
}
notificationMessage.displayValidationError(i18n.get("message.mandatory.check"));
return false;
}
@@ -391,7 +352,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private void discardDistribution() {
/* Just close this window */
distsetTypeNameComboBox.removeValueChangeListener(distsetTypeNameComboBoxListener);
closeThisWindow();
}
@@ -407,14 +367,15 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
distsetTypeNameComboBox.removeStyleName(SPUIStyleDefinitions.SP_COMBOFIELD_ERROR);
descTextArea.clear();
reqMigStepCheckbox.clear();
if (window != null) {
window.setSaveButtonEnabled(true);
}
removeListeners();
changedComponents.clear();
originalDistDescription = null;
originalDistName = null;
originalDistSetType = null;
originalDistVersion = null;
originalReqMigStep = Boolean.FALSE;
if (window != null) {
window.resetMandatoryAndEditedFields();
window.reset();
}
}
@@ -422,71 +383,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
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.
*
@@ -495,7 +391,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
public void populateValuesOfDistribution(final Long editDistId) {
this.editDistId = editDistId;
editDistribution = Boolean.TRUE;
window.setSaveButtonEnabled(false);
final DistributionSet distSet = distributionSetManagement.findDistributionSetByIdWithDetails(editDistId);
if (distSet != null) {
distNameTextField.setValue(distSet.getName());
@@ -508,23 +403,24 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
if (distSet.getDescription() != null) {
descTextArea.setValue(distSet.getDescription());
}
setOriginalDistName(distSet.getName());
setOriginalDistVersion(distSet.getVersion());
setOriginalDistDescription(distSet.getDescription());
setOriginalReqMigStep(distSet.isRequiredMigrationStep());
setOriginalDistSetTYpe(distSet.getType().getName());
addListeners();
originalDistName = distSet.getName();
originalDistVersion = distSet.getVersion();
originalDistDescription = distSet.getDescription();
originalReqMigStep = distSet.isRequiredMigrationStep();
originalDistSetType = distSet.getType().getName();
window.updateEditedFields(distsetTypeNameComboBox.getId(), Boolean.FALSE);
window.updateEditedFields(reqMigStepCheckbox.getId(), Boolean.FALSE);
}
}
public CommonDialogWindow getWindow() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
populateRequiredComponents();
resetComponents();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(),
null, getMandatoryFields(), null, i18n);
null, getMandatoryFields(), getEditedFields(), i18n);
window.getButtonsLayout().removeStyleName("actionButtonsMargin");
populateRequiredComponents();
resetComponents();
return window;
}
@@ -534,12 +430,22 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
requiredFields.put(c.getId(), Boolean.FALSE);
}
}
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.
*/
@@ -549,12 +455,4 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
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;
/**
*
* Class for Create/Update Tag Layout of distribution set
*
*/
@SpringComponent
@ViewScope
@@ -98,7 +96,6 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
updateExistingTag(existingDistTag);
}
}
window.setSaveButtonEnabled(false);
}
/**
@@ -157,10 +154,11 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
@Override
public void setTagDetails(final String distTagSelected) {
tagName.setValue(distTagSelected);
setOriginalTagName(distTagSelected);
final DistributionSetTag selectedDistTag = tagManagement.findDistributionSetTag(distTagSelected);
if (null != selectedDistTag) {
tagDesc.setValue(selectedDistTag.getDescription());
setTagDescOriginal(selectedDistTag.getDescription());
setOriginalTagDesc(selectedDistTag.getDescription());
if (null == selectedDistTag.getColour()) {
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());

View File

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

View File

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

View File

@@ -75,9 +75,7 @@ import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;
/**
*
* Rollout add or update popup layout.
*
*/
@SpringComponent
@ViewScope
@@ -150,19 +148,21 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
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.
@@ -174,6 +174,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
}
public CommonDialogWindow getWindow() {
window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(),
uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields(),
@@ -181,25 +182,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
return window;
}
public CommonDialogWindow createUpdateWindow() {
updateMode = Boolean.TRUE;
return getWindow();
}
public CommonDialogWindow createAddWindow() {
updateMode = Boolean.FALSE;
return getWindow();
}
private Map<String, Boolean> getMandatoryFields() {
final Map<String, Boolean> requiredFields = new HashMap<>();
requiredFields.put(rolloutName.getId(), null);
requiredFields.put(distributionSet.getId(), null);
requiredFields.put(targetFilterQueryCombo.getId(), null);
requiredFields.put(noOfGroups.getId(), null);
requiredFields.put(triggerThreshold.getId(), null);
requiredFields.put(errorThreshold.getId(), null);
requiredFields.put(rolloutName.getId(), Boolean.FALSE);
requiredFields.put(distributionSet.getId(), Boolean.FALSE);
requiredFields.put(targetFilterQueryCombo.getId(), Boolean.FALSE);
requiredFields.put(noOfGroups.getId(), Boolean.FALSE);
requiredFields.put(triggerThreshold.getId(), Boolean.FALSE);
requiredFields.put(errorThreshold.getId(), Boolean.FALSE);
return requiredFields;
}
@@ -224,7 +214,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
rolloutForEdit = null;
if (window != null) {
window.resetMandatoryAndEditedFields();
window.reset();
}
}
@@ -319,13 +309,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerActionGroupValueChanged(final ValueChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryComboBox(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup());
}
if (event.getProperty().getValue() != null) {
window.checkChanges(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(),
event.getProperty().getValue().toString(), actionGroupOriginal.toString());
}
window.checkMandatoryEditedValue(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup(),
originalActionGroup.toString());
}
}
@@ -346,9 +331,16 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
filterField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
filterField.setEnabled(false);
filterField.setSizeUndefined();
filterField.addValueChangeListener(event -> listenerFilterFieldValueChanged(event, filterField));
return filterField;
}
private void listenerFilterFieldValueChanged(final ValueChangeEvent event, final TextArea filterField) {
if (window != null) {
window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo);
}
}
private Label createTotalTargetsLabel() {
final Label targetCountLabel = SPUIComponentProvider.getLabel("", SPUILabelDefinitions.SP_LABEL_SIMPLE);
targetCountLabel.addStyleName(ValoTheme.LABEL_TINY + " " + "rollout-target-count-message");
@@ -404,9 +396,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
totalTargetsCount = 0L;
totalTargetsLabel.setVisible(false);
}
onGroupNumberChange();
window.checkMandatoryComboBox(event, targetFilterQueryCombo);
onGroupNumberChange(event);
window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo);
window.checkMandatoryEditedValue(event, targetFilterQueryCombo, originalTargetFilterQueryCombo);
}
private String getTotalTargetMessage() {
@@ -618,11 +610,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, description);
return;
}
window.checkChanges(description.getId(), event.getText(), descriptionOriginal);
window.checkMandatoryEditedTextField(event, originalDescription);
}
}
@@ -633,16 +621,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
errorField.setMaxLength(7);
errorField.setSizeUndefined();
errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged);
errorField.addValueChangeListener(event -> listenerErrorThresholdValueChanged(event, errorField));
return errorField;
}
private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, errorThreshold);
return;
}
window.checkChanges(errorThreshold.getId(), event.getText(), errorThresholdOriginal);
window.checkMandatoryEditedTextField(event, originalErrorThreshold);
}
}
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.setMaxLength(3);
thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged);
thresholdField.addValueChangeListener(event -> listenerTriggerTresholdValueChanged(event, 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) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, triggerThreshold);
return;
}
window.checkChanges(triggerThreshold.getId(), event.getText(), triggerThresholdOriginal);
window.checkMandatoryEditedTextField(event, originalTriggerThreshold);
}
}
@@ -672,28 +666,27 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
noOfGroupsField.addValidator(new GroupNumberValidator());
noOfGroupsField.setSizeUndefined();
noOfGroupsField.setMaxLength(3);
noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange());
noOfGroupsField.addValueChangeListener(this::onGroupNumberChange);
noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged);
return noOfGroupsField;
}
private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, noOfGroups);
return;
}
window.checkChanges(noOfGroups.getId(), event.getText(), noOfGroups.getValue());
window.checkMandatoryEditedTextField(event, originalNoOfGroups);
}
}
private void onGroupNumberChange() {
private void onGroupNumberChange(final ValueChangeEvent event) {
if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) {
groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize())));
groupSizeLabel.setVisible(true);
} else {
groupSizeLabel.setVisible(false);
}
if (window != null) {
window.setRequiredFieldWhenUpdate(event, noOfGroups);
}
}
private ComboBox createDistributionSetCombo() {
@@ -710,14 +703,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private void listenerDistributionSetChanged(final ValueChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryComboBox(event, distributionSet);
return;
}
if (event.getProperty().getValue() != null) {
window.checkChanges(distributionSet.getId(), event.getProperty().getValue().toString(),
distributionSetOriginal);
}
window.checkMandatoryEditedValue(event, distributionSet, originalDistributionSet);
}
}
@@ -732,7 +718,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
return new LazyQueryContainer(
new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME),
distributionQF);
}
private TextField createRolloutNameField() {
@@ -740,16 +725,19 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID);
rolloutNameField.setSizeUndefined();
rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged);
rolloutNameField.addValueChangeListener(event -> listenerRolloutNameValueChanged(event, rolloutNameField));
return rolloutNameField;
}
private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) {
if (window != null) {
if (!updateMode) {
window.checkMandatoryTextField(event, rolloutName);
return;
}
window.checkChanges(rolloutName.getId(), event.getText(), rolloutNameOriginal);
window.checkMandatoryEditedTextField(event, originalRolloutName);
}
}
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());
distributionSet.setValue(DistributionSetIdName.generate(rolloutForEdit.getDistributionSet()));
final List<RolloutGroup> rolloutGroups = rolloutForEdit.getRolloutGroups();
setThresoldValues(rolloutGroups);
setThresholdValues(rolloutGroups);
setActionType(rolloutForEdit);
if (rolloutForEdit.getStatus() != RolloutStatus.READY) {
disableRequiredFieldsOnEdit();
@@ -870,30 +858,28 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
}
private void setOriginalValues() {
distributionSetOriginal = distributionSet.getValue().toString();
actionGroupOriginal = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue();
rolloutNameOriginal = rolloutName.getValue();
triggerThresholdOriginal = triggerThreshold.getValue();
errorThresholdOriginal = errorThreshold.getValue();
descriptionOriginal = description.getValue();
originalDistributionSet = distributionSet.getValue().toString();
originalActionGroup = actionTypeOptionGroupLayout.getActionTypeOptionGroup().getValue();
originalRolloutName = rolloutName.getValue();
originalTriggerThreshold = triggerThreshold.getValue();
originalErrorThreshold = errorThreshold.getValue();
originalDescription = description.getValue();
originalNoOfGroups = noOfGroups.getValue();
if (targetFilterQueryCombo.getValue() != null) {
originalTargetFilterQueryCombo = targetFilterQueryCombo.getValue().toString();
}
}
private Map<String, Boolean> getEditedFields() {
final Map<String, Boolean> changeMap = new HashMap<>();
if (rolloutForEdit == null) {
return changeMap;
}
if (rolloutForEdit.getStatus() != RolloutStatus.READY) {
changeMap.put(rolloutName.getId(), Boolean.FALSE);
changeMap.put(description.getId(), Boolean.FALSE);
} else {
changeMap.put(rolloutName.getId(), Boolean.FALSE);
changeMap.put(distributionSet.getId(), Boolean.FALSE);
changeMap.put(triggerThreshold.getId(), Boolean.FALSE);
changeMap.put(errorThreshold.getId(), Boolean.FALSE);
changeMap.put(description.getId(), Boolean.FALSE);
changeMap.put(actionTypeOptionGroupLayout.getActionTypeOptionGroup().getId(), Boolean.FALSE);
}
changeMap.put(rolloutName.getId(), Boolean.FALSE);
changeMap.put(distributionSet.getId(), Boolean.FALSE);
changeMap.put(targetFilterQueryCombo.getId(), Boolean.FALSE);
changeMap.put(noOfGroups.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;
}
@@ -933,7 +919,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
/**
* @param rolloutGroups
*/
private void setThresoldValues(final List<RolloutGroup> rolloutGroups) {
private void setThresholdValues(final List<RolloutGroup> rolloutGroups) {
if (null != rolloutGroups && !rolloutGroups.isEmpty()) {
errorThreshold.setValue(rolloutGroups.get(0).getErrorConditionExp());
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;
/**
*
* Rollout list grid component.
*
*/
@SpringComponent
@ViewScope
@@ -159,7 +157,6 @@ public class RolloutListGrid extends AbstractGrid {
}
item.getItemProperty(ROLLOUT_RENDERER_DATA)
.setValue(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString()));
}
@Override
@@ -200,7 +197,6 @@ public class RolloutListGrid extends AbstractGrid {
rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class,
FontAwesome.CIRCLE_O.getHtml(), false, false);
}
@Override
@@ -292,7 +288,6 @@ public class RolloutListGrid extends AbstractGrid {
for (final Object propertyId : columnsToBeHidden) {
getColumn(propertyId).setHidden(true);
}
}
@Override
@@ -315,7 +310,6 @@ public class RolloutListGrid extends AbstractGrid {
final RolloutRenderer customObjectRenderer = new RolloutRenderer(RolloutRendererData.class);
customObjectRenderer.addClickListener(this::onClickOfRolloutName);
getColumn(ROLLOUT_RENDERER_DATA).setRenderer(customObjectRenderer);
}
private void createRolloutStatusToFontMap() {
@@ -437,8 +431,8 @@ public class RolloutListGrid extends AbstractGrid {
}
private void onUpdate(final ContextMenuData contextMenuData) {
final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.getWindow();
addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId());
final CommonDialogWindow addTargetWindow = addUpdateRolloutWindow.createUpdateWindow();
addTargetWindow.setCaption(i18n.get("caption.update.rollout"));
UI.getCurrent().addWindow(addTargetWindow);
addTargetWindow.setVisible(Boolean.TRUE);
@@ -684,7 +678,6 @@ public class RolloutListGrid extends AbstractGrid {
public Class<String> getPresentationType() {
return String.class;
}
}
}

View File

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