Alissa Bonas has uploaded a new change for review.

Change subject: core: add ability edit nfs path in webadmin
......................................................................

core: add ability edit nfs path in webadmin

Add the option to edit nfs path and the overriden
additional options of storage domain (retransmissions, timeout, version)
in webadmin UI --> Storage tab.
The edit of those properties is available only when
the storage domain is in maintenance status and is data/master domain,
and for storage of nfs type. These are the only properties which are
editable in this status.
Edit is still available for storage domains in status Active/Mixed, but
only for name and description - like it was before this patch.

Change-Id: Ifaff5344ff191d6bdf53cc706c7bb796167a56b3
Signed-off-by: Alissa Bonas <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
M 
backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/NfsStorageView.java
8 files changed, 154 insertions(+), 45 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/12372/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java
new file mode 100644
index 0000000..ef3e5d7
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStorageServerConnectionCommand.java
@@ -0,0 +1,73 @@
+package org.ovirt.engine.core.bll.storage;
+
+import org.ovirt.engine.core.bll.LockMessagesMatchUtil;
+import 
org.ovirt.engine.core.common.action.StorageServerConnectionParametersBase;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.core.common.validation.NfsMountPointConstraint;
+import 
org.ovirt.engine.core.common.vdscommands.ConnectStorageServerVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+
+public class UpdateStorageServerConnectionCommand<T extends 
StorageServerConnectionParametersBase> extends 
StorageServerConnectionCommandBase<T> {
+    StorageServerConnections oldConnection = null;
+
+    public UpdateStorageServerConnectionCommand(T parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        StorageServerConnections connection = 
getParameters().getStorageServerConnection();
+        //Check if the NFS path has a valid format
+        if (connection.getstorage_type() == StorageType.NFS
+                && !new 
NfsMountPointConstraint().isValid(connection.getconnection(), null)) {
+            return 
failCanDoAction(VdcBllMessages.VALIDATION_STORAGE_CONNECTION_INVALID);
+        }
+        //Check if connection exists by id - otherwise there's nothing to 
update
+        String connectionId = connection.getid();
+        oldConnection = 
getDbFacade().getStorageServerConnectionDao().get(connectionId);
+        if(oldConnection == null) {
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_CONNECTION_NOT_EXIST);
+        }
+        return super.canDoAction();
+    }
+
+    @Override
+    protected void executeCommand() {
+       ConnectStorageServerVDSCommandParameters newConnectionParametersForVdsm 
= new ConnectStorageServerVDSCommandParameters(getParameters().getVdsId(), 
getParameters()
+                                .getStoragePoolId(), 
getParameters().getStorageServerConnection().getstorage_type(),
+                                new ArrayList<StorageServerConnections>(Arrays
+                                
.asList(getParameters().getStorageServerConnection())));
+
+       VDSReturnValue returnValueConnect = 
runVdsCommand(VDSCommandType.ConnectStorageServer,newConnectionParametersForVdsm);
+       if (returnValueConnect.getSucceeded()) {
+            
getDbFacade().getStorageServerConnectionDao().update(getParameters().getStorageServerConnection());
+            //Disconnect the old storage server connection via vdsm - only 
after update in db to a new connection succeeds
+            ConnectStorageServerVDSCommandParameters 
oldConnectionParametersForVdsm = new 
ConnectStorageServerVDSCommandParameters(getParameters().getVdsId(), 
getParameters()
+                                     .getStoragePoolId(), 
oldConnection.getstorage_type(),
+                                     new 
ArrayList<StorageServerConnections>(Arrays
+                                     .asList(oldConnection)));
+            
runVdsCommand(VDSCommandType.DisconnectStorageServer,oldConnectionParametersForVdsm);
+            setSucceeded(true);
+        }
+    }
+
+    @Override
+    protected Map<String, Pair<String, String>> getExclusiveLocks() {
+        return 
Collections.singletonMap(getParameters().getStorageServerConnection().getid(), 
LockMessagesMatchUtil.STORAGE);
+    }
+
+    @Override
+    protected void setActionMessageParameters() {
+         addCanDoActionMessage(VdcBllMessages.VAR__ACTION__UPDATE);
+         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__STORAGE__DOMAIN);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index ed6cd19..897fc2f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -216,6 +216,7 @@
     AddExistingNFSStorageDomain(960, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     AddExistingSANStorageDomain(961, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     AddStorageServerConnection(1000, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
+    
UpdateStorageServerConnection(1001,ActionGroup.CREATE_STORAGE_DOMAIN,QuotaDependency.NONE),
     DisconnectStorageServerConnection(1002, ActionGroup.CREATE_STORAGE_DOMAIN, 
QuotaDependency.NONE),
     ConnectHostToStoragePoolServers(1004, QuotaDependency.NONE),
     DisconnectHostFromStoragePoolServers(1005, QuotaDependency.NONE),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
index 237817b..1836759 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
@@ -61,6 +61,7 @@
 job.AddExistingSANStorageDomain=Adding SAN Storage Domain ${Storage}
 job.AddStorageServerConnection=Connecting Host ${VDS} to Storage server
 job.DisconnectStorageServerConnection=Disconnecting from Storage server on 
${VDS}
+job.UpdateStorageServerConnection=Updating storage connection details
 job.ConnectStorageToVds=Connecting Host ${VDS} to Storage server
 job.AddVmPoolWithVms=Creating VM Pool ${VmPool} from template ${VmTemplate}
 job.ChangeDisk=Changing CD-ROM for VM ${VM}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
index 62a904d..5cf0c06 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NfsStorageModel.java
@@ -132,22 +132,6 @@
         timeout = value;
     }
 
-    private boolean isEditMode;
-
-    public void setIsEditMode(boolean isEditMode) {
-        boolean isChangable = !isEditMode && (Boolean) 
getOverride().getEntity();
-        getPath().setIsChangable(isChangable);
-        getOverride().setIsChangable(isChangable);
-        getVersion().setIsChangable(isChangable);
-        getRetransmissions().setIsChangable(isChangable);
-        getTimeout().setIsChangable(isChangable);
-        this.isEditMode = isEditMode;
-    }
-
-    public boolean getIsEditMode() {
-        return isEditMode;
-    }
-
 
     static {
 
@@ -187,12 +171,10 @@
     private void Override_EntityChanged(EventArgs e) {
         // Advanced options are editable only if override checkbox is enabled
         // and the dialog is not editing existing nfs storage.
-        if (!getIsEditMode()) {
-            boolean isChangable = (Boolean) getOverride().getEntity();
-            getVersion().setIsChangable(isChangable);
-            getRetransmissions().setIsChangable(isChangable);
-            getTimeout().setIsChangable(isChangable);
-        }
+        boolean isChangeable = (Boolean) getOverride().getEntity();
+        getVersion().setIsChangable(isChangeable);
+        getRetransmissions().setIsChangable(isChangeable);
+        getTimeout().setIsChangable(isChangeable);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
index 65318b0..6a9904f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
@@ -123,7 +123,7 @@
     {
         super.UpdateInternal();
 
-        if (!getContainer().isStorageActive()) {
+        if (!(getContainer().isNewStorage() || 
getContainer().isStorageActive())) {
             return;
         }
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index 660c7b1..38188cd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -18,6 +18,7 @@
 import org.ovirt.engine.core.common.businessentities.NfsVersion;
 import org.ovirt.engine.core.common.businessentities.StorageDomainSharedStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StorageFormatType;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
@@ -356,17 +357,20 @@
         model.getDataCenter().setIsChangable(false);
         model.getFormat().setIsChangable(false);
 
-        boolean isStorageActive = model.isStorageActive();
+        boolean isStorageEditable = model.isStorageActive() || 
model.isNewStorage();
 
         model.getHost().setIsChangable(false);
-        model.getName().setIsChangable(isStorageActive);
-        model.getAvailableStorageItems().setIsChangable(isStorageActive);
-        model.setIsChangable(isStorageActive);
+        model.getName().setIsChangable(isStorageEditable);
+        model.getDescription().setIsChangable(isStorageEditable);
+        model.getAvailableStorageItems().setIsChangable(isStorageEditable);
+        model.setIsChangable(isStorageEditable);
 
         IStorageModel item = null;
         switch (storage.getstorage_type()) {
             case NFS:
                 item = PrepareNfsStorageForEdit(storage);
+                boolean isPathAndOverrideOptsEditable = 
isNfsPathEditable(storage);
+                isStorageEditable = isStorageEditable || 
isPathAndOverrideOptsEditable;
                 break;
 
             case FCP:
@@ -403,8 +407,9 @@
             }
         }
 
+
         UICommand command;
-        if (isStorageActive) {
+        if (isStorageEditable) {
             command = new UICommand("OnSave", this); //$NON-NLS-1$
             
command.setTitle(ConstantsManager.getInstance().getConstants().ok());
             command.setIsDefault(true);
@@ -427,7 +432,11 @@
     {
         final NfsStorageModel model = new NfsStorageModel();
         model.setRole(storage.getstorage_domain_type());
-        model.setIsEditMode(true);
+
+        boolean isPathAndOverrideOptsEditable = isNfsPathEditable(storage);
+
+        model.getPath().setIsChangable(isPathAndOverrideOptsEditable);
+        model.getOverride().setIsChangable(isPathAndOverrideOptsEditable);
 
         AsyncDataProvider.GetStorageConnectionById(new AsyncQuery(null, new 
INewAsyncCallback() {
             @Override
@@ -439,7 +448,6 @@
                 model.getTimeout().setEntity(connection.getNfsTimeo());
 
                 for (Object item : model.getVersion().getItems()) {
-
                     EntityModel itemModel = (EntityModel) item;
                     boolean noNfsVersion = itemModel.getEntity() == null && 
connection.getNfsVersion() == null;
                     boolean foundNfsVersion = itemModel.getEntity() != null &&
@@ -461,6 +469,10 @@
         }), storage.getstorage(), true);
 
         return model;
+    }
+
+    private boolean isNfsPathEditable(storage_domains storage) {
+        return (storage.getstorage_domain_type() == StorageDomainType.Data || 
storage.getstorage_domain_type() == StorageDomainType.Master) && 
storage.getstatus() == StorageDomainStatus.Maintenance;
     }
 
     private IStorageModel PrepareLocalStorageForEdit(storage_domains storage)
@@ -530,9 +542,9 @@
     {
         StorageModel storageModel = (StorageModel) getWindow();
         storage_domains storage = (storage_domains) getSelectedItem();
-        boolean isStorageActive = storageModel.isStorageActive();
+        boolean isStorageEditable = storageModel.isStorageActive() || 
storageModel.isNewStorage();
 
-        if (isStorageActive) {
+        if (isStorageEditable) {
             
storageModel.getHost().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
                 @Override
                 public void eventRaised(Event ev, Object sender, EventArgs 
args) {
@@ -1066,12 +1078,15 @@
         if (storageDomain == null) {
             return false;
         }
-
+        boolean isEditAvailable;
         boolean isActive = storageDomain.getstorage_domain_shared_status() == 
StorageDomainSharedStatus.Active
                 || storageDomain.getstorage_domain_shared_status() == 
StorageDomainSharedStatus.Mixed;
+        boolean isInMaintenance = (storageDomain.getstatus() == 
StorageDomainStatus.Maintenance);
+        boolean isDataDomain = (storageDomain.getstorage_domain_type() == 
StorageDomainType.Data) || (storageDomain.getstorage_domain_type() == 
StorageDomainType.Master);
         boolean isBlockStorage = 
storageDomain.getstorage_type().isBlockDomain();
 
-        return isBlockStorage ? true : isActive;
+        isEditAvailable = isActive || isBlockStorage || ( isInMaintenance && 
isDataDomain)  ;
+        return isEditAvailable;
     }
 
     @Override
@@ -1277,6 +1292,9 @@
         storageDomain.setDescription((String) 
model.getDescription().getEntity());
         storageDomain.setStorageFormat((StorageFormatType) 
model.getFormat().getSelectedItem());
 
+        connection = new StorageServerConnections();
+        connection.setid(selectedItem.getstorage());
+
         if (isNew)
         {
             AsyncDataProvider.GetStorageDomainsByConnection(new 
AsyncQuery(this, new INewAsyncCallback() {
@@ -1301,19 +1319,49 @@
         }
         else
         {
-            Frontend.RunAction(VdcActionType.UpdateStorageDomain, new 
StorageDomainManagementParameter(storageDomain),
+            storage_domains storage = (storage_domains) getSelectedItem();
+            if(isNfsPathEditable(storage)) {
+                updateNfsPath();
+            }
+            else {
+               Frontend.RunAction(VdcActionType.UpdateStorageDomain, new 
StorageDomainManagementParameter(storageDomain),
                 new IFrontendActionAsyncCallback() {
                     @Override
                     public void Executed(FrontendActionAsyncResult result) {
-
                         StorageListModel storageListModel = (StorageListModel) 
result.getState();
                         storageListModel.OnFinish(storageListModel.context, 
true, storageListModel.storageModel);
 
                     }
                 }, this);
+            }
         }
     }
 
+    private void updateNfsPath() {
+        StorageModel model = (StorageModel) getWindow();
+        NfsStorageModel nfsModel = (NfsStorageModel) model.getSelectedItem();
+        VDS host = (VDS) model.getHost().getSelectedItem();
+
+        connection.setconnection(path);
+        connection.setstorage_type(nfsModel.getType());
+        if ((Boolean) nfsModel.getOverride().getEntity()) {
+            connection.setNfsVersion((NfsVersion) ((EntityModel) 
nfsModel.getVersion().getSelectedItem()).getEntity());
+            
connection.setNfsRetrans(nfsModel.getRetransmissions().AsConvertible().nullableShort());
+            
connection.setNfsTimeo(nfsModel.getTimeout().AsConvertible().nullableShort());
+        }
+
+        Frontend.RunAction(VdcActionType.UpdateStorageServerConnection, new 
StorageServerConnectionParametersBase(connection, host.getId()),
+                new IFrontendActionAsyncCallback() {
+                    @Override
+                    public void Executed(FrontendActionAsyncResult result) {
+                        StorageListModel storageListModel = (StorageListModel) 
result.getState();
+                        storageListModel.OnFinish(storageListModel.context, 
true, storageListModel.storageModel);
+
+                    }
+                }, this);
+    }
+
+
     public void SaveNewNfsStorage()
     {
         StorageModel model = (StorageModel) getWindow();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java
index 9724c11..41954ff 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java
@@ -739,8 +739,12 @@
     }
 
     public boolean isStorageActive() {
-        return getStorage() == null
-                || getStorage().getstorage_domain_shared_status() == 
StorageDomainSharedStatus.Active
+         return
+                getStorage().getstorage_domain_shared_status() == 
StorageDomainSharedStatus.Active
                 || getStorage().getstorage_domain_shared_status() == 
StorageDomainSharedStatus.Mixed;
     }
+
+    public boolean isNewStorage() {
+        return getStorage() == null;
+    }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/NfsStorageView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/NfsStorageView.java
index 7780e41..bbd8208 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/NfsStorageView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/NfsStorageView.java
@@ -172,15 +172,15 @@
         EntityModel version = (EntityModel) 
object.getVersion().getSelectedItem();
         versionReadOnlyEditor.asValueBox().setValue(version != null ? 
version.getTitle() : null);
 
-        pathHintLabel.setVisible(object.getPath().getIsAvailable() && 
!object.getIsEditMode());
+        pathHintLabel.setVisible(object.getPath().getIsChangable());
 
-        styleTextBoxEditor(pathEditor, !object.getIsEditMode());
-        styleTextBoxEditor(timeoutEditor, !object.getIsEditMode());
-        styleTextBoxEditor(retransmissionsEditor, !object.getIsEditMode());
-        styleTextBoxEditor(versionReadOnlyEditor, !object.getIsEditMode());
+        styleTextBoxEditor(pathEditor, object.getPath().getIsChangable());
+        styleTextBoxEditor(timeoutEditor,  
object.getOverride().getIsChangable());
+        styleTextBoxEditor(retransmissionsEditor, 
object.getOverride().getIsChangable());
+        styleTextBoxEditor(versionReadOnlyEditor, 
object.getOverride().getIsChangable());
 
-        setElementVisibility(versionEditor, !object.getIsEditMode() && 
object.getVersion().getIsAvailable());
-        setElementVisibility(versionReadOnlyEditor, object.getIsEditMode() || 
!object.getVersion().getIsAvailable());
+        setElementVisibility(versionEditor,  
object.getOverride().getIsChangable());
+        setElementVisibility(versionReadOnlyEditor, 
!object.getOverride().getIsChangable());
         setElementVisibility(versionLabel, 
object.getVersion().getIsAvailable());
         setElementVisibility(retransmissionsLabel, 
object.getRetransmissions().getIsAvailable());
         setElementVisibility(timeoutLabel, 
object.getTimeout().getIsAvailable());


--
To view, visit http://gerrit.ovirt.org/12372
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifaff5344ff191d6bdf53cc706c7bb796167a56b3
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alissa Bonas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to