Improved enable save button functionality when update tag

Signed-off-by: Melanie Retter <melanie.retter@bosch-si.com>
This commit is contained in:
Melanie Retter
2016-06-09 13:24:40 +02:00
parent 83dc9471dc
commit bbaa6baa72
12 changed files with 384 additions and 146 deletions

View File

@@ -13,7 +13,6 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
import org.eclipse.hawkbit.repository.SoftwareManagement; import org.eclipse.hawkbit.repository.SoftwareManagement;
import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModule;
@@ -73,8 +72,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
@Autowired @Autowired
private transient EntityFactory entityFactory; private transient EntityFactory entityFactory;
private Label mandatoryLabel;
private TextField nameTextField; private TextField nameTextField;
private TextField versionTextField; private TextField versionTextField;
@@ -136,14 +133,14 @@ 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::nameTextFieldChanged); nameTextField.addTextChangeListener(this::listenerNameTextFieldChanged);
/* 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::versionTextFieldChanged); versionTextField.addTextChangeListener(this::listenerVersionTextFieldChanged);
/* 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,
@@ -157,49 +154,29 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
addDescriptionTextChangeListener(); addDescriptionTextChangeListener();
addVendorTextChangeListener(); addVendorTextChangeListener();
/* Label for mandatory symbol */
mandatoryLabel = new Label(i18n.get("label.mandatory.field"));
mandatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR);
mandatoryLabel.addStyleName(ValoTheme.LABEL_SMALL);
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"));
typeComboBox.setId(SPUIComponentIdProvider.SW_MODULE_TYPE); typeComboBox.setId(SPUIComponentIdProvider.SW_MODULE_TYPE);
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::typeComboBoxChanged); typeComboBox.addValueChangeListener(this::listenerTypeComboBoxChanged);
populateTypeNameCombo(); populateTypeNameCombo();
resetOldValues(); resetOldValues();
} }
private void nameTextFieldChanged(final TextChangeEvent event) { private void listenerNameTextFieldChanged(final TextChangeEvent event) {
if (StringUtils.isNotBlank(event.getText())) { window.checkMandatoryTextField(event, nameTextField);
window.getRequiredFields().put(nameTextField.getCaption(), Boolean.TRUE);
} else {
window.getRequiredFields().put(nameTextField.getCaption(), Boolean.FALSE);
}
window.checkMandatoryFields();
} }
private void versionTextFieldChanged(final TextChangeEvent event) { private void listenerVersionTextFieldChanged(final TextChangeEvent event) {
if (StringUtils.isNotBlank(event.getText())) { window.checkMandatoryTextField(event, versionTextField);
window.getRequiredFields().put(versionTextField.getCaption(), Boolean.TRUE);
} else {
window.getRequiredFields().put(versionTextField.getCaption(), Boolean.FALSE);
}
window.checkMandatoryFields();
} }
private void typeComboBoxChanged(final ValueChangeEvent event) { private void listenerTypeComboBoxChanged(final ValueChangeEvent event) {
if (event.getProperty().getValue() != null) { window.checkMandatoryComboBox(event, typeComboBox);
window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.TRUE);
} else {
window.getRequiredFields().put(typeComboBox.getCaption(), Boolean.FALSE);
}
window.checkMandatoryFields();
} }
private void populateTypeNameCombo() { private void populateTypeNameCombo() {
@@ -212,6 +189,10 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
private void resetOldValues() { private void resetOldValues() {
oldDescriptionValue = null; oldDescriptionValue = null;
oldVendorValue = null; oldVendorValue = null;
if (window != null) {
window.resetRequiredFieldsValues();
}
} }
private void createWindow() { private void createWindow() {
@@ -227,7 +208,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
addStyleName("lay-color"); addStyleName("lay-color");
final FormLayout formLayout = new FormLayout(); final FormLayout formLayout = new FormLayout();
// formLayout.addComponent(mandatoryLabel);
formLayout.addComponent(typeComboBox); formLayout.addComponent(typeComboBox);
formLayout.addComponent(nameTextField); formLayout.addComponent(nameTextField);
formLayout.addComponent(versionTextField); formLayout.addComponent(versionTextField);
@@ -252,13 +232,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) { if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null); requiredFields.put(c.getCaption(), null);
} }
// else if (c instanceof TextField && ((TextField) c).isRequired())
// {
// requiredFields.put(c.getCaption(), null);
// } else if (c instanceof TextArea && ((TextArea) c).isRequired())
// {
// requiredFields.put(c.getCaption(), null);
// }
} }
return requiredFields; return requiredFields;
} }
@@ -347,6 +320,7 @@ 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);
} }
/** /**
@@ -383,6 +357,7 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
} else { } else {
addNewBaseSoftware(); addNewBaseSoftware();
} }
window.setSaveButtonEnabled(false);
} }
private boolean hasDescriptionChanged(final TextChangeEvent event) { private boolean hasDescriptionChanged(final TextChangeEvent event) {

View File

@@ -9,7 +9,10 @@
package org.eclipse.hawkbit.ui.artifacts.smtype; package org.eclipse.hawkbit.ui.artifacts.smtype;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
@@ -31,11 +34,14 @@ 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;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Alignment; import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.OptionGroup; import com.vaadin.ui.OptionGroup;
import com.vaadin.ui.components.colorpicker.ColorChangeListener; import com.vaadin.ui.components.colorpicker.ColorChangeListener;
@@ -69,7 +75,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
@Override @Override
protected void addListeners() { protected void addListeners() {
super.addListeners(); super.addListeners();
optiongroup.addValueChangeListener(this::createOptionValueChanged); optiongroup.addValueChangeListener(this::optionValueChanged);
} }
@Override @Override
@@ -86,11 +92,13 @@ 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);
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);
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, "",
@@ -103,6 +111,14 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
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() {
@@ -112,13 +128,23 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
getFormLayout().addComponent(assignOptiongroup); getFormLayout().addComponent(assignOptiongroup);
} }
// TODO MR requiredFields
@Override @Override
public void createWindow() { public void createWindow() {
reset(); reset();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields());
}
private Map<String, Boolean> getMandatoryFields() {
final Map<String, Boolean> requiredFields = new HashMap<>();
final Iterator<Component> iterate = getFormLayout().iterator();
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
}
}
return requiredFields;
} }
/** /**
@@ -128,9 +154,9 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
* ValueChangeEvent * ValueChangeEvent
*/ */
@Override @Override
protected void createOptionValueChanged(final ValueChangeEvent event) { protected void optionValueChanged(final ValueChangeEvent event) {
super.createOptionValueChanged(event); super.optionValueChanged(event);
if (updateTypeStr.equals(event.getProperty().getValue())) { if (updateTypeStr.equals(event.getProperty().getValue())) {
assignOptiongroup.setEnabled(false); assignOptiongroup.setEnabled(false);
@@ -172,6 +198,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
.findSoftwareModuleTypeByName(targetTagSelected); .findSoftwareModuleTypeByName(targetTagSelected);
if (null != selectedTypeTag) { if (null != selectedTypeTag) {
tagDesc.setValue(selectedTypeTag.getDescription()); tagDesc.setValue(selectedTypeTag.getDescription());
setTagDescOriginal(selectedTypeTag.getDescription());
typeKey.setValue(selectedTypeTag.getKey()); typeKey.setValue(selectedTypeTag.getKey());
if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) { if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) {
assignOptiongroup.setValue(multiAssignStr); assignOptiongroup.setValue(multiAssignStr);
@@ -201,6 +228,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
@Override @Override
protected void save(final ClickEvent event) { protected void save(final ClickEvent event) {
if (!mandatoryValuesPresent()) { if (!mandatoryValuesPresent()) {
window.setSaveButtonEnabled(false);
return; return;
} }
@@ -216,6 +244,7 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
updateSWModuleType(existingSMTypeByName); updateSWModuleType(existingSMTypeByName);
} }
window.setSaveButtonEnabled(false);
} }
private void createNewSWModuleType() { private void createNewSWModuleType() {

View File

@@ -10,6 +10,7 @@ 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.util.Map; import java.util.Map;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -20,11 +21,14 @@ 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 org.springframework.beans.factory.annotation.Autowired;
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.FontAwesome; import com.vaadin.server.FontAwesome;
import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.spring.annotation.ViewScope;
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;
@@ -40,9 +44,7 @@ import com.vaadin.ui.themes.ValoTheme;
* Superclass for pop-up-windows including a minimize and close icon in the * Superclass for pop-up-windows including a minimize and close icon in the
* upper right corner and a save and cancel button at the bottom. * upper right corner and a save and cancel button at the bottom.
*/ */
@SpringComponent public class CommonDialogWindow extends Window implements Serializable {
@ViewScope
public class CommonDialogWindow extends Window {
private static final long serialVersionUID = -1321949234316858703L; private static final long serialVersionUID = -1321949234316858703L;
@@ -100,12 +102,38 @@ public class CommonDialogWindow extends Window {
init(); init();
} }
public void checkMandatoryTextField(final TextChangeEvent event, final AbstractTextField textfield) {
if (StringUtils.isNotBlank(event.getText())) {
getRequiredFields().put(textfield.getCaption(), Boolean.TRUE);
} else {
getRequiredFields().put(textfield.getCaption(), Boolean.FALSE);
}
checkMandatoryFields();
}
public void checkMandatoryComboBox(final ValueChangeEvent event, final AbstractSelect select) {
if (event.getProperty().getValue() != null) {
if (StringUtils.isNotBlank(select.getCaption())) {
getRequiredFields().put(select.getCaption(), Boolean.TRUE);
}
getRequiredFields().put(select.getId(), Boolean.TRUE);
} else {
if (StringUtils.isNotBlank(select.getCaption())) {
getRequiredFields().put(select.getCaption(), Boolean.FALSE);
}
getRequiredFields().put(select.getId(), Boolean.FALSE);
}
checkMandatoryFields();
}
/** /**
* Checks the mandatory fields in the pop-up-window content. If all * Checks the mandatory fields in the pop-up-window content. If all
* 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.
*/ */
public void checkMandatoryFields() { private void checkMandatoryFields() {
for (final Map.Entry<String, Boolean> entry : requiredFields.entrySet()) { for (final Map.Entry<String, Boolean> entry : requiredFields.entrySet()) {
if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) { if (entry.getValue() == null || entry.getValue().equals(Boolean.FALSE)) {
@@ -116,6 +144,40 @@ public class CommonDialogWindow extends Window {
saveButton.setEnabled(true); saveButton.setEnabled(true);
} }
public void updateRequiredFields(final String fieldId, final Boolean filled) {
getRequiredFields().put(fieldId, Boolean.TRUE);
checkMandatoryFields();
}
public void checkChanges(final String newText, final String oldText) {
if ((StringUtils.isNotBlank(newText) && !newText.equals(oldText))
|| (StringUtils.isNotBlank(oldText) && !oldText.equals(newText))) {
saveButton.setEnabled(true);
} else {
saveButton.setEnabled(false);
}
}
public void checkColorChange(final Color newColor, final Color oldColor) {
if (newColor.equals(oldColor)) {
setSaveButtonEnabled(false);
} else {
setSaveButtonEnabled(true);
}
}
public void resetRequiredFieldsValues() {
// Reset mandatory fields are filled marker
if (getRequiredFields() != null) {
for (final Map.Entry<String, Boolean> entry : getRequiredFields().entrySet()) {
entry.setValue(null);
}
}
}
private final void init() { private final void init() {
if (content instanceof AbstractOrderedLayout) { if (content instanceof AbstractOrderedLayout) {

View File

@@ -205,6 +205,8 @@ public final class SPUIComponentProvider {
/** /**
* Get Label UI component. * * Get Label UI component. *
* *
* @param caption
* set the caption of the textArea
* @param style * @param style
* set style * set style
* @param styleName * @param styleName

View File

@@ -8,7 +8,10 @@
*/ */
package org.eclipse.hawkbit.ui.distributions.disttype; package org.eclipse.hawkbit.ui.distributions.disttype;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement;
@@ -37,9 +40,11 @@ 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;
import com.vaadin.ui.AbstractField;
import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator; import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator;
import com.vaadin.ui.Alignment; import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
@@ -94,11 +99,13 @@ 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);
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);
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, "",
@@ -109,6 +116,15 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
tagDesc.setNullRepresentation(""); tagDesc.setNullRepresentation("");
} }
private void listenerTagNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, tagName);
}
private void listenerTypeKeyTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, typeKey);
}
@Override @Override
protected void buildLayout() { protected void buildLayout() {
@@ -247,10 +263,12 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
private void addSMType() { private void addSMType() {
final Set<Long> selectedIds = (Set<Long>) sourceTable.getValue(); final Set<Long> selectedIds = (Set<Long>) sourceTable.getValue();
if (null != selectedIds && !selectedIds.isEmpty()) { if (selectedIds != null && !selectedIds.isEmpty()) {
for (final Long id : selectedIds) { for (final Long id : selectedIds) {
addTargetTableData(id); addTargetTableData(id);
} }
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
} }
} }
@@ -264,6 +282,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
selectedTable.removeItem(id); selectedTable.removeItem(id);
} }
} }
if (selectedIds == null || selectedIds.isEmpty()) {
window.updateRequiredFields(selectedTable.getId(), Boolean.FALSE);
}
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -484,9 +505,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
* ValueChangeEvent * ValueChangeEvent
*/ */
@Override @Override
protected void createOptionValueChanged(final ValueChangeEvent event) { protected void optionValueChanged(final ValueChangeEvent event) {
super.createOptionValueChanged(event); super.optionValueChanged(event);
if (updateTypeStr.equals(event.getProperty().getValue())) { if (updateTypeStr.equals(event.getProperty().getValue())) {
selectedTable.getContainerDataSource().removeAllItems(); selectedTable.getContainerDataSource().removeAllItems();
@@ -551,18 +572,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
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());
typeKey.setValue(selectedTypeTag.getKey()); typeKey.setValue(selectedTypeTag.getKey());
if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) { if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) {
distTypeSelectLayout.setEnabled(true); distTypeSelectLayout.setEnabled(true);
selectedTable.setEnabled(true); selectedTable.setEnabled(true);
window.setSaveButtonEnabled(true);
} else { } else {
uiNotification.displayValidationError( uiNotification.displayValidationError(
selectedTypeTag.getName() + " " + i18n.get("message.error.dist.set.type.update")); selectedTypeTag.getName() + " " + i18n.get("message.error.dist.set.type.update"));
distTypeSelectLayout.setEnabled(false); distTypeSelectLayout.setEnabled(false);
selectedTable.setEnabled(false); selectedTable.setEnabled(false);
window.setSaveButtonEnabled(false);
} }
for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) { for (final SoftwareModuleType swModuleType : selectedTypeTag.getOptionalModuleTypes()) {
addTargetTableforUpdate(swModuleType, false); addTargetTableforUpdate(swModuleType, false);
@@ -607,15 +627,30 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
} else { } else {
updateDistributionSetType(existingDistTypeByKey); updateDistributionSetType(existingDistTypeByKey);
} }
window.setSaveButtonEnabled(false);
} }
} }
// TODO MR requiredFields
@Override @Override
public void createWindow() { public void createWindow() {
reset(); reset();
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null, window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields());
}
private Map<String, Boolean> getMandatoryFields() {
final Map<String, Boolean> requiredFields = new HashMap<>();
final Iterator<Component> iterate = getFormLayout().iterator();
while (iterate.hasNext()) {
final Component c = iterate.next();
if (c instanceof AbstractField && ((AbstractField) c).isRequired()) {
requiredFields.put(c.getCaption(), null);
}
}
// Selected SoftwareModulesType
requiredFields.put(selectedTable.getId(), null);
return requiredFields;
} }
@Override @Override

View File

@@ -8,6 +8,10 @@
*/ */
package org.eclipse.hawkbit.ui.layouts; package org.eclipse.hawkbit.ui.layouts;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.annotation.PreDestroy; import javax.annotation.PreDestroy;
import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.SpPermissionChecker;
@@ -25,7 +29,6 @@ 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.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
import org.eclipse.hawkbit.ui.utils.UINotification; 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;
@@ -33,11 +36,14 @@ 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.Alignment; import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button; import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox; import com.vaadin.ui.ComboBox;
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.GridLayout; import com.vaadin.ui.GridLayout;
@@ -87,7 +93,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected CommonDialogWindow window; protected CommonDialogWindow window;
protected Label colorLabel; protected Label colorLabel;
protected Label madatoryLabel;
protected TextField tagName; protected TextField tagName;
protected TextArea tagDesc; protected TextArea tagDesc;
protected Button tagColorPreviewBtn; protected Button tagColorPreviewBtn;
@@ -105,11 +110,25 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
protected String tagNameValue; protected String tagNameValue;
protected String tagDescValue; protected String tagDescValue;
// TODO MR requiredFields private Color selectedColorOriginal;
private String tagDescOriginal;
protected void createWindow() { protected void createWindow() {
reset(); reset();
setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, setWindow(SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null,
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, null)); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields()));
}
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);
}
}
return requiredFields;
} }
/** /**
@@ -158,7 +177,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
createTagStr = i18n.get("label.create.tag"); createTagStr = i18n.get("label.create.tag");
updateTagStr = i18n.get("label.update.tag"); updateTagStr = i18n.get("label.update.tag");
comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag"), null);
madatoryLabel = getMandatoryLabel();
colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.tag.color"), null);
colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE);
@@ -166,6 +184,7 @@ 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);
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"),
@@ -174,6 +193,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);
tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "", tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "",
i18n.get("label.combobox.tag")); i18n.get("label.combobox.tag"));
@@ -186,6 +206,16 @@ 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);
}
private void listenerTagDescTextAreaChanged(final TextChangeEvent event) {
window.checkChanges(event.getText(), tagDescOriginal);
}
protected void buildLayout() { protected void buildLayout() {
mainLayout = new GridLayout(3, 2); mainLayout = new GridLayout(3, 2);
@@ -201,7 +231,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
formLayout.addComponent(optiongroup); formLayout.addComponent(optiongroup);
formLayout.addComponent(comboLayout); formLayout.addComponent(comboLayout);
formLayout.addComponent(madatoryLabel);
formLayout.addComponent(tagName); formLayout.addComponent(tagName);
formLayout.addComponent(tagDesc); formLayout.addComponent(tagDesc);
formLayout.addStyleName("form-lastrow"); formLayout.addStyleName("form-lastrow");
@@ -269,12 +298,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
} }
} }
protected Label getMandatoryLabel() {
final Label label = new Label(i18n.get("label.mandatory.field"));
label.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL);
return label;
}
private void tagNameChosen(final ValueChangeEvent event) { private void tagNameChosen(final ValueChangeEvent event) {
final String tagSelected = (String) event.getProperty().getValue(); final String tagSelected = (String) event.getProperty().getValue();
if (null != tagSelected) { if (null != tagSelected) {
@@ -319,6 +342,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox); comboLayout.removeComponent(tagNameComboBox);
} }
window.setSaveButtonEnabled(false);
// 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
@@ -347,6 +371,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor()); colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor());
colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor()); colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor());
tagPreviewBtnClicked = false; tagPreviewBtnClicked = false;
if (window != null) {
window.resetRequiredFieldsValues();
}
} }
/** /**
@@ -434,11 +462,14 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
createDynamicStyleForComponents(tagName, tagDesc, colorPickedPreview); createDynamicStyleForComponents(tagName, tagDesc, colorPickedPreview);
colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor()); colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor());
} }
window.checkColorChange(colorPickerLayout.getSelectedColor(), selectedColorOriginal);
} }
protected void closeWindow() { protected void closeWindow() {
window.close(); window.close();
UI.getCurrent().removeWindow(window); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -643,4 +674,20 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
return formLayout; return formLayout;
} }
public Color getSelectedColorOriginal() {
return selectedColorOriginal;
}
public void setSelectedColorOriginal(final Color selectedColorOriginal) {
this.selectedColorOriginal = selectedColorOriginal;
}
public String getTagDescOriginal() {
return tagDescOriginal;
}
public void setTagDescOriginal(final String tagDescOriginal) {
this.tagDescOriginal = tagDescOriginal;
}
} }

View File

@@ -52,7 +52,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
@Override @Override
protected void addListeners() { protected void addListeners() {
super.addListeners(); super.addListeners();
optiongroup.addValueChangeListener(this::createOptionValueChanged); optiongroup.addValueChangeListener(this::optionValueChanged);
} }
@Override @Override
@@ -61,7 +61,6 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
createTypeStr = i18n.get("label.create.type"); createTypeStr = i18n.get("label.create.type");
updateTypeStr = i18n.get("label.update.type"); updateTypeStr = i18n.get("label.update.type");
comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null); comboLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type"), null);
madatoryLabel = getMandatoryLabel();
colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null); colorLabel = SPUIComponentProvider.getLabel(i18n.get("label.choose.type.color"), null);
colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE); colorLabel.addStyleName(SPUIDefinitions.COLOR_LABEL_STYLE);
@@ -137,7 +136,8 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
* @param event * @param event
* ValueChangeEvent * ValueChangeEvent
*/ */
protected void createOptionValueChanged(final ValueChangeEvent event) { @Override
protected void optionValueChanged(final ValueChangeEvent event) {
if (updateTypeStr.equals(event.getProperty().getValue())) { if (updateTypeStr.equals(event.getProperty().getValue())) {
tagName.clear(); tagName.clear();
@@ -158,6 +158,7 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
comboLayout.removeComponent(comboLabel); comboLayout.removeComponent(comboLabel);
comboLayout.removeComponent(tagNameComboBox); comboLayout.removeComponent(tagNameComboBox);
} }
window.setSaveButtonEnabled(false);
restoreComponentStyles(); restoreComponentStyles();
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
getColorPickerLayout().getSelPreview() getColorPickerLayout().getSelPreview()
@@ -236,12 +237,14 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor());
createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR); createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR);
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR); getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
} else { } else {
getColorPickerLayout().setSelectedColor(ColorPickerHelper.rgbToColorConverter(color)); getColorPickerLayout().setSelectedColor(ColorPickerHelper.rgbToColorConverter(color));
getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor()); getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor());
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor()); getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor());
createDynamicStyleForComponents(tagName, typeKey, tagDesc, color); createDynamicStyleForComponents(tagName, typeKey, tagDesc, color);
getPreviewButtonColor(color); getPreviewButtonColor(color);
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(color));
} }
} }

