package org.ovirt.engine.api.restapi.types; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.api.model.AccessProtocol; import org.ovirt.engine.api.model.GlusterVolume; import org.ovirt.engine.api.model.GlusterVolumeStatus; import org.ovirt.engine.api.model.GlusterVolumeType; import org.ovirt.engine.api.model.Option; import org.ovirt.engine.api.model.Options; import org.ovirt.engine.api.model.TransportType; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity; import org.ovirt.engine.core.compat.Guid; public class GlusterVolumeMapper { @Mapping(from = GlusterVolume.class, to = GlusterVolumeEntity.class) public static GlusterVolumeEntity map(GlusterVolume fromVolume, GlusterVolumeEntity toVolume) { GlusterVolumeEntity volume = toVolume != null ? toVolume : new GlusterVolumeEntity(); if(fromVolume.isSetId()) { volume.setId(Guid.createGuidFromStringDefaultEmpty(fromVolume.getId())); } if(fromVolume.isSetName()) { volume.setName(fromVolume.getName()); } if(fromVolume.isSetVolumeType()) { volume.setVolumeType(map(fromVolume.getVolumeType(), null)); } if(fromVolume.isSetTransportTypes()) { for (TransportType transportType : fromVolume.getTransportTypes().getTransportTypes()) { if (transportType != null) { volume.addTransportType(map(transportType, null)); } } } if(fromVolume.isSetReplicaCount()) { volume.setReplicaCount(fromVolume.getReplicaCount()); } if(fromVolume.isSetStripeCount()) { volume.setStripeCount(fromVolume.getStripeCount()); } if(fromVolume.isSetDisperseCount()) { volume.setDisperseCount(fromVolume.getDisperseCount()); } if(fromVolume.isSetRedundancyCount()) { volume.setRedundancyCount(fromVolume.getRedundancyCount()); } if (fromVolume.isSetOptions()) { Options options = fromVolume.getOptions(); if (options.isSetOptions()) { for (Option option : options.getOptions()) { if (option.isSetName() && option.isSetValue()) { volume.setOption(option.getName(), option.getValue()); } } } } return volume; } @Mapping(from = GlusterVolumeEntity.class, to = GlusterVolume.class) public static GlusterVolume map(GlusterVolumeEntity fromVolume, GlusterVolume toVolume) { GlusterVolume volume = toVolume != null ? toVolume : new GlusterVolume(); if(fromVolume.getId() != null) { volume.setId(fromVolume.getId().toString()); } if(fromVolume.getName() != null) { volume.setName(fromVolume.getName()); } if(fromVolume.getVolumeType() != null) { volume.setVolumeType(map(fromVolume.getVolumeType(), null)); } if (fromVolume.getTransportTypes() != null) { ArrayList<TransportType> transportTypeList = new ArrayList<>(); for (org.ovirt.engine.core.common.businessentities.gluster.TransportType transportType : fromVolume.getTransportTypes()) { transportTypeList.add(map(transportType, null)); } volume.setTransportTypes(new GlusterVolume.TransportTypesList()); volume.getTransportTypes() .getTransportTypes() .addAll(transportTypeList); } volume.setReplicaCount(fromVolume.getReplicaCount()); volume.setStripeCount(fromVolume.getStripeCount()); volume.setDisperseCount(fromVolume.getDisperseCount()); volume.setRedundancyCount(fromVolume.getRedundancyCount()); if(fromVolume.getStatus() != null) { volume.setStatus(mapVolumeStatus(fromVolume.getStatus())); } if (fromVolume.getOptions() != null) { Options glusterOptions = new Options(); List<Option> options = glusterOptions.getOptions(); for (GlusterVolumeOptionEntity option : fromVolume.getOptions()) { options.add(mapOption(option)); } volume.setOptions(glusterOptions); } return volume; } private static Option mapOption(GlusterVolumeOptionEntity fromOption) { Option option = new Option(); option.setName(fromOption.getKey()); option.setValue(fromOption.getValue()); return option; } @Mapping(from = GlusterVolumeType.class, to = org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.class) public static org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType map( GlusterVolumeType glusterVolumeType, org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType template) { switch (glusterVolumeType) { case DISTRIBUTE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISTRIBUTE; case REPLICATE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.REPLICATE; case DISTRIBUTED_REPLICATE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISTRIBUTED_REPLICATE; case STRIPE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.STRIPE; case DISTRIBUTED_STRIPE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISTRIBUTED_STRIPE; case STRIPED_REPLICATE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.STRIPED_REPLICATE; case DISTRIBUTED_STRIPED_REPLICATE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISTRIBUTED_STRIPED_REPLICATE; case DISPERSE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISPERSE; case DISTRIBUTED_DISPERSE: return org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.DISTRIBUTED_DISPERSE; default: return null; } } @Mapping(from = org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType.class, to = GlusterVolumeType.class) public static GlusterVolumeType map(org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType glusterVolumeType, GlusterVolumeType template) { switch (glusterVolumeType) { case DISTRIBUTE: return GlusterVolumeType.DISTRIBUTE; case REPLICATE: return GlusterVolumeType.REPLICATE; case DISTRIBUTED_REPLICATE: return GlusterVolumeType.DISTRIBUTED_REPLICATE; case STRIPE: return GlusterVolumeType.STRIPE; case DISTRIBUTED_STRIPE: return GlusterVolumeType.DISTRIBUTED_STRIPE; case STRIPED_REPLICATE: return GlusterVolumeType.STRIPED_REPLICATE; case DISTRIBUTED_STRIPED_REPLICATE: return GlusterVolumeType.DISTRIBUTED_STRIPED_REPLICATE; case DISPERSE: return GlusterVolumeType.DISPERSE; case DISTRIBUTED_DISPERSE: return GlusterVolumeType.DISTRIBUTED_DISPERSE; default: return null; } } @Mapping(from = GlusterVolumeType.class, to = org.ovirt.engine.core.common.businessentities.gluster.TransportType.class) public static org.ovirt.engine.core.common.businessentities.gluster.TransportType map( TransportType transportType, org.ovirt.engine.core.common.businessentities.gluster.TransportType template) { switch (transportType) { case TCP: return org.ovirt.engine.core.common.businessentities.gluster.TransportType.TCP; case RDMA: return org.ovirt.engine.core.common.businessentities.gluster.TransportType.RDMA; default: return null; } } @Mapping(from = org.ovirt.engine.core.common.businessentities.gluster.TransportType.class, to = TransportType.class) public static TransportType map(org.ovirt.engine.core.common.businessentities.gluster.TransportType transportType, TransportType template) { switch (transportType) { case TCP: return TransportType.TCP; case RDMA: return TransportType.RDMA; default: return null; } } @Mapping(from = GlusterVolumeType.class, to = org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol.class) public static org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol map( AccessProtocol accessProtocol, org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol template) { switch (accessProtocol) { case GLUSTER: return org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol.GLUSTER; case NFS: return org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol.NFS; case CIFS: return org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol.CIFS; default: return null; } } @Mapping(from = org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol.class, to = AccessProtocol.class) public static AccessProtocol map(org.ovirt.engine.core.common.businessentities.gluster.AccessProtocol accessProtocol, String template) { switch (accessProtocol) { case GLUSTER: return AccessProtocol.GLUSTER; case NFS: return AccessProtocol.NFS; case CIFS: return AccessProtocol.CIFS; default: return null; } } private static GlusterVolumeStatus mapVolumeStatus(org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus status) { switch (status) { case UP: return GlusterVolumeStatus.UP; case DOWN: return GlusterVolumeStatus.DOWN; default: return null; } } }