/* Copyright (c) 2011 Danish Maritime Authority. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dk.dma.ais.encode; import dk.dma.ais.binary.SixbitException; import dk.dma.ais.message.AisMessage; import dk.dma.ais.message.AisMessage8; import dk.dma.ais.message.AisMessageException; import dk.dma.ais.message.AisPosition; import dk.dma.ais.message.binary.AisApplicationMessage; import dk.dma.ais.message.binary.BroadcastIntendedRoute; import dk.dma.ais.sentence.Bbm; import dk.dma.ais.sentence.SentenceException; import dk.dma.ais.sentence.SentenceLine; import dk.dma.ais.sentence.Vdm; import dk.dma.enav.model.geometry.Position; import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class EncodeRouteExchangeTest { @Test public void encodeIntendedTest() throws SixbitException, SentenceException, AisMessageException { int userId = 992199007; // Make ASM BroadcastIntendedRoute route = new BroadcastIntendedRoute(); route.setStartMonth(11); route.setStartDay(3); route.setStartHour(16); route.setStartMin(50); route.setDuration(35); // Add waypoints List<AisPosition> waypoints = new ArrayList<>(); waypoints.add(new AisPosition(Position.create(55.845283333333334, 12.704933333333333))); waypoints.add(new AisPosition(Position.create(55.913383333333336, 12.6453))); waypoints.add(new AisPosition(Position.create(55.93476666666667, 12.644016666666667))); waypoints.add(new AisPosition(Position.create(55.97728333333333, 12.7015))); waypoints.add(new AisPosition(Position.create(56.00, 12.8))); waypoints.add(new AisPosition(Position.create(56.10, 12.9))); for (AisPosition aisPosition : waypoints) { route.addWaypoint(aisPosition); } // Make MSG8 AisMessage8 msg8 = new AisMessage8(); msg8.setUserId(userId); msg8.setAppMessage(route); System.out.println("Route message 8: " + msg8); // Make BBM sentences Bbm bbm = new Bbm(); bbm.setTalker("AI"); bbm.setTotal(1); bbm.setNum(1); bbm.setBinaryData(msg8); bbm.setSequence(0); String encoded = bbm.getEncoded(); System.out.println("Route BBM encoded: " + encoded); // Make VDM sentences String[] vdms = Vdm.createSentences(msg8, 0); System.out.println("Route VDM encoded:\n" + StringUtils.join(vdms, "\r\n")); // Decode VDM sentences Vdm vdm = new Vdm(); for (int i = 0; i < vdms.length; i++) { int result = vdm.parse(new SentenceLine(vdms[i])); if (i < vdms.length - 1) { Assert.assertEquals(result, 1); } else { Assert.assertEquals(result, 0); } } // Extract AisMessage6 msg8 = (AisMessage8) AisMessage.getInstance(vdm); System.out.println("msg8 decoded: " + msg8); // Get the ASM AisApplicationMessage appMsg = msg8.getApplicationMessage(); BroadcastIntendedRoute parsedRoute = (BroadcastIntendedRoute) appMsg; System.out.println("sentenceStr 8 application: " + appMsg); // Assert if mathes original Assert.assertEquals(parsedRoute.getWaypointCount(), waypoints.size()); Assert.assertEquals(route.getDuration(), parsedRoute.getDuration()); Assert.assertEquals(route.getStartMonth(), parsedRoute.getStartMonth()); Assert.assertEquals(route.getStartDay(), parsedRoute.getStartDay()); Assert.assertEquals(route.getStartHour(), parsedRoute.getStartHour()); Assert.assertEquals(route.getStartMin(), parsedRoute.getStartMin()); for (int i = 0; i < parsedRoute.getWaypointCount(); i++) { AisPosition parsedWp = parsedRoute.getWaypoints().get(i); AisPosition orgWp = waypoints.get(i); Assert.assertTrue(parsedWp.equals(orgWp)); } } }