Skip to content

Commit d4dbd3a

Browse files
committed
#11710 add search term to already linked
1 parent eb4ed35 commit d4dbd3a

5 files changed

Lines changed: 64 additions & 8 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/DatasetLinkingDataverse.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import jakarta.persistence.Id;
1010
import jakarta.persistence.Index;
1111
import jakarta.persistence.JoinColumn;
12+
import jakarta.persistence.NamedNativeQuery;
1213
import jakarta.persistence.NamedQueries;
1314
import jakarta.persistence.NamedQuery;
1415
import jakarta.persistence.OneToOne;
@@ -35,6 +36,18 @@
3536
@NamedQuery(name = "DatasetLinkingDataverse.findIdsByLinkingDataverseId",
3637
query = "SELECT o.dataset.id FROM DatasetLinkingDataverse AS o WHERE o.linkingDataverse.id = :linkingDataverseId")
3738
})
39+
40+
@NamedNativeQuery(
41+
name = "DatasetLinkingDataverse.findByDatasetIdAndLinkingDataverseName",
42+
query = """
43+
select o.linkingDataverse_id from DatasetLinkingDataverse as o
44+
LEFT JOIN dataverse dv ON dv.id = o.linkingDataverse_id
45+
WHERE o.dataset_id =? AND ((LOWER(dv.name) LIKE ? and ((SUBSTRING(LOWER(dv.name),0,(LENGTH(dv.name)-9)) LIKE ?)
46+
or (SUBSTRING(LOWER(dv.name),0,(LENGTH(dv.name)-9)) LIKE ?)))
47+
or (LOWER(dv.name) NOT LIKE ? and ((LOWER(dv.name) LIKE ?)
48+
or (LOWER(dv.name) LIKE ?))))"""
49+
)
50+
3851
public class DatasetLinkingDataverse implements Serializable {
3952
private static final long serialVersionUID = 1L;
4053
@Id

src/main/java/edu/harvard/iq/dataverse/DatasetLinkingServiceBean.java

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66
package edu.harvard.iq.dataverse;
77

8+
import jakarta.ejb.EJB;
89
import java.util.ArrayList;
910
import java.util.List;
1011
import java.util.logging.Logger;
@@ -27,6 +28,9 @@ public class DatasetLinkingServiceBean implements java.io.Serializable {
2728
@PersistenceContext(unitName = "VDCNet-ejbPU")
2829
private EntityManager em;
2930

31+
@EJB
32+
DataverseServiceBean dataverseService;
33+
3034

3135

3236
public List<Dataset> findLinkedDatasets(Long dataverseId) {
@@ -40,13 +44,44 @@ public List<Dataset> findLinkedDatasets(Long dataverseId) {
4044
}
4145

4246
public List<Dataverse> findLinkingDataverses(Long datasetId) {
47+
return findLinkingDataverses(datasetId, "");
48+
}
49+
50+
public List<Dataverse> findLinkingDataverses(Long datasetId, String searchTerm) {
4351
List<Dataverse> retList = new ArrayList<>();
44-
TypedQuery<DatasetLinkingDataverse> typedQuery = em.createNamedQuery("DatasetLinkingDataverse.findByDatasetId", DatasetLinkingDataverse.class)
45-
.setParameter("datasetId", datasetId);
46-
for (DatasetLinkingDataverse datasetLinkingDataverse : typedQuery.getResultList()) {
47-
retList.add(datasetLinkingDataverse.getLinkingDataverse());
52+
if (searchTerm == null || searchTerm.isEmpty()) {
53+
TypedQuery<DatasetLinkingDataverse> typedQuery = em.createNamedQuery("DatasetLinkingDataverse.findByDatasetId", DatasetLinkingDataverse.class)
54+
.setParameter("datasetId", datasetId);
55+
for (DatasetLinkingDataverse datasetLinkingDataverse : typedQuery.getResultList()) {
56+
retList.add(datasetLinkingDataverse.getLinkingDataverse());
57+
}
58+
return retList;
59+
60+
} else {
61+
62+
String pattern = searchTerm.toLowerCase();
63+
64+
String pattern1 = pattern + "%";
65+
String pattern2 = "% " + pattern + "%";
66+
67+
// Adjust the queries for very short, 1 and 2-character patterns:
68+
if (pattern.length() == 1) {
69+
pattern1 = pattern;
70+
pattern2 = pattern + " %";
71+
}
72+
System.out.print("pattern1: " + pattern1);
73+
System.out.print("pattern2: " + pattern2);
74+
TypedQuery<Long> typedQuery
75+
= em.createNamedQuery("DatasetLinkingDataverse.findByDatasetIdAndLinkingDataverseName", Long.class)
76+
.setParameter(1, datasetId).setParameter(2, "%dataverse").setParameter(3, pattern1)
77+
.setParameter(4, pattern2).setParameter(5, "%dataverse").setParameter(6, pattern1).setParameter(7, pattern2);
78+
79+
for (Long id : typedQuery.getResultList()) {
80+
retList.add(dataverseService.find(id));
81+
}
82+
return retList;
4883
}
49-
return retList;
84+
5085
}
5186

5287
public void save(DatasetLinkingDataverse datasetLinkingDataverse) {

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetLinkingDataverseListCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public List<Dataverse> execute(CommandContext ctxt) throws CommandException {
8686
return ctxt.dataverses().removeUnlinkableDataverses(dataversesForLinking, dvObject);
8787
} else {
8888
if (dvObject instanceof Dataset) {
89-
return ctxt.dsLinking().findLinkingDataverses(dvObject.getId());
89+
return ctxt.dsLinking().findLinkingDataverses(dvObject.getId(), searchParam);
9090
} else {
9191
return ctxt.dvLinking().findLinkingDataverses(dvObject.getId());
9292
}

src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,15 @@ public void testGetLinkableDataverses(){
842842
getLinkableDataverses.prettyPrint();
843843
getLinkableDataverses.then().assertThat()
844844
.statusCode(OK.getStatusCode())
845-
.body("data.size()", equalTo(1));
845+
.body("data.size()", equalTo(1));
846+
847+
//if you ask for already linked you should get one unless there's a bad search terms
848+
getLinkableDataverses = UtilIT.getLinkableDataverses("dataset", datasetPersistentId, apiToken, "QQQBatmanSymbol", true);
849+
850+
getLinkableDataverses.prettyPrint();
851+
getLinkableDataverses.then().assertThat()
852+
.statusCode(OK.getStatusCode())
853+
.body("data.size()", equalTo(0));
846854

847855
//set user api back to super user for cleanup
848856
UtilIT.setSuperuserStatus(username, Boolean.TRUE);

src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4749,7 +4749,7 @@ static Response getLinkableDataverses(String type, String dvObjectId, String api
47494749
}
47504750

47514751
if (alreadyLinked){
4752-
if (optionalQueryParam.isEmpty()){
4752+
if (optionalQueryParam.isEmpty() && (searchTerm == null || searchTerm.isEmpty())){
47534753
optionalQueryParam = "?alreadyLinking=true";
47544754
} else {
47554755
optionalQueryParam = optionalQueryParam + "&alreadyLinking=true";

0 commit comments

Comments
 (0)