Skip to content

Commit

Permalink
Merge branch 'release/2.0.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
blavenie committed Feb 20, 2023
2 parents 7619cb0 + 34846de commit 367e5e5
Show file tree
Hide file tree
Showing 23 changed files with 186 additions and 32 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
<packaging>pom</packaging>
<name>SUMARiS</name>
<description>SUMARiS :: Maven parent</description>
Expand Down
2 changes: 1 addition & 1 deletion sumaris-core-shared/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>

<artifactId>sumaris-core-shared</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion sumaris-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>

<artifactId>sumaris-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -699,4 +699,12 @@ public boolean hasPropertyValueByProgramLabel(@NonNull String label, @NonNull Pr

return expectedValue.equals(value);
}


@Override
public String getPropertyValueByProgramLabel(@NonNull String label, @NonNull ProgramPropertyEnum property) {
return findByLabel(label)
.map(program -> program.getProperties().get(property.getLabel()))
.orElse(property.getDefaultValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,6 @@ default Specification<Program> hasAcquisitionLevelLabels(String... acquisitionLe

boolean hasPropertyValueByProgramId(Integer id, ProgramPropertyEnum property, String expectedValue);
boolean hasPropertyValueByProgramLabel(String label, ProgramPropertyEnum property, String expectedValue);

String getPropertyValueByProgramLabel(String label, ProgramPropertyEnum property);
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ public enum ProgramPropertyEnum implements Serializable {
TRIP_OPERATION_ALLOW_PARENT("sumaris.trip.operation.allowParent", Boolean.class, Boolean.FALSE.toString()),
TRIP_OPERATION_ENABLE_SAMPLE("sumaris.trip.operation.sample.enable", Boolean.class, Boolean.FALSE.toString()),

TRIP_BATCH_TAXON_NAME_ENABLE("sumaris.trip.operation.batch.taxonName.enable",
Boolean.class,
Boolean.TRUE.toString()),
TRIP_BATCH_TAXON_NAME_ENABLE("sumaris.trip.operation.batch.taxonName.enable", Boolean.class, Boolean.TRUE.toString()),

TRIP_BATCH_MEASURE_INDIVIDUAL_TAXON_NAME_ENABLE("sumaris.trip.operation.batch.individual.taxonName.enable",
Boolean.class, Boolean.TRUE.toString()),

PROGRAM_STRATEGY_DEPARTMENT_ENABLE("sumaris.program.strategy.department.enable", Boolean.class, Boolean.FALSE.toString())
PROGRAM_STRATEGY_DEPARTMENT_ENABLE("sumaris.program.strategy.department.enable", Boolean.class, Boolean.FALSE.toString()),

TRIP_EXTRACTION_SAMPLING_METHOD("sumaris.trip.extraction.sampling.method", String.class, "Observer")

;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ List<ProgramVO> findByFilter(@Nullable ProgramFilterVO filter,
@Transactional(readOnly = true)
boolean hasPropertyValueByProgramLabel(String label, ProgramPropertyEnum property, String expectedValue);

@Transactional(readOnly = true)
String getPropertyValueByProgramLabel(String label, ProgramPropertyEnum property);

@Transactional(readOnly = true)
List<ReferentialVO> getAcquisitionLevelsById(int id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,11 @@ public boolean hasPropertyValueByProgramLabel(@NonNull String label, @NonNull Pr
return programRepository.hasPropertyValueByProgramLabel(label, property, expectedValue);
}

@Override
public String getPropertyValueByProgramLabel(String label, ProgramPropertyEnum property) {
return programRepository.getPropertyValueByProgramLabel(label, property);
}

@Override
public boolean hasPropertyValueByProgramId(@NonNull Integer id, @NonNull ProgramPropertyEnum property, @NonNull String expectedValue){
return programRepository.hasPropertyValueByProgramId(id, property, expectedValue);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.3.xsd"
logicalFilePath="https://github.com/sumaris-net/sumaris-pod/blob/master/sumaris-core/src/main/resources/net/sumaris/core/db/changelog/hsqldb/adap/db-changelog-2.0.1.xml">

<property name="sqlCheck.empty.sql" value="SELECT count(*) FROM STATUS"/>
<property name="sqlCheck.adap.sql" value="SELECT COUNT(*) FROM PROGRAM WHERE LABEL = 'ADAP-MER'"/>
<property name="sqlCheck.adap.expectedResult" value="1"/>

<preConditions onFail="WARN" onFailMessage="Database instance is not a ADAP database instance! Do not include this changelog file in the master file">
<or>
<!-- Test if database is empty -->
<sqlCheck expectedResult="0">${sqlCheck.empty.sql}</sqlCheck>
<!-- OR if expected production database -->
<sqlCheck expectedResult="${sqlCheck.adap.expectedResult}">${sqlCheck.adap.sql}</sqlCheck>
</or>
</preConditions>

<!-- Add new option to set trips extraction sampling method, in RDB/COST extraction -->
<changeSet author="[email protected]" id="1648229099998-402" runOnChange="true">
<preConditions onFail="MARK_RAN">
<and>
<sqlCheck expectedResult="${sqlCheck.adap.expectedResult}">${sqlCheck.adap.sql}</sqlCheck>
<sqlCheck expectedResult="0">
SELECT COUNT(*) FROM PROGRAM_PROPERTY WHERE LABEL in (
'sumaris.trip.extraction.sampling.method')
AND PROGRAM_FK = (SELECT ID FROM PROGRAM WHERE LABEL = 'ADAP-MER')</sqlCheck>
</and>
</preConditions>
<insert tableName="PROGRAM_PROPERTY">
<column name="ID" valueComputed="NEXT VALUE FOR PROGRAM_PROPERTY_SEQ"/>
<column name="LABEL">sumaris.trip.extraction.sampling.method</column>
<column name="NAME">SelfSampling</column>
<column name="PROGRAM_FK" valueComputed="(SELECT ID FROM PROGRAM WHERE LABEL = 'ADAP-MER')"/>
<column name="STATUS_FK" valueNumeric="1"/>
<column name="CREATION_DATE" valueComputed="sysdate"/>
<column name="UPDATE_DATE" valueComputed="current_timestamp"/>
</insert>
</changeSet>
</databaseChangeLog>
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
~ #%L
~ SUMARiS
~ %%
~ Copyright (C) 2019 SUMARiS Consortium
~ %%
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as
~ published by the Free Software Foundation, either version 3 of the
~ License, or (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public
~ License along with this program. If not, see
~ <http://www.gnu.org/licenses/gpl-3.0.html>.
~ #L%
-->

<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"
logicalFilePath="https://github.com/sumaris-net/sumaris-pod/blob/master/sumaris-core/src/main/resources/net/sumaris/core/db/changelog/hsqldb/db-changelog-2.0.1.xml">

<property name="sqlCheck.not_empty.sql" value="SELECT COUNT(*) FROM STATUS WHERE ID=1"/>
<property name="sqlCheck.not_empty.expectedResult" value="1"/>


<!-- update SYSTEM_VERSION -->
<changeSet author="[email protected]" id="1648229099998-200" runOnChange="true">
<delete tableName="SYSTEM_VERSION">
<where>LABEL='2.0.1'</where>
</delete>
<insert tableName="SYSTEM_VERSION">
<column name="ID" valueComputed="NEXT VALUE FOR SYSTEM_VERSION_SEQ"/>
<column name="LABEL">2.0.1</column>
<column name="DESCRIPTION">
- Add an option for ADAP;
</column>
<column name="CREATION_DATE" valueComputed="current_timestamp"/>
<column name="UPDATE_DATE" valueComputed="current_timestamp"/>
<column name="COMMENTS">
- Add an option for ADAP;
</column>
</insert>
</changeSet>
</databaseChangeLog>
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,9 @@
<include relativeToChangelogFile="true" file="sumaris/db-changelog-1.35.4.xml"/>
<include relativeToChangelogFile="true" file="adap/db-changelog-1.35.4.xml"/>

<include relativeToChangelogFile="true" file="db-changelog-2.0.1.xml"/>
<include relativeToChangelogFile="true" file="adap/db-changelog-2.0.1.xml"/>

<!-- Refresh schema objects (functions, procedures, triggers, ...) -->
<include relativeToChangelogFile="true" file="db-changelog-refresh.xml"/>

Expand Down
2 changes: 1 addition & 1 deletion sumaris-extraction/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>

<artifactId>sumaris-extraction</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,15 @@ protected int execute(C context, XMLQuery xmlQuery) {
return queryUpdate(sql);
}

protected int execute(C context, String sql) {

// Do column names replacement (e.g. see FREE extraction)
if (context != null) {
sql = Daos.sqlReplaceColumnNames(sql, context.getColumnNamesMapping(), false);
}

return queryUpdate(sql);
}

protected String getQueryFullName(@NonNull C context, String queryName) {
return getQueryFullName(context.getFormat(), context.getVersion(), queryName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@
import com.google.common.collect.Maps;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import net.sumaris.core.dao.technical.schema.SumarisTableMetadata;
import net.sumaris.core.exception.DataNotFoundException;
import net.sumaris.core.exception.SumarisTechnicalException;
import net.sumaris.core.model.administration.programStrategy.AcquisitionLevelEnum;
import net.sumaris.core.model.administration.programStrategy.ProgramPropertyEnum;
import net.sumaris.core.model.referential.location.LocationLevel;
import net.sumaris.core.model.referential.location.LocationLevelEnum;
import net.sumaris.core.model.referential.pmfm.PmfmEnum;
Expand Down Expand Up @@ -237,12 +239,16 @@ protected long createTripTable(C context) {

XMLQuery xmlQuery = createTripQuery(context);

// aggregate insertion
// execute insertion
execute(context, xmlQuery);
long count = countFrom(context.getTripTableName());

// Clean row using generic filter

if (count > 0) {
// Update self sampling columns
updateTripSamplingMethod(context);

// Clean row using generic filter
count -= cleanRow(context.getTripTableName(), context.getFilter(), context.getTripSheetName());
}

Expand All @@ -268,6 +274,7 @@ protected XMLQuery createTripQuery(C context) {
xmlQuery.bind("nbOperationPmfmId", String.valueOf(PmfmEnum.NB_OPERATION.getId()));
Integer countryLocationLevelId = LocationLevelEnum.COUNTRY.getLabel() != null ? getReferentialIdByUniqueLabel(LocationLevel.class, LocationLevelEnum.COUNTRY.getLabel()) : LocationLevelEnum.COUNTRY.getId();
xmlQuery.bind("countryLocationLevelId", String.valueOf(countryLocationLevelId));
xmlQuery.bind("samplingMethod", ProgramPropertyEnum.TRIP_EXTRACTION_SAMPLING_METHOD.getDefaultValue());

// Date filters
xmlQuery.setGroup("startDateFilter", context.getStartDate() != null);
Expand Down Expand Up @@ -586,18 +593,6 @@ protected List<String> getTripProgramLabels(C context) {
return result;
}

private List<ExtractionPmfmColumnVO> toPmfmColumnVO(List<DenormalizedPmfmStrategyVO> pmfmStrategies) {

Set<String> acquisitionLevels = Beans.collectDistinctProperties(pmfmStrategies, DenormalizedPmfmStrategyVO.Fields.ACQUISITION_LEVEL);
// Create prefix map, by acquisition level (used to generate the pmfm alias)
Map<String, String> aliasPrefixesByAcquisitionLevel = buildAcquisitionLevelPrefixes(acquisitionLevels);

return pmfmStrategies.stream().map(source ->
toPmfmColumnVO(source, aliasPrefixesByAcquisitionLevel.get(source.getAcquisitionLevel()))
)
.collect(Collectors.toList());
}

private ExtractionPmfmColumnVO toPmfmColumnVO(DenormalizedPmfmStrategyVO source, String aliasPrefix) {
ExtractionPmfmColumnVO target = new ExtractionPmfmColumnVO();

Expand Down Expand Up @@ -641,4 +636,33 @@ protected String buildAlias(String string, String separator) {
Arrays.stream(string.split(separator)).forEach(part -> result.append(part, 0, 1));
return result.toString();
}

/**
* Read the trip table, and modify 'sampling_method' depending on the program properties found
* @param context
* @return
*/
protected void updateTripSamplingMethod(C context) {
try {
List<String> programLabels = getTripProgramLabels(context);
String tripTableName = context.getTripTableName();
SumarisTableMetadata table = databaseMetadata.getTable(tripTableName);
if (table.hasColumn(RdbSpecification.COLUMN_SAMPLING_METHOD)) {
programLabels.forEach(programLabel -> {
String samplingMethod = this.programService.getPropertyValueByProgramLabel(programLabel, ProgramPropertyEnum.TRIP_EXTRACTION_SAMPLING_METHOD);
if (!Objects.equals(samplingMethod, ProgramPropertyEnum.TRIP_EXTRACTION_SAMPLING_METHOD.getDefaultValue())) {
String sql = String.format("UPDATE %s SET %s='%s' WHERE PROJECT='%s'",
tripTableName,
RdbSpecification.COLUMN_SAMPLING_METHOD,
samplingMethod,
programLabel);
execute(context, sql);
}
});
}
} catch (Exception e) {
log.error("Error while updating TR 'sampling_method' column: " + e.getMessage(), e);
// Continue
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ public interface RdbSpecification {
String COLUMN_VESSEL_IDENTIFIER = "vessel_identifier";
String COLUMN_TRIP_CODE = "trip_code";

String COLUMN_SAMPLING_METHOD = "sampling_method";

String COLUMN_GEAR_TYPE = "gear_type";
String COLUMN_MESH_SIZE = "mesh_size";
String MAIN_FISHING_DEPTH = "main_fishing_depth";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
<!-- rename TIME in FISHING_TIME -->
<select alias="FISHING_TIME" type="text">TO_CHAR(COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), 'HH24:MI')</select>
<!-- rename FISHING_TIME in FISHING_DURATION -->
<select alias="FISHING_DURATION" type="number" dbms="hsqldb">EXTRACT(MINUTE FROM (COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)))</select>
<select alias="FISHING_DURATION" type="number" dbms="oracle">FLOOR((COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)) * 24 * 60)</select>
<select alias="FISHING_DURATION" type="number" dbms="hsqldb">DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>
<select alias="FISHING_DURATION" type="number" dbms="oracle">CAST(FLOOR((COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)) * 24 * 60) as INTEGER)</select>
<select alias="FISHING_DURATION" type="number" dbms="pgsql">F_DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>

<select alias="SELECTION_DEVICE_NAME" type="text"><![CDATA[
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
)]]></select>

<select alias="DATE_FIN" type="text">TO_CHAR(COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), 'DD-MM-YYYY HH24:MI:SS')</select>
<select alias="DUREE_OP" type="number" dbms="hsqldb">EXTRACT(MINUTE FROM (COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)))</select>
<select alias="DUREE_OP" type="number" dbms="oracle">FLOOR((COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)) * 24 * 60)</select>
<select alias="DUREE_OP" type="number" dbms="hsqldb">DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>
<select alias="DUREE_OP" type="number" dbms="oracle">CAST(FLOOR((COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)) * 24 * 60) as INTEGER)</select>
<select alias="DUREE_OP" type="number" dbms="pgsql">F_DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>
<select alias="LAT_DEB_OP" type="number">P_START.LATITUDE</select>
<select alias="LONG_DEB_OP" type="number">P_START.LONGITUDE</select>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
<select alias="TIME" group="time" type="text">TO_CHAR(COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), 'HH24:MI')</select>

<!-- FISHING TIME -->
<select alias="FISHING_TIME" group="fishingTime" type="number" dbms="hsqldb">EXTRACT(MINUTE FROM (COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)))</select>
<select alias="FISHING_TIME" group="fishingTime" type="number" dbms="hsqldb">DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>
<select alias="FISHING_TIME" group="fishingTime" type="number" dbms="oracle">CAST(FLOOR((COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME) - COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME)) * 24 * 60) as INTEGER)</select>
<select alias="FISHING_TIME" group="fishingTime" type="number" dbms="pgsql">F_DATEDIFF('minute', COALESCE(O.FISHING_START_DATE_TIME, O.START_DATE_TIME), COALESCE(O.FISHING_END_DATE_TIME, O.END_DATE_TIME))</select>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@

<select alias="VESSEL_IDENTIFIER" type="number">T.VESSEL_FK</select> <!-- TODO à anonymiser (hash ?)-->
<select alias="SAMPLING_COUNTRY" type="text">COALESCE(DL.LABEL, PL.LABEL)</select>
<select alias="SAMPLING_METHOD" type="text">'Observer'</select><!-- TODO: ADAP - find it from a project's PMFM of type "Hidden" ? -->
<select alias="SAMPLING_METHOD" type="text">CASE UPPER('&amp;samplingMethod')
WHEN 'OBSERVER' THEN 'Observer'
WHEN 'SELFSAMPLING' THEN 'SelfSampling'
ELSE 'Observer'
END</select>

<from alias="T">TRIP</from>

Expand Down
2 changes: 1 addition & 1 deletion sumaris-importation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<artifactId>sumaris-pod</artifactId>
<groupId>net.sumaris</groupId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion sumaris-rdf/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<artifactId>sumaris-pod</artifactId>
<groupId>net.sumaris</groupId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion sumaris-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>

<artifactId>sumaris-server</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion sumaris-test-shared/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>net.sumaris</groupId>
<artifactId>sumaris-pod</artifactId>
<version>2.0.0</version>
<version>2.0.1</version>
</parent>

<artifactId>sumaris-test-shared</artifactId>
Expand Down

0 comments on commit 367e5e5

Please sign in to comment.