package org.ovirt.engine.ui.uicommonweb.models.storage; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class ImportIscsiStorageModel extends ImportSanStorageModel { protected ListModel<SanTargetModel> targets; public ImportIscsiStorageModel() { setStorageDomains(new ListModel<StorageDomain>()); getStorageDomains().setItems(new ArrayList<StorageDomain>()); setTargets(new ListModel<SanTargetModel>()); getTargets().setItems(new ArrayList<SanTargetModel>()); addListeners(); } private void addListeners() { getTargets().getSelectedItemsChangedEvent().addListener((ev, sender, args) -> getLoginCommand().setIsExecutionAllowed(getTargets().getSelectedItems() != null && !getTargets().getSelectedItems().isEmpty())); } @Override public StorageType getType() { return StorageType.ISCSI; } @Override public String getLoginButtonLabel() { return ConstantsManager.getInstance().getConstants().loginButtonLabel(); } public ListModel<SanTargetModel> getTargets() { return targets; } public void setTargets(ListModel<SanTargetModel> targets) { this.targets = targets; } @Override protected void update() { getStorageDomains().setItems(new ArrayList<StorageDomain>()); getTargets().setItems(new ArrayList<SanTargetModel>()); proposeDiscover(); } @Override protected void proposeDiscover() { boolean proposeDiscover = getTargets().getItems().isEmpty(); setProposeDiscoverTargets(proposeDiscover); } protected void postDiscoverTargetsInternal(ArrayList<StorageServerConnections> newItems) { if (newItems.isEmpty()) { setMessage(ConstantsManager.getInstance().getConstants().noNewDevicesWereFoundMsg()); return; } SortedSet<SanTargetModel> targetsSet = getTargetsSet(); targetsSet.addAll(getTargets().getItems()); targetsSet.addAll(getSanTargetModels(newItems.iterator())); getTargets().setItems(new ArrayList<>(targetsSet)); proposeDiscover(); } private SortedSet<SanTargetModel> getTargetsSet() { return new TreeSet<>(Comparator.comparing(t -> t.getEntity().getIqn(), new LexoNumericComparator())); } private List<SanTargetModel> getSanTargetModels(Iterator<StorageServerConnections> itemsIterator) { List<SanTargetModel> targets = new ArrayList<>(); while (itemsIterator.hasNext()) { StorageServerConnections connection = itemsIterator.next(); SanTargetModel targetModel = getSanTargetModelByConnection(connection); if (targetModel == null) { targetModel = new SanTargetModel(); targetModel.setEntity(connection); } targets.add(targetModel); } return targets; } private SanTargetModel getSanTargetModelByConnection(StorageServerConnections connection) { for (SanTargetModel targetModel : getTargets().getItems()) { if (targetModel.getEntity().getIqn().equals(connection.getIqn())) { return targetModel; } } return null; } private List<StorageServerConnections> getStorageServerConnections(List<SanTargetModel> targetModels) { List<StorageServerConnections> connections = new ArrayList<>(); for (SanTargetModel targetModel : targetModels) { connections.add(targetModel.getEntity()); } return connections; } @Override protected void login() { getStorageDomainsBySelectedConnections(); } private void markLoggedinTargets(List<SanTargetModel> targets) { for (SanTargetModel targetModel : targets) { targetModel.setIsLoggedIn(true); targetModel.setIsChangeable(false); } getTargets().setSelectedItems(new ArrayList<SanTargetModel>()); } @Override protected void postGetUnregisteredStorageDomains(List<StorageDomain> storageDomains, List<StorageServerConnections> connections) { if (connections != null) { markLoggedinTargets(getSanTargetModels(connections.iterator())); } } private void getStorageDomainsBySelectedConnections() { List<StorageServerConnections> connections = getStorageServerConnections(getTargets().getSelectedItems()); getUnregisteredStorageDomains(connections); } }