package org.ovirt.engine.ui.uicommonweb.models.gluster; import java.util.ArrayList; import java.util.Arrays; import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity.VOLUME_TYPE; import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.Model; import org.ovirt.engine.ui.uicommonweb.models.hosts.HostModel; public class VolumeModel extends Model{ ListModel dataCenter; ListModel cluster; EntityModel name; ListModel typeList; EntityModel bricks; EntityModel gluster_accecssProtocol; EntityModel nfs_accecssProtocol; EntityModel cifs_accecssProtocol; EntityModel users; EntityModel allowAccess; private UICommand addBrickCommand; public VolumeModel() { setDataCenter(new ListModel()); getDataCenter().getSelectedItemChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { dataCenter_SelectedItemChanged(); } }); setCluster(new ListModel()); setName(new EntityModel()); setTypeList(new ListModel()); ArrayList<VOLUME_TYPE> list = new ArrayList<VOLUME_TYPE>(Arrays.asList(new VOLUME_TYPE[] {VOLUME_TYPE.DISTRIBUTE, VOLUME_TYPE.REPLICATE , VOLUME_TYPE.STRIPE})); getTypeList().setItems(list); getTypeList().setSelectedItem(VOLUME_TYPE.DISTRIBUTE); setBricks(new EntityModel()); setGluster_accecssProtocol(new EntityModel()); getGluster_accecssProtocol().setEntity(true); getGluster_accecssProtocol().setIsChangable(false); setNfs_accecssProtocol(new EntityModel()); getNfs_accecssProtocol().setEntity(true); setCifs_accecssProtocol(new EntityModel()); getCifs_accecssProtocol().setEntity(false); setUsers(new EntityModel()); setAllowAccess(new EntityModel()); getAllowAccess().setEntity("*"); } public ListModel getDataCenter() { return dataCenter; } public void setDataCenter(ListModel dataCenter) { this.dataCenter = dataCenter; } public ListModel getCluster() { return cluster; } public void setCluster(ListModel cluster) { this.cluster = cluster; } public EntityModel getName() { return name; } public void setName(EntityModel name) { this.name = name; } public ListModel getTypeList() { return typeList; } public void setTypeList(ListModel typeList) { this.typeList = typeList; } public EntityModel getBricks() { return bricks; } public void setBricks(EntityModel bricks) { this.bricks = bricks; } public EntityModel getGluster_accecssProtocol() { return gluster_accecssProtocol; } public void setGluster_accecssProtocol(EntityModel gluster_accecssProtocol) { this.gluster_accecssProtocol = gluster_accecssProtocol; } public EntityModel getNfs_accecssProtocol() { return nfs_accecssProtocol; } public void setNfs_accecssProtocol(EntityModel nfs_accecssProtocol) { this.nfs_accecssProtocol = nfs_accecssProtocol; } public EntityModel getCifs_accecssProtocol() { return cifs_accecssProtocol; } public void setCifs_accecssProtocol(EntityModel cifs_accecssProtocol) { this.cifs_accecssProtocol = cifs_accecssProtocol; } public EntityModel getUsers() { return users; } public void setUsers(EntityModel users) { this.users = users; } public EntityModel getAllowAccess() { return allowAccess; } public void setAllowAccess(EntityModel allowAccess) { this.allowAccess = allowAccess; } private void dataCenter_SelectedItemChanged() { storage_pool dataCenter = (storage_pool)getDataCenter().getSelectedItem(); if (dataCenter != null) { AsyncQuery _asyncQuery = new AsyncQuery(); _asyncQuery.setModel(this); _asyncQuery.asyncCallback = new INewAsyncCallback() { public void OnSuccess(Object model, Object result) { VolumeModel volumeModel = (VolumeModel)model; java.util.ArrayList<VDSGroup> clusters = (java.util.ArrayList<VDSGroup>)result; VDSGroup oldCluster = (VDSGroup)volumeModel.getCluster().getSelectedItem(); storage_pool selectedDataCenter = (storage_pool) getDataCenter().getSelectedItem(); // Update selected cluster only if the returned cluster list is indeed the selected datacenter's clusters if (clusters.isEmpty() || clusters.size() > 0 && clusters.get(0).getstorage_pool_id().getValue().equals(selectedDataCenter.getId().getValue())) { volumeModel.getCluster().setItems(clusters); if (oldCluster != null) { VDSGroup newSelectedItem = Linq.FirstOrDefault(clusters, new Linq.ClusterPredicate(oldCluster.getID())); if (newSelectedItem != null) { volumeModel.getCluster().setSelectedItem(newSelectedItem); } } if (volumeModel.getCluster().getSelectedItem() == null) { volumeModel.getCluster().setSelectedItem(Linq.FirstOrDefault(clusters)); } } }}; AsyncDataProvider.GetClusterList(_asyncQuery, dataCenter.getId()); } } public boolean Validate(){ return true; } public void setAddBricksCommand(UICommand addBricksCommand) { this.addBrickCommand = addBricksCommand; } public UICommand getAddBrickCommand(){ return addBrickCommand; } }