/* 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.transform; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Assert; import org.junit.Test; import dk.dma.ais.binary.SixbitException; import dk.dma.ais.message.AisMessage; import dk.dma.ais.message.AisMessageException; import dk.dma.ais.packet.AisPacket; import dk.dma.ais.packet.AisPacketTags; import dk.dma.ais.packet.AisPacketTags.SourceType; import dk.dma.ais.sentence.SentenceException; import dk.dma.ais.sentence.Vdm; public class TransformTest { @Test public void cropVdmTest() throws SentenceException { String msg; msg = "$PGHP,1,2013,3,13,10,39,18,375,219,,2190047,1,4A*57\r\n"; msg += "\\g:1-2-0136,c:1363174860*24\\!BSVDM,2,1,4,B,53B>2V000000uHH4000@T4p4000000000000000S30C6340006h00000,0*4C\r\n"; msg += "\\g:2-2-0136*59\\!BSVDM,2,2,4,B,000000000000000,2*3A"; AisPacket packet = AisPacket.readFromString(msg); CropVdmTransformer tranformer = new CropVdmTransformer(); AisPacket newPacket = tranformer.transform(packet); List<String> lines = newPacket.getStringMessageLines(); Assert.assertEquals(lines.size(), 2); Assert.assertTrue(lines.get(0).startsWith("!BSVDM")); Assert.assertTrue(lines.get(1).startsWith("!BSVDM")); System.out.println("Cropped packet: " + newPacket.getStringMessage()); } @Test public void sourceTypeSatTest() throws SentenceException { Set<String> satGhRegions = new HashSet<>(); satGhRegions.add("802"); satGhRegions.add("804"); Set<String> satSources = new HashSet<>(); satSources.add("ORBCOMM999"); SourceTypeSatTransformer transformer = new SourceTypeSatTransformer(satGhRegions, satSources); String msg; msg = "$PGHP,1,2013,3,21,10,13,55,0,338,808,,1,05*2D\r\n"; msg += "\\g:1-2-9065,s:rORBCOMM000,c:1363860835*52\\!AIVDM,2,1,2,B,53P7rUP2=rKtli@SF20EHE:1<lThF22222222219JIIQ:4s:0LB0C@UDQp88,0*20\r\n"; msg += "\\g:2-2-9065*57\\!AIVDM,2,2,2,B,88888888880,2*25"; Assert.assertFalse(isSat(transformer, msg)); msg = "$PGHP,1,2013,3,20,21,0,39,0,338,808,,1,4B*65\r\n"; msg += "\\s:rORBCOMM999u,c:1363813239*54\\!AIVDM,1,1,,,19NSAwkOh1PHO:`34h4BLWs>00Rb,0*4B"; Assert.assertTrue(isSat(transformer, msg)); msg = "$PGHP,1,2013,3,21,10,35,54,607,211,802,,1,53*2A\r\n"; msg += "!ABVDM,1,1,8,A,13P;mNP000Q1MQFNnutbWb=f05B<,0*53"; Assert.assertTrue(isSat(transformer, msg)); } private boolean isSat(IAisPacketTransformer trans, String msg) throws SentenceException { AisPacket packet = AisPacket.readFromString(msg); packet = trans.transform(packet); AisPacketTags tagging = packet.getTags(); System.out.println("Sat transformed\n" + packet.getStringMessage()); System.out.println("cb: " + packet.getVdm().getCommentBlock()); System.out.println("tagging: " + tagging); return tagging.getSourceType() != null && tagging.getSourceType() == SourceType.SATELLITE; } @Test public void vdmVdoTest() throws SentenceException, AisMessageException, SixbitException { VdmVdoTransformer transformer = new VdmVdoTransformer(220431000); String msg; msg = "$PGHP,1,2013,3,13,10,39,18,375,219,,2190047,1,4A*57\r\n"; msg += "\\g:1-2-0136,c:1363174860*24\\!BSVDM,2,1,4,B,53B>2V000000uHH4000@T4p4000000000000000S30C6340006h00000,0*4C\r\n"; msg += "\\g:2-2-0136*59\\!BSVDM,2,2,4,B,000000000000000,2*3A"; AisPacket packet = AisPacket.readFromString(msg); packet = transformer.transform(packet); System.out.println("VDO packet:\n" + packet.getStringMessage()); Vdm vdm = packet.getVdm(); Assert.assertNotNull(vdm); AisMessage message = packet.getAisMessage(); Assert.assertNotNull(message); Assert.assertTrue(message.getVdm().isOwnMessage()); } }