diff --git a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADM.scala b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADM.scala index f1327ed8f1..4d35d60f2a 100644 --- a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADM.scala @@ -580,8 +580,8 @@ case class ListRootNodeInfoADM( id = id, projectIri = projectIri, name = name, - labels = labels.sortByStringValue, - comments = comments.sortByStringValue + labels = labels.sortByLanguage, + comments = comments.sortByLanguage ) /** @@ -642,8 +642,8 @@ case class ListChildNodeInfoADM( ListChildNodeInfoADM( id = id, name = name, - labels = labels.sortByStringValue, - comments = comments, + labels = labels.sortByLanguage, + comments = comments.sortByLanguage, position = position, hasRootNode = hasRootNode ) @@ -769,8 +769,8 @@ case class ListRootNodeADM( id = id, projectIri = projectIri, name = name, - labels = labels.sortByStringValue, - comments = comments.sortByStringValue, + labels = labels.sortByLanguage, + comments = comments.sortByLanguage, children = children.sortBy(_.position).map(_.sorted) ) @@ -848,8 +848,11 @@ case class ListChildNodeADM( ListChildNodeADM( id = id, name = name, - labels = labels.sortByStringValue, - comments = comments, + labels = labels.sortByLanguage, + comments = comments match { + case None => None + case Some(c) => Some(c.sortByLanguage) + }, position = position, hasRootNode = hasRootNode, children = children.sortBy(_.position).map(_.sorted) diff --git a/webapi/src/main/scala/org/knora/webapi/messages/store/triplestoremessages/TriplestoreMessages.scala b/webapi/src/main/scala/org/knora/webapi/messages/store/triplestoremessages/TriplestoreMessages.scala index 7e9ee20526..c7b96eb4f6 100644 --- a/webapi/src/main/scala/org/knora/webapi/messages/store/triplestoremessages/TriplestoreMessages.scala +++ b/webapi/src/main/scala/org/knora/webapi/messages/store/triplestoremessages/TriplestoreMessages.scala @@ -600,6 +600,13 @@ case class StringLiteralSequenceV2(stringLiterals: Vector[StringLiteralV2]) { def sortByStringValue: StringLiteralSequenceV2 = StringLiteralSequenceV2(stringLiterals.sortBy(_.value)) + /** + * Sort sequence of [[StringLiteralV2]] by their language value. + * + * @return a [[StringLiteralSequenceV2]] sorted by language value. + */ + def sortByLanguage: StringLiteralSequenceV2 = StringLiteralSequenceV2(stringLiterals.sortBy(_.language)) + /** * Gets the string value of the [[StringLiteralV2]] corresponding to the preferred language. * If not available, returns the string value of the fallback language or any available language. diff --git a/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala b/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala index 54e4d9ba48..e2eab92bb7 100644 --- a/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/responders/admin/ListsResponderADM.scala @@ -162,8 +162,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde .asInstanceOf[IriLiteralV2] .value, name = name, - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = StringLiteralSequenceV2(comments.toVector.sortBy(_.language)) + labels = StringLiteralSequenceV2(labels.toVector), + comments = StringLiteralSequenceV2(comments.toVector) ).unescape } @@ -414,8 +414,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde name = propsMap .get(OntologyConstants.KnoraBase.ListNodeName.toSmartIri) .map(_.head.asInstanceOf[StringLiteralV2].value), - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = StringLiteralSequenceV2(comments.toVector.sortBy(_.language)) + labels = StringLiteralSequenceV2(labels.toVector), + comments = StringLiteralSequenceV2(comments.toVector) ).unescape } else { ListChildNodeInfoADM( @@ -423,8 +423,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde name = propsMap .get(OntologyConstants.KnoraBase.ListNodeName.toSmartIri) .map(_.head.asInstanceOf[StringLiteralV2].value), - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = StringLiteralSequenceV2(comments.toVector.sortBy(_.language)), + labels = StringLiteralSequenceV2(labels.toVector), + comments = StringLiteralSequenceV2(comments.toVector), position = positionOption.getOrElse( throw InconsistentRepositoryDataException( s"Required position property missing for list node $nodeIri." @@ -592,8 +592,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde name = propsMap .get(OntologyConstants.KnoraBase.ListNodeName.toSmartIri) .map(_.head.asInstanceOf[StringLiteralV2].value), - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = StringLiteralSequenceV2(comments.toVector.sortBy(_.language)), + labels = StringLiteralSequenceV2(labels.toVector), + comments = StringLiteralSequenceV2(comments.toVector), children = children ) } else { @@ -602,8 +602,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde name = propsMap .get(OntologyConstants.KnoraBase.ListNodeName.toSmartIri) .map(_.head.asInstanceOf[StringLiteralV2].value), - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = Some(StringLiteralSequenceV2(comments.toVector.sortBy(_.language))), + labels = StringLiteralSequenceV2(labels.toVector), + comments = Some(StringLiteralSequenceV2(comments.toVector)), position = positionOption.getOrElse( throw InconsistentRepositoryDataException( s"Required position property missing for list node $nodeIri." @@ -700,8 +700,8 @@ class ListsResponderADM(responderData: ResponderData) extends Responder(responde ListChildNodeADM( id = nodeIri, name = nameOption, - labels = StringLiteralSequenceV2(labels.toVector.sortBy(_.language)), - comments = Some(StringLiteralSequenceV2(comments.toVector.sortBy(_.language))), + labels = StringLiteralSequenceV2(labels.toVector), + comments = Some(StringLiteralSequenceV2(comments.toVector)), children = children.map(_.sorted), position = position, hasRootNode = hasRootNode diff --git a/webapi/src/test/scala/org/knora/webapi/responders/v2/ListsResponderV2Spec.scala b/webapi/src/test/scala/org/knora/webapi/responders/v2/ListsResponderV2Spec.scala index 94eff9caea..d6b5f8d469 100644 --- a/webapi/src/test/scala/org/knora/webapi/responders/v2/ListsResponderV2Spec.scala +++ b/webapi/src/test/scala/org/knora/webapi/responders/v2/ListsResponderV2Spec.scala @@ -41,9 +41,7 @@ class ListsResponderV2Spec extends CoreSpec() with ImplicitSender { private val timeout = 10.seconds "The lists responder v2" should { - "return a list" in { - responderManager ! ListGetRequestV2( listIri = "http://rdfh.ch/lists/0001/treeList", featureFactoryConfig = defaultFeatureFactoryConfig, @@ -52,12 +50,10 @@ class ListsResponderV2Spec extends CoreSpec() with ImplicitSender { expectMsgPF(timeout) { case response: ListGetResponseV2 => assert(response == listsResponderV2SpecFullData.treeList) - } } "return a node" in { - responderManager ! NodeGetRequestV2( nodeIri = "http://rdfh.ch/lists/0001/treeList11", featureFactoryConfig = defaultFeatureFactoryConfig, @@ -67,9 +63,6 @@ class ListsResponderV2Spec extends CoreSpec() with ImplicitSender { expectMsgPF(timeout) { case response: NodeGetResponseV2 => assert(response == listsResponderV2SpecFullData.treeNode) } - } - } - } diff --git a/webapi/src/test/scala/org/knora/webapi/sharedtestdata/SharedListsTestDataADM.scala b/webapi/src/test/scala/org/knora/webapi/sharedtestdata/SharedListsTestDataADM.scala index cb3efe603d..6b8b61f1f0 100644 --- a/webapi/src/test/scala/org/knora/webapi/sharedtestdata/SharedListsTestDataADM.scala +++ b/webapi/src/test/scala/org/knora/webapi/sharedtestdata/SharedListsTestDataADM.scala @@ -74,8 +74,8 @@ object SharedListsTestDataADM { name = Some("treelistroot"), labels = StringLiteralSequenceV2( Vector( - StringLiteralV2(value = "Listenwurzel", language = Some("de")), - StringLiteralV2(value = "Tree list root", language = Some("en")) + StringLiteralV2(value = "Tree list root", language = Some("en")), + StringLiteralV2(value = "Listenwurzel", language = Some("de")) ) ), comments = StringLiteralSequenceV2(Vector(StringLiteralV2(value = "Anything Tree List", language = Some("en"))))