Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
6feea72
WIP DRYD-1435: bumping java, nuxeo version numbers and plugin version…
Sep 4, 2025
4d51d3f
WIP DRYD-1435: bump jaxb-basics version
Sep 5, 2025
8d25176
WIP DRYD-1435: squashing a bunch of POM changes to hand off
Oct 1, 2025
17c3106
Revert some formatting changes
mikejritter Feb 23, 2026
94d0afe
Comment out dependency in order to resolve
mikejritter Mar 10, 2026
f0e3848
Reset nuxeo version for jaxb testing
mikejritter Mar 13, 2026
0dc0783
Disable hyperjaxb plugin
mikejritter Mar 24, 2026
059a719
Merge pull request #516 from upgrade/baseline-branch
mikejritter Mar 26, 2026
62c617d
DRYD-2052: Update jaxb plugin and schemas (#517)
mikejritter Apr 6, 2026
f3cb0b7
Migrate hyperjaxb module from xsd to classes (#521)
mikejritter Apr 9, 2026
21e1fa9
Migrate account from xsd to classes (#520)
mikejritter Apr 9, 2026
3c909e6
Migrate authentication from xsd to classes (#519)
mikejritter Apr 9, 2026
a7ee9ff
Authorization migrate xsd to classes (#518)
mikejritter Apr 9, 2026
50c71f2
DRYD-2053: Update JAXB Imports (#522)
mikejritter Apr 10, 2026
047dce8
DRYD-2080: Support Ant scripts (#523)
mikejritter Apr 10, 2026
9963459
DRYD-2082: Update Hibernate (#524)
mikejritter Apr 14, 2026
27c696e
DRYD-2051: Nuxeo updates (#525)
mikejritter Apr 20, 2026
e6d8fcd
Merge remote-tracking branch 'upstream/develop' into upgrade/dryd-163…
mikejritter Apr 24, 2026
6d20aba
Fix import regression from merge
mikejritter Apr 24, 2026
f81241a
DRYD-2091: Upgrade RESTEasy (#530)
mikejritter May 5, 2026
5a44822
DRYD-2100: Configure legacy trash implementation (#531)
mikejritter May 7, 2026
aceb024
DRYD-2101: Update Authority Fulltext Queries (#532)
mikejritter May 8, 2026
9c0c759
DRYD-2089: Updates to Integration Tests (#534)
mikejritter May 12, 2026
befa10b
DRYD-2102: Fixes for Thumbnail Derivative Generation (#533)
mikejritter May 12, 2026
a7d3e56
Update ES Mappings and Analysis Config (#536)
mikejritter May 14, 2026
5ecf54a
Disable DTD when parsing XML
mikejritter May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
23 changes: 23 additions & 0 deletions 3rdparty/ant/build.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<project name="ant-libs" default="prepare-ant" basedir=".">
<description>Collectionspace Services - Ant Libs</description>

<target name="prepare-ant-libs">
<exec executable="mvn" failonerror="true">
<arg value="dependency:copy-dependencies"/>
</exec>
</target>

<target name="test-classpath" depends="prepare-ant-libs">
<path id="javax.classpath">
<fileset dir="./target/dependency">
<include name="*.jar" />
</fileset>
</path>

<scriptdef name="testscript" language="javascript" manager="javax" classpathref="javax.classpath">
<![CDATA[self.log('script ran successfully')]]>
</scriptdef>

<testscript/>
</target>
</project>
22 changes: 22 additions & 0 deletions 3rdparty/ant/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.collectionspace.services</groupId>
<artifactId>org.collectionspace.services.3rdparty</artifactId>
<version>${revision}</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>org.collectionspace.services.3rdparty.ant-lib</artifactId>
<name>collectionspace.3rdparty.ant-lib</name>
<packaging>pom</packaging>

<dependencies>
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.7</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,33 @@
import java.util.Map;
import java.util.Set;

import javax.ws.rs.core.HttpHeaders;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.IntNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.TextNode;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.IntNode;
import org.codehaus.jackson.node.ObjectNode;
import org.codehaus.jackson.node.TextNode;
import org.collectionspace.services.common.api.RefNameUtils;
import org.nuxeo.ecm.automation.jaxrs.io.documents.JsonESDocumentWriter;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.elasticsearch.io.JsonESDocumentWriter;

public class DefaultESDocumentWriter extends JsonESDocumentWriter {
private static ObjectMapper objectMapper = new ObjectMapper();
private static final ObjectMapper objectMapper = new ObjectMapper();

@Override
public void writeDoc(JsonGenerator jg, DocumentModel doc, String[] schemas,
Map<String, String> contextParameters, HttpHeaders headers)
throws IOException {

public void writeESDocument(JsonGenerator jg, DocumentModel doc, String[] schemas,
Map<String, String> contextParameters) throws IOException {
ObjectNode denormValues = getDenormValues(doc);

jg.writeStartObject();

writeSystemProperties(jg, doc);
writeSchemas(jg, doc, schemas);
writeContextParameters(jg, doc, contextParameters);
writeDenormValues(jg, doc, denormValues);
writeDenormValues(jg, denormValues);

jg.writeEndObject();
jg.flush();
Expand Down Expand Up @@ -90,13 +86,13 @@ public ObjectNode getDenormValues(DocumentModel doc) {
return denormValues;
}

public void writeDenormValues(JsonGenerator jg, DocumentModel doc, ObjectNode denormValues) throws IOException {
if (denormValues != null && denormValues.size() > 0) {
public void writeDenormValues(JsonGenerator jg, ObjectNode denormValues) throws IOException {
if (denormValues != null && !denormValues.isEmpty()) {
if (jg.getCodec() == null) {
jg.setCodec(objectMapper);
}

Iterator<Map.Entry<String, JsonNode>> entries = denormValues.getFields();
Iterator<Map.Entry<String, JsonNode>> entries = denormValues.fields();

while (entries.hasNext()) {
Map.Entry<String, JsonNode> entry = entries.next();
Expand All @@ -112,29 +108,26 @@ private void denormMediaRecords(CoreSession session, String csid, String tenantI

String relatedRecordQuery = String.format("SELECT * FROM Relation WHERE relations_common:subjectCsid = '%s' AND relations_common:objectDocumentType = 'Media' AND ecm:currentLifeCycleState = 'project' AND collectionspace_core:tenantId = '%s'", csid, tenantId);
DocumentModelList relationDocs = session.query(relatedRecordQuery);
List<JsonNode> mediaCsids = new ArrayList<JsonNode>();
List<JsonNode> mediaAltTexts = new ArrayList<JsonNode>();
List<JsonNode> mediaCsids = new ArrayList<>();
List<JsonNode> mediaAltTexts = new ArrayList<>();

if (relationDocs.size() > 0) {
Iterator<DocumentModel> iterator = relationDocs.iterator();
for (DocumentModel relationDoc : relationDocs) {
String mediaCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
DocumentModel mediaDoc = getRecordByCsid(session, tenantId, "Media", mediaCsid);

while (iterator.hasNext()) {
DocumentModel relationDoc = iterator.next();
String mediaCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
DocumentModel mediaDoc = getRecordByCsid(session, tenantId, "Media", mediaCsid);
if (isMediaPublished(mediaDoc)) {
mediaCsids.add(new TextNode(mediaCsid));

if (isMediaPublished(mediaDoc)) {
mediaCsids.add(new TextNode(mediaCsid));
String altText = (String) mediaDoc.getProperty("media_common", "altText");

String altText = (String) mediaDoc.getProperty("media_common", "altText");
if (altText == null) {
altText = "";
}

if (altText == null) {
altText = "";
}

mediaAltTexts.add(new TextNode(altText));
}
}
mediaAltTexts.add(new TextNode(altText));
}
}
}

denormValues.putArray("mediaCsid").addAll(mediaCsids);
Expand All @@ -149,19 +142,16 @@ private void denormRelatedObjects(CoreSession session, String csid, String tenan
"SELECT * FROM Relation WHERE relations_common:objectCsid = '%s' AND relations_common:subjectDocumentType = 'CollectionObject' AND ecm:currentLifeCycleState = 'project' AND collectionspace_core:tenantId = '%s'",
csid, tenantId);
DocumentModelList relationDocs = session.query(relatedRecordQuery);
List<JsonNode> objectCsids = new ArrayList<JsonNode>();
List<JsonNode> objectCsids = new ArrayList<>();

if (relationDocs.size() > 0) {
Iterator<DocumentModel> iterator = relationDocs.iterator();

while (iterator.hasNext()) {
DocumentModel relationDoc = iterator.next();
String objectCsid = (String) relationDoc.getProperty("relations_common", "subjectCsid");
for (DocumentModel relationDoc : relationDocs) {
String objectCsid = (String) relationDoc.getProperty("relations_common", "subjectCsid");

if (objectCsid != null) {
objectCsids.add(new TextNode(objectCsid));
}
}
if (objectCsid != null) {
objectCsids.add(new TextNode(objectCsid));
}
}
}

denormValues.putArray("objectCsid").addAll(objectCsids);
Expand All @@ -172,20 +162,17 @@ private void denormAcquisitionRecords(CoreSession session, String csid, String t

String relatedRecordQuery = String.format("SELECT * FROM Relation WHERE relations_common:subjectCsid = '%s' AND relations_common:objectDocumentType = 'Acquisition' AND ecm:currentLifeCycleState = 'project' AND collectionspace_core:tenantId = '%s'", csid, tenantId);
DocumentModelList relationDocs = session.query(relatedRecordQuery);
List<JsonNode> creditLines = new ArrayList<JsonNode>();
List<JsonNode> creditLines = new ArrayList<>();

if (relationDocs.size() > 0) {
Iterator<DocumentModel> iterator = relationDocs.iterator();

while (iterator.hasNext()) {
DocumentModel relationDoc = iterator.next();
String acquisitionCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
String creditLine = getCreditLine(session, tenantId, acquisitionCsid);

if (creditLine != null && creditLine.length() > 0) {
creditLines.add(new TextNode(creditLine));
}
}
for (DocumentModel relationDoc : relationDocs) {
String acquisitionCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
String creditLine = getCreditLine(session, tenantId, acquisitionCsid);

if (creditLine != null && !creditLine.isEmpty()) {
creditLines.add(new TextNode(creditLine));
}
}
}

denormValues.putArray("creditLine").addAll(creditLines);
Expand All @@ -196,30 +183,27 @@ private void denormExhibitionRecords(CoreSession session, String csid, String te

String relatedRecordQuery = String.format("SELECT * FROM Relation WHERE relations_common:subjectCsid = '%s' AND relations_common:objectDocumentType = 'Exhibition' AND ecm:currentLifeCycleState = 'project' AND collectionspace_core:tenantId = '%s'", csid, tenantId);
DocumentModelList relationDocs = session.query(relatedRecordQuery);
List<JsonNode> exhibitions = new ArrayList<JsonNode>();
List<JsonNode> exhibitions = new ArrayList<>();

if (relationDocs.size() > 0) {
Iterator<DocumentModel> iterator = relationDocs.iterator();
for (DocumentModel relationDoc : relationDocs) {
String exhibitionCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
DocumentModel exhibitionDoc = getRecordByCsid(session, tenantId, "Exhibition", exhibitionCsid);

while (iterator.hasNext()) {
DocumentModel relationDoc = iterator.next();
String exhibitionCsid = (String) relationDoc.getProperty("relations_common", "objectCsid");
DocumentModel exhibitionDoc = getRecordByCsid(session, tenantId, "Exhibition", exhibitionCsid);
if (exhibitionDoc != null && isExhibitionPublished(exhibitionDoc)) {
ObjectNode exhibitionNode = objectMapper.createObjectNode();

if (exhibitionDoc != null && isExhibitionPublished(exhibitionDoc)) {
ObjectNode exhibitionNode = objectMapper.createObjectNode();
String title = (String) exhibitionDoc.getProperty("exhibitions_common", "title");
String generalNote = (String) exhibitionDoc.getProperty("exhibitions_common", "generalNote");
String curatorialNote = (String) exhibitionDoc.getProperty("exhibitions_common", "curatorialNote");

String title = (String) exhibitionDoc.getProperty("exhibitions_common", "title");
String generalNote = (String) exhibitionDoc.getProperty("exhibitions_common", "generalNote");
String curatorialNote = (String) exhibitionDoc.getProperty("exhibitions_common", "curatorialNote");
exhibitionNode.put("title", title);
exhibitionNode.put("generalNote", generalNote);
exhibitionNode.put("curatorialNote", curatorialNote);

exhibitionNode.put("title", title);
exhibitionNode.put("generalNote", generalNote);
exhibitionNode.put("curatorialNote", curatorialNote);

exhibitions.add(exhibitionNode);
}
}
exhibitions.add(exhibitionNode);
}
}
}

denormValues.putArray("exhibition").addAll(exhibitions);
Expand Down Expand Up @@ -376,15 +360,14 @@ private boolean isPublished(DocumentModel doc, String publishedFieldPart, String
List<String> publishToValues = (List<String>) doc.getProperty(publishedFieldPart, publishedFieldName);

if (publishToValues != null) {
for (int i=0; i<publishToValues.size(); i++) {
String value = publishToValues.get(i);
String shortId = RefNameUtils.getItemShortId(value);

if (shortId.equals("all") || shortId.equals("cspacepub")) {
isPublished = true;
break;
}
}
for (String value : publishToValues) {
String shortId = RefNameUtils.getItemShortId(value);

if (shortId.equals("all") || shortId.equals("cspacepub")) {
isPublished = true;
break;
}
}
}
}

Expand Down Expand Up @@ -428,7 +411,7 @@ protected List<JsonNode> structDateToYearNodes(Map<String, Object> structDate) {
}

protected List<JsonNode> structDatesToYearNodes(List<Map<String, Object>> structDates) {
Set<Integer> years = new HashSet<Integer>();
Set<Integer> years = new HashSet<>();

for (Map<String, Object> structDate : structDates) {
if (structDate != null) {
Expand All @@ -440,8 +423,8 @@ protected List<JsonNode> structDatesToYearNodes(List<Map<String, Object>> struct
// Subtract one day to make it inclusive.
latestCalendar.add(Calendar.DATE, -1);

Integer earliestYear = earliestCalendar.get(Calendar.YEAR);
Integer latestYear = latestCalendar.get(Calendar.YEAR);;
int earliestYear = earliestCalendar.get(Calendar.YEAR);
int latestYear = latestCalendar.get(Calendar.YEAR);

for (int year = earliestYear; year <= latestYear; year++) {
years.add(year);
Expand All @@ -450,10 +433,10 @@ protected List<JsonNode> structDatesToYearNodes(List<Map<String, Object>> struct
}
}

List<Integer> yearList = new ArrayList<Integer>(years);
List<Integer> yearList = new ArrayList<>(years);
Collections.sort(yearList);

List<JsonNode> yearNodes = new ArrayList<JsonNode>();
List<JsonNode> yearNodes = new ArrayList<>();

for (Integer year : yearList) {
yearNodes.add(new IntNode(year));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,25 @@
import java.io.IOException;
import java.util.Map;

import javax.ws.rs.core.HttpHeaders;

import com.fasterxml.jackson.core.JsonGenerator;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.JsonGenerator;
import org.collectionspace.services.client.CollectionSpaceClient;
import org.collectionspace.services.common.ServiceMain;
import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl;
import org.collectionspace.services.config.service.ServiceBindingType;
import org.collectionspace.services.config.tenant.TenantBindingType;
import org.nuxeo.ecm.automation.jaxrs.io.documents.JsonESDocumentWriter;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.nuxeo.elasticsearch.io.JsonESDocumentWriter;

/**
* A JsonESDocumentWriter that delegates to the class that is specified in the
* CSpace tenant binding file for the current tenant.
*/
public class TenantConfiguredESDocumentWriter extends JsonESDocumentWriter {
final Logger logger = LoggerFactory.getLogger(TenantConfiguredESDocumentWriter.class);

@Override
public void writeDoc(JsonGenerator jg, DocumentModel doc, String[] schemas, Map<String, String> contextParameters,
HttpHeaders headers) throws IOException {

public void writeESDocument(JsonGenerator jg, DocumentModel doc, String[] schemas,
Map<String, String> contextParameters) throws IOException {
String tenantId = (String) doc.getProperty(CollectionSpaceClient.COLLECTIONSPACE_CORE_SCHEMA, CollectionSpaceClient.COLLECTIONSPACE_CORE_TENANTID);

if (tenantId == null) {
Expand Down Expand Up @@ -80,7 +74,7 @@ public void writeDoc(JsonGenerator jg, DocumentModel doc, String[] schemas, Map<
throw new IOException(msg, e);
}

documentWriter.writeDoc(jg, doc, schemas, contextParameters, headers);
documentWriter.writeESDocument(jg, doc, schemas, contextParameters);
}

private void writeEmptyDoc(JsonGenerator jg) throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.node.ObjectNode;
import org.collectionspace.services.common.api.RefNameUtils;
import org.collectionspace.services.nuxeo.elasticsearch.DefaultESDocumentWriter;
import org.nuxeo.ecm.core.api.DocumentModel;
Expand Down
Loading
Loading