Merge branch
'fix_Introduce_consitent_button_icon_for_update_create_dialogs' of https://github.com/bsinno/hawkbit.git into fix_Introduce_consitent_button_icon_for_update_create_dialogs Conflicts: hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/artifacts/smtable/SoftwareModuleAddUpdateWindow.java hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/CommonDialogWindow.java Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>
This commit is contained in:
@@ -9,9 +9,6 @@
|
||||
package org.eclipse.hawkbit.ui.artifacts.smtable;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
||||
import org.eclipse.hawkbit.repository.SoftwareManagement;
|
||||
@@ -21,6 +18,7 @@ import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.common.SoftwareModuleTypeBeanQuery;
|
||||
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
|
||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator;
|
||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||
import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
|
||||
@@ -34,9 +32,7 @@ import org.vaadin.spring.events.EventBus;
|
||||
|
||||
import com.vaadin.spring.annotation.SpringComponent;
|
||||
import com.vaadin.spring.annotation.ViewScope;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.ComboBox;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.CustomComponent;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.Label;
|
||||
@@ -82,16 +78,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
|
||||
private CommonDialogWindow window;
|
||||
|
||||
private String originalDescriptionValue;
|
||||
|
||||
private String originalVendorValue;
|
||||
|
||||
private String originalNameValue;
|
||||
|
||||
private String originalVersionValue;
|
||||
|
||||
private String originalComboBoxValue;
|
||||
|
||||
private Boolean editSwModule = Boolean.FALSE;
|
||||
|
||||
private Long baseSwModuleId;
|
||||
@@ -126,8 +112,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
this.baseSwModuleId = baseSwModuleId;
|
||||
createRequiredComponents();
|
||||
createWindow();
|
||||
/* populate selected target values to edit. */
|
||||
populateValuesOfSwModule();
|
||||
nameTextField.setEnabled(false);
|
||||
versionTextField.setEnabled(false);
|
||||
typeComboBox.setEnabled(false);
|
||||
@@ -178,12 +162,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
versionTextField.clear();
|
||||
descTextArea.clear();
|
||||
typeComboBox.clear();
|
||||
|
||||
originalDescriptionValue = null;
|
||||
originalVendorValue = null;
|
||||
originalComboBoxValue = null;
|
||||
originalNameValue = null;
|
||||
originalVersionValue = null;
|
||||
}
|
||||
|
||||
private void createWindow() {
|
||||
@@ -193,11 +171,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
final Label madatoryStarLabel = new Label("*");
|
||||
madatoryStarLabel.setStyleName("v-caption v-required-field-indicator");
|
||||
madatoryStarLabel.setWidth(null);
|
||||
|
||||
/*
|
||||
* The main layout of the window contains mandatory info, textboxes
|
||||
* (controller Id, name & description) and action buttons layout
|
||||
*/
|
||||
addStyleName("lay-color");
|
||||
setSizeUndefined();
|
||||
|
||||
@@ -211,39 +184,14 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
|
||||
setCompositionRoot(formLayout);
|
||||
|
||||
/* add main layout to the window */
|
||||
window = SPUIComponentProvider.getWindow(i18n.get("upload.caption.add.new.swmodule"), null,
|
||||
populateValuesOfSwModule();
|
||||
window = SPUIWindowDecorator.getWindow(i18n.get("upload.caption.add.new.swmodule"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveOrUpdate(), event -> closeThisWindow(), null,
|
||||
formLayout, i18n);
|
||||
window.getButtonsLayout().removeStyleName("actionButtonsMargin");
|
||||
typeComboBox.focus();
|
||||
}
|
||||
|
||||
private Map<String, Boolean> getMandatoryFields(final FormLayout formLayout) {
|
||||
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.getId(), Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
return requiredFields;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new SW module.
|
||||
*/
|
||||
private void addNewBaseSoftware() {
|
||||
final String name = HawkbitCommonUtil.trimAndNullIfEmpty(nameTextField.getValue());
|
||||
final String version = HawkbitCommonUtil.trimAndNullIfEmpty(versionTextField.getValue());
|
||||
@@ -302,9 +250,6 @@ public class SoftwareModuleAddUpdateWindow extends CustomComponent implements Se
|
||||
: HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getVendor()));
|
||||
descTextArea.setValue(swModle.getDescription() == null ? HawkbitCommonUtil.SP_STRING_EMPTY
|
||||
: HawkbitCommonUtil.trimAndNullIfEmpty(swModle.getDescription()));
|
||||
originalDescriptionValue = descTextArea.getValue();
|
||||
originalVendorValue = vendorTextField.getValue();
|
||||
originalComboBoxValue = swModle.getType().getName();
|
||||
if (swModle.getType().isDeleted()) {
|
||||
typeComboBox.addItem(swModle.getType().getName());
|
||||
}
|
||||
|
||||
@@ -9,10 +9,7 @@
|
||||
package org.eclipse.hawkbit.ui.artifacts.smtype;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.hawkbit.repository.EntityFactory;
|
||||
@@ -37,10 +34,8 @@ import com.vaadin.data.Property.ValueChangeEvent;
|
||||
import com.vaadin.shared.ui.colorpicker.Color;
|
||||
import com.vaadin.spring.annotation.SpringComponent;
|
||||
import com.vaadin.spring.annotation.ViewScope;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.Alignment;
|
||||
import com.vaadin.ui.Button.ClickEvent;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.Label;
|
||||
import com.vaadin.ui.OptionGroup;
|
||||
import com.vaadin.ui.components.colorpicker.ColorChangeListener;
|
||||
@@ -91,15 +86,11 @@ 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(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(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, "",
|
||||
@@ -107,7 +98,6 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
|
||||
tagDesc.setId(SPUIDefinitions.NEW_SOFTWARE_TYPE_DESC);
|
||||
tagDesc.setImmediate(true);
|
||||
tagDesc.setNullRepresentation("");
|
||||
tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc()));
|
||||
|
||||
singleMultiOptionGroup();
|
||||
}
|
||||
@@ -122,23 +112,8 @@ public class CreateUpdateSoftwareTypeLayout extends CreateUpdateTypeLayout
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createWindow() {
|
||||
reset();
|
||||
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(),
|
||||
getEditedFields(), i18n);
|
||||
}
|
||||
|
||||
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.getId(), Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
return requiredFields;
|
||||
protected String getWindowCaption() {
|
||||
return i18n.get("caption.add.type");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -189,14 +164,11 @@ 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());
|
||||
setOriginalTagDesc(selectedTypeTag.getDescription());
|
||||
typeKey.setValue(selectedTypeTag.getKey());
|
||||
setOriginalTypeKey(selectedTypeTag.getKey());
|
||||
if (selectedTypeTag.getMaxAssignments() == Integer.MAX_VALUE) {
|
||||
assignOptiongroup.setValue(multiAssignStr);
|
||||
} else {
|
||||
|
||||
@@ -12,10 +12,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.hawkbit.ui.artifacts.smtable.SoftwareModuleAddUpdateWindow;
|
||||
@@ -27,9 +30,14 @@ import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||
|
||||
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.event.FieldEvents.TextChangeListener;
|
||||
import com.vaadin.event.FieldEvents.TextChangeNotifier;
|
||||
import com.vaadin.server.FontAwesome;
|
||||
import com.vaadin.ui.AbstractComponent;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.AbstractLayout;
|
||||
import com.vaadin.ui.AbstractOrderedLayout;
|
||||
@@ -37,7 +45,7 @@ import com.vaadin.ui.Alignment;
|
||||
import com.vaadin.ui.Button;
|
||||
import com.vaadin.ui.Button.ClickListener;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.Field;
|
||||
import com.vaadin.ui.GridLayout;
|
||||
import com.vaadin.ui.HorizontalLayout;
|
||||
import com.vaadin.ui.Label;
|
||||
@@ -47,9 +55,9 @@ import com.vaadin.ui.Window;
|
||||
import com.vaadin.ui.themes.ValoTheme;
|
||||
|
||||
/**
|
||||
* TODO: AbstractColorPicker und FlexibleOptionGroupItemComponent 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.
|
||||
*
|
||||
* Table pop-up-windows including a minimize and close icon in the upper right
|
||||
* corner and a save and cancel button at the bottom. Is not intended to reuse.
|
||||
*/
|
||||
public class CommonDialogWindow extends Window implements Serializable {
|
||||
|
||||
@@ -75,7 +83,7 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
|
||||
private final ClickListener cancelButtonClickListener;
|
||||
|
||||
private Map<Component, Object> orginalValues;
|
||||
private final Map<Component, Object> orginalValues;
|
||||
|
||||
private final List<AbstractField<?>> allComponents;
|
||||
|
||||
@@ -97,7 +105,7 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
*/
|
||||
public CommonDialogWindow(final String caption, final Component content, final String helpLink,
|
||||
final ClickListener saveButtonClickListener, final ClickListener cancelButtonClickListener,
|
||||
final FormLayout formLayout, final I18N i18n) {
|
||||
final AbstractLayout layout, final I18N i18n) {
|
||||
checkNotNull(saveButtonClickListener);
|
||||
checkNotNull(cancelButtonClickListener);
|
||||
this.caption = caption;
|
||||
@@ -105,21 +113,45 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
this.helpLink = helpLink;
|
||||
this.saveButtonClickListener = saveButtonClickListener;
|
||||
this.cancelButtonClickListener = cancelButtonClickListener;
|
||||
this.allComponents = getAllComponents(formLayout);
|
||||
this.orginalValues = new HashMap<>();
|
||||
this.allComponents = getAllComponents(layout);
|
||||
this.i18n = i18n;
|
||||
init();
|
||||
}
|
||||
|
||||
public void setSaveButtonEnabled(final boolean enabled) {
|
||||
saveButton.setEnabled(enabled);
|
||||
@Override
|
||||
public void close() {
|
||||
super.close();
|
||||
orginalValues.clear();
|
||||
removeListeners();
|
||||
allComponents.clear();
|
||||
this.saveButton.setEnabled(false);
|
||||
}
|
||||
|
||||
public void setCancelButtonEnabled(final boolean enabled) {
|
||||
cancelButton.setEnabled(enabled);
|
||||
private void removeListeners() {
|
||||
for (final AbstractField<?> field : allComponents) {
|
||||
removeTextListener(field);
|
||||
removeValueChangeListener(field);
|
||||
}
|
||||
}
|
||||
|
||||
public HorizontalLayout getButtonsLayout() {
|
||||
return buttonsLayout;
|
||||
private void removeTextListener(final AbstractField<?> field) {
|
||||
if (!(field instanceof TextChangeNotifier)) {
|
||||
return;
|
||||
}
|
||||
for (final Object listener : field.getListeners(TextChangeEvent.class)) {
|
||||
if (listener instanceof ChangeListener) {
|
||||
((TextChangeNotifier) field).removeTextChangeListener((ChangeListener) listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeValueChangeListener(final AbstractField<?> field) {
|
||||
for (final Object listener : field.getListeners(ValueChangeEvent.class)) {
|
||||
if (listener instanceof ChangeListener) {
|
||||
field.removeValueChangeListener((ChangeListener) listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final void init() {
|
||||
@@ -152,39 +184,44 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
addListeners();
|
||||
}
|
||||
|
||||
private final void setOrginaleValues() {
|
||||
public final void setOrginaleValues() {
|
||||
for (final AbstractField<?> field : allComponents) {
|
||||
orginalValues.put(field, field.getValue());
|
||||
}
|
||||
saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(null, null));
|
||||
}
|
||||
|
||||
private final void addListeners() {
|
||||
for (final AbstractField<?> field : allComponents) {
|
||||
field.addValueChangeListener(event -> saveButton.setEnabled(isSaveButtonEnabled()));
|
||||
field.addValueChangeListener(new ChangeListener(field));
|
||||
if (field instanceof TextChangeNotifier) {
|
||||
((TextChangeNotifier) field)
|
||||
.addTextChangeListener(event -> saveButton.setEnabled(isSaveButtonEnabled()));
|
||||
((TextChangeNotifier) field).addTextChangeListener(new ChangeListener(field));
|
||||
}
|
||||
}
|
||||
|
||||
saveButton.addClickListener(event -> save());
|
||||
saveButton.addClickListener(event -> close());
|
||||
cancelButton.addClickListener(event -> close());
|
||||
}
|
||||
|
||||
private void save() {
|
||||
saveButton.setEnabled(false);
|
||||
setOrginaleValues();
|
||||
private boolean isSaveButtonEnabledAfterValueChange(final Component currentChangedComponent,
|
||||
final Object newValue) {
|
||||
return isMandatoyFieldNotEmpty(currentChangedComponent, newValue)
|
||||
&& isValuesChanged(currentChangedComponent, newValue);
|
||||
}
|
||||
|
||||
private boolean isSaveButtonEnabled() {
|
||||
return isMandatoyFieldNotEmpty() && isValuesChanged();
|
||||
}
|
||||
|
||||
private boolean isValuesChanged() {
|
||||
private boolean isValuesChanged(final Component currentChangedComponent, final Object newValue) {
|
||||
for (final AbstractField<?> field : allComponents) {
|
||||
final Object currentValue = field.getValue();
|
||||
final Object orginalValue = orginalValues.get(field);
|
||||
Object orginalValue = orginalValues.get(field);
|
||||
Object currentValue = field.getValue();
|
||||
if (field.equals(currentChangedComponent)) {
|
||||
currentValue = newValue;
|
||||
}
|
||||
|
||||
if (!Objects.equals(currentValue, orginalValue)) {
|
||||
if (String.class.equals(field.getType())) {
|
||||
orginalValue = Strings.emptyToNull((String) orginalValue);
|
||||
currentValue = Strings.emptyToNull((String) orginalValue);
|
||||
}
|
||||
if (!Objects.equals(orginalValue, currentValue)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -202,14 +239,34 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isMandatoyFieldNotEmpty() {
|
||||
for (final AbstractField<?> field : allComponents) {
|
||||
// TODO empty string.
|
||||
if (field.isRequired() && field.getValue() == null) {
|
||||
private boolean isMandatoyFieldNotEmpty(final Component currentChangedComponent, final Object newValue) {
|
||||
final List<AbstractField<?>> requiredComponents = allComponents.stream().filter(field -> field.isRequired())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (final AbstractField<?> field : requiredComponents) {
|
||||
Object value = field.getValue();
|
||||
if (field.equals(currentChangedComponent)) {
|
||||
value = newValue;
|
||||
}
|
||||
|
||||
if (String.class.equals(field.getType())) {
|
||||
value = Strings.emptyToNull((String) value);
|
||||
}
|
||||
|
||||
if (Set.class.equals(field.getType())) {
|
||||
value = emptyToNull((Set<?>) value);
|
||||
}
|
||||
|
||||
if (value == null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private static Object emptyToNull(final Set<?> c) {
|
||||
return (c == null || c.isEmpty()) ? null : c;
|
||||
}
|
||||
|
||||
private List<AbstractField<?>> getAllComponents(final AbstractLayout abstractLayout) {
|
||||
@@ -299,4 +356,30 @@ public class CommonDialogWindow extends Window implements Serializable {
|
||||
buttonsLayout.setComponentAlignment(helpLinkComponent, Alignment.MIDDLE_RIGHT);
|
||||
}
|
||||
|
||||
public AbstractComponent getButtonsLayout() {
|
||||
return this.buttonsLayout;
|
||||
}
|
||||
|
||||
private class ChangeListener implements ValueChangeListener, TextChangeListener {
|
||||
|
||||
private final Field<?> field;
|
||||
|
||||
public ChangeListener(final Field<?> field) {
|
||||
super();
|
||||
this.field = field;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void textChange(final TextChangeEvent event) {
|
||||
saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, event.getText()));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void valueChange(final ValueChangeEvent event) {
|
||||
saveButton.setEnabled(isSaveButtonEnabledAfterValueChange(field, field.getValue()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ import java.util.Map;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.hawkbit.repository.model.BaseEntity;
|
||||
import org.eclipse.hawkbit.repository.model.DistributionSet;
|
||||
import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.common.UserDetailsFormatter;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIButtonDecorator;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIComboBoxDecorator;
|
||||
@@ -33,11 +32,8 @@ import com.vaadin.server.FontAwesome;
|
||||
import com.vaadin.server.Resource;
|
||||
import com.vaadin.shared.ui.label.ContentMode;
|
||||
import com.vaadin.ui.Button;
|
||||
import com.vaadin.ui.Button.ClickListener;
|
||||
import com.vaadin.ui.CheckBox;
|
||||
import com.vaadin.ui.ComboBox;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.HorizontalLayout;
|
||||
import com.vaadin.ui.Label;
|
||||
import com.vaadin.ui.Link;
|
||||
@@ -141,25 +137,6 @@ public final class SPUIComponentProvider {
|
||||
return SPUILabelDecorator.getDeocratedLabel(name, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get window component.
|
||||
*
|
||||
* @param caption
|
||||
* window caption
|
||||
* @param id
|
||||
* window id
|
||||
* @param type
|
||||
* type of window
|
||||
* @return Window
|
||||
*/
|
||||
public static CommonDialogWindow getWindow(final String caption, final String id, final String type,
|
||||
final Component content, final ClickListener saveButtonClickListener,
|
||||
final ClickListener cancelButtonClickListener, final String helpLink, final FormLayout formLayout,
|
||||
final I18N i18n) {
|
||||
return SPUIWindowDecorator.getDeocratedWindow(caption, id, type, content, saveButtonClickListener,
|
||||
cancelButtonClickListener, helpLink, formLayout, i18n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get window component.
|
||||
*
|
||||
|
||||
@@ -13,9 +13,9 @@ import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions;
|
||||
|
||||
import com.vaadin.ui.AbstractLayout;
|
||||
import com.vaadin.ui.Button.ClickListener;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.Window;
|
||||
|
||||
/**
|
||||
@@ -44,13 +44,13 @@ public final class SPUIWindowDecorator {
|
||||
* window type
|
||||
* @return Window
|
||||
*/
|
||||
public static CommonDialogWindow getDeocratedWindow(final String caption, final String id, final String type,
|
||||
public static CommonDialogWindow getWindow(final String caption, final String id, final String type,
|
||||
final Component content, final ClickListener saveButtonClickListener,
|
||||
final ClickListener cancelButtonClickListener, final String helpLink, final FormLayout formLayout,
|
||||
final ClickListener cancelButtonClickListener, final String helpLink, final AbstractLayout layout,
|
||||
final I18N i18n) {
|
||||
|
||||
final CommonDialogWindow window = new CommonDialogWindow(caption, content, helpLink, saveButtonClickListener,
|
||||
cancelButtonClickListener, formLayout, i18n);
|
||||
cancelButtonClickListener, layout, i18n);
|
||||
if (null != id) {
|
||||
window.setId(id);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
*/
|
||||
package org.eclipse.hawkbit.ui.distributions.disttype;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -27,6 +26,7 @@ import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder;
|
||||
import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent;
|
||||
import org.eclipse.hawkbit.ui.distributions.event.DistributionSetTypeEvent.DistributionSetTypeEnum;
|
||||
import org.eclipse.hawkbit.ui.layouts.CreateUpdateTypeLayout;
|
||||
import org.eclipse.hawkbit.ui.utils.CommonDialogWindowHelper;
|
||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIDefinitions;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions;
|
||||
@@ -43,7 +43,6 @@ import com.vaadin.data.util.IndexedContainer;
|
||||
import com.vaadin.server.FontAwesome;
|
||||
import com.vaadin.spring.annotation.SpringComponent;
|
||||
import com.vaadin.spring.annotation.ViewScope;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.AbstractSelect.ItemDescriptionGenerator;
|
||||
import com.vaadin.ui.Alignment;
|
||||
import com.vaadin.ui.Button;
|
||||
@@ -91,8 +90,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
|
||||
private IndexedContainer originalSelectedTableContainer;
|
||||
|
||||
private String originalTypeKey;
|
||||
|
||||
@Override
|
||||
protected void createRequiredComponents() {
|
||||
|
||||
@@ -102,15 +99,11 @@ 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(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(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, "",
|
||||
@@ -118,7 +111,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
tagDesc.setId(SPUIDefinitions.NEW_DISTRIBUTION_TYPE_DESC);
|
||||
tagDesc.setImmediate(true);
|
||||
tagDesc.setNullRepresentation("");
|
||||
tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, getOriginalTagDesc()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -190,8 +182,9 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
selectedTable.setImmediate(true);
|
||||
selectedTable.setVisibleColumns(DIST_TYPE_NAME, DIST_TYPE_MANDATORY);
|
||||
selectedTable.setColumnHeaders(i18n.get("header.dist.twintable.selected"), STAR);
|
||||
selectedTable.setColumnExpandRatio(DIST_TYPE_NAME, 0.75f);
|
||||
selectedTable.setColumnExpandRatio(DIST_TYPE_MANDATORY, 0.25f);
|
||||
selectedTable.setColumnExpandRatio(DIST_TYPE_NAME, 0.75F);
|
||||
selectedTable.setColumnExpandRatio(DIST_TYPE_MANDATORY, 0.25F);
|
||||
selectedTable.setRequired(true);
|
||||
}
|
||||
|
||||
private void addTooltTipToSelectedTable() {
|
||||
@@ -251,11 +244,6 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
selectedTableContainer.addContainerProperty(DIST_TYPE_MANDATORY, CheckBox.class, null);
|
||||
}
|
||||
|
||||
private void listenerMandatoryCheckboxChanged(final ValueChangeEvent event) {
|
||||
|
||||
window.setSaveButtonEnabled(true);
|
||||
}
|
||||
|
||||
private void createOriginalSelectedTableContainer() {
|
||||
|
||||
originalSelectedTableContainer = new IndexedContainer();
|
||||
@@ -268,24 +256,29 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
private void addSMType() {
|
||||
|
||||
final Set<Long> selectedIds = (Set<Long>) sourceTable.getValue();
|
||||
if (selectedIds != null && !selectedIds.isEmpty()) {
|
||||
for (final Long id : selectedIds) {
|
||||
addTargetTableData(id);
|
||||
}
|
||||
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
|
||||
if (selectedIds == null) {
|
||||
return;
|
||||
}
|
||||
for (final Long id : selectedIds) {
|
||||
addTargetTableData(id);
|
||||
}
|
||||
// TODO: Add Table to window
|
||||
// window.updateRequiredFields(selectedTable.getId(),
|
||||
// hasContentChanged());
|
||||
}
|
||||
|
||||
private void removeSMType() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final Set<Long> selectedIds = (Set<Long>) selectedTable.getValue();
|
||||
if (selectedIds != null && !selectedIds.isEmpty()) {
|
||||
for (final Long id : selectedIds) {
|
||||
addSourceTableData(id);
|
||||
selectedTable.removeItem(id);
|
||||
window.updateRequiredFields(selectedTable.getId(), hasContentChanged());
|
||||
}
|
||||
if (selectedIds == null) {
|
||||
return;
|
||||
}
|
||||
for (final Long id : selectedIds) {
|
||||
addSourceTableData(id);
|
||||
selectedTable.removeItem(id);
|
||||
// window.updateRequiredFields(selectedTable.getId(),
|
||||
// hasContentChanged());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,26 +287,27 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
if (originalSelectedTableContainer == null) {
|
||||
originalSelectedTableContainer = new IndexedContainer();
|
||||
}
|
||||
// is new softwareModule added?
|
||||
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);
|
||||
// window.updateEditedFields(selectedTable.getId(),
|
||||
// Boolean.TRUE);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// is softwareModule removed and at least one softwareModule is selected
|
||||
for (final Iterator itemIterator = originalSelectedTableContainer.getItemIds().iterator(); itemIterator
|
||||
.hasNext();) {
|
||||
final long itemId = (Long) itemIterator.next();
|
||||
if (selectedTableContainer.size() > 0 && !selectedTableContainer.containsId(itemId)) {
|
||||
window.updateEditedFields(selectedTable.getId(), Boolean.TRUE);
|
||||
// window.updateEditedFields(selectedTable.getId(),
|
||||
// Boolean.TRUE);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedTableContainer.size() > 0) {
|
||||
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
|
||||
}
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
@@ -524,7 +518,7 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
super.optionValueChanged(event);
|
||||
|
||||
if (updateTypeStr.equals(event.getProperty().getValue())) {
|
||||
window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
|
||||
// window.updateRequiredFields(selectedTable.getId(), Boolean.TRUE);
|
||||
selectedTable.getContainerDataSource().removeAllItems();
|
||||
getSourceTableData();
|
||||
distTypeSelectLayout.setEnabled(false);
|
||||
@@ -582,15 +576,12 @@ 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());
|
||||
setOriginalTagDesc(selectedTypeTag.getDescription());
|
||||
typeKey.setValue(selectedTypeTag.getKey());
|
||||
setOriginalTypeKey(selectedTypeTag.getKey());
|
||||
if (distributionSetManagement.countDistributionSetsByType(selectedTypeTag) <= 0) {
|
||||
distTypeSelectLayout.setEnabled(true);
|
||||
selectedTable.setEnabled(true);
|
||||
@@ -621,20 +612,19 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
@SuppressWarnings("unchecked")
|
||||
private void addTargetTableforUpdate(final SoftwareModuleType swModuleType, final boolean mandatory) {
|
||||
|
||||
Item saveTblitem;
|
||||
if (selectedTableContainer != null) {
|
||||
saveTblitem = selectedTableContainer.addItem(swModuleType.getId());
|
||||
sourceTable.removeItem(swModuleType.getId());
|
||||
saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName());
|
||||
saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory));
|
||||
final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer
|
||||
.getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue();
|
||||
mandatoryCheckbox.addValueChangeListener(this::listenerMandatoryCheckboxChanged);
|
||||
|
||||
final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId());
|
||||
originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName());
|
||||
originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory));
|
||||
if (selectedTableContainer == null) {
|
||||
return;
|
||||
}
|
||||
final Item saveTblitem = selectedTableContainer.addItem(swModuleType.getId());
|
||||
sourceTable.removeItem(swModuleType.getId());
|
||||
saveTblitem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName());
|
||||
saveTblitem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory));
|
||||
final CheckBox mandatoryCheckbox = (CheckBox) selectedTableContainer
|
||||
.getContainerProperty(swModuleType.getId(), DIST_TYPE_MANDATORY).getValue();
|
||||
|
||||
final Item originalItem = originalSelectedTableContainer.addItem(swModuleType.getId());
|
||||
originalItem.getItemProperty(DIST_TYPE_NAME).setValue(swModuleType.getName());
|
||||
originalItem.getItemProperty(DIST_TYPE_MANDATORY).setValue(new CheckBox("", mandatory));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -653,37 +643,17 @@ public class CreateUpdateDistSetTypeLayout extends CreateUpdateTypeLayout
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createWindow() {
|
||||
reset();
|
||||
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.type"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, this::save, this::discard, null, getMandatoryFields(),
|
||||
getEditedFields(), i18n);
|
||||
protected String getWindowCaption() {
|
||||
return i18n.get("caption.add.type");
|
||||
}
|
||||
|
||||
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.getId(), Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
protected Map<String, Boolean> getMandatoryFields() {
|
||||
final Map<String, Boolean> requiredFields = CommonDialogWindowHelper.getMandatoryFields(getFormLayout());
|
||||
// Selected SoftwareModulesType
|
||||
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) {
|
||||
@@ -718,14 +688,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;
|
||||
}
|
||||
// @Override
|
||||
// public String getOriginalTypeKey() {
|
||||
// return originalTypeKey;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setOriginalTypeKey(final String originalTypeKey) {
|
||||
// this.originalTypeKey = originalTypeKey;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -259,8 +259,8 @@ public class DistributionSetDetails extends AbstractNamedVersionedEntityTableDet
|
||||
|
||||
@Override
|
||||
protected void onEdit(final ClickEvent event) {
|
||||
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
|
||||
distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId());
|
||||
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
|
||||
newDistWindow.setCaption(getI18n().get("caption.update.dist"));
|
||||
UI.getCurrent().addWindow(newDistWindow);
|
||||
newDistWindow.setVisible(Boolean.TRUE);
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
*/
|
||||
package org.eclipse.hawkbit.ui.layouts;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
|
||||
import org.eclipse.hawkbit.repository.SpPermissionChecker;
|
||||
@@ -24,6 +20,7 @@ import org.eclipse.hawkbit.ui.colorpicker.ColorPickerHelper;
|
||||
import org.eclipse.hawkbit.ui.colorpicker.ColorPickerLayout;
|
||||
import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator;
|
||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||
import org.eclipse.hawkbit.ui.utils.I18N;
|
||||
import org.eclipse.hawkbit.ui.utils.SPUIComponentIdProvider;
|
||||
@@ -38,11 +35,9 @@ import com.vaadin.data.Property.ValueChangeEvent;
|
||||
import com.vaadin.data.Property.ValueChangeListener;
|
||||
import com.vaadin.server.Page;
|
||||
import com.vaadin.shared.ui.colorpicker.Color;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.Alignment;
|
||||
import com.vaadin.ui.Button;
|
||||
import com.vaadin.ui.ComboBox;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.CustomComponent;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.GridLayout;
|
||||
@@ -103,42 +98,13 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
protected GridLayout mainLayout;
|
||||
protected VerticalLayout contentLayout;
|
||||
|
||||
protected boolean tagPreviewBtnClicked = false;
|
||||
protected boolean tagPreviewBtnClicked;
|
||||
|
||||
private String colorPicked;
|
||||
protected String tagNameValue;
|
||||
protected String tagDescValue;
|
||||
|
||||
private Color originalSelectedColor;
|
||||
private String originalTagDesc;
|
||||
private String originalTagName;
|
||||
|
||||
protected void createWindow() {
|
||||
reset();
|
||||
setWindow(
|
||||
SPUIComponentProvider.getWindow(i18n.get("caption.add.tag"), null, SPUIDefinitions.CREATE_UPDATE_WINDOW,
|
||||
this, this::save, this::discard, null, getMandatoryFields(), getEditedFields(), i18n));
|
||||
}
|
||||
|
||||
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.getId(), null);
|
||||
}
|
||||
}
|
||||
return requiredFields;
|
||||
}
|
||||
|
||||
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);
|
||||
return changeMap;
|
||||
}
|
||||
protected abstract String getWindowCaption();
|
||||
|
||||
/**
|
||||
* Save new tag / update new tag.
|
||||
@@ -171,7 +137,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
setSizeUndefined();
|
||||
createRequiredComponents();
|
||||
buildLayout();
|
||||
createWindow();
|
||||
addListeners();
|
||||
eventBus.subscribe(this);
|
||||
}
|
||||
@@ -193,8 +158,6 @@ 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(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"),
|
||||
@@ -202,7 +165,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
tagDesc.setId(SPUIDefinitions.NEW_TARGET_TAG_DESC);
|
||||
tagDesc.setImmediate(true);
|
||||
tagDesc.setNullRepresentation("");
|
||||
tagDesc.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTagDesc));
|
||||
|
||||
tagNameComboBox = SPUIComponentProvider.getComboBox(null, "", "", null, null, false, "",
|
||||
i18n.get("label.combobox.tag"));
|
||||
@@ -245,6 +207,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
mainLayout.setSizeFull();
|
||||
mainLayout.addComponent(contentLayout, 0, 0);
|
||||
|
||||
colorPickerLayout.setVisible(false);
|
||||
mainLayout.addComponent(colorPickerLayout, 1, 0);
|
||||
mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER);
|
||||
|
||||
setCompositionRoot(mainLayout);
|
||||
tagName.focus();
|
||||
}
|
||||
@@ -264,13 +230,10 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
protected void previewButtonClicked() {
|
||||
if (!tagPreviewBtnClicked) {
|
||||
setColor();
|
||||
mainLayout.getComponent(1, 0);
|
||||
mainLayout.addComponent(colorPickerLayout, 1, 0);
|
||||
mainLayout.setComponentAlignment(colorPickerLayout, Alignment.MIDDLE_CENTER);
|
||||
} else {
|
||||
mainLayout.removeComponent(colorPickerLayout);
|
||||
}
|
||||
|
||||
tagPreviewBtnClicked = !tagPreviewBtnClicked;
|
||||
colorPickerLayout.setVisible(tagPreviewBtnClicked);
|
||||
}
|
||||
|
||||
private void setColor() {
|
||||
@@ -307,6 +270,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
} else {
|
||||
resetTagNameField();
|
||||
}
|
||||
window.setOrginaleValues();
|
||||
}
|
||||
|
||||
protected void resetTagNameField() {
|
||||
@@ -314,7 +278,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
tagName.clear();
|
||||
tagDesc.clear();
|
||||
restoreComponentStyles();
|
||||
mainLayout.removeComponent(colorPickerLayout);
|
||||
colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor());
|
||||
colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor());
|
||||
tagPreviewBtnClicked = false;
|
||||
@@ -344,7 +307,6 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
comboLayout.removeComponent(comboLabel);
|
||||
comboLayout.removeComponent(tagNameComboBox);
|
||||
}
|
||||
window.reset();
|
||||
// close the color picker layout
|
||||
tagPreviewBtnClicked = false;
|
||||
// reset the selected color - Set default color
|
||||
@@ -352,7 +314,7 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
|
||||
colorPickerLayout.getSelPreview()
|
||||
.setColor(ColorPickerHelper.rgbToColorConverter(ColorPickerConstants.DEFAULT_COLOR));
|
||||
mainLayout.removeComponent(colorPickerLayout);
|
||||
window.setOrginaleValues();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -367,16 +329,12 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
// hide target name combo
|
||||
comboLayout.removeComponent(comboLabel);
|
||||
comboLayout.removeComponent(tagNameComboBox);
|
||||
mainLayout.removeComponent(colorPickerLayout);
|
||||
|
||||
// Default green color
|
||||
colorPickerLayout.setSelectedColor(colorPickerLayout.getDefaultColor());
|
||||
colorPickerLayout.getSelPreview().setColor(colorPickerLayout.getSelectedColor());
|
||||
tagPreviewBtnClicked = false;
|
||||
|
||||
if (window != null) {
|
||||
window.reset();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -466,7 +424,9 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
colorPickerLayout.getColorSelect().setColor(colorPickerLayout.getSelPreview().getColor());
|
||||
}
|
||||
|
||||
window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(), originalSelectedColor);
|
||||
// TODO:
|
||||
// window.checkColorChange(colorPickerLayout.getId(),
|
||||
// colorPickerLayout.getSelectedColor(), originalSelectedColor);
|
||||
}
|
||||
|
||||
protected void closeWindow() {
|
||||
@@ -519,13 +479,11 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
|
||||
public CommonDialogWindow getWindow() {
|
||||
reset();
|
||||
window = SPUIWindowDecorator.getWindow(getWindowCaption(), null, SPUIDefinitions.CREATE_UPDATE_WINDOW, this,
|
||||
this::save, this::discard, null, mainLayout, i18n);
|
||||
return window;
|
||||
}
|
||||
|
||||
public void setWindow(final CommonDialogWindow window) {
|
||||
this.window = window;
|
||||
}
|
||||
|
||||
/**
|
||||
* Value change listeners implementations of sliders.
|
||||
*/
|
||||
@@ -677,40 +635,8 @@ public abstract class AbstractCreateUpdateTagLayout extends CustomComponent
|
||||
return formLayout;
|
||||
}
|
||||
|
||||
public Color getSelectedColorOriginal() {
|
||||
return originalSelectedColor;
|
||||
}
|
||||
|
||||
public void setSelectedColorOriginal(final Color selectedColorOriginal) {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,14 +34,13 @@ import com.vaadin.ui.themes.ValoTheme;
|
||||
* Superclass defining common properties and methods for creating/updating
|
||||
* types.
|
||||
*/
|
||||
public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
public abstract class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
|
||||
private static final long serialVersionUID = 5732904956185988397L;
|
||||
|
||||
protected String createTypeStr;
|
||||
protected String updateTypeStr;
|
||||
protected TextField typeKey;
|
||||
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";
|
||||
@@ -154,7 +153,6 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
comboLayout.removeComponent(comboLabel);
|
||||
comboLayout.removeComponent(tagNameComboBox);
|
||||
}
|
||||
window.reset();
|
||||
restoreComponentStyles();
|
||||
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
|
||||
getColorPickerLayout().getSelPreview()
|
||||
@@ -181,8 +179,11 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
createDynamicStyleForComponents(tagName, typeKey, tagDesc, colorPickedPreview);
|
||||
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelPreview().getColor());
|
||||
}
|
||||
window.checkColorChange(colorPickerLayout.getId(), colorPickerLayout.getSelectedColor(),
|
||||
getOriginalSelectedColor());
|
||||
|
||||
// TODO:
|
||||
// window.checkColorChange(colorPickerLayout.getId(),
|
||||
// colorPickerLayout.getSelectedColor(),
|
||||
// getOriginalSelectedColor());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -236,14 +237,12 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor());
|
||||
createDynamicStyleForComponents(tagName, typeKey, tagDesc, ColorPickerConstants.DEFAULT_COLOR);
|
||||
getPreviewButtonColor(ColorPickerConstants.DEFAULT_COLOR);
|
||||
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
|
||||
} else {
|
||||
getColorPickerLayout().setSelectedColor(ColorPickerHelper.rgbToColorConverter(color));
|
||||
getColorPickerLayout().getSelPreview().setColor(getColorPickerLayout().getSelectedColor());
|
||||
getColorPickerLayout().getColorSelect().setColor(getColorPickerLayout().getSelectedColor());
|
||||
createDynamicStyleForComponents(tagName, typeKey, tagDesc, color);
|
||||
getPreviewButtonColor(color);
|
||||
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(color));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,12 +301,4 @@ public class CreateUpdateTypeLayout extends AbstractCreateUpdateTagLayout {
|
||||
// is implemented in the inherited class
|
||||
}
|
||||
|
||||
public String getOriginalTypeKey() {
|
||||
return originalTypeKey;
|
||||
}
|
||||
|
||||
public void setOriginalTypeKey(final String originalTypeKey) {
|
||||
this.originalTypeKey = originalTypeKey;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
package org.eclipse.hawkbit.ui.management.dstable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
@@ -25,6 +24,7 @@ import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.common.DistributionSetTypeBeanQuery;
|
||||
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
|
||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator;
|
||||
import org.eclipse.hawkbit.ui.management.event.DistributionTableEvent;
|
||||
import org.eclipse.hawkbit.ui.management.event.DragEvent;
|
||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||
@@ -44,10 +44,8 @@ import org.vaadin.spring.events.EventBus;
|
||||
|
||||
import com.vaadin.spring.annotation.SpringComponent;
|
||||
import com.vaadin.spring.annotation.ViewScope;
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.CheckBox;
|
||||
import com.vaadin.ui.ComboBox;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.CustomComponent;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
import com.vaadin.ui.TextArea;
|
||||
@@ -137,18 +135,12 @@ 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(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(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"));
|
||||
@@ -156,23 +148,17 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
|
||||
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);
|
||||
reqMigStepCheckbox.addValueChangeListener(
|
||||
event -> window.checkMandatoryEditedValueBoolean(event, reqMigStepCheckbox, originalReqMigStep));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -374,9 +360,6 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
|
||||
originalDistVersion = null;
|
||||
originalReqMigStep = Boolean.FALSE;
|
||||
|
||||
if (window != null) {
|
||||
window.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void populateRequiredComponents() {
|
||||
@@ -408,44 +391,20 @@ public class DistributionAddUpdateWindowLayout extends CustomComponent {
|
||||
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);
|
||||
window = SPUIComponentProvider.getWindow(i18n.get("caption.add.new.dist"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(),
|
||||
null, getMandatoryFields(), getEditedFields(), i18n);
|
||||
window.getButtonsLayout().removeStyleName("actionButtonsMargin");
|
||||
populateRequiredComponents();
|
||||
resetComponents();
|
||||
window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.dist"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveDistribution(), event -> discardDistribution(),
|
||||
null, formLayout, i18n);
|
||||
window.getButtonsLayout().removeStyleName("actionButtonsMargin");
|
||||
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.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.
|
||||
*/
|
||||
|
||||
@@ -77,8 +77,8 @@ public class DistributionDetails extends AbstractNamedVersionedEntityTableDetail
|
||||
|
||||
@Override
|
||||
protected void onEdit(final ClickEvent event) {
|
||||
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
|
||||
distributionAddUpdateWindowLayout.populateValuesOfDistribution(getSelectedBaseEntityId());
|
||||
final Window newDistWindow = distributionAddUpdateWindowLayout.getWindow();
|
||||
newDistWindow.setCaption(getI18n().get("caption.update.dist"));
|
||||
UI.getCurrent().addWindow(newDistWindow);
|
||||
newDistWindow.setVisible(Boolean.TRUE);
|
||||
|
||||
@@ -151,18 +151,14 @@ 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());
|
||||
setOriginalTagDesc(selectedDistTag.getDescription());
|
||||
if (null == selectedDistTag.getColour()) {
|
||||
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
|
||||
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
|
||||
} else {
|
||||
setTagColor(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()),
|
||||
selectedDistTag.getColour());
|
||||
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedDistTag.getColour()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,4 +177,8 @@ public class CreateUpdateDistributionTagLayoutWindow extends AbstractCreateUpdat
|
||||
permChecker.hasUpdateDistributionPermission());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getWindowCaption() {
|
||||
return i18n.get("caption.add.tag");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ package org.eclipse.hawkbit.ui.management.targettable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -21,6 +20,7 @@ import org.eclipse.hawkbit.repository.model.TargetIdName;
|
||||
import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.common.table.BaseEntityEventType;
|
||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator;
|
||||
import org.eclipse.hawkbit.ui.management.event.DragEvent;
|
||||
import org.eclipse.hawkbit.ui.management.event.TargetTableEvent;
|
||||
import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil;
|
||||
@@ -36,8 +36,6 @@ import org.vaadin.spring.events.EventBus;
|
||||
|
||||
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.TextArea;
|
||||
@@ -96,16 +94,10 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
|
||||
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(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.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",
|
||||
@@ -113,7 +105,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
|
||||
SPUILabelDefinitions.TEXT_AREA_MAX_LENGTH);
|
||||
descTextArea.setId(SPUIComponentIdProvider.TARGET_ADD_DESC);
|
||||
descTextArea.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
|
||||
descTextArea.addTextChangeListener(event -> window.checkMandatoryEditedTextField(event, originalTargetDesc));
|
||||
}
|
||||
|
||||
private void buildLayout() {
|
||||
@@ -192,24 +183,12 @@ 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,
|
||||
window = SPUIWindowDecorator.getWindow(i18n.get("caption.add.new.target"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> saveTargetListner(),
|
||||
event -> discardTargetListner(), null, getMandatoryFields(), getEditedFields(), i18n);
|
||||
event -> discardTargetListner(), null, formLayout, 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.getId(), Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
return requiredFields;
|
||||
}
|
||||
|
||||
private Map<String, Boolean> getEditedFields() {
|
||||
final Map<String, Boolean> editedFields = new HashMap<>();
|
||||
editedFields.put(controllerIDTextField.getId(), Boolean.FALSE);
|
||||
@@ -234,9 +213,6 @@ public class TargetAddUpdateWindowLayout extends CustomComponent {
|
||||
originalTargetDesc = null;
|
||||
originalTargetName = null;
|
||||
|
||||
if (window != null) {
|
||||
window.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void closeThisWindow() {
|
||||
|
||||
@@ -106,8 +106,12 @@ public class TargetDetails extends AbstractTableDetailsLayout<Target> {
|
||||
if (getSelectedBaseEntity() == null) {
|
||||
return;
|
||||
}
|
||||
final Window newDistWindow = targetAddUpdateWindowLayout.getWindow();
|
||||
targetAddUpdateWindowLayout.populateValuesOfTarget(getSelectedBaseEntity().getControllerId());
|
||||
openWindow();
|
||||
}
|
||||
|
||||
private void openWindow() {
|
||||
final Window newDistWindow = targetAddUpdateWindowLayout.getWindow();
|
||||
newDistWindow.setCaption(getI18n().get("caption.update.dist"));
|
||||
UI.getCurrent().addWindow(newDistWindow);
|
||||
newDistWindow.setVisible(Boolean.TRUE);
|
||||
|
||||
@@ -88,18 +88,14 @@ 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());
|
||||
setOriginalTagDesc(selectedTargetTag.getDescription());
|
||||
if (null == selectedTargetTag.getColour()) {
|
||||
setTagColor(getColorPickerLayout().getDefaultColor(), ColorPickerConstants.DEFAULT_COLOR);
|
||||
setSelectedColorOriginal(getColorPickerLayout().getDefaultColor());
|
||||
} else {
|
||||
setTagColor(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()),
|
||||
selectedTargetTag.getColour());
|
||||
setSelectedColorOriginal(ColorPickerHelper.rgbToColorConverter(selectedTargetTag.getColour()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,4 +148,9 @@ public class CreateUpdateTargetTagLayoutWindow extends AbstractCreateUpdateTagLa
|
||||
setOptionGroupDefaultValue(permChecker.hasCreateTargetPermission(), permChecker.hasUpdateTargetPermission());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getWindowCaption() {
|
||||
return i18n.get("caption.add.tag");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,9 +10,7 @@ package org.eclipse.hawkbit.ui.rollout.rollout;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.hawkbit.repository.DistributionSetManagement;
|
||||
@@ -34,6 +32,7 @@ import org.eclipse.hawkbit.ui.UiProperties;
|
||||
import org.eclipse.hawkbit.ui.common.CommonDialogWindow;
|
||||
import org.eclipse.hawkbit.ui.common.DistributionSetIdName;
|
||||
import org.eclipse.hawkbit.ui.components.SPUIComponentProvider;
|
||||
import org.eclipse.hawkbit.ui.decorators.SPUIWindowDecorator;
|
||||
import org.eclipse.hawkbit.ui.filtermanagement.TargetFilterBeanQuery;
|
||||
import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout;
|
||||
import org.eclipse.hawkbit.ui.management.footer.ActionTypeOptionGroupLayout.ActionTypeOption;
|
||||
@@ -61,7 +60,6 @@ import com.vaadin.data.Property.ValueChangeEvent;
|
||||
import com.vaadin.data.Validator;
|
||||
import com.vaadin.data.validator.IntegerRangeValidator;
|
||||
import com.vaadin.data.validator.RegexpValidator;
|
||||
import com.vaadin.event.FieldEvents.TextChangeEvent;
|
||||
import com.vaadin.shared.ui.label.ContentMode;
|
||||
import com.vaadin.spring.annotation.SpringComponent;
|
||||
import com.vaadin.spring.annotation.ViewScope;
|
||||
@@ -175,24 +173,12 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
|
||||
public CommonDialogWindow getWindow() {
|
||||
|
||||
window = SPUIComponentProvider.getWindow(i18n.get("caption.configure.rollout"), null,
|
||||
window = SPUIWindowDecorator.getWindow(i18n.get("caption.configure.rollout"), null,
|
||||
SPUIDefinitions.CREATE_UPDATE_WINDOW, this, event -> onRolloutSave(), event -> onDiscard(),
|
||||
uiProperties.getLinks().getDocumentation().getRolloutView(), getMandatoryFields(), getEditedFields(),
|
||||
i18n);
|
||||
uiProperties.getLinks().getDocumentation().getRolloutView(), this, i18n);
|
||||
return window;
|
||||
}
|
||||
|
||||
private Map<String, Boolean> getMandatoryFields() {
|
||||
final Map<String, Boolean> requiredFields = new HashMap<>();
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the field values.
|
||||
*/
|
||||
@@ -212,10 +198,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
actionTypeOptionGroupLayout.selectDefaultOption();
|
||||
totalTargetsCount = 0L;
|
||||
rolloutForEdit = null;
|
||||
|
||||
if (window != null) {
|
||||
window.reset();
|
||||
}
|
||||
}
|
||||
|
||||
private void resetFields() {
|
||||
@@ -303,15 +285,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
totalTargetsLabel = createTotalTargetsLabel();
|
||||
targetFilterQuery = createTargetFilterQuery();
|
||||
actionTypeOptionGroupLayout.addStyleName(SPUIStyleDefinitions.ROLLOUT_ACTION_TYPE_LAYOUT);
|
||||
actionTypeOptionGroupLayout.getActionTypeOptionGroup()
|
||||
.addValueChangeListener(this::listenerActionGroupValueChanged);
|
||||
}
|
||||
|
||||
private void listenerActionGroupValueChanged(final ValueChangeEvent event) {
|
||||
if (window != null) {
|
||||
window.checkMandatoryEditedValue(event, actionTypeOptionGroupLayout.getActionTypeOptionGroup(),
|
||||
originalActionGroup.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private Label createGroupSizeLabel() {
|
||||
@@ -331,16 +304,9 @@ 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");
|
||||
@@ -397,8 +363,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
totalTargetsLabel.setVisible(false);
|
||||
}
|
||||
onGroupNumberChange(event);
|
||||
window.setRequiredFieldWhenUpdate(event, targetFilterQueryCombo);
|
||||
window.checkMandatoryEditedValue(event, targetFilterQueryCombo, originalTargetFilterQueryCombo);
|
||||
}
|
||||
|
||||
private String getTotalTargetMessage() {
|
||||
@@ -604,62 +568,27 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
descriptionField.setId(SPUIComponentIdProvider.ROLLOUT_DESCRIPTION_ID);
|
||||
descriptionField.setNullRepresentation(HawkbitCommonUtil.SP_STRING_EMPTY);
|
||||
descriptionField.setSizeUndefined();
|
||||
descriptionField.addTextChangeListener(this::listenerDescriptionTextFieldChanged);
|
||||
return descriptionField;
|
||||
}
|
||||
|
||||
private void listenerDescriptionTextFieldChanged(final TextChangeEvent event) {
|
||||
if (window != null) {
|
||||
window.checkMandatoryEditedTextField(event, originalDescription);
|
||||
}
|
||||
}
|
||||
|
||||
private TextField createErrorThreshold() {
|
||||
final TextField errorField = getTextfield("prompt.error.threshold");
|
||||
errorField.addValidator(new ThresholdFieldValidator());
|
||||
errorField.setId(SPUIComponentIdProvider.ROLLOUT_ERROR_THRESOLD_ID);
|
||||
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) {
|
||||
window.checkMandatoryEditedTextField(event, originalErrorThreshold);
|
||||
}
|
||||
}
|
||||
|
||||
private void listenerErrorThresholdValueChanged(final ValueChangeEvent event, final TextField errorField) {
|
||||
if (window != null) {
|
||||
window.setRequiredFieldWhenUpdate(event, errorField);
|
||||
}
|
||||
}
|
||||
|
||||
private TextField createTriggerThreshold() {
|
||||
final TextField thresholdField = getTextfield("prompt.tigger.threshold");
|
||||
thresholdField.setId(SPUIComponentIdProvider.ROLLOUT_TRIGGER_THRESOLD_ID);
|
||||
thresholdField.addValidator(new ThresholdFieldValidator());
|
||||
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) {
|
||||
window.checkMandatoryEditedTextField(event, originalTriggerThreshold);
|
||||
}
|
||||
}
|
||||
|
||||
private TextField createNoOfGroupsField() {
|
||||
final TextField noOfGroupsField = getTextfield("prompt.number.of.groups");
|
||||
noOfGroupsField.setId(SPUIComponentIdProvider.ROLLOUT_NO_OF_GROUPS_ID);
|
||||
@@ -667,16 +596,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
noOfGroupsField.setSizeUndefined();
|
||||
noOfGroupsField.setMaxLength(3);
|
||||
noOfGroupsField.addValueChangeListener(this::onGroupNumberChange);
|
||||
noOfGroupsField.addTextChangeListener(this::listenerNoOfGroupsTextFieldChanged);
|
||||
return noOfGroupsField;
|
||||
}
|
||||
|
||||
private void listenerNoOfGroupsTextFieldChanged(final TextChangeEvent event) {
|
||||
if (window != null) {
|
||||
window.checkMandatoryEditedTextField(event, originalNoOfGroups);
|
||||
}
|
||||
}
|
||||
|
||||
private void onGroupNumberChange(final ValueChangeEvent event) {
|
||||
if (noOfGroups.isValid() && !Strings.isNullOrEmpty(noOfGroups.getValue())) {
|
||||
groupSizeLabel.setValue(getTargetPerGroupMessage(String.valueOf(getGroupSize())));
|
||||
@@ -684,9 +606,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
} else {
|
||||
groupSizeLabel.setVisible(false);
|
||||
}
|
||||
if (window != null) {
|
||||
window.setRequiredFieldWhenUpdate(event, noOfGroups);
|
||||
}
|
||||
}
|
||||
|
||||
private ComboBox createDistributionSetCombo() {
|
||||
@@ -697,16 +616,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
dsSet.setItemCaptionPropertyId(SPUILabelDefinitions.VAR_NAME);
|
||||
dsSet.setId(SPUIComponentIdProvider.ROLLOUT_DS_ID);
|
||||
dsSet.setSizeUndefined();
|
||||
dsSet.addValueChangeListener(this::listenerDistributionSetChanged);
|
||||
return dsSet;
|
||||
}
|
||||
|
||||
private void listenerDistributionSetChanged(final ValueChangeEvent event) {
|
||||
if (window != null) {
|
||||
window.checkMandatoryEditedValue(event, distributionSet, originalDistributionSet);
|
||||
}
|
||||
}
|
||||
|
||||
private void populateDistributionSet() {
|
||||
final Container container = createDsComboContainer();
|
||||
distributionSet.setContainerDataSource(container);
|
||||
@@ -724,23 +636,9 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
final TextField rolloutNameField = getTextfield("textfield.name");
|
||||
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) {
|
||||
window.checkMandatoryEditedTextField(event, originalRolloutName);
|
||||
}
|
||||
}
|
||||
|
||||
private void listenerRolloutNameValueChanged(final ValueChangeEvent event, final TextField rolloutNameField) {
|
||||
if (window != null) {
|
||||
window.setRequiredFieldWhenUpdate(event, rolloutNameField);
|
||||
}
|
||||
}
|
||||
|
||||
private String getRolloutName() {
|
||||
return HawkbitCommonUtil.trimAndNullIfEmpty(rolloutName.getValue());
|
||||
}
|
||||
@@ -870,19 +768,6 @@ public class AddUpdateRolloutWindowLayout extends GridLayout {
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Boolean> getEditedFields() {
|
||||
final Map<String, Boolean> changeMap = new HashMap<>();
|
||||
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;
|
||||
}
|
||||
|
||||
private void disableRequiredFieldsOnEdit() {
|
||||
distributionSet.setEnabled(false);
|
||||
errorThreshold.setEnabled(false);
|
||||
|
||||
@@ -431,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.getWindow();
|
||||
addTargetWindow.setCaption(i18n.get("caption.update.rollout"));
|
||||
UI.getCurrent().addWindow(addTargetWindow);
|
||||
addTargetWindow.setVisible(Boolean.TRUE);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.eclipse.hawkbit.ui.utils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.vaadin.ui.AbstractField;
|
||||
import com.vaadin.ui.Component;
|
||||
import com.vaadin.ui.FormLayout;
|
||||
|
||||
public class CommonDialogWindowHelper {
|
||||
|
||||
/**
|
||||
* Run through a FormLayout and collect all required Component's IDs in a
|
||||
* Map
|
||||
*
|
||||
* @param formLayout
|
||||
* Form to be analysed
|
||||
* @return Map with all required component's IDs
|
||||
*/
|
||||
public static Map<String, Boolean> getMandatoryFields(final FormLayout formLayout) {
|
||||
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.getId(), Boolean.FALSE);
|
||||
}
|
||||
}
|
||||
return requiredFields;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user