package org.ovirt.engine.api.restapi.types;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.ovirt.engine.api.model.GlusterBrick;
import org.ovirt.engine.api.model.GlusterBricks;
import org.ovirt.engine.api.model.GlusterVolume;
import org.ovirt.engine.core.common.businessentities.GlusterBrickEntity;
import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity;
import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity.ACCESS_PROTOCOL;
import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity.TRANSPORT_TYPE;
import org.ovirt.engine.core.common.businessentities.GlusterVolumeEntity.VOLUME_STATUS;
import org.ovirt.engine.core.common.utils.StringUtil;
public class GlusterVolumeMapper {
private static final GlusterBrickMapper brickMapper = new GlusterBrickMapper();
@Mapping(from = GlusterVolume.class, to = GlusterVolumeEntity.class)
public static GlusterVolumeEntity map(GlusterVolume fromVolume, GlusterVolumeEntity toVolume) {
GlusterVolumeEntity volume = toVolume != null ? toVolume : new GlusterVolumeEntity();
volume.setId(fromVolume.getId());
volume.setName(fromVolume.getVolumeName());
volume.setVolumeType(fromVolume.getVolumeType());
volume.setOptions(fromVolume.getOptions());
String transportType = fromVolume.getTransportType();
if(transportType == null || transportType.trim().isEmpty()) {
volume.setTransportType(TRANSPORT_TYPE.ETHERNET);
} else {
volume.setTransportType(transportType);
}
volume.setAccessProtocols(fromVolume.getAccessProtocols());
volume.setAccessControlList(fromVolume.getAccessControlList());
List<GlusterBrickEntity> bricks = new ArrayList<GlusterBrickEntity>();
for (GlusterBrick brick : fromVolume.getGlusterBricks().getGlusterBricks()) {
bricks.add(brickMapper.map(brick, null));
}
volume.setBricks(bricks);
BigInteger count = fromVolume.getReplicaCount();
volume.setReplicaCount(count == null ? 0 : count.intValue());
count = fromVolume.getStripeCount();
volume.setStripeCount(count == null ? 0 : count.intValue());
volume.setCifsUsers(fromVolume.getCifsUsers());
String status = fromVolume.getStatus();
if(status == null || status.trim().isEmpty()) {
volume.setStatus(VOLUME_STATUS.OFFLINE);
} else {
volume.setStatus(VOLUME_STATUS.valueOf(status));
}
return volume;
}
@Mapping(from = GlusterVolumeEntity.class, to = GlusterVolume.class)
public static GlusterVolume map(GlusterVolumeEntity fromVolume, GlusterVolume toVolume) {
GlusterVolume volume = toVolume != null ? toVolume : new GlusterVolume();
volume.setId(fromVolume.getId());
volume.setVolumeName(fromVolume.getName());
volume.setVolumeType(fromVolume.getVolumeType().toString());
volume.setTransportType(fromVolume.getTransportType().toString());
Set<ACCESS_PROTOCOL> accessProtocols = fromVolume.getAccessProtocols();
volume.setAccessProtocols(StringUtil.collectionToString(accessProtocols, ","));
volume.setAccessControlList(fromVolume.getAccessControlList());
GlusterBricks glusterBricks = new GlusterBricks();
List<GlusterBrick> bricks = glusterBricks.getGlusterBricks();
for (GlusterBrickEntity brick : fromVolume.getBricks()) {
bricks.add(brickMapper.map(brick, null));
}
volume.setGlusterBricks(glusterBricks);
volume.setReplicaCount(BigInteger.valueOf(fromVolume.getReplicaCount()));
volume.setStripeCount(BigInteger.valueOf(fromVolume.getStripeCount()));
volume.setCifsUsers(StringUtil.collectionToString(fromVolume.getCifsUsers(), ","));
volume.setOptions(StringUtil.collectionToString(fromVolume.getOptions().getOptions(), ","));
volume.setStatus(fromVolume.getStatus().toString());
return volume;
}
}