Skip to content

Commit f7d605c

Browse files
committed
Fix cached Neo4j/SOLR numeric display: strip old zero padding and preserve space padding
1 parent adadae2 commit f7d605c

2 files changed

Lines changed: 116 additions & 3 deletions

File tree

src/main/java/uk/ac/vfb/geppetto/NEO4JQueryProcessor.java

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import java.util.ArrayList;
55
import java.util.HashMap;
6+
import java.util.LinkedHashMap;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Arrays;
@@ -720,6 +721,84 @@ private String secureUrl(String url) {
720721

721722
}
722723

724+
private String stripOldZeroPaddingOfNumericString(String value) {
725+
if (value == null) {
726+
return null;
727+
}
728+
String sign = "";
729+
if (value.startsWith("-")) {
730+
sign = "-";
731+
value = value.substring(1);
732+
}
733+
if (!value.matches("0*\\d+(\\.\\d+)?")) {
734+
return sign + value;
735+
}
736+
if (value.matches("0+")) {
737+
return sign + "0";
738+
}
739+
if (value.matches("0+\\.\\d+")) {
740+
return sign + "0" + value.substring(value.indexOf('.'));
741+
}
742+
return sign + value.replaceFirst("^0+", "");
743+
}
744+
745+
private Object sanitizeDisplayValue(String key, Object rawValue) {
746+
if (rawValue == null) {
747+
return null;
748+
}
749+
if ("expression_level".equals(key)) {
750+
if (rawValue instanceof String) {
751+
return stripOldZeroPaddingOfNumericString((String) rawValue);
752+
}
753+
}
754+
if ("dataset_counts".equals(key)) {
755+
if (rawValue instanceof Map<?, ?>) {
756+
Map<String, Object> sanitized = new LinkedHashMap<String, Object>();
757+
for (Map.Entry<?, ?> entry : ((Map<?, ?>) rawValue).entrySet()) {
758+
Object value = entry.getValue();
759+
if (value instanceof String) {
760+
value = stripOldZeroPaddingOfNumericString((String) value);
761+
} else if (value instanceof Map<?, ?> || value instanceof List<?>) {
762+
value = sanitizeDisplayStructure(value);
763+
}
764+
sanitized.put(entry.getKey().toString(), value);
765+
}
766+
return sanitized;
767+
}
768+
}
769+
return rawValue;
770+
}
771+
772+
private Object sanitizeDisplayStructure(Object value) {
773+
if (value instanceof Map<?, ?>) {
774+
Map<String, Object> sanitized = new LinkedHashMap<String, Object>();
775+
for (Map.Entry<?, ?> entry : ((Map<?, ?>) value).entrySet()) {
776+
Object child = entry.getValue();
777+
if (child instanceof String) {
778+
child = stripOldZeroPaddingOfNumericString((String) child);
779+
} else if (child instanceof Map<?, ?> || child instanceof List<?>) {
780+
child = sanitizeDisplayStructure(child);
781+
}
782+
sanitized.put(entry.getKey().toString(), child);
783+
}
784+
return sanitized;
785+
}
786+
if (value instanceof List<?>) {
787+
List<Object> sanitizedList = new ArrayList<Object>();
788+
for (Object element : (List<?>) value) {
789+
if (element instanceof String) {
790+
sanitizedList.add(stripOldZeroPaddingOfNumericString((String) element));
791+
} else if (element instanceof Map<?, ?> || element instanceof List<?>) {
792+
sanitizedList.add(sanitizeDisplayStructure(element));
793+
} else {
794+
sanitizedList.add(element);
795+
}
796+
}
797+
return sanitizedList;
798+
}
799+
return value;
800+
}
801+
723802
// END VFB term info schema
724803

725804
/*
@@ -889,7 +968,9 @@ public QueryResults process(ProcessQuery query, DataSource dataSource, Variable
889968
hasGeneScore = true;
890969
break;
891970
}
892-
tempData = new Gson().toJson(results.getValue(key, count));
971+
Object rawValue = results.getValue(key, count);
972+
Object displayValue = sanitizeDisplayValue(key, rawValue);
973+
tempData = new Gson().toJson(displayValue);
893974
json = json + "\"" + key + "\":" + tempData;
894975
if (debug){
895976
if (tempData.length() > 1000){

src/main/java/uk/ac/vfb/geppetto/SOLRQueryProcessor.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,37 @@ private String secureUrl(String url) {
740740
return url.replace("http://","https://");
741741
}
742742

743+
744+
745+
private String stripOldZeroPaddingOfNumericString(String value) {
746+
if (value == null) {
747+
return null;
748+
}
749+
String sign = "";
750+
if (value.startsWith("-")) {
751+
sign = "-";
752+
value = value.substring(1);
753+
}
754+
if (!value.matches("0*\\d+(\\.\\d+)?")) {
755+
return sign + value;
756+
}
757+
if (value.matches("0+")) {
758+
return sign + "0";
759+
}
760+
if (value.matches("0+\\.\\d+")) {
761+
return sign + "0" + value.substring(value.indexOf('.'));
762+
}
763+
return sign + value.replaceFirst("^0+", "");
764+
}
765+
766+
private void sanitizeCachedQuery(vfb_query query) {
767+
if (query == null) {
768+
return;
769+
}
770+
if (query.expression_level != null) {
771+
query.expression_level = stripOldZeroPaddingOfNumericString(query.expression_level);
772+
}
773+
}
743774
}
744775

745776
// END VFB term info schema
@@ -827,6 +858,7 @@ public QueryResults process(ProcessQuery query, DataSource dataSource, Variable
827858
parsedQueries.add(gson.fromJson(json, vfb_query.class));
828859
}
829860
for (vfb_query vfbQuery : parsedQueries) {
861+
sanitizeCachedQuery(vfbQuery);
830862
table.add(vfbQuery);
831863

832864
// Logic for hasFlags (based on the first successfully parsed item)
@@ -1048,7 +1080,7 @@ public QueryResults process(ProcessQuery query, DataSource dataSource, Variable
10481080
processedResult.getValues().add(row.gene.short_form + delim + row.anatomy.short_form);
10491081
processedResult.getValues().add(row.gene.getName());
10501082
processedResult.getValues().add(row.anatomy.getName());
1051-
processedResult.getValues().add(row.expression_level);
1083+
processedResult.getValues().add(stripOldZeroPaddingOfNumericString(row.expression_level));
10521084
processedResult.getValues().add(String.format("%.02f", row.expression_extent));
10531085
String function = "";
10541086
for (String type:row.gene.types){
@@ -1069,7 +1101,7 @@ public QueryResults process(ProcessQuery query, DataSource dataSource, Variable
10691101
if (hasId) processedResult.getValues().add(row.id());
10701102
if (hasName && !hasSynCount) processedResult.getValues().add(row.name());
10711103
if (!hasGene && hasGeneScore) {
1072-
processedResult.getValues().add(row.expression_level);
1104+
processedResult.getValues().add(stripOldZeroPaddingOfNumericString(row.expression_level));
10731105
processedResult.getValues().add(String.format("%.02f", row.expression_extent));
10741106
processedResult.getValues().add(row.anatomy.getName());
10751107
}

0 commit comments

Comments
 (0)