package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.validation.AsciiNameValidation; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class VfsNicLabelModel extends ListModel<ListModel<String>> { public VfsNicLabelModel(List<String> originalLabels, Collection<String> suggestedLabels) { setOriginalLabels(originalLabels); setSuggestedLabels(suggestedLabels); initLabelModels(); } private List<String> originalLabels; private Collection<String> suggestedLabels; private Collection<String> suggestedLabelsCache; protected void initLabelModels() { Collections.sort(originalLabels, new LexoNumericComparator()); LinkedList<ListModel<String>> items = new LinkedList<>(); for (String label : originalLabels) { ListModel<String> labelModel = new ListModel<>(); labelModel.setItems(suggestedLabels); labelModel.setSelectedItem(label); items.add(labelModel); } setItems(items); suggestedLabelsCache = new TreeSet<>(suggestedLabels); } public Collection<String> getSuggestedLabels() { return suggestedLabels; } public void setSuggestedLabels(Collection<String> suggestedLabels) { this.suggestedLabels = suggestedLabels; } public List<String> getOriginalLabels() { return originalLabels; } public void setOriginalLabels(List<String> originalLabels) { this.originalLabels = originalLabels; } public Set<String> computeSelectedLabels() { Set<String> selectedLabels = new HashSet<>(); for (ListModel<String> labelModel : getItems()) { selectedLabels.add(labelModel.getSelectedItem()); } return selectedLabels; } public void validate() { boolean res = true; Set<String> editedLabels = new HashSet<>(); for (ListModel<String> labelModel : getItems()) { labelModel.validateSelectedItem(new IValidation[] { new AsciiNameValidation() }); String label = labelModel.getSelectedItem(); if (editedLabels.contains(label)) { labelModel.getInvalidityReasons().add(ConstantsManager.getInstance().getConstants().duplicateLabel()); labelModel.setIsValid(false); } editedLabels.add(label); res &= labelModel.getIsValid(); } setIsValid(res); } public void updateSuggestedLabels() { suggestedLabels = new TreeSet<>(suggestedLabelsCache); suggestedLabels.removeAll(computeSelectedLabels()); for (ListModel<String> labelModel : getItems()) { labelModel.setItems(suggestedLabels, labelModel.getSelectedItem()); } } }