View File

@@ -10,6 +10,7 @@ package org.eclipse.hawkbit.ui.management.dstable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -49,12 +50,12 @@ import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener; 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.CheckBox; import com.vaadin.ui.CheckBox;
import com.vaadin.ui.ComboBox; import com.vaadin.ui.ComboBox;
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;
@@ -92,13 +93,12 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
private TextField distNameTextField; private TextField distNameTextField;
private TextField distVersionTextField; private TextField distVersionTextField;
private Label madatoryLabel;
private TextArea descTextArea; private TextArea descTextArea;
private CheckBox reqMigStepCheckbox; private CheckBox reqMigStepCheckbox;
private ComboBox distsetTypeNameComboBox; private ComboBox distsetTypeNameComboBox;
private boolean editDistribution = Boolean.FALSE; private boolean editDistribution = Boolean.FALSE;
private Long editDistId; private Long editDistId;
private CommonDialogWindow addDistributionWindow; private CommonDialogWindow window;
private String originalDistName; private String originalDistName;
private String originalDistVersion; private String originalDistVersion;
private String originalDistDescription; private String originalDistDescription;
@@ -132,7 +132,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
setSizeUndefined(); setSizeUndefined();
formLayout = new FormLayout(); formLayout = new FormLayout();
formLayout.addComponent(madatoryLabel);
formLayout.addComponent(distsetTypeNameComboBox); formLayout.addComponent(distsetTypeNameComboBox);
formLayout.addComponent(distNameTextField); formLayout.addComponent(distNameTextField);
formLayout.addComponent(distVersionTextField); formLayout.addComponent(distVersionTextField);
@@ -152,12 +151,14 @@ 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);
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);
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"));
@@ -171,16 +172,20 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC); descTextArea.setId(SPUIComponentIdProvider.DIST_ADD_DESC);
descTextArea.setNullRepresentation(""); descTextArea.setNullRepresentation("");
/* Label for mandatory symbol */
madatoryLabel = new Label(i18n.get("label.mandatory.field"));
madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL);
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);
} }
private void listenerDistNameTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, distNameTextField);
}
private void listenerDistVersionTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, distVersionTextField);
}
/** /**
* Get the LazyQueryContainer instance for DistributionSetTypes. * Get the LazyQueryContainer instance for DistributionSetTypes.
* *
@@ -201,7 +206,7 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
} }
private void enableSaveButton() { private void enableSaveButton() {
addDistributionWindow.setSaveButtonEnabled(true); window.setSaveButtonEnabled(true);
} }
private DistributionSetType getDefaultDistributionSetType() { private DistributionSetType getDefaultDistributionSetType() {
@@ -210,17 +215,16 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
} }
private void disableSaveButton() { private void disableSaveButton() {
addDistributionWindow.setSaveButtonEnabled(false); window.setSaveButtonEnabled(false);
} }
private void saveDistribution() { private void saveDistribution() {
/* add new or update target */
if (editDistribution) { if (editDistribution) {
updateDistribution(); updateDistribution();
} else { } else {
addNewDistribution(); addNewDistribution();
} }
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -298,8 +302,9 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
* Close window. * Close window.
*/ */
private void closeThisWindow() { private void closeThisWindow() {
addDistributionWindow.close(); window.close();
UI.getCurrent().removeWindow(addDistributionWindow); UI.getCurrent().removeWindow(window);
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -398,11 +403,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 (addDistributionWindow != null) { if (window != null) {
addDistributionWindow.setSaveButtonEnabled(true); window.setSaveButtonEnabled(true);
} }
removeListeners(); removeListeners();
changedComponents.clear(); changedComponents.clear();
if (window != null) {
window.resetRequiredFieldsValues();
}
} }
private void populateRequiredComponents() { private void populateRequiredComponents() {
@@ -482,7 +491,7 @@ 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;
addDistributionWindow.setSaveButtonEnabled(false); 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());
@@ -504,17 +513,28 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
} }
} }
// TODO MR requiredFields
public CommonDialogWindow getWindow() { public CommonDialogWindow getWindow() {
eventBus.publish(this, DragEvent.HIDE_DROP_HINT); eventBus.publish(this, DragEvent.HIDE_DROP_HINT);
populateRequiredComponents(); populateRequiredComponents();
resetComponents(); resetComponents();
addDistributionWindow = 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, null); null, getMandatoryFields());
addDistributionWindow.getButtonsLayout().removeStyleName("actionButtonsMargin"); window.getButtonsLayout().removeStyleName("actionButtonsMargin");
return addDistributionWindow; 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);
}
}
return requiredFields;
} }
/** /**

View File

@@ -98,6 +98,7 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
updateExistingTag(existingDistTag); updateExistingTag(existingDistTag);
} }
} }
window.setSaveButtonEnabled(false);
} }
/** /**
@@ -159,11 +160,14 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
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());
if (null == selectedDistTag.getColour()) { if (null == selectedDistTag.getColour()) {
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
} else { } else {
setTagColor(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()), setTagColor(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()),
selectedDistTag.getColour()); selectedDistTag.getColour());
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()));
} }
} }
} }
@@ -181,4 +185,5 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(), setOptionGroupDefaultValue(permChecker.hasCreateDistributionPermission(),
permChecker.hasUpdateDistributionPermission()); permChecker.hasUpdateDistributionPermission());
} }
} }

View File

@@ -8,9 +8,13 @@
*/ */
package org.eclipse.hawkbit.ui.management.targettable; package org.eclipse.hawkbit.ui.management.targettable;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
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,6 +39,8 @@ import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener; 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.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.Label;
@@ -73,7 +79,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
private TextField controllerIDTextField; private TextField controllerIDTextField;
private TextField nameTextField; private TextField nameTextField;
private TextArea descTextArea; private TextArea descTextArea;
private Label madatoryLabel;
private boolean editTarget = Boolean.FALSE; private boolean editTarget = Boolean.FALSE;
private String controllerId; private String controllerId;
private FormLayout formLayout; private FormLayout formLayout;
@@ -100,6 +105,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null, controllerIDTextField = SPUIComponentProvider.getTextField( i18n.get("prompt.target.id"), "", ValoTheme.TEXTFIELD_TINY, true, null,
i18n.get("prompt.target.id"), true, SPUILabelDefinitions.TEXT_FIELD_MAX_LENGTH); 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);
/* 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, false, null,
@@ -111,10 +117,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
i18n.get("textfield.description"), SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH); 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);
}
/* Label for mandatory symbol */
madatoryLabel = new Label(i18n.get("label.mandatory.field")); private void listenerControllerIDTextFieldChanged(final TextChangeEvent event) {
madatoryLabel.setStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL); window.checkMandatoryTextField(event, controllerIDTextField);
} }
private void buildLayout() { private void buildLayout() {
@@ -125,14 +131,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
*/ */
formLayout = new FormLayout(); formLayout = new FormLayout();
formLayout.addComponent(madatoryLabel);
formLayout.addComponent(controllerIDTextField); formLayout.addComponent(controllerIDTextField);
formLayout.addComponent(nameTextField); formLayout.addComponent(nameTextField);
formLayout.addComponent(descTextArea); formLayout.addComponent(descTextArea);
if (Boolean.TRUE.equals(editTarget)) {
madatoryLabel.setVisible(Boolean.FALSE);
}
nameTextField.focus(); nameTextField.focus();
} }
@@ -211,6 +213,7 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
} else { } else {
addNewTarget(); addNewTarget();
} }
window.setSaveButtonEnabled(false);
} }
private void discardTargetListner() { private void discardTargetListner() {
@@ -241,13 +244,24 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
} }
} }
// TODO MR requiredFields
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, null); SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(), event -> discardTargetListner(), null, getMandatoryFields());
return window; 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);
}
}
return requiredFields;
}
/** /**
* clear all fields of Target Edit Window. * clear all fields of Target Edit Window.
@@ -261,12 +275,17 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
controllerIDTextField.clear(); controllerIDTextField.clear();
descTextArea.clear(); descTextArea.clear();
editTarget = Boolean.FALSE; editTarget = Boolean.FALSE;
if (window != null) {
window.resetRequiredFieldsValues();
}
} }
private void closeThisWindow() { private void closeThisWindow() {
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) {
@@ -287,7 +306,7 @@ 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")); uINotification.displayValidationError(i18n.get("message.target.duplicate.check", new Object[] {newControlllerId}));
return false; return false;
} else { } else {
return true; return true;

View File

@@ -91,11 +91,14 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa
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());
if (null == selectedTargetTag.getColour()) { if (null == selectedTargetTag.getColour()) {
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR); setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
} else { } else {
setTagColor(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()), setTagColor(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()),
selectedTargetTag.getColour()); selectedTargetTag.getColour());
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()));
} }
} }
} }
@@ -112,6 +115,7 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa
updateExistingTag(existingTag); updateExistingTag(existingTag);
} }
} }
window.setSaveButtonEnabled(false);
} }
/** /**

View File

@@ -10,7 +10,9 @@ package org.eclipse.hawkbit.ui.rollout.rollout;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.eclipse.hawkbit.repository.DistributionSetManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement;
import org.eclipse.hawkbit.repository.EntityFactory; import org.eclipse.hawkbit.repository.EntityFactory;
@@ -58,6 +60,7 @@ import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Validator; import com.vaadin.data.Validator;
import com.vaadin.data.validator.IntegerRangeValidator; import com.vaadin.data.validator.IntegerRangeValidator;
import com.vaadin.data.validator.RegexpValidator; import com.vaadin.data.validator.RegexpValidator;
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.ComboBox; import com.vaadin.ui.ComboBox;
@@ -115,8 +118,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
@Autowired @Autowired
private transient EventBus.SessionEventBus eventBus; private transient EventBus.SessionEventBus eventBus;
private Label mandatoryLabel;
private TextField rolloutName; private TextField rolloutName;
private ComboBox distributionSet; private ComboBox distributionSet;
@@ -135,7 +136,7 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
private OptionGroup errorThresholdOptionGroup; private OptionGroup errorThresholdOptionGroup;
private CommonDialogWindow addUpdateRolloutWindow; private CommonDialogWindow window;
private Boolean editRolloutEnabled; private Boolean editRolloutEnabled;
@@ -157,13 +158,25 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
buildLayout(); buildLayout();
} }
// TODO MR requiredFields
public CommonDialogWindow getWindow() { public CommonDialogWindow getWindow() {
addUpdateRolloutWindow = 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(), null); uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields());
return addUpdateRolloutWindow; return window;
}
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);
return requiredFields;
} }
/** /**
@@ -187,6 +200,10 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
actionTypeOptionGroupLayout.selectDefaultOption(); actionTypeOptionGroupLayout.selectDefaultOption();
totalTargetsCount = 0L; totalTargetsCount = 0L;
rolloutForEdit = null; rolloutForEdit = null;
if (window != null) {
window.resetRequiredFieldsValues();
}
} }
private void resetFields() { private void resetFields() {
@@ -208,26 +225,25 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
setRows(9); setRows(9);
setColumns(3); setColumns(3);
addComponent(mandatoryLabel, 1, 0, 2, 0); addComponent(getLabel("textfield.name"), 0, 0);
addComponent(getLabel("textfield.name"), 0, 1); addComponent(rolloutName, 1, 0);
addComponent(rolloutName, 1, 1); addComponent(getLabel("prompt.distribution.set"), 0, 1);
addComponent(getLabel("prompt.distribution.set"), 0, 2); addComponent(distributionSet, 1, 1);
addComponent(distributionSet, 1, 2); addComponent(getLabel("prompt.target.filter"), 0, 2);
addComponent(getLabel("prompt.target.filter"), 0, 3); addComponent(targetFilterQueryCombo, 1, 2);
addComponent(targetFilterQueryCombo, 1, 3); addComponent(totalTargetsLabel, 2, 2);
addComponent(totalTargetsLabel, 2, 3); addComponent(getLabel("prompt.number.of.groups"), 0, 3);
addComponent(getLabel("prompt.number.of.groups"), 0, 4); addComponent(noOfGroups, 1, 3);
addComponent(noOfGroups, 1, 4); addComponent(groupSizeLabel, 2, 3);
addComponent(groupSizeLabel, 2, 4); addComponent(getLabel("prompt.tigger.threshold"), 0, 4);
addComponent(getLabel("prompt.tigger.threshold"), 0, 5); addComponent(triggerThreshold, 1, 4);
addComponent(triggerThreshold, 1, 5); addComponent(getPercentHintLabel(), 2, 4);
addComponent(getPercentHintLabel(), 2, 5); addComponent(getLabel("prompt.error.threshold"), 0, 5);
addComponent(getLabel("prompt.error.threshold"), 0, 6); addComponent(errorThreshold, 1, 5);
addComponent(errorThreshold, 1, 6); addComponent(errorThresholdOptionGroup, 2, 5);
addComponent(errorThresholdOptionGroup, 2, 6); addComponent(getLabel("textfield.description"), 0, 6);
addComponent(getLabel("textfield.description"), 0, 7); addComponent(description, 1, 6, 2, 6);
addComponent(description, 1, 7, 2, 7); addComponent(actionTypeOptionGroupLayout, 0, 7, 2, 7);
addComponent(actionTypeOptionGroupLayout, 0, 8, 2, 8);
rolloutName.focus(); rolloutName.focus();
} }
@@ -249,7 +265,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void createRequiredComponents() { private void createRequiredComponents() {
mandatoryLabel = createMandatoryLabel();
rolloutName = createRolloutNameField(); rolloutName = createRolloutNameField();
distributionSet = createDistributionSetCombo(); distributionSet = createDistributionSetCombo();
populateDistributionSet(); populateDistributionSet();
@@ -308,11 +323,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL); errorThresoldOptions.addStyleName(ValoTheme.OPTIONGROUP_HORIZONTAL);
errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP); errorThresoldOptions.addStyleName(SPUIStyleDefinitions.ROLLOUT_OPTION_GROUP);
errorThresoldOptions.setSizeUndefined(); errorThresoldOptions.setSizeUndefined();
errorThresoldOptions.addValueChangeListener(this::onErrorThresoldOptionChange); errorThresoldOptions.addValueChangeListener(this::listenerOnErrorThresoldOptionChange);
return errorThresoldOptions; return errorThresoldOptions;
} }
private void onErrorThresoldOptionChange(final ValueChangeEvent event) { private void listenerOnErrorThresoldOptionChange(final ValueChangeEvent event) {
errorThreshold.clear(); errorThreshold.clear();
errorThreshold.removeAllValidators(); errorThreshold.removeAllValidators();
if (event.getProperty().getValue().equals(ERRORTHRESOLDOPTIONS.COUNT.getValue())) { if (event.getProperty().getValue().equals(ERRORTHRESOLDOPTIONS.COUNT.getValue())) {
@@ -331,11 +346,11 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); targetFilter.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME);
targetFilter.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID); targetFilter.setId(SPUIComponentIdProvider.ROLLOUT_TARGET_FILTER_COMBO_ID);
targetFilter.setSizeUndefined(); targetFilter.setSizeUndefined();
targetFilter.addValueChangeListener(event -> onTargetFilterChange()); targetFilter.addValueChangeListener(this::onTargetFilterChange);
return targetFilter; return targetFilter;
} }
private void onTargetFilterChange() { private void onTargetFilterChange(final ValueChangeEvent event) {
final String filterQueryString = getTargetFilterQuery(); final String filterQueryString = getTargetFilterQuery();
if (!Strings.isNullOrEmpty(filterQueryString)) { if (!Strings.isNullOrEmpty(filterQueryString)) {
totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(filterQueryString); totalTargetsCount = targetManagement.countTargetByTargetFilterQuery(filterQueryString);
@@ -346,6 +361,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
totalTargetsLabel.setVisible(false); totalTargetsLabel.setVisible(false);
} }
onGroupNumberChange(); onGroupNumberChange();
window.checkMandatoryComboBox(event, targetFilterQueryCombo);
} }
private String getTotalTargetMessage() { private String getTotalTargetMessage() {
@@ -490,8 +507,8 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
} }
private void closeThisWindow() { private void closeThisWindow() {
addUpdateRolloutWindow.close(); window.close();
UI.getCurrent().removeWindow(addUpdateRolloutWindow); UI.getCurrent().removeWindow(window);
} }
private boolean mandatoryCheck() { private boolean mandatoryCheck() {
@@ -560,18 +577,29 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID); errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID);
errorField.setMaxLength(7); errorField.setMaxLength(7);
errorField.setSizeUndefined(); errorField.setSizeUndefined();
errorField.addTextChangeListener(this::listenerErrorThresholdTextFieldChanged);
return errorField; return errorField;
} }
private void listenerErrorThresholdTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, errorThreshold);
}
private TextField createTriggerThresold() { private TextField createTriggerThresold() {
final TextField thresholdField = getTextfield("prompt.tigger.threshold"); final TextField thresholdField = getTextfield("prompt.tigger.threshold");
thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID); thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID);
thresholdField.addValidator(new ThresholdFieldValidator()); thresholdField.addValidator(new ThresholdFieldValidator());
thresholdField.setSizeUndefined(); thresholdField.setSizeUndefined();
thresholdField.setMaxLength(3); thresholdField.setMaxLength(3);
thresholdField.addTextChangeListener(this::listenerTriggerThresholdTextFieldChanged);
return thresholdField; return thresholdField;
} }
private void listenerTriggerThresholdTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, triggerThreshold);
}
private TextField createNoOfGroupsField() { private TextField createNoOfGroupsField() {
final TextField noOfGroupsField = getTextfield("prompt.number.of.groups"); final TextField noOfGroupsField = getTextfield("prompt.number.of.groups");
noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID); noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID);
@@ -579,9 +607,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
noOfGroupsField.setSizeUndefined(); noOfGroupsField.setSizeUndefined();
noOfGroupsField.setMaxLength(3); noOfGroupsField.setMaxLength(3);
noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange()); noOfGroupsField.addValueChangeListener(evevt -> onGroupNumberChange());
noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged);
return noOfGroupsField; return noOfGroupsField;
} }
private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) {
window.checkMandatoryTextField(event, noOfGroups);
}
private void onGroupNumberChange() { private void onGroupNumberChange() {
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())));
@@ -599,9 +632,14 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME); dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME);
dsSet.setId(SPUIComponentIdProvider.ROLLOUT_DS_ID); dsSet.setId(SPUIComponentIdProvider.ROLLOUT_DS_ID);
dsSet.setSizeUndefined(); dsSet.setSizeUndefined();
dsSet.addValueChangeListener(this::listenerDistributionSetChanged);
return dsSet; return dsSet;
} }
private void listenerDistributionSetChanged(final ValueChangeEvent event) {
window.checkMandatoryComboBox(event, distributionSet);
}
private void populateDistributionSet() { private void populateDistributionSet() {
final Container container = createDsComboContainer(); final Container container = createDsComboContainer();
distributionSet.setContainerDataSource(container); distributionSet.setContainerDataSource(container);
@@ -620,13 +658,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
final TextField rolloutNameField = getTextfield("textfield.name"); final TextField rolloutNameField = getTextfield("textfield.name");
rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID); rolloutNameField.setId(SPUIComponentIdProvider.ROLLOUT_NAME_FIELD_ID);
rolloutNameField.setSizeUndefined(); rolloutNameField.setSizeUndefined();
rolloutNameField.addTextChangeListener(this::listenerRolloutNameTextFieldChanged);
return rolloutNameField; return rolloutNameField;
} }
private Label createMandatoryLabel() { private void listenerRolloutNameTextFieldChanged(final TextChangeEvent event) {
final Label madatoryLbl = new Label(i18n.get("label.mandatory.field")); window.checkMandatoryTextField(event, rolloutName);
madatoryLbl.addStyleName(SPUIStyleDefinitions.SP_TEXTFIELD_ERROR + " " + ValoTheme.LABEL_SMALL);
return madatoryLbl;
} }
private String getRolloutName() { private String getRolloutName() {