Commit 093992ca authored by Noel Alonso's avatar Noel Alonso
Browse files

Elimina procesamiento de AISTrackingDTO

Ahora llega directamente desde AIS el dto de VesselTracking
Adapta test
parent e29cb33b
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
package es.redmic.vesselscommands.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import es.redmic.brokerlib.avro.geodata.tracking.vessels.AISTrackingDTO;
import es.redmic.commandslib.controller.CommandGeoController;
import es.redmic.vesselscommands.service.VesselTrackingCommandService;
import es.redmic.vesselslib.dto.tracking.VesselTrackingDTO;
@@ -16,6 +16,9 @@ public class VesselTrackingController extends CommandGeoController<VesselTrackin

	VesselTrackingCommandService service;

	@Value("${vesseltracking-activity-id}")
	protected String activityId;

	@Autowired
	public VesselTrackingController(VesselTrackingCommandService service) {
		super(service);
@@ -23,9 +26,9 @@ public class VesselTrackingController extends CommandGeoController<VesselTrackin
	}

	@KafkaListener(topics = "${broker.topic.realtime.tracking.vessels}")
	public void run(AISTrackingDTO dto) throws InterruptedException {
	public void run(VesselTrackingDTO dto) throws InterruptedException {

		logger.info("Procesando track para el barco: " + dto.getMmsi() + " date: " + dto.getTstamp());
		service.create(dto);
		logger.info("Procesando track para el barco: " + dto.getId() + " date: " + dto.getProperties().getDate());
		service.create(dto, activityId);
	}
}
+0 −33
Original line number Diff line number Diff line
@@ -5,14 +5,12 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import es.redmic.brokerlib.avro.geodata.tracking.vessels.AISTrackingDTO;
import es.redmic.commandslib.service.CommandServiceItfc;
import es.redmic.vesselscommands.commands.vessel.CreateVesselCommand;
import es.redmic.vesselscommands.commands.vessel.DeleteVesselCommand;
import es.redmic.vesselscommands.commands.vessel.UpdateVesselCommand;
import es.redmic.vesselscommands.handler.VesselCommandHandler;
import es.redmic.vesselslib.dto.vessel.VesselDTO;
import es.redmic.vesselslib.dto.vesseltype.VesselTypeDTO;

@Service
public class VesselCommandService implements CommandServiceItfc<VesselDTO> {
@@ -26,15 +24,6 @@ public class VesselCommandService implements CommandServiceItfc<VesselDTO> {
		this.commandHandler = commandHandler;
	}

	public void create(AISTrackingDTO aisTracking) {

		if (aisTracking.getMmsi() != null || aisTracking.getImo() != null) {
			create(convertTrackToVessel(aisTracking));
		} else {
			logger.info("Descartado Vessel sin identificador váliado");
		}
	}

	@Override
	public VesselDTO create(VesselDTO vessel) {

@@ -58,26 +47,4 @@ public class VesselCommandService implements CommandServiceItfc<VesselDTO> {

		return commandHandler.update(id, new DeleteVesselCommand(id));
	}

	public static VesselDTO convertTrackToVessel(AISTrackingDTO aisTracking) {

		VesselDTO vessel = new VesselDTO();

		vessel.setMmsi(aisTracking.getMmsi());
		vessel.setName(aisTracking.getName());
		vessel.setCallSign(aisTracking.getCallSign());
		vessel.setImo(aisTracking.getImo());

		if (aisTracking.getA() != null && aisTracking.getB() != null)
			vessel.setLength(aisTracking.getA() + aisTracking.getB());

		if (aisTracking.getC() != null && aisTracking.getD() != null)
			vessel.setBeam(aisTracking.getC() + aisTracking.getD());

		VesselTypeDTO vesselType = new VesselTypeDTO();
		vesselType.setCode(aisTracking.getType().toString());
		vessel.setType(vesselType);

		return vessel;
	}
}
+0 −59
Original line number Diff line number Diff line
@@ -2,16 +2,10 @@ package es.redmic.vesselscommands.service;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;

import es.redmic.brokerlib.avro.geodata.tracking.vessels.AISTrackingDTO;
import es.redmic.commandslib.service.CommandGeoServiceItfc;
import es.redmic.exception.databinding.FieldNotValidException;
import es.redmic.vesselscommands.commands.vesseltracking.CreateVesselTrackingCommand;
@@ -19,7 +13,6 @@ import es.redmic.vesselscommands.commands.vesseltracking.DeleteVesselTrackingCom
import es.redmic.vesselscommands.commands.vesseltracking.UpdateVesselTrackingCommand;
import es.redmic.vesselscommands.handler.VesselTrackingCommandHandler;
import es.redmic.vesselslib.dto.tracking.VesselTrackingDTO;
import es.redmic.vesselslib.dto.tracking.VesselTrackingPropertiesDTO;

@Service
public class VesselTrackingCommandService implements CommandGeoServiceItfc<VesselTrackingDTO> {
@@ -31,26 +24,11 @@ public class VesselTrackingCommandService implements CommandGeoServiceItfc<Vesse
	@Value("${vesseltracking-activity-id}")
	protected String activityId;

