Martin Mucha has uploaded a new change for review.

Change subject: support for adding network attachment via specifying network by 
name
......................................................................

support for adding network attachment via specifying network by name

Change-Id: I6cbc77edb40a35dcf20d2af3f19bde17044d0212
Signed-off-by: Martin Mucha <mmu...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/AddNetworkAttachmentCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/NetworkIdNetworkNameCompleter.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveNetworkAttachmentCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkAttachmentCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkAttachment.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/NetworkIdOrNetworkNameIsSetConstraint.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/NetworkIdOrNetworkNameIsSet.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendNetworkAttachmentsResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NetworkAttachmentMapper.java
13 files changed, 217 insertions(+), 37 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/08/40308/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/AddNetworkAttachmentCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/AddNetworkAttachmentCommand.java
index ae729a9..6c5952a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/AddNetworkAttachmentCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/AddNetworkAttachmentCommand.java
@@ -21,10 +21,13 @@
 import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.validation.group.CreateEntity;
 import org.ovirt.engine.core.compat.Guid;
 
 @NonTransactiveCommandAttribute
 public class AddNetworkAttachmentCommand<T extends 
NetworkAttachmentParameters> extends VdsCommand<T> {
+    @Inject
+    private NetworkIdNetworkNameCompleter networkIdNetworkNameCompleter;
 
     @Inject
     private ManagementNetworkUtil managementNetworkUtil;
@@ -33,6 +36,7 @@
 
     public AddNetworkAttachmentCommand(T parameters) {
         super(parameters);
+        addValidationGroup(CreateEntity.class);
     }
 
     @Override
@@ -54,6 +58,8 @@
         
completer.completeNetworkAttachment(getParameters().getNetworkAttachment());
         completer.completeNetworkAttachments(networkAttachmentsForVds);
 
+        
networkIdNetworkNameCompleter.completeNetworkAttachment(getParameters().getNetworkAttachment());
+
         return validateNetworkAttachment() && validateHostInterface() && 
validateCrossAttachments(networkAttachmentsForVds);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java
index 9290497..537f756 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/HostSetupNetworksCommand.java
@@ -11,6 +11,7 @@
 import java.util.concurrent.TimeoutException;
 
 import javax.inject.Inject;
+import javax.validation.groups.Default;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.Validate;
@@ -40,6 +41,8 @@
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.interfaces.FutureVDSCall;
+import org.ovirt.engine.core.common.validation.group.CreateEntity;
+import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.common.vdscommands.FutureVDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.HostNetwork;
 import 
org.ovirt.engine.core.common.vdscommands.HostSetupNetworksVdsCommandParameters;
@@ -81,8 +84,12 @@
     @Inject
     private ManagementNetworkUtil managementNetworkUtil;
 
+    @Inject
+    private NetworkIdNetworkNameCompleter networkIdNetworkNameCompleter;
+
     public HostSetupNetworksCommand(T parameters) {
         this(parameters, null);
+        addValidationGroup(Default.class, CreateEntity.class, 
UpdateEntity.class);
     }
 
     public HostSetupNetworksCommand(T parameters, CommandContext 
commandContext) {
@@ -118,6 +125,8 @@
         completer.completeBonds(getParameters().getRemovedBonds());
         completer.completeNetworkAttachments(getExistingAttachments());
 
+        
networkIdNetworkNameCompleter.completeNetworkAttachments(getParameters().getNetworkAttachments(),
 getNetworkBusinessEntityMap());
+
         validator = new HostSetupNetworksValidator(host,
                         getParameters(),
                         getExistingNics(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/NetworkIdNetworkNameCompleter.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/NetworkIdNetworkNameCompleter.java
new file mode 100644
index 0000000..5236df1
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/NetworkIdNetworkNameCompleter.java
@@ -0,0 +1,77 @@
+package org.ovirt.engine.core.bll.network.host;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.ovirt.engine.core.common.businessentities.BusinessEntityMap;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.network.NetworkDao;
+
+
+@Singleton
+public class NetworkIdNetworkNameCompleter {
+
+    private final NetworkDao networkDao;
+
+    @Inject
+    public NetworkIdNetworkNameCompleter(NetworkDao networkDao) {
+        this.networkDao = networkDao;
+    }
+
+    public void completeNetworkAttachment(NetworkAttachment networkAttachment) 
{
+        completeNetworkAttachment(networkAttachment, null);
+    }
+
+    public void completeNetworkAttachments(List<NetworkAttachment> 
networkAttachments, BusinessEntityMap<Network> clusterNetworks) {
+        for (NetworkAttachment networkAttachment : networkAttachments) {
+            completeNetworkAttachment(networkAttachment, clusterNetworks);
+        }
+    }
+
+    private void completeNetworkAttachment(NetworkAttachment 
networkAttachment, BusinessEntityMap<Network> clusterNetworks) {
+        Guid networkId = networkAttachment.getNetworkId();
+        String networkName = networkAttachment.getNetworkName();
+
+        if (networkId == null && networkName == null) {
+            throw new IllegalArgumentException("network name or network id 
must be set.");
+        }
+
+        if (networkName != null) {
+            Network network = getNetworkByName(networkName, clusterNetworks);
+
+            if (networkId == null) {
+                networkAttachment.setNetworkId(network.getId());
+            } else {
+                if (!network.getId().equals(networkId)) {
+                    throw new IllegalArgumentException("Both nicId and nicName 
was specified, "
+                            + "but they does not denote same nic.");
+                }
+            }
+        } else {
+            //TODO MM: this is not actually required, but it may be confusing 
why there's sometime unset fields.
+            Network network = getNetworkById(networkId, clusterNetworks);
+            networkAttachment.setNetworkName(network.getName());
+        }
+    }
+
+    private Network getNetworkById(Guid networkId, BusinessEntityMap<Network> 
clusterNetworks) {
+        if (clusterNetworks != null) {
+            return clusterNetworks.get(networkId);
+        } else {
+            return networkDao.get(networkId);
+        }
+    }
+
+    private Network getNetworkByName(String networkName, 
BusinessEntityMap<Network> clusterNetworks) {
+        if (clusterNetworks != null) {
+            return clusterNetworks.get(networkName);
+        } else {
+            return networkDao.getByName(networkName);
+        }
+
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveNetworkAttachmentCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveNetworkAttachmentCommand.java
index c2f8eef..86cd248 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveNetworkAttachmentCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/RemoveNetworkAttachmentCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.validation.group.RemoveEntity;
 
 @NonTransactiveCommandAttribute
 public class RemoveNetworkAttachmentCommand<T extends 
NetworkAttachmentParameters> extends VdsCommand<T> {
@@ -22,6 +23,7 @@
 
     public RemoveNetworkAttachmentCommand(T parameters) {
         super(parameters);
+        addValidationGroup(RemoveEntity.class);
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkAttachmentCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkAttachmentCommand.java
index e76b37e..09fa39b 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkAttachmentCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkAttachmentCommand.java
@@ -21,6 +21,7 @@
 import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
 import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.dao.network.NetworkAttachmentDao;
 
 @NonTransactiveCommandAttribute
@@ -34,6 +35,7 @@
 
     public UpdateNetworkAttachmentCommand(T parameters) {
         super(parameters);
+        addValidationGroup(UpdateEntity.class);
     }
 
     @Override
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java
index 38e046d..477435a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HostSetupNetworksParameters.java
@@ -20,6 +20,7 @@
     @Valid
     private List<NetworkAttachment> networkAttachments;
 
+    @Valid
     private List<NetworkAttachment> removedNetworkAttachments;
 
     private List<Bond> bonds;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkAttachment.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkAttachment.java
index 5eed3ef..0e669c5 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkAttachment.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/network/NetworkAttachment.java
@@ -6,12 +6,14 @@
 
 import org.ovirt.engine.core.common.businessentities.BusinessEntity;
 import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
+import 
org.ovirt.engine.core.common.validation.annotation.NetworkIdOrNetworkNameIsSet;
 import 
org.ovirt.engine.core.common.validation.annotation.ValidNameOfVdsNetworkInterface;
 import org.ovirt.engine.core.common.validation.group.CreateEntity;
 import org.ovirt.engine.core.common.validation.group.RemoveEntity;
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.compat.Guid;
 
+@NetworkIdOrNetworkNameIsSet(groups = { CreateEntity.class, UpdateEntity.class 
})
 public class NetworkAttachment extends IVdcQueryable implements 
BusinessEntity<Guid> {
 
     private static final long serialVersionUID = -8052325342869681284L;
@@ -19,8 +21,9 @@
     @NotNull(groups = { UpdateEntity.class, RemoveEntity.class })
     private Guid id;
 
-    @NotNull(groups = { CreateEntity.class, UpdateEntity.class })
     private Guid networkId;
+
+    private String networkName;
 
     private Guid nicId;
 
@@ -112,6 +115,7 @@
         result = prime * result + ((id == null) ? 0 : id.hashCode());
         result = prime * result + ((ipConfiguration == null) ? 0 : 
ipConfiguration.hashCode());
         result = prime * result + ((networkId == null) ? 0 : 
networkId.hashCode());
+        result = prime * result + ((networkName == null) ? 0 : 
networkName.hashCode());
         result = prime * result + ((nicId == null) ? 0 : nicId.hashCode());
         result = prime * result + ((nicName == null) ? 0 : nicName.hashCode());
         result = prime * result + ((properties == null) ? 0 : 
properties.hashCode());
@@ -142,6 +146,11 @@
                 return false;
         } else if (!networkId.equals(other.networkId))
             return false;
+        if (networkName == null) {
+            if (other.networkName != null)
+                return false;
+        } else if (!networkName.equals(other.networkName))
+            return false;
         if (nicId == null) {
             if (other.nicId != null)
                 return false;
@@ -164,9 +173,18 @@
     public String toString() {
         return "NetworkAttachment [id=" + id
                 + ", networkId=" + networkId
+                + ", networkName=" + networkName
                 + ", nicId=" + nicId
                 + ", nicName=" + nicName
                 + ", ipConfiguration=" + ipConfiguration
                 + ", properties=" + properties + "]";
     }
+
+    public String getNetworkName() {
+        return networkName;
+    }
+
+    public void setNetworkName(String networkName) {
+        this.networkName = networkName;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/NetworkIdOrNetworkNameIsSetConstraint.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/NetworkIdOrNetworkNameIsSetConstraint.java
new file mode 100644
index 0000000..29162f6
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/NetworkIdOrNetworkNameIsSetConstraint.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.common.validation;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
+import 
org.ovirt.engine.core.common.validation.annotation.NetworkIdOrNetworkNameIsSet;
+
+public class NetworkIdOrNetworkNameIsSetConstraint
+        implements ConstraintValidator<NetworkIdOrNetworkNameIsSet, 
NetworkAttachment> {
+
+    @Override
+    public void initialize(NetworkIdOrNetworkNameIsSet constraintAnnotation) {
+    }
+
+    @Override
+    public boolean isValid(NetworkAttachment value, ConstraintValidatorContext 
context) {
+        boolean networkIdNotSet = value.getNetworkId() == null;
+        boolean networkNameNotSet = value.getNetworkName() == null;
+
+        return !(networkIdNotSet && networkNameNotSet);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/NetworkIdOrNetworkNameIsSet.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/NetworkIdOrNetworkNameIsSet.java
new file mode 100644
index 0000000..7f97787
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/validation/annotation/NetworkIdOrNetworkNameIsSet.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.common.validation.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+
+import 
org.ovirt.engine.core.common.validation.NetworkIdOrNetworkNameIsSetConstraint;
+
+@Constraint(validatedBy = NetworkIdOrNetworkNameIsSetConstraint.class)
+@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface NetworkIdOrNetworkNameIsSet {
+    String message() default 
"VALIDATION_NETWORK_ID_OR_NETWORK_NAME_MUST_BE_SET";
+
+    Class<?>[] groups() default { };
+
+    Class<? extends Payload>[] payload() default { };
+}
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index b245577..f953ca2 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -888,6 +888,7 @@
 VALIDATION.DATA_CENTER.DESCRIPTION.INVALID="Data Center description must be 
formed of ASCII charis only"
 VALIDATION.DATA_CENTER.NAME.INVALID=Data Center name must be formed of 
alphanumeric characters, numbers or "-_"
 VALIDATION_ID_NULL=ID is required.
+VALIDATION_NETWORK_ID_OR_NETWORK_NAME_MUST_BE_SET=Either network id or network 
name must be provided.
 VALIDATION_NAME_NULL=Name is required.
 VALIDATION_NAME_INVALID=Name must be formed of alphanumeric characters, 
numbers or "-_".
 VALIDATION_NAME_INVALID_WITH_DOT=Name must be formed of alphanumeric 
characters, numbers or "-_.".
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 6cccee6..28ab4e1 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -2701,17 +2701,17 @@
       parameterType: NetworkAttachment
       signatures:
       - mandatoryArguments:
-          network_attachment.network.id: 'xs:string'
+          network_attachment.network.name|id: 'xs:string'
         optionalArguments:
-            network_attachment.ip_configuration.ipv4s.boot_protocol: 
'xs:string'
-            network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
-                ipv4.address: 'xs:string'
-                ipv4.netmask: 'xs:string'
-                ipv4.gateway: 'xs:string'
-            network_attachment.properties.property--COLLECTION:
-                property.name: 'xs:string'
-                property.value: 'xs:string'
-            network_attachment.override_configuration: 'xs:boolean'
+          network_attachment.ip_configuration.ipv4s.boot_protocol: 'xs:string'
+          network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
+            ipv4.address: 'xs:string'
+            ipv4.netmask: 'xs:string'
+            ipv4.gateway: 'xs:string'
+          network_attachment.properties.property--COLLECTION:
+            property.name: 'xs:string'
+            property.value: 'xs:string'
+          network_attachment.override_configuration: 'xs:boolean'
 - name: /hosts/{host:id}/networkattachments|rel=get
   description: get the list of network attachments of the host
   request:
@@ -2732,17 +2732,17 @@
       parameterType: NetworkAttachment
       signatures:
       - optionalArguments:
-            network_attachment.host_nic.id: 'xs:string'
-            network_attachment.host_nic.name: 'xs:string'
-            network_attachment.ip_configuration.ipv4s.boot_protocol: 
'xs:string'
-            network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
-                ipv4.address: 'xs:string'
-                ipv4.netmask: 'xs:string'
-                ipv4.gateway: 'xs:string'
-            network_attachment.properties.property--COLLECTION:
-                property.name: 'xs:string'
-                property.value: 'xs:string'
-            network_attachment.override_configuration: 'xs:boolean'
+          network_attachment.host_nic.id: 'xs:string'
+          network_attachment.host_nic.name: 'xs:string'
+          network_attachment.ip_configuration.ipv4s.boot_protocol: 'xs:string'
+          network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
+            ipv4.address: 'xs:string'
+            ipv4.netmask: 'xs:string'
+            ipv4.gateway: 'xs:string'
+          network_attachment.properties.property--COLLECTION:
+            property.name: 'xs:string'
+            property.value: 'xs:string'
+          network_attachment.override_configuration: 'xs:boolean'
 - name: /hosts/{host:id}/networkattachments|rel=add
   description: add a new network attachment to the host
   request:
@@ -2750,19 +2750,19 @@
       parameterType: NetworkAttachment
       signatures:
       - mandatoryArguments:
-          network_attachment.network.id: 'xs:string'
+          network_attachment.network.name|id: 'xs:string'
         optionalArguments:
-            network_attachment.host_nic.id: 'xs:string'
-            network_attachment.host_nic.name: 'xs:string'
-            network_attachment.ip_configuration.ipv4s.boot_protocol: 
'xs:string'
-            network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
-                ipv4.address: 'xs:string'
-                ipv4.netmask: 'xs:string'
-                ipv4.gateway: 'xs:string'
-            network_attachment.properties.property--COLLECTION:
-                property.name: 'xs:string'
-                property.value: 'xs:string'
-            network_attachment.override_configuration: 'xs:boolean'
+          network_attachment.host_nic.id: 'xs:string'
+          network_attachment.host_nic.name: 'xs:string'
+          network_attachment.ip_configuration.ipv4s.boot_protocol: 'xs:string'
+          network_attachment.ip_configuration.ipv4s.ipv4--COLLECTION:
+            ipv4.address: 'xs:string'
+            ipv4.netmask: 'xs:string'
+            ipv4.gateway: 'xs:string'
+          network_attachment.properties.property--COLLECTION:
+            property.name: 'xs:string'
+            property.value: 'xs:string'
+          network_attachment.override_configuration: 'xs:boolean'
 - name: /hosts/{host:id}/unmanagednetworks|rel=get
   description: get a list of unmanaged networks
   request:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendNetworkAttachmentsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendNetworkAttachmentsResource.java
index 616a76e..8999d69 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendNetworkAttachmentsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendNetworkAttachmentsResource.java
@@ -46,7 +46,9 @@
 
     @Override
     public Response add(NetworkAttachment attachment) {
-        validateParameters(attachment, "network.id");
+        //TODO MM: what is this crazy stuff? There's javax validation which is 
far superior to this and in most places data from jaxb objects are simply moved 
to business objects which are (mostly) being validated, so shouldn't this be 
abandoned where possible?
+//        validateParameters(attachment, "network.id");
+
         
org.ovirt.engine.core.common.businessentities.network.NetworkAttachment 
networkAttachment = map(attachment);
         NetworkAttachmentParameters params = new 
NetworkAttachmentParameters(hostId, networkAttachment);
         return performCreate(VdcActionType.AddNetworkAttachment,
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NetworkAttachmentMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NetworkAttachmentMapper.java
index 4d10036..e9b2808 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NetworkAttachmentMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/NetworkAttachmentMapper.java
@@ -24,8 +24,15 @@
             entity.setId(GuidUtils.asGuid(model.getId()));
         }
 
-        if (model.isSetNetwork() && model.getNetwork().isSetId()) {
-            entity.setNetworkId(GuidUtils.asGuid(model.getNetwork().getId()));
+        if (model.isSetNetwork()) {
+            Network networkModel = model.getNetwork();
+            if (networkModel.isSetId()) {
+                entity.setNetworkId(GuidUtils.asGuid(networkModel.getId()));
+            }
+
+            if (networkModel.isSetName()) {
+                entity.setNetworkName(networkModel.getName());
+            }
         }
 
         if (model.isSetHostNic()) {
@@ -97,6 +104,14 @@
             model.getNetwork().setId(entity.getNetworkId().toString());
         }
 
+        if (entity.getNetworkName() != null) {
+            if (model.getNetwork() == null) {
+                model.setNetwork(new Network());
+            }
+
+            model.getNetwork().setName(entity.getNetworkName());
+        }
+
         if (entity.getNicId() != null) {
             model.setHostNic(new HostNIC());
             model.getHostNic().setId(entity.getNicId().toString());


-- 
To view, visit https://gerrit.ovirt.org/40308
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6cbc77edb40a35dcf20d2af3f19bde17044d0212
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <mmu...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to