Skip to content

Commit 1e3f925

Browse files
author
gmanifavas
committed
[UNIONVMS-5040] Rules for VesselTransportMeans
1 parent 60367a7 commit 1e3f925

9 files changed

Lines changed: 276 additions & 14 deletions

File tree

LIQUIBASE/changelog/v3.4/db-changelog-UNIONVMS-4660.xml

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -721,4 +721,168 @@
721721
</delete>
722722
</rollback>
723723
</changeSet>
724+
725+
<changeSet id="UNIONVMS-4660-update-VP-L03-00-0110" author="gmanifavas">
726+
727+
<insert tableName="rule">
728+
<column name="template_id" value="3004" />
729+
<column name="property_names" value="RegistrationVesselCountryId" />
730+
<column name="note" value="" />
731+
<column name="level" value="L03" />
732+
<column name="error_type" value="WARNING" />
733+
<column name="disabled" value="false" />
734+
<column name="br_id" value="VP-L03-00-0110" />
735+
<column name="rule_id" value="30110"/>
736+
</insert >
737+
<insert tableName="context_expression">
738+
<column name="expression" value="hasSchemeId(ids, &quot;CFR&quot;) &amp;&amp; hasExistingAsset(asset) &amp;&amp;
739+
registrationVesselCountry != null &amp;&amp; registrationVesselCountry.getID() !=null &amp;&amp;
740+
!mdrService.isPresentInMDRList(&quot;MEMBER_STATE&quot;, registrationVesselCountry.getID().getValue(), creationDateTime)"/>
741+
<column name="failure_message" value="CFR provided but the vessel is not found in the vessel register or the information is inconsistent."/>
742+
<column name="context" value="EU"/>
743+
<column name="rule_id" value="30110"/>
744+
<column name="id" value="30110"/>
745+
</insert >
746+
747+
<rollback>
748+
<delete tableName="context_expression">
749+
<where>rule_id = 30110</where>
750+
</delete>
751+
<delete tableName="rule">
752+
<where>br_id = 'VP-L03-00-0110'</where>
753+
</delete>
754+
</rollback>
755+
</changeSet>
756+
757+
<changeSet id="UNIONVMS-4660-update-VP-L03-00-0111" author="gmanifavas">
758+
759+
<insert tableName="rule">
760+
<column name="template_id" value="3004" />
761+
<column name="property_names" value="RegistrationVesselCountryId" />
762+
<column name="note" value="" />
763+
<column name="level" value="L03" />
764+
<column name="error_type" value="WARNING" />
765+
<column name="disabled" value="false" />
766+
<column name="br_id" value="VP-L03-00-0111" />
767+
<column name="rule_id" value="30111"/>
768+
</insert >
769+
<insert tableName="context_expression">
770+
<column name="expression" value="(hasSchemeId(ids, &quot;IRCS&quot;) || hasSchemeId(ids, &quot;EXT_MARK&quot;)) &amp;&amp;
771+
hasExistingAsset(asset) &amp;&amp;
772+
registrationVesselCountry != null &amp;&amp; registrationVesselCountry.getID() !=null &amp;&amp;
773+
!mdrService.isPresentInMDRList(&quot;MEMBER_STATE&quot;, registrationVesselCountry.getID().getValue(), creationDateTime)"/>
774+
<column name="failure_message" value="IRCS or External Marking provided but the vessel is not found in the vessel register or the information is inconsistent."/>
775+
<column name="context" value="EU"/>
776+
<column name="rule_id" value="30111"/>
777+
<column name="id" value="30111"/>
778+
</insert >
779+
780+
<rollback>
781+
<delete tableName="context_expression">
782+
<where>rule_id = 30111</where>
783+
</delete>
784+
<delete tableName="rule">
785+
<where>br_id = 'VP-L03-00-0111'</where>
786+
</delete>
787+
</rollback>
788+
</changeSet>
789+
790+
<changeSet id="UNIONVMS-4660-update-VP-L03-00-0112" author="gmanifavas">
791+
792+
<insert tableName="rule">
793+
<column name="template_id" value="3004" />
794+
<column name="property_names" value="RegistrationVesselCountryId" />
795+
<column name="note" value="" />
796+
<column name="level" value="L03" />
797+
<column name="error_type" value="WARNING" />
798+
<column name="disabled" value="false" />
799+
<column name="br_id" value="VP-L03-00-0112" />
800+
<column name="rule_id" value="30112"/>
801+
</insert >
802+
<insert tableName="context_expression">
803+
<column name="expression" value="hasSchemeId(ids, &quot;UVI&quot;) &amp;&amp;
804+
hasExistingAsset(asset) &amp;&amp;
805+
registrationVesselCountry != null &amp;&amp; registrationVesselCountry.getID() !=null &amp;&amp;
806+
!mdrService.isPresentInMDRList(&quot;MEMBER_STATE&quot;, registrationVesselCountry.getID().getValue(), creationDateTime)"/>
807+
<column name="failure_message" value="UVI is provided but the vessel is not found in the vessel register or the information is inconsistent."/>
808+
<column name="context" value="EU"/>
809+
<column name="rule_id" value="30112"/>
810+
<column name="id" value="30112"/>
811+
</insert >
812+
813+
<rollback>
814+
<delete tableName="context_expression">
815+
<where>rule_id = 30112</where>
816+
</delete>
817+
<delete tableName="rule">
818+
<where>br_id = 'VP-L03-00-0112'</where>
819+
</delete>
820+
</rollback>
821+
</changeSet>
822+
823+
<changeSet id="UNIONVMS-4660-update-VP-L03-00-0113" author="gmanifavas">
824+
825+
<insert tableName="rule">
826+
<column name="template_id" value="3004" />
827+
<column name="property_names" value="RegistrationVesselCountryId" />
828+
<column name="note" value="" />
829+
<column name="level" value="L03" />
830+
<column name="error_type" value="WARNING" />
831+
<column name="disabled" value="false" />
832+
<column name="br_id" value="VP-L03-00-0113" />
833+
<column name="rule_id" value="30113"/>
834+
</insert >
835+
<insert tableName="context_expression">
836+
<column name="expression" value="hasSchemeId(ids, &quot;ICCAT&quot;) &amp;&amp;
837+
hasExistingAsset(asset) &amp;&amp;
838+
registrationVesselCountry != null &amp;&amp; registrationVesselCountry.getID() !=null &amp;&amp;
839+
!mdrService.isPresentInMDRList(&quot;MEMBER_STATE&quot;, registrationVesselCountry.getID().getValue(), creationDateTime)"/>
840+
<column name="failure_message" value="ICCAT vessel ID is provided but the vessel is not found in the vessel register or the information is inconsistent."/>
841+
<column name="context" value="EU"/>
842+
<column name="rule_id" value="30113"/>
843+
<column name="id" value="30113"/>
844+
</insert >
845+
846+
<rollback>
847+
<delete tableName="context_expression">
848+
<where>rule_id = 30113</where>
849+
</delete>
850+
<delete tableName="rule">
851+
<where>br_id = 'VP-L03-00-0113'</where>
852+
</delete>
853+
</rollback>
854+
</changeSet>
855+
856+
<changeSet id="UNIONVMS-4660-update-VP-L03-00-0114" author="gmanifavas">
857+
858+
<insert tableName="rule">
859+
<column name="template_id" value="3004" />
860+
<column name="property_names" value="RegistrationVesselCountryId" />
861+
<column name="note" value="" />
862+
<column name="level" value="L03" />
863+
<column name="error_type" value="WARNING" />
864+
<column name="disabled" value="false" />
865+
<column name="br_id" value="VP-L03-00-0114" />
866+
<column name="rule_id" value="30114"/>
867+
</insert >
868+
<insert tableName="context_expression">
869+
<column name="expression" value="hasSchemeId(ids, &quot;GFCM&quot;) &amp;&amp;
870+
hasExistingAsset(asset) &amp;&amp;
871+
registrationVesselCountry != null &amp;&amp; registrationVesselCountry.getID() !=null &amp;&amp;
872+
!mdrService.isPresentInMDRList(&quot;MEMBER_STATE&quot;, registrationVesselCountry.getID().getValue(), creationDateTime)"/>
873+
<column name="failure_message" value="GFCM vessel ID is provided but the vessel is not found in the vessel register or the information is inconsistent."/>
874+
<column name="context" value="EU"/>
875+
<column name="rule_id" value="30114"/>
876+
<column name="id" value="30114"/>
877+
</insert >
878+
879+
<rollback>
880+
<delete tableName="context_expression">
881+
<where>rule_id = 30114</where>
882+
</delete>
883+
<delete tableName="rule">
884+
<where>br_id = 'VP-L03-00-0114'</where>
885+
</delete>
886+
</rollback>
887+
</changeSet>
724888
</databaseChangeLog>

