From 448183273d9f96dfd7726c5a945a62c7dd120d5a Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 26 Nov 2021 16:54:52 +0100 Subject: [PATCH] Clean up Signed-off-by: Andrew Berezovskyi --- .editorconfig | 2 + .../core/model/ResourceShapeFactory.java | 77 +++++++------ .../oslc4j/provider/jena/JenaModelHelper.java | 28 ++--- .../provider/jena/test/XmlLiteralTest.java | 104 +++++++----------- 4 files changed, 90 insertions(+), 121 deletions(-) diff --git a/.editorconfig b/.editorconfig index bab3389dd..55b2409d2 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,6 +10,7 @@ trim_trailing_whitespace = true [*.{java,kt}] indent_style = space indent_size = 4 +max_line_length = 120 # indent code easily [*.md] @@ -20,3 +21,4 @@ indent_size = 4 [*.{xml,html,js,yml,css}] indent_style = space indent_size = 2 +max_line_length = 100 diff --git a/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/core/model/ResourceShapeFactory.java b/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/core/model/ResourceShapeFactory.java index 47301b4a8..17104cd28 100644 --- a/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/core/model/ResourceShapeFactory.java +++ b/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/core/model/ResourceShapeFactory.java @@ -416,7 +416,9 @@ static boolean isCollectionType(final Class returnType) { return Collection.class.isAssignableFrom(returnType); } - private static void validateUserSpecifiedOccurs(final Class resourceClass, final Method method, final OslcOccurs occursAnnotation) throws OslcCoreInvalidOccursException { + private static void validateUserSpecifiedOccurs(final Class resourceClass, final Method method, + final OslcOccurs occursAnnotation) + throws OslcCoreInvalidOccursException { final Class returnType = method.getReturnType(); final Occurs occurs = occursAnnotation.value(); @@ -434,18 +436,22 @@ private static void validateUserSpecifiedOccurs(final Class resourceClass, fi } } - protected static void validateUserSpecifiedValueType(final Class resourceClass, final Method method, final ValueType userSpecifiedValueType, final Representation userSpecifiedRepresentation, final Class componentType) throws OslcCoreInvalidValueTypeException { - final ValueType calculatedValueType = CLASS_TO_VALUE_TYPE.get(componentType); - // ValueType is valid if ... - // user-specified value type matches calculated value type - // or - // user-specified value type is local resource (we will validate the local resource later) + protected static void validateUserSpecifiedValueType(final Class resourceClass, final Method method, + final ValueType userSpecifiedValueType, + final Representation userSpecifiedRepresentation, + final Class componentType) + throws OslcCoreInvalidValueTypeException { + final ValueType calculatedValueType = CLASS_TO_VALUE_TYPE.get(componentType); + // ValueType is valid if ... + // user-specified value type matches calculated value type + // or + // user-specified value type is local resource (we will validate the local resource later) // or // user-specified value type is non-local resource, and Representation is Inline (we will validate later) - // or - // user-specified value type is xml literal and calculated value type is string - // or - // user-specified value type is decimal and calculated value type is numeric + // or + // user-specified value type is xml literal and calculated value type is string + // or + // user-specified value type is decimal and calculated value type is numeric if ((userSpecifiedValueType.equals(calculatedValueType)) || (ValueType.LocalResource.equals(userSpecifiedValueType)) @@ -455,9 +461,7 @@ protected static void validateUserSpecifiedValueType(final Class resourceClas || ((ValueType.XMLLiteral.equals(userSpecifiedValueType)) && - (ValueType.String.equals(calculatedValueType) -// || ValueType.XMLLiteral.equals(calculatedValueType) - ) + (ValueType.String.equals(calculatedValueType)) ) || ((ValueType.Decimal.equals(userSpecifiedValueType)) @@ -470,33 +474,36 @@ protected static void validateUserSpecifiedValueType(final Class resourceClas ) ) ) { - // We have a valid user-specified value type for our Java type - return; - } + // We have a valid user-specified value type for our Java type + return; + } - throw new OslcCoreInvalidValueTypeException(resourceClass, method, userSpecifiedValueType); - } + throw new OslcCoreInvalidValueTypeException(resourceClass, method, userSpecifiedValueType); + } - private static void validateUserSpecifiedRepresentation(final Class resourceClass, final Method method, final Representation userSpecifiedRepresentation, final Class componentType) throws OslcCoreInvalidRepresentationException { + private static void validateUserSpecifiedRepresentation(final Class resourceClass, final Method method, + final Representation userSpecifiedRepresentation, + final Class componentType) + throws OslcCoreInvalidRepresentationException { // Throw an Exception if ... // User-specified representation is reference and component is not URI // or // user-specified representation is inline and component is a standard class - if (null == userSpecifiedRepresentation) { - return; - } - if (((Representation.Reference.equals(userSpecifiedRepresentation)) - && - (!URI.class.equals(componentType)) - ) - || - ((Representation.Inline.equals(userSpecifiedRepresentation)) - && - (CLASS_TO_VALUE_TYPE.containsKey(componentType)) - ) - ) { - throw new OslcCoreInvalidRepresentationException(resourceClass, method, userSpecifiedRepresentation); - } + if (null == userSpecifiedRepresentation) { + return; + } + if (((Representation.Reference.equals(userSpecifiedRepresentation)) + && + (!URI.class.equals(componentType)) + ) + || + ((Representation.Inline.equals(userSpecifiedRepresentation)) + && + (CLASS_TO_VALUE_TYPE.containsKey(componentType)) + ) + ) { + throw new OslcCoreInvalidRepresentationException(resourceClass, method, userSpecifiedRepresentation); + } } } diff --git a/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/provider/jena/JenaModelHelper.java b/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/provider/jena/JenaModelHelper.java index 3db62a7b6..2aeab75cf 100644 --- a/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/provider/jena/JenaModelHelper.java +++ b/core/oslc4j-core/src/main/java/org/eclipse/lyo/oslc4j/provider/jena/JenaModelHelper.java @@ -817,15 +817,11 @@ else if (Collection.class.isAssignableFrom(setMethodComponentParameterClass)) final Literal literal = o.asLiteral(); final String stringValue = literal.getString(); - if (String.class == setMethodComponentParameterClass) - { + if (String.class == setMethodComponentParameterClass) { parameter = stringValue; - } - else if (XMLLiteral.class == setMethodComponentParameterClass) { - //TODO: handle the same way as the extended property + } else if (XMLLiteral.class == setMethodComponentParameterClass) { parameter = new XMLLiteral(literal.getString()); - } - else if ((Boolean.class == setMethodComponentParameterClass) || + } else if ((Boolean.class == setMethodComponentParameterClass) || (Boolean.TYPE == setMethodComponentParameterClass)) { // XML supports both 'true' and '1' for a true Boolean. @@ -1916,24 +1912,18 @@ private static void handleLocalResource(final Class resourceClass, return; } - if (value instanceof String) - { - if (onlyNested) - { + if (value instanceof String) { + if (onlyNested) { return; } - if (xmlLiteral) - { + if (xmlLiteral) { nestedNode = model.createTypedLiteral(value.toString(), - XMLLiteralType.theXMLLiteralType); - } - else - { + XMLLiteralType.theXMLLiteralType); + } else { nestedNode = model.createLiteral(value.toString()); } - } - else if (value instanceof XMLLiteral) { + } else if (value instanceof XMLLiteral) { if (xmlLiteral) { nestedNode = model.createTypedLiteral(((XMLLiteral) value).getValue(), XMLLiteralType.theXMLLiteralType); diff --git a/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java b/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java index 5c712cf75..9ae681aed 100644 --- a/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java +++ b/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java @@ -26,7 +26,6 @@ import org.eclipse.lyo.oslc4j.provider.jena.AbstractOslcRdfXmlProvider; import org.eclipse.lyo.oslc4j.provider.jena.JenaModelHelper; import org.eclipse.lyo.oslc4j.provider.jena.test.resources.TestResourceWithLiterals; -import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -45,15 +44,8 @@ public class XmlLiteralTest { @Before public void before() { System.getProperties().remove(AbstractOslcRdfXmlProvider.OSLC4J_STRICT_DATATYPES); -// System.setProperty(AbstractOslcRdfXmlProvider.OSLC4J_STRICT_DATATYPES, "false"); } - @After - public void after() { - System.getProperties().remove(AbstractOslcRdfXmlProvider.OSLC4J_STRICT_DATATYPES); - } - - /* ROUND-TRIPPING TESTS */ @Test @@ -61,13 +53,7 @@ public void roundtripTestXmlDatatypeRDF() throws DatatypeConfigurationException, InvocationTargetException, IllegalAccessException { final Model diskModel = readModel("/xml_literals/datatype_rdf.rdf", RDFLanguages.strLangRDFXML); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue(diskModel.isIsomorphicWith(lyoModel)); + assertModelUnmarshalsAndBackIsomorphically(diskModel, TestResourceWithLiterals.class); } @Test @@ -75,25 +61,7 @@ public void roundtripTestXmlParsetypeWithAnnotatedLiteralProperty() throws Datat OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { final Model diskModel = readModel("/xml_literals/parsetype_annot.rdf", RDFLanguages.strLangRDFXML); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue("Models should match: " + showModels(diskModel, lyoModel), diskModel.isIsomorphicWith(lyoModel)); - } - - private String showModels(Model expected, Model resulting) { - return String.format("EXPECTED model:\n\n%s\n" + - "=======================================================\n\n" - + "RESULTING model:\n\n%s\n", prettyPrintModel(expected), prettyPrintModel(resulting)); - } - - private String prettyPrintModel(Model model) { - StringWriter writer = new StringWriter(4096); - RDFDataMgr.write(writer, model, RDFFormat.TRIG_PRETTY); - return writer.toString(); + assertModelUnmarshalsAndBackIsomorphically(diskModel, TestResourceWithLiterals.class); } @Test @@ -101,13 +69,7 @@ public void roundtripTestXmlParsetypeWithAnnotatedStringProperty() throws Dataty OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { final Model diskModel = readModel("/xml_literals/parsetype_annot_string.rdf", RDFLanguages.strLangRDFXML); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue(diskModel.isIsomorphicWith(lyoModel)); + assertModelUnmarshalsAndBackIsomorphically(diskModel, TestResourceWithLiterals.class); } /* INVALID LITERAL TESTS */ @@ -121,13 +83,7 @@ public void invalidLiteralTest_NoRoot() throws DatatypeConfigurationException, // final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); final Model diskModel = readModel("/xml_literals/invalid_noroot.ttl", RDFLanguages.strLangTurtle); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue(diskModel.isIsomorphicWith(lyoModel)); + assertModelUnmarshalsAndBackIsomorphically(diskModel, TestResourceWithLiterals.class); } /** @@ -136,34 +92,21 @@ public void invalidLiteralTest_NoRoot() throws DatatypeConfigurationException, @Test public void invalidLiteralTest_NoEscape() throws DatatypeConfigurationException, OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { -// final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); final Model diskModel = readModel("/xml_literals/invalid_noescape.ttl", RDFLanguages.strLangTurtle); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue(diskModel.isIsomorphicWith(lyoModel)); + assertModelUnmarshalsAndBackIsomorphically(diskModel, TestResourceWithLiterals.class); } /** - * Not escaping & turns XML invalid. NB! Unescaped & in Turtle will get escaped when you use libs to convert to RDF/XML. + * Not escaping & turns XML invalid. NB! Unescaped & in Turtle will get escaped when you use libs to convert to + * RDF/XML. */ @Test(expected = RiotException.class) - public void invalidLiteralTest_BadXml() throws DatatypeConfigurationException, - OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { -// final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); + public void invalidLiteralTest_BadXml() { final Model diskModel = readModel("/xml_literals/invalid_badxml.rdf", RDFLanguages.strLangTurtle); - final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); - assertEquals("Expected only one TestResource resource", 1, testResources.length); - final TestResourceWithLiterals resource = testResources[0]; - - Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); - - assertTrue(diskModel.isIsomorphicWith(lyoModel)); + final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, + TestResourceWithLiterals.class); } @@ -244,4 +187,31 @@ private Model readModel(String filePath, String lang) { m.read(is, null, lang); return m; } + + /*HELPERS*/ + + private void assertModelUnmarshalsAndBackIsomorphically(Model diskModel, Class klass) + throws DatatypeConfigurationException, IllegalAccessException, InvocationTargetException, + OslcCoreApplicationException { + final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, klass); + assertEquals("Expected only one TestResource resource", 1, testResources.length); + final TestResourceWithLiterals resource = testResources[0]; + + Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); + + assertTrue("Models should match: " + showModels(diskModel, lyoModel), diskModel.isIsomorphicWith(lyoModel)); + } + + private String showModels(Model expected, Model resulting) { + return String.format("EXPECTED model:\n\n%s\n" + + "=======================================================\n\n" + + "RESULTING model:\n\n%s\n", prettyPrintModel(expected), prettyPrintModel(resulting)); + } + + private String prettyPrintModel(Model model) { + StringWriter writer = new StringWriter(4096); + RDFDataMgr.write(writer, model, RDFFormat.TRIG_PRETTY); + return writer.toString(); + } + }