package org.openstack.atlas.api.mapper.dozer.converter; import org.openstack.atlas.docs.loadbalancers.api.v1.IpVersion; import org.openstack.atlas.docs.loadbalancers.api.v1.NetworkItemType; import org.openstack.atlas.docs.loadbalancers.api.v1.PersistenceType; import org.openstack.atlas.service.domain.entities.*; import org.openstack.atlas.service.domain.exceptions.NoMappableConstantException; import org.dozer.CustomConverter; public class EnumCustomConverter implements CustomConverter { @Override public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class destinationClass, Class sourceClass) { if (sourceFieldValue == null) { return null; } // LoadBalancerProtocol -> String if (sourceClass == LoadBalancerProtocol.class && destinationClass == java.lang.String.class) { return ((LoadBalancerProtocol) sourceFieldValue).name(); } // String -> LoadBalancerProtocol if (sourceClass == java.lang.String.class && destinationClass == LoadBalancerProtocol.class) { return LoadBalancerProtocol.valueOf((String)sourceFieldValue); } // LoadBalancerStatus -> String if (sourceFieldValue instanceof LoadBalancerStatus && destinationClass == java.lang.String.class) { return ((LoadBalancerStatus)sourceFieldValue).toString(); } // String -> LoadBalancerStatus if(sourceFieldValue instanceof java.lang.String && destinationClass == LoadBalancerStatus.class) { return LoadBalancerStatus.valueOf((String)sourceFieldValue); } // String -> AlgorithmType if(sourceFieldValue instanceof java.lang.String && destinationClass == LoadBalancerAlgorithm.class) { return LoadBalancerAlgorithm.valueOf((String)sourceFieldValue); } // AlgorithmType -> String if(sourceFieldValue instanceof LoadBalancerAlgorithm && destinationClass == java.lang.String.class) { return ((LoadBalancerAlgorithm)sourceFieldValue).toString(); } if (sourceFieldValue instanceof VirtualIp) { return IpVersion.IPV4; } if (sourceFieldValue instanceof IpVersion) { return org.openstack.atlas.service.domain.entities.IpVersion.fromDataType((IpVersion) sourceFieldValue); } if (sourceFieldValue instanceof AccessListType) { return ((AccessListType) sourceFieldValue).getDataType(); } if (sourceFieldValue instanceof NetworkItemType) { return AccessListType.fromDataType((NetworkItemType) sourceFieldValue); } if (sourceFieldValue instanceof SessionPersistence) { return ((SessionPersistence) sourceFieldValue).getDataType(); } if (sourceFieldValue instanceof PersistenceType) { return SessionPersistence.fromDataType((PersistenceType) sourceFieldValue); } if(sourceFieldValue instanceof String && destinationClass == AccountLimitType.class) { return AccountLimitType.valueOf((String) sourceFieldValue); } if (sourceFieldValue instanceof AccountLimitType && destinationClass == java.lang.String.class) { return ((AccountLimitType)sourceFieldValue).toString(); } throw new NoMappableConstantException("Cannot map source type: " + sourceClass.getName()); } }