Skip to content

Commit 852bbe7

Browse files
Merge pull request #123 from opencb/TASK-7786
Portpatch 6.1.0 -> 7.0.0-SNAPSHOT
2 parents 47e7c5a + 35366b5 commit 852bbe7

File tree

19 files changed

+392
-140
lines changed

19 files changed

+392
-140
lines changed

.github/workflows/deploy-maven-repository-workflow.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
3434
gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
3535
- name: Deploy to Maven Central repository
36-
run: mvn clean deploy -DskipTests -P deploy-maven ${{ inputs.maven_opts }} --no-transfer-progress
36+
run: mvn clean deploy -DskipTests -Pdeploy-maven ${{ inputs.maven_opts }} --no-transfer-progress
3737
env:
3838
MAVEN_NEXUS_USER: ${{ secrets.MAVEN_USER_TOKEN }}
3939
MAVEN_NEXUS_PASSWORD: ${{ secrets.MAVEN_PASSWORD_TOKEN }}
@@ -44,6 +44,6 @@ jobs:
4444
distribution: 'temurin'
4545
java-version: '8'
4646
- name: Deploy to GitHub Packages repository
47-
run: mvn clean deploy -DskipTests -P deploy-github ${{ inputs.maven_opts }} --no-transfer-progress
47+
run: mvn clean deploy -DskipTests -Pdeploy-github ${{ inputs.maven_opts }} --no-transfer-progress
4848
env:
4949
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/pull-request-approved.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
test:
3636
name: "Run all tests before merging"
3737
needs: calculate-xetabase-branch
38-
uses: opencb/java-common-libs/.github/workflows/test-xetabase-workflow.yml@develop
38+
uses: ./.github/workflows/test-xetabase-workflow.yml
3939
with:
4040
branch: ${{ needs.calculate-xetabase-branch.outputs.xetabase_branch }}
4141
task: ${{ github.event.pull_request.head.ref }}

.github/workflows/test-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ jobs:
3939
check_name: "Surefire tests report"
4040
report_paths: './**/surefire-reports/TEST-*.xml'
4141
commit: '${{ github.sha }}'
42-
fail_on_test_failures: true
42+
fail_on_test_failures: true

.github/workflows/test-xetabase-workflow.yml

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,6 @@ jobs:
7777
with:
7878
mongodb-version: 6.0
7979
mongodb-replica-set: rs-test
80-
- name: K8s Tunnel MongoDB
81-
run: |
82-
wget https://dl.k8s.io/release/v1.28.2/bin/linux/amd64/kubectl
83-
chmod +x ./kubectl
84-
echo "${{ secrets.AZURE_KUBE_CONFIG }}" > admin.conf
85-
./kubectl -n cellbase-db port-forward services/cellbase-rs0-svc 27018:27017 --kubeconfig ./admin.conf &
86-
- name: DockerHub login
87-
uses: docker/login-action@v3
88-
with:
89-
username: ${{ env.DOCKER_HUB_USER }}
90-
password: ${{ env.DOCKER_HUB_PASSWORD }}
9180
- name: Install sshpass
9281
run: sudo apt-get install sshpass
9382
- name: Add SSH Host to known_hosts
@@ -97,11 +86,11 @@ jobs:
9786
env:
9887
SSH_HOST: ${{ env.SSH_HOST }}
9988
SSH_PORT: ${{ env.SSH_PORT }}
100-
- name: Run all OpenCB Junit tests, ie. java-common-libs, biodata, cellbase, opencga and opencga-enterprise
89+
- name: Run all OpenCB Junit tests, ie. java-common-libs, biodata, opencga and opencga-enterprise
10190
run: |
10291
cd opencga-enterprise
10392
ln -s ../opencga opencga-home
104-
./build.sh -t -l runShortTests -b -s -T ${{ inputs.task }} -c localhost:27018 -H hdp3.1
93+
./build.sh -t -l runShortTests -b -s -T ${{ inputs.task }}
10594
- name: Upload reports results to Github
10695
uses: actions/upload-artifact@v4
10796
with:

commons-datastore/commons-datastore-core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
<artifactId>commons-datastore-core</artifactId>
1414
<packaging>jar</packaging>
1515

16+
<name>OpenCB commons-datastore-core project</name>
17+
<description>OpenCB commons project contains several Java libs for Bioinformatics</description>
18+
<url>http://www.opencb.org</url>
19+
1620
<dependencies>
1721
<dependency>
1822
<groupId>com.fasterxml.jackson.core</groupId>

