package pl.edu.agh.dsm.front.mocks; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityLinks; import org.springframework.hateoas.Link; import org.springframework.hateoas.Resource; import org.springframework.hateoas.Resources; import org.springframework.stereotype.Component; import pl.edu.agh.dsm.front.core.model.rest.UserCredentials; import pl.edu.agh.dsm.front.core.model.rest.dto.*; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.UUID; /** * Created by Tom on 2014-05-26. */ @Component public class MockImplementation { @Autowired MockRepository mockRepository; @Autowired private EntityLinks entityLinks; public void addMeasurement(String addUri, ComplexMeasurementOutDto complexDetails, UserCredentials user) { UUID uuid = extractUuid(complexDetails.getBaseMeasurementUri()); MeasurementDto baseMeasurement = mockRepository.getMeasurementById(uuid); MeasurementDto measurement = new MeasurementDto( UUID.randomUUID(), baseMeasurement.getResource(), baseMeasurement.getMetric(), baseMeasurement.getUnit(), baseMeasurement.getMonitor()); ComplexMeasurementDto complexIn = new ComplexMeasurementDto( complexDetails.getType(), complexDetails.getParams(), user.getUsername()); measurement.setComplexDetails(complexIn); mockRepository.addMeasurement(measurement); } public void deleteMeasurement(String deleteUri, UserCredentials user) { UUID uuid = extractUuid(deleteUri); mockRepository.removeMeasurement(uuid); } public Collection<Resource<ComplexTypeDto>> getAvailableComplexTypes(String monitorAddress) { List<Resource> resources = new ArrayList<>(); for(ComplexTypeDto type : mockRepository.getAvailableComplexTypes()) { resources.add(new Resource(type)); } return new Resources(resources).getContent(); } public Collection<Resource<MeasurementDto>> getMeasurements( String metricName, String resourceName, UserCredentials user) { List<Resource<MeasurementDto>> resources = new ArrayList<>(); for(MeasurementDto measurement : mockRepository.getAllMeasurements()) { List<Link> links = prepareLinks(measurement, user); Resource<MeasurementDto> resource = new Resource<MeasurementDto>(measurement, links); if(checkCriteria(measurement, metricName, resourceName)) { resources.add(resource); } } return resources; } public Resource<MeasurementDto> getMeasurement(UUID uuid) { MeasurementDto measurement = mockRepository.getMeasurementById(uuid); List<Link> links = prepareLinks(measurement, null); return new Resource<MeasurementDto>(measurement, links); } public Collection<Resource<SystemResourceDto>> getResources() { List<SystemResourceDto> systemResources = new ArrayList<>(); systemResources.add(new SystemResourceDto("zeus")); systemResources.add(new SystemResourceDto("localhost")); List<Resource<SystemResourceDto>> resources = new ArrayList<>(); for(SystemResourceDto systemResource : systemResources) { Resource<SystemResourceDto> resource = new Resource<SystemResourceDto>(systemResource); resources.add(resource); } return resources; } private List<Link> prepareLinks(MeasurementDto measurement, UserCredentials user) { List<Link> links = new ArrayList<>(); String href = entityLinks.linkToCollectionResource(MeasurementDto.class).getHref(); href += "/" + measurement.getId(); links.add(new Link(href + "/data", "data")); links.add(new Link(href, "self")); ComplexMeasurementDto complexDetails = measurement.getComplexDetails(); if(complexDetails != null) { links.add(new Link(href, "complexDetails")); if(user != null && user.getUsername().equals(complexDetails.getCreatedBy())) { links.add(new Link(href, "delete")); } } if(user != null) { links.add(new Link(href, "addComplex")); } return links; } private boolean checkCriteria(MeasurementDto measurement, String metric, String resource) { return ( metric.isEmpty() || metric.equals(measurement.getMetric()) ) && ( resource.isEmpty() || resource.equals(measurement.getResource()) ); } private UUID extractUuid(String uriWithId) { int idx = uriWithId.lastIndexOf("/"); String id = uriWithId.substring(idx+1); return UUID.fromString(id); } }