Skip to content

Commit

Permalink
Array implementation using JsonContainer
Browse files Browse the repository at this point in the history
  • Loading branch information
litvinovg committed Mar 13, 2024
1 parent 096a0a6 commit 329fb01
Show file tree
Hide file tree
Showing 19 changed files with 268 additions and 136 deletions.
Expand Up @@ -88,10 +88,6 @@ public boolean isInternal() {
return type.isInternal();
}

public boolean isArray() {
return type.isArray();
}

public boolean isString() {
return type.isString();
}
Expand Down
Expand Up @@ -7,6 +7,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.data.ArrayView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;

public class IsInteger extends IsNotBlank {

Expand All @@ -18,7 +19,7 @@ public boolean isValid(String name, Data data) {
return false;
}

if (data.getParam().isArray()) {
if (JsonContainerView.isJsonArray(data.getParam())) {
List array = ArrayView.getArray(data);
for (Object value : array) {
if (!isInteger(value.toString())) {
Expand Down
Expand Up @@ -8,6 +8,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.data.ArrayView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.SimpleDataView;

public class IsNotBlank extends AbstractValidator {
Expand All @@ -17,7 +18,7 @@ public class IsNotBlank extends AbstractValidator {
@Override
public boolean isValid(String name, Data data) {

if (data.getParam().isArray()) {
if (JsonContainerView.isJsonArray(data.getParam())) {
List array = ArrayView.getArray(data);
if (array.isEmpty()) {
log.debug("No values of " + name + " found. Validation failed.");
Expand Down
Expand Up @@ -2,14 +2,14 @@

import java.util.List;

import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import edu.cornell.mannlib.vitro.webapp.dynapi.data.ArrayView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.SimpleDataView;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class NumericRangeValidator extends IsNotBlank {

Expand Down Expand Up @@ -43,7 +43,7 @@ public boolean isValid(String name, Data data) {
return false;
}

if (data.getParam().isArray()) {
if (JsonContainerView.isJsonArray(data.getParam())) {
List array = ArrayView.getArray(data);
for (Object value : array) {
if (!isInRange(value.toString())) {
Expand Down
Expand Up @@ -9,6 +9,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.data.ArrayView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.SimpleDataView;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;

Expand All @@ -30,8 +31,8 @@ public void setRegularExpression(String regularExpression) {
@Override
public boolean isValid(String name, Data data) {

if (data.getParam().isArray()) {
List array = ArrayView.getArray(data);
if (JsonContainerView.isJsonArray(data.getParam())) {
List<String> array = ArrayView.getArray(data);
if (array.isEmpty()) {
log.debug("No values of " + name + " found. Validation failed.");
return false;
Expand Down
Expand Up @@ -7,6 +7,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.data.ArrayView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.SimpleDataView;
import edu.cornell.mannlib.vitro.webapp.utils.configuration.Property;

Expand Down Expand Up @@ -41,8 +42,8 @@ public boolean isValid(String name, Data data) {
if (!super.isValid(name, data)) {
return false;
}
if (data.getParam().isArray()) {
List array = ArrayView.getArray(data);
if (JsonContainerView.isJsonArray(data.getParam())) {
List<String> array = ArrayView.getArray(data);
for (Object value : array) {
if (!isLengthInRange(value.toString())) {
log.debug("Length of " + name + " is not in range [" + ((minLength != null) ? minLength : " ") + "-"
Expand Down
@@ -1,45 +1,33 @@
package edu.cornell.mannlib.vitro.webapp.dynapi.data;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameter;
import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameters;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.implementation.JsonContainer;

public class ArrayView {

public static Map<String,List> getSingleDimensionalArrays(Parameters params) {
Map<String,List> result = new HashMap<>();
for (String name : params.getNames()) {
Parameter param = params.get(name);
if (param.isArray() && !param.getType().getValuesType().isArray()) {
result.put(name, new LinkedList());
}
}
return result;
}

public static boolean isMultiValuedArray(DataStore dataStore, String propertyVar) {
if (!isArray(dataStore, propertyVar)) {
return false;
}
Data data = dataStore.getData(propertyVar);
List list = (List) data.getObject();
JsonContainer array = JsonContainerView.getJsonContainer(dataStore, data.getParam());
List list = array.getDataAsStringList();
if (list.size() > 1) {
return true;
}
return false;
}

public static boolean isArray(DataStore dataStore, String propertyVar) {
Data data = dataStore.getData(propertyVar);
return data.getParam().isArray();
public static boolean isArray(DataStore dataStore, String paramName) {
Data data = dataStore.getData(paramName);
return JsonContainerView.isJsonArray(data.getParam());
}

public static List getArray(Data data) {
return (List) data.getObject();
public static List<String> getArray(Data data) {
JsonContainer array = (JsonContainer) data.getObject();
List<String> list = array.getDataAsStringList();
return list;
}

}
Expand Up @@ -7,9 +7,7 @@ public class DataInitializer {

public static void initialize(Parameter param, Data data) throws ConversionException {

if (param.isArray()) {
initializeArray(param, data);
} else if (param.isJsonContainer()){
if (param.isJsonContainer()){
initializeJsonObject(param, data);
} else {
initializeData(param, data);
Expand Down
Expand Up @@ -7,6 +7,7 @@
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.ResourceFactory;
Expand All @@ -17,6 +18,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameter;
import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameters;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.implementation.JsonContainer;

public class RdfView {

Expand All @@ -38,16 +40,16 @@ public static Map<String, List<Literal>> getLiteralsMap(DataStore dataStore, Par
param.getType().getRdfType().getRDFDataType());
List<Literal> list = Collections.singletonList( literal );
result.put(name, list);
} else if( param.isArray() && param.getType().getValuesType().isLiteral()) {
Data data = dataStore.getData(name);
List objList = (List) data.getObject();
List<Literal> list = new LinkedList<>();
for (Object object : objList) {
Literal literal = ResourceFactory.createTypedLiteral(object.toString(),
param.getType().getValuesType().getRdfType().getRDFDataType());
list.add(literal);
}
result.put(name, list);
} else if( JsonContainerView.isJsonArray(param) && param.getType().getValuesType().isLiteral()) {
JsonContainer array = (JsonContainer) dataStore.getData(name).getObject();
RDFDatatype rdfDataType = param.getType().getValuesType().getRdfType().getRDFDataType();
List<String> list = array.getDataAsStringList();
List<Literal> literalList = new LinkedList<>();
for (String literalString : list) {
Literal literal = ResourceFactory.createTypedLiteral(literalString, rdfDataType);
literalList.add(literal);
}
result.put(name, literalList);
}
}
return result;
Expand All @@ -61,16 +63,12 @@ public static Map<String, List<String>> getUrisMap(DataStore dataStore, Paramete
Data data = dataStore.getData(name);
List<String> list = Collections.singletonList( data.getObject().toString() );
result.put(name, list);
} else if( param.isArray() && param.getType().getValuesType().isUri()) {
Data data = dataStore.getData(name);
List objList = (List) data.getObject();
List<String> list = new LinkedList<>();
for (Object object : objList) {
list.add(object.toString());
}
result.put(name, list);
}
}
} else if( JsonContainerView.isJsonArray(param) && param.getType().getValuesType().isUri()) {
JsonContainer array = (JsonContainer) dataStore.getData(name).getObject();
List<String> list = array.getDataAsStringList();
result.put(name, list);
}
}
return result;
}

Expand Down
Expand Up @@ -18,11 +18,9 @@ public static List<String> getNames(Parameters params) {
List<String> result = new LinkedList<>();
for (String name : params.getNames()) {
Parameter param = params.get(name);
if (!param.isArray() &&
!param.isJsonContainer() &&
!JsonView.isJsonNode(param)) {
result.add(name);
}
if (!param.isJsonContainer() && !JsonView.isJsonNode(param)) {
result.add(name);
}
}
return result;
}
Expand Down
Expand Up @@ -17,7 +17,7 @@ public static Data createData(String name, String value) {

public static String getFirstStringValue(DataStore dataStore, String name) {
Data data = dataStore.getData(name);
if (data.getParam().isArray()) {
if (JsonContainerView.isJsonArray(data.getParam())) {
List array = (List) data.getObject();
Object first = array.get(0);
return first.toString();
Expand Down
Expand Up @@ -17,6 +17,7 @@
import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameter;
import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameters;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.DataStore;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.JsonContainerView;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.Data;

public class FormDataConverter {
Expand All @@ -43,7 +44,7 @@ private static void convertOptionalParams(DataStore dataStore, Parameters option
}
try {
Parameter param = optional.get(name);
if (param.isArray()) {
if (JsonContainerView.isJsonArray(param)) {
readArray(dataStore, name, values, param);
} else {
readParam(dataStore, name, values, param);
Expand All @@ -68,7 +69,7 @@ private static void convertRequiredParams(DataStore dataStore, Parameters requir
}
Parameter param = required.get(name);

if (param.isArray()) {
if (JsonContainerView.isJsonArray(param)) {
readArray(dataStore, name, values, param);
} else {
readParam(dataStore, name, values, param);
Expand Down
Expand Up @@ -88,10 +88,6 @@ public SerializationType getSerializationType() {
@Override
public void dereference() {
}

public boolean isArray() {
return getImplementationType().getClassName().getCanonicalName().equals("java.util.ArrayList");
}

public boolean isString() {
return getImplementationType().getClassName().getCanonicalName().equals(String.class.getCanonicalName());
Expand Down
Expand Up @@ -30,6 +30,10 @@ private void createRDFDataType() {
rdfDataType = RDFLangString.rdfLangString;
return;
}
if (ANY_URI.equals(name)) {
rdfDataType = XSDDatatype.XSDanyURI;
return;
}
rdfDataType = new XSDDatatype(name);
}

Expand Down
Expand Up @@ -2,6 +2,7 @@

import edu.cornell.mannlib.vitro.webapp.dynapi.components.Parameter;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.implementation.JsonContainer;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.types.ArrayParameterType;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.types.ImplementationConfig;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.types.ImplementationType;
import edu.cornell.mannlib.vitro.webapp.dynapi.data.types.ParameterType;
Expand All @@ -12,11 +13,12 @@
public abstract class JsonContainerParam extends Parameter {

private static final Log log = LogFactory.getLog(JsonContainerParam.class);
private ArrayParameterType type;

public JsonContainerParam(String var) {
this.setName(var);
try {
ParameterType type = new ParameterType();
type = new ArrayParameterType();
type.setName(getContainerTypeName());
ImplementationType implType = new ImplementationType();
type.setImplementationType(implType);
Expand Down Expand Up @@ -52,4 +54,8 @@ private ImplementationConfig getDeserializationConfig() throws ClassNotFoundExce
protected abstract String getContainerTypeName();

protected abstract String getContainerDefaultValue();

public void setValuesType(ParameterType valuesType) {
type.setValuesType(valuesType);
}
}

0 comments on commit 329fb01

Please sign in to comment.