commons-datastore/commons-datastore-core/src/main/java/org/opencb/commons/datastore/core/ObjectMap.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public class ObjectMap implements Map<String, Object>, Serializable {
3838

3939
private static final Pattern KEY_SPLIT_PATTERN = Pattern.compile("(^[^\\[\\].]+(?:\\[[^\\]]+\\])?)(?:\\.(.*))*");
4040
private static final Pattern LIST_FILTER_PATTERN = Pattern.compile("([^\\[\\]]+)\\[([^=]*?)(?:[=]?)([^=]+)\\]$");
41-
public static final Pattern COMMA_SEPARATED_LIST_SPLIT_PATTERN = Pattern.compile("((?:(?!,\\S).)+)+");
4241

4342
public ObjectMap() {
4443
objectMap = new LinkedHashMap<>();

commons-datastore/commons-datastore-core/src/test/java/org/opencb/commons/datastore/core/ObjectMapTest.java

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -263,35 +263,4 @@ public void testGetWithFilterFromList() {
263263
assertEquals("CGHI", objectMap.get("nestedList[nested.value=G].nested.list[id=Cghi].name"));
264264
}
265265

266-
@Test
267-
public void testPatternListSplit() {
268-
List<String> originalValues = Arrays.asList("disorder1", "disorder2, blabla", "disorder3");
269-
objectMap.put("key", StringUtils.join(originalValues, ","));
270-
objectMap.put("key1", "");
271-
objectMap.put("key2", "my value");
272-
objectMap.put("key3", Arrays.asList("1", "2"));
273-
objectMap.put("key4", Arrays.asList(1, 2));
274-
275-
List<String> values = objectMap.getAsStringList("key", ObjectMap.COMMA_SEPARATED_LIST_SPLIT_PATTERN);
276-
assertEquals(originalValues.size(), values.size());
277-
assertTrue(originalValues.containsAll(values));
278-
279-
values = objectMap.getAsStringList("key1", ObjectMap.COMMA_SEPARATED_LIST_SPLIT_PATTERN);
280-
assertEquals(1, values.size());
281-
assertEquals("", values.get(0));
282-
283-
values = objectMap.getAsStringList("key2", ObjectMap.COMMA_SEPARATED_LIST_SPLIT_PATTERN);
284-
assertEquals(1, values.size());
285-
assertEquals("my value", values.get(0));
286-
287-
values = objectMap.getAsStringList("key3", ObjectMap.COMMA_SEPARATED_LIST_SPLIT_PATTERN);
288-
assertEquals(2, values.size());
289-
assertEquals("1", values.get(0));
290-
assertEquals("2", values.get(1));
291-
292-
values = objectMap.getAsStringList("key4", ObjectMap.COMMA_SEPARATED_LIST_SPLIT_PATTERN);
293-
assertEquals(2, values.size());
294-
assertEquals("1", values.get(0));
295-
assertEquals("2", values.get(1));
296-
}
297266
}

commons-datastore/commons-datastore-mongodb/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
<artifactId>commons-datastore-mongodb</artifactId>
1414
<packaging>jar</packaging>
1515

16+
<name>OpenCB commons-datastore-mongodb project</name>
17+
<description>OpenCB commons project contains several Java libs for Bioinformatics</description>
18+
<url>http://www.opencb.org</url>
19+
1620
<dependencies>
1721
<dependency>
1822
<groupId>org.opencb.commons</groupId>

commons-datastore/commons-datastore-mongodb/src/main/java/org/opencb/commons/datastore/mongodb/MongoDBQueryUtils.java

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636

3737
import static com.mongodb.client.model.Aggregates.*;
3838
import static com.mongodb.client.model.Projections.*;
39+
import static org.opencb.commons.datastore.mongodb.MongoDBQueryUtils.Accumulator.*;
3940
import static org.opencb.commons.datastore.mongodb.MongoDBQueryUtils.Accumulator.bucket;
4041
import static org.opencb.commons.datastore.mongodb.MongoDBQueryUtils.Accumulator.count;
41-
import static org.opencb.commons.datastore.mongodb.MongoDBQueryUtils.Accumulator.*;
4242

4343
/**
4444
* Created by imedina on 17/01/16.
@@ -178,6 +178,53 @@ public static Bson createFilter(String mongoDbField, String queryParam, Query qu
178178
return filter;
179179
}
180180

181+
/**
182+
* Splits a string by the given separator, handling quoted values properly.
183+
* Quoted values can contain the separator character without being split.
184+
* Removes surrounding quotes and trims whitespace from each value.
185+
*
186+
* @param input the input string to split
187+
* @param separator the separator to split by ("," or ";")
188+
* @return list of trimmed, unquoted values
189+
*/
190+
public static List<String> smartSplit(String input, String separator) {
191+
List<String> result = new ArrayList<>();
192+
if (input == null || input.isEmpty()) {
193+
return result;
194+
}
195+
196+
boolean inQuotes = false;
197+
StringBuilder currentValue = new StringBuilder();
198+
199+
for (int i = 0; i < input.length(); i++) {
200+
char c = input.charAt(i);
201+
202+
if (c == '"') {
203+
inQuotes = !inQuotes;
204+
} else if (!inQuotes && input.substring(i).startsWith(separator)) {
205+
// Found separator outside quotes
206+
String value = currentValue.toString().trim();
207+
if (value.startsWith("\"") && value.endsWith("\"") && value.length() > 1) {
208+
value = value.substring(1, value.length() - 1);
209+
}
210+
result.add(value.trim());
211+
currentValue = new StringBuilder();
212+
i += separator.length() - 1; // Skip the separator
213+
} else {
214+
currentValue.append(c);
215+
}
216+
}
217+
218+
// Add the last value
219+
String value = currentValue.toString().trim();
220+
if (value.startsWith("\"") && value.endsWith("\"") && value.length() > 1) {
221+
value = value.substring(1, value.length() - 1);
222+
}
223+
result.add(value.trim());
224+
225+
return result;
226+
}
227+
181228
private static String getLogicalSeparator(LogicalOperator operator) {
182229
return (operator != null && operator.equals(LogicalOperator.AND)) ? AND : OR;
183230
}
@@ -258,8 +305,13 @@ protected static String getOp2(String op, String value) {
258305

259306
public static Bson createAutoFilter(String mongoDbField, String queryParam, Query query, QueryParam.Type type, LogicalOperator operator)
260307
throws NumberFormatException {
261-
262-
List<String> queryParamList = query.getAsStringList(queryParam, getLogicalSeparator(operator));
308+
List<String> queryParamList;
309+
String value = query.getString(queryParam);
310+
if (StringUtils.isNotEmpty(value) && value.contains("\"")) {
311+
queryParamList = smartSplit(value, getLogicalSeparator(operator));
312+
} else {
313+
queryParamList = query.getAsStringList(queryParam, getLogicalSeparator(operator));
314+
}
263315
return createAutoFilter(mongoDbField, queryParam, type, operator, queryParamList);
264316
}
265317

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.opencb.commons.datastore.mongodb;
2+
3+
import org.junit.Test;
4+
import java.util.List;
5+
import static org.junit.Assert.assertEquals;
6+
7+
public class SmartSplitTest {
8+
9+
@Test
10+
public void testSmartSplitWithQuotedCommaValues() {
11+
String input = "\"a \",\" b\",\" c \"";
12+
List<String> result = MongoDBQueryUtils.smartSplit(input, ",");
13+
14+
assertEquals(3, result.size());
15+
assertEquals("a", result.get(0));
16+
assertEquals("b", result.get(1));
17+
assertEquals("c", result.get(2));
18+
}
19+
20+
@Test
21+
public void testSmartSplitWithQuotedSemicolonValues() {
22+
String input = "\"a \";\" b\";\" c \"";
23+
List<String> result = MongoDBQueryUtils.smartSplit(input, ";");
24+
25+
assertEquals(3, result.size());
26+
assertEquals("a", result.get(0));
27+
assertEquals("b", result.get(1));
28+
assertEquals("c", result.get(2));
29+
}
30+
31+
@Test
32+
public void testSmartSplitWithNonQuotedValues() {
33+
String input = "a,b,c";
34+
List<String> result = MongoDBQueryUtils.smartSplit(input, ",");
35+
36+
assertEquals(3, result.size());
37+
assertEquals("a", result.get(0));
38+
assertEquals("b", result.get(1));
39+
assertEquals("c", result.get(2));
40+
}
41+
42+
@Test
43+
public void testSmartSplitWithNonQuotedValuesAndSpaces() {
44+
String input = "a, b,c ";
45+
List<String> result = MongoDBQueryUtils.smartSplit(input, ",");
46+
47+
assertEquals(3, result.size());
48+
assertEquals("a", result.get(0));
49+
assertEquals("b", result.get(1));
50+
assertEquals("c", result.get(2));
51+
}
52+
53+
@Test
54+
public void testSmartSplitWithMixedValues() {
55+
String input = "\"a, with comma\",b,\"c\"";
56+
List<String> result = MongoDBQueryUtils.smartSplit(input, ",");
57+
58+
assertEquals(3, result.size());
59+
assertEquals("a, with comma", result.get(0));
60+
assertEquals("b", result.get(1));
61+
assertEquals("c", result.get(2));
62+
}
63+
}

0 commit comments

Comments
 (0)