service/src/main/java/eu/europa/ec/fisheries/uvms/rules/service/bean/movement/FLUXVesselPositionMapper.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import un.unece.uncefact.data.standard.unqualifieddatatype._18.MeasureType;
3434

3535
import java.util.ArrayList;
36+
import java.util.Collections;
3637
import java.util.HashMap;
3738
import java.util.List;
3839
import java.util.Map;
@@ -59,7 +60,7 @@ public class FLUXVesselPositionMapper {
5960
* @param registerClassName
6061
* @return
6162
*/
62-
public static List<RawMovementType> mapToRawMovementTypes(FLUXVesselPositionMessage fluxVesselPositionMessage, String registerClassName, String pluginType, Map<String, MovementTypeType> mapToMovementType) {
63+
public static List<RawMovementType> mapToRawMovementTypes(FLUXVesselPositionMessage fluxVesselPositionMessage, MovementVesselMappingContext ctx, String registerClassName, String pluginType, Map<String, MovementTypeType> mapToMovementType) {
6364
VesselTransportMeansType positionReport = fluxVesselPositionMessage.getVesselTransportMeans();
6465
List<RawMovementType> rowMovements = new ArrayList<>();
6566
for (VesselPositionEventType col : positionReport.getSpecifiedVesselPositionEvents()) {
@@ -76,8 +77,25 @@ public static List<RawMovementType> mapToRawMovementTypes(FLUXVesselPositionMess
7677
rawMovement.setPluginName(registerClassName);
7778
rawMovement.setDateRecieved(DateUtils.getNowDateUTC());
7879
rowMovements.add(rawMovement);
80+
if(ctx != null) {
81+
ctx.put(positionReport, rawMovement);
82+
}
7983
}
8084
return rowMovements;
85+
}
86+
87+
public static List<RawMovementType> mapToRawMovementTypesForEmptyMessage(FLUXVesselPositionMessage fluxVesselPositionMessage, String registerClassName, String pluginType, Map<String, MovementTypeType> mapToMovementType) {
88+
VesselTransportMeansType positionReport = fluxVesselPositionMessage.getVesselTransportMeans();
89+
MovementBaseType baseMovement = mapResponseForEmptyMovement(positionReport,pluginType ,mapToMovementType);
90+
RawMovementType rawMovement = MovementMapper.getInstance().getMapper().map(baseMovement, RawMovementType.class);
91+
final eu.europa.ec.fisheries.schema.rules.asset.v1.AssetId assetId = rawMovement.getAssetId();
92+
if (assetId != null && assetId.getAssetIdList() != null) {
93+
assetId.getAssetIdList().addAll(MovementMapper.mapAssetIdList(baseMovement.getAssetId().getAssetIdList()));
94+
}
95+
rawMovement.setPluginType(PluginType.FLUX.name());
96+
rawMovement.setPluginName(registerClassName);
97+
rawMovement.setDateRecieved(DateUtils.getNowDateUTC());
98+
return Collections.singletonList(rawMovement);
8199
}
82100

83101
private static MovementBaseType mapResponse(VesselPositionEventType response, VesselTransportMeansType report, String pluginType, Map<String, MovementTypeType> mapToMovementType) {
@@ -98,6 +116,18 @@ private static MovementBaseType mapResponse(VesselPositionEventType response, Ve
98116
return movement;
99117
}
100118

119+
private static MovementBaseType mapResponseForEmptyMovement(VesselTransportMeansType report, String pluginType, Map<String, MovementTypeType> mapToMovementType) {
120+
MovementBaseType movement = new MovementBaseType();
121+
HashMap<String, String> extractAssetIds = extractAssetIds(report.getIDS());
122+
movement.setAssetId(mapToAssetId(extractAssetIds));
123+
movement.setExternalMarking(extractAssetIds.get(ASSET_EXT_MARKING_CODE));
124+
movement.setIrcs(extractAssetIds.get(ASSET_IRCS_CODE));
125+
setFlagState(movement, report.getRegistrationVesselCountry());
126+
movement.setComChannelType(MovementComChannelType.FLUX);
127+
movement.setSource(MovementSourceType.MANUAL.name().equals(pluginType)? MovementSourceType.MANUAL : MovementSourceType.OTHER);
128+
return movement;
129+
}
130+
101131
private static void setFlagState(MovementBaseType movement, VesselCountryType registrationVesselCountry) {
102132
if (registrationVesselCountry != null && registrationVesselCountry.getID() != null) {
103133
movement.setFlagState(registrationVesselCountry.getID().getValue());
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package eu.europa.ec.fisheries.uvms.rules.service.bean.movement;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import eu.europa.ec.fisheries.schema.rules.movement.v1.RawMovementType;
7+
import eu.europa.ec.fisheries.wsdl.asset.types.Asset;
8+
import un.unece.uncefact.data.standard.reusableaggregatebusinessinformationentity._18.VesselTransportMeansType;
9+
10+
public class MovementVesselMappingContext {
11+
12+
private Map<VesselTransportMeansType, RawMovementType> vesselTransportMeansToRawMovement = new HashMap<>();
13+
14+
private Map<RawMovementType, Asset> rawMovementToAsset = new HashMap<>();
15+
16+
public void put(VesselTransportMeansType vesselTransportMeansType, RawMovementType rawMovementType) {
17+
vesselTransportMeansToRawMovement.put(vesselTransportMeansType, rawMovementType);
18+
}
19+
20+
public void put(RawMovementType rawMovementType, Asset asset) {
21+
rawMovementToAsset.put(rawMovementType, asset);
22+
}
23+
24+
public RawMovementType getRawMovement(VesselTransportMeansType vesselTransportMeansType) {
25+
return vesselTransportMeansToRawMovement.get(vesselTransportMeansType);
26+
}
27+
28+
public Asset getAsset(RawMovementType rawMovementType) {
29+
return rawMovementToAsset.get(rawMovementType);
30+
}
31+
}

0 commit comments

Comments
 (0)