	@Value("${qflag.default}")
	private String QFLAG_DEFAUL;

	@Value("${vflag.default}")
	private String VFLAG_DEFAULT;

	@Autowired
	public VesselTrackingCommandService(VesselTrackingCommandHandler commandHandler) {
		this.commandHandler = commandHandler;
	}

	public void create(AISTrackingDTO aisTracking) {

		if (aisTracking.getMmsi() != null || aisTracking.getImo() != null) {
			create(convertTrackToVesselTracking(aisTracking), activityId);
		} else {
			logger.info("Descartado Vessel sin identificador váliado");
		}
	}

	@Override
	public VesselTrackingDTO create(VesselTrackingDTO vesselTracking, String activityId) {

@@ -90,41 +68,4 @@ public class VesselTrackingCommandService implements CommandGeoServiceItfc<Vesse
		if (!requestId.equals(this.activityId))
			throw new FieldNotValidException("activityId", requestId);
	}

	public VesselTrackingDTO convertTrackToVesselTracking(AISTrackingDTO aisTracking) {

		if (aisTracking.getMmsi() == null)
			throw new FieldNotValidException("mmsi", "null");

		if (aisTracking.getTstamp() == null)
			throw new FieldNotValidException("date", "null");

		GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

		VesselTrackingDTO vesselTracking = new VesselTrackingDTO();

		Point geometry = geometryFactory
				.createPoint(new Coordinate(aisTracking.getLongitude(), aisTracking.getLatitude()));

		vesselTracking.setGeometry(geometry);

		VesselTrackingPropertiesDTO properties = new VesselTrackingPropertiesDTO();

		properties.setVessel(VesselCommandService.convertTrackToVessel(aisTracking));

		properties.setDate(aisTracking.getTstamp());

		properties.setCog(aisTracking.getCog());
		properties.setSog(aisTracking.getSog());
		properties.setHeading(aisTracking.getHeading());
		properties.setNavStat(aisTracking.getNavStat());
		properties.setDest(aisTracking.getDest());
		properties.setEta(aisTracking.getEta());
		properties.setQFlag(QFLAG_DEFAUL);
		properties.setVFlag(VFLAG_DEFAULT);

		vesselTracking.setProperties(properties);

		return vesselTracking;
	}
}
+17 −43
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ import java.util.concurrent.TimeUnit;

import javax.annotation.PostConstruct;

import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
@@ -28,16 +27,13 @@ import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import es.redmic.brokerlib.avro.common.Event;
import es.redmic.brokerlib.avro.geodata.tracking.vessels.AISTrackingDTO;
import es.redmic.test.vesselscommands.integration.KafkaEmbeddedConfig;
import es.redmic.test.vesselscommands.integration.vessel.VesselDataUtil;
import es.redmic.testutils.kafka.KafkaBaseIntegrationTest;
import es.redmic.vesselscommands.VesselsCommandsApplication;
import es.redmic.vesselscommands.handler.VesselTrackingCommandHandler;
import es.redmic.vesselscommands.service.VesselTrackingCommandService;
import es.redmic.vesselslib.dto.tracking.VesselTrackingDTO;
import es.redmic.vesselslib.dto.vessel.VesselDTO;
import es.redmic.vesselslib.events.vessel.create.VesselCreatedEvent;
import es.redmic.vesselslib.events.vesseltracking.create.CreateVesselTrackingEvent;

@RunWith(SpringJUnit4ClassRunner.class)
@@ -57,7 +53,10 @@ public class CreateVesselTrackingFromAISTest extends KafkaBaseIntegrationTest {

	private Integer mmsi = 1;

	VesselDTO vessel;
	private String tstamp = "343232132";

	@Value("${vesseltracking-activity-id}")
	protected String activityId;

	@ClassRule
	public static EmbeddedKafkaRule embeddedKafka = new EmbeddedKafkaRule(KafkaEmbeddedConfig.NUM_BROKERS, true,
@@ -86,53 +85,28 @@ public class CreateVesselTrackingFromAISTest extends KafkaBaseIntegrationTest {
	@Test
	public void createVesselTracking_SendCreateVesselTrackingEvent_IfCommandWasSuccess() throws Exception {

		VesselCreatedEvent vesselCreatedEvent = VesselDataUtil.getVesselCreatedEvent(mmsi);

		vessel = vesselCreatedEvent.getVessel();

		AISTrackingDTO dto = new AISTrackingDTO();
		dto.setMmsi(vessel.getMmsi());
		dto.setImo(vessel.getImo());
		dto.setName(vessel.getName());
		dto.setType(Integer.parseInt(vessel.getType().getCode()));
		dto.setCallSign(vessel.getCallSign());
		dto.setTstamp(new DateTime());
		dto.setLatitude(2.1);
		dto.setLongitude(3.2);
		dto.setA(vessel.getLength() / 2);
		dto.setB(vessel.getLength() / 2);
		dto.setC(vessel.getBeam() / 2);
		dto.setD(vessel.getBeam() / 2);
		dto.setCog(2.3);
		dto.setSog(3.4);
		dto.setHeading(221);
		dto.setNavStat(33);
		dto.setEta("00:00 00:00");
		dto.setDest("Santa Cruz de Tenerife");
		VesselTrackingDTO source = VesselTrackingDataUtil.getCreateEvent(mmsi, tstamp).getVesselTracking();

		// LLama directamente al servicio para evitar pasar por vessel
		service.create(dto);
		service.create(source, activityId);

		VesselTrackingDTO vesselTracking = (VesselTrackingDTO) blockingQueue.poll(4, TimeUnit.MINUTES);
		assertNotNull(vesselTracking);

		assertTrue(vesselTracking.getProperties().getDate().isEqual(dto.getTstamp()));
		assertEquals(vesselTracking.getProperties().getCog(), dto.getCog());
		assertEquals(vesselTracking.getProperties().getSog(), dto.getSog());
		assertEquals(vesselTracking.getProperties().getHeading(), dto.getHeading());
		assertEquals(vesselTracking.getProperties().getNavStat(), dto.getNavStat());
		assertEquals(vesselTracking.getProperties().getEta(), dto.getEta());
		assertEquals(vesselTracking.getProperties().getDest(), dto.getDest());
		assertTrue(vesselTracking.getProperties().getDate().isEqual(source.getProperties().getDate()));
		assertEquals(vesselTracking.getProperties().getCog(), source.getProperties().getCog());
		assertEquals(vesselTracking.getProperties().getSog(), source.getProperties().getSog());
		assertEquals(vesselTracking.getProperties().getHeading(), source.getProperties().getHeading());
		assertEquals(vesselTracking.getProperties().getNavStat(), source.getProperties().getNavStat());
		assertEquals(vesselTracking.getProperties().getEta(), source.getProperties().getEta());
		assertEquals(vesselTracking.getProperties().getDest(), source.getProperties().getDest());

		VesselDTO vessel = vesselTracking.getProperties().getVessel();

		assertEquals(vessel.getMmsi(), dto.getMmsi());
		assertEquals(vessel.getName(), dto.getName());
		Double length = dto.getA() + dto.getB();
		assertEquals(vessel.getLength(), length);
		Double beam = dto.getC() + dto.getD();
		assertEquals(vessel.getBeam(), beam);

		assertEquals(vessel.getMmsi(), source.getProperties().getVessel().getMmsi());
		assertEquals(vessel.getName(), source.getProperties().getVessel().getName());
		assertEquals(vessel.getLength(), source.getProperties().getVessel().getLength());
		assertEquals(vessel.getBeam(), source.getProperties().getVessel().getBeam());
	}

	@KafkaHandler