package org.ovirt.engine.core.vdsbroker.gluster; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService; import org.ovirt.engine.core.common.businessentities.gluster.GlusterService; import org.ovirt.engine.core.common.businessentities.gluster.GlusterServiceStatus; import org.ovirt.engine.core.common.constants.gluster.GlusterConstants; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.vdsbroker.irsbroker.StatusReturn; /** * The return type to receive a list of gluster related services. */ public class GlusterServicesReturn extends StatusReturn { private static final String SERVICES = "services"; private static final String NAME = "name"; private static final String PID = "pid"; private static final String STATUS = "status"; private static final String MESSAGE = "message"; private Guid serverId; private static final Map<String, GlusterService> servicesMap = getServicesMap(); private List<GlusterServerService> services; @SuppressWarnings("unchecked") public GlusterServicesReturn(Guid serverId, Map<String, Object> innerMap) { super(innerMap); this.serverId = serverId; if (getStatus().code != GlusterConstants.CODE_SUCCESS) { return; } services = new ArrayList<>(); for (Object service : (Object[]) innerMap.get(SERVICES)) { services.add(getService((Map<String, Object>) service)); } } private GlusterServerService getService(Map<String, Object> serviceMap) { GlusterServerService serverService = new GlusterServerService(); serverService.setServiceName((String) serviceMap.get(NAME)); String pid = (String) serviceMap.get(PID); serverService.setPid(StringUtils.isEmpty(pid) ? null : Integer.parseInt(pid)); serverService.setStatus(GlusterServiceStatus.valueOf((String) serviceMap.get(STATUS))); serverService.setMessage((String) serviceMap.get(MESSAGE)); serverService.setServerId(serverId); GlusterService service = servicesMap.get(serverService.getServiceName()); if (service != null) { serverService.setServiceId(service.getId()); serverService.setServiceType(service.getServiceType()); } return serverService; } private static Map<String, GlusterService> getServicesMap() { Map<String, GlusterService> serviceNames = new HashMap<>(); List<GlusterService> services = DbFacade.getInstance().getGlusterServiceDao().getAll(); for (GlusterService service : services) { serviceNames.put(service.getServiceName(), service); } return serviceNames; } public List<GlusterServerService> getServices() { return services; } }