Skip to content

Commit

Permalink
#472 Crosslinks - support acceptOnly and reject
Browse files Browse the repository at this point in the history
  • Loading branch information
tariqksoliman committed Jul 17, 2024
1 parent fa8cf50 commit 3069f40
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 21 deletions.
43 changes: 37 additions & 6 deletions service/cross-links.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,52 @@
{
"injectableParams": [
"vid",
"lid",
"lidvid",
"mission",
"spacecraft",
"bundle",
"collection",
"target",
"filename",
"filenameWithoutFileExtension",
"fileExtension",
"fileRef",
"productClass",
"productType",
"nodeName"
],
"tools": [
{
"name": "analysts_notebook",
"base": "https://an.rsl.wustl.edu/{mission}/AN/an3.aspx?it=B1&ii={filenameWithoutFileExtension}",
"description": "description",
"supportsLinksFrom": ["atlas", "astria"],
"description": "A tool for accessing the science data archives from NASA landed Mars and lunar missions.",
"aliases": [
{
"field": "mission",
"alias": "m20",
"from": ["mars_2020", "m2020", "mars2020", "Mars2020"]
},
{
"field": "mission",
"alias": "ins",
"from": ["InSight"]
}
],
"reject": [
{ "field": "uri", "match": "/*mars2020_helicam*/" },
{ "field": "uri", "match": "/*mars2020_imgops*/" }
]
"acceptOnly": [
{ "field": "mission", "match": "m20" },
{ "field": "mission", "match": "ins" },
{ "field": "fileExtension", "match": "\\.IMG" }
],
"reject": [{ "field": "uri", "match": ".*mars2020_helicam.*" }]
},
{
"name": "atlas4",
"base": "https://pds-imaging.jpl.nasa.gov/beta/record?lidvid={lidvid}",
"description": "The Official Image Search of the PDS Cartography and Imaging Sciences Node (PDSIMG)",
"aliases": [],
"acceptOnly": [],
"reject": []
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@
import com.fasterxml.jackson.databind.JsonNode;

public class CrossLinks {
private String[] injectableParams;
public void setInjectableParams(String[] i) {
this.injectableParams = i;
}
public String[] getInjectableParams() {
return injectableParams;
}

private List<Tool> tools;
public void setTools(List<Tool> t) {
this.tools = t;
Expand All @@ -35,9 +43,16 @@ public Object getLinks(HashMap<String, Object> product) {
Map<String, Object> values = new HashMap<>();
String lidvid = this.get(product, "lidvid");
String filename = this.get(product, "pds:File/pds:file_name");
int filenameLastIndexOf = filename.lastIndexOf('.');
String filenameWithoutFileExtension = filename.substring(0, filenameLastIndexOf);
String fileExtension = filename.substring(filenameLastIndexOf + 1);
int filenameLastIndexOf = -1;
String filenameWithoutFileExtension = "";
String fileExtension = "";
if( filename != null ) {
filenameLastIndexOf = filename.lastIndexOf('.');
if( filenameLastIndexOf > -1 ) {
filenameWithoutFileExtension = filename.substring(0, filenameLastIndexOf);
fileExtension = filename.substring(filenameLastIndexOf + 1);
}
}

values.put("vid", this.get(product, "vid"));
values.put("lid", this.get(product, "lid"));
Expand All @@ -58,7 +73,10 @@ public Object getLinks(HashMap<String, Object> product) {
List<Map<String, Object>> response = new ArrayList<>();

for (Tool t : getTools()) {
response.add(formToolLink(t, values, product));
Map<String, Object> linkObj = formToolLink(t, values, product);
if( linkObj != null ) {
response.add(linkObj);
}
}
return response;
}
Expand All @@ -71,25 +89,54 @@ private Map<String, Object> formToolLink(Tool t, Map<String, Object> values, Has

String link = t.getBase();

boolean accept = false;
boolean reject = false;

for (String field : values.keySet()) {
String value = (String) values.get(field);

// Aliases
for( Alias a : t.getAliases()) {
if( a.getField().equals(field) ) {
System.out.println(a.getFrom());
if( a.getFrom().contains(value) ) {
value = a.getAlias();
break;
}
}
}

// Accept
for( Accept a : t.getAcceptOnly()) {
if( a.getField().equals(field) ) {
if( value.matches(a.getMatch()) ) {
accept = true;
}
}
}
if( t.getAcceptOnly().size() == 0 ) {
accept = true;
}

// Reject
for( Reject a : t.getReject()) {
if( a.getField().equals(field) ) {
if( value.matches(a.getMatch()) ) {
reject = false;
}
}
}

link = link.replaceAll("\\{" + field + "\\}", value);

}

l.put("link", link);

return l;
if( accept == true && reject == false ) {
return l;
}
return null;

}

private static class Tool {
Expand All @@ -116,13 +163,6 @@ public void setDescription(String d) {
public String getDescription() {
return description;
}
private List<String> supportsLinksFrom;
public void setSupportsLinksFrom(List<String> s) {
this.supportsLinksFrom = s;
}
public List<String> getSupportsLinksFrom() {
return supportsLinksFrom;
}

private List<Alias> aliases;
public void setAliases(List<Alias> a) {
Expand All @@ -132,6 +172,15 @@ public List<Alias> getAliases() {
return aliases;
}


private List<Accept> acceptOnly;
public void setAcceptOnly(List<Accept> a) {
this.acceptOnly = a;
}
public List<Accept> getAcceptOnly() {
return acceptOnly;
}

private List<Reject> reject;
public void setReject(List<Reject> r) {
this.reject = r;
Expand Down Expand Up @@ -168,6 +217,25 @@ public List<String> getFrom() {

}

private static class Accept {
private String field;
public void setField(String f) {
this.field = f;
}
public String getField() {
return field;
}

private String match;
public void setMatch(String m) {
this.match = m;
}
public String getMatch() {
return match;
}

}

private static class Reject {
private String field;
public void setField(String f) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ public class CrossLinksLoader {
private CrossLinks config;

public CrossLinks loadConfiguration() {
System.out.println("==================================================================================================================");
if (config == null) {
ObjectMapper mapper = new ObjectMapper();
try {
Expand Down

0 comments on commit 3069f40

Please sign in to comment.