Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
5dfc7f1
Update version to 8.3.0-SNAPSHOT (#472)
mikejritter Jun 30, 2025
583ab3d
DRYD-1829: Remove flickr urls from tests (#473)
mikejritter Jul 22, 2025
3775ba0
Prototype advanced search endpoint (#474)
axb21 Aug 28, 2025
48f6471
DRYD-1892: JDBC Parameter Build Env Var (#475)
mikejritter Sep 8, 2025
045c2a0
Fix JDBC Parameter var name (#476)
mikejritter Sep 8, 2025
eda5c17
DRYD-1818: Implement image ordering functionality for public browser …
spirosdi Oct 13, 2025
4742a05
DRYD-1902: Update Strategy for AdvancedSearch Query (#478)
mikejritter Oct 13, 2025
61164cc
DRYD-1903: Query Relations in AdvancedSearch Service (#484)
mikejritter Oct 22, 2025
6d2c12a
DRYD-1914: Report > Anthro > Fix Notice of Inventory Completion Repor…
spirosdi Oct 30, 2025
7bc5ef0
DRYD-1837: New Authority CSV Export Format (#485)
mikejritter Nov 4, 2025
ac77050
DRYD-1939: Search > Update AdvancedSearch to Spec (#487)
mikejritter Nov 18, 2025
654554d
DRYD-1952: Public Browser > Add contentPlace field (#486)
spirosdi Dec 11, 2025
1fddd8c
DRYD-1918: Report > Anthro > Fix Notice of Intent to Repatriate Repor…
spirosdi Dec 11, 2025
4de539b
DRYD-1982: Add blobAltText to advanced search (#489)
mikejritter Dec 11, 2025
8bac1c7
DRYD-1834: Remove Unnecessary Namespace Search (#490)
mikejritter Dec 16, 2025
b340fdb
NOJIRA: fixed integration test (#492)
spirosdi Jan 8, 2026
fc8cf9d
DRYD-1851: Report > Public Art > Full object with place details (#493)
spirosdi Jan 20, 2026
f8ce52b
DRYD-1837: TermRef Export Fixes (#491)
mikejritter Jan 27, 2026
000faad
Prepare 8.3.0-RC.1 (#499)
mikejritter Jan 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ public ObjectNode getDenormValues(DocumentModel doc) {
List<Map<String, Object>> prodDateGroupList = (List<Map<String, Object>>) doc.getProperty("collectionobjects_common", "objectProductionDateGroupList");

denormValues.putArray("prodYears").addAll(structDatesToYearNodes(prodDateGroupList));
} else if ("Media".equals(docType) && isMediaPublished(doc)) {
CoreSession session = doc.getCoreSession();
String csid = doc.getName();
String tenantId = (String) doc.getProperty("collectionspace_core", "tenantId");

// Add media-specific denormalized fields
denormRelatedObjects(session, csid, tenantId, denormValues);
}

return denormValues;
Expand Down Expand Up @@ -135,6 +142,31 @@ private void denormMediaRecords(CoreSession session, String csid, String tenantI
denormValues.put("hasMedia", mediaCsids.size() > 0);
}

private void denormRelatedObjects(CoreSession session, String csid, String tenantId, ObjectNode denormValues) {
// Store the objectCsid of objects that are related to this media.

String relatedRecordQuery = String.format(
"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>();

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

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

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

denormValues.putArray("objectCsid").addAll(objectCsids);
}

private void denormAcquisitionRecords(CoreSession session, String csid, String tenantId, ObjectNode denormValues) {
// Store the credit lines of acquisition records that are related to this object.

Expand Down Expand Up @@ -266,6 +298,7 @@ private void denormConceptFields(final DocumentModel doc, final ObjectNode denor
final List<String> fields = Arrays.asList("contentConcepts",
"contentEvents",
"contentPersons",
"contentPlaces",
"contentOrganizations");

for (String field : fields) {
Expand All @@ -274,7 +307,18 @@ private void denormConceptFields(final DocumentModel doc, final ObjectNode denor
for (String content : contentList) {
if (content != null) {
final ObjectNode node = objectMapper.createObjectNode();
node.put("subject", RefNameUtils.getDisplayName(content));
String subjectValue;

if (RefNameUtils.isTermRefname(content)) {
try {
subjectValue = RefNameUtils.getDisplayName(content);
} catch (Exception e) {
subjectValue = content;
}
} else {
subjectValue = content;
}
node.put("subject", subjectValue);
denormContentSubject.add(node);
}
}
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# CollectionSpace Services Changelog

## 8.3.0

* Add new endpoint for returning search results
* Add JDBC_URL_OPTS build parameter
* Add mapping for ElasticSearch imagine ordering
* Add CSV Authority export parameter
* Update notice of inventory completion report
* Update notice of intent to repatriate report
* Update full object with place details report
* Add contentPlaces to ES mapping
* Add blob alt text to media responses
* Remove cspace_english namespace search

### Bug Fixes

* Remove flickr urls from tests
15 changes: 8 additions & 7 deletions build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ host=127.0.0.1
#
# Release version info
#
release.version=8.2.0
release.version=8.3.0-RC.1
cspace.release=${release.version}
cspace.instance.id=${env.CSPACE_INSTANCE_ID}

Expand All @@ -27,15 +27,15 @@ cspace.im.root=
# UI settings
cspace.ui.package.name=cspace-ui
cspace.ui.library.name=cspaceUI
cspace.ui.version=10.1.0
cspace.ui.build.branch=main
cspace.ui.version=10.2.0-rc1.0
cspace.ui.build.branch=develop
cspace.ui.build.node.ver=20
service.ui.library.name=${cspace.ui.library.name}-service

# Public browser settings
cspace.public.browser.package.name=@collectionspace/cspace-public-browser
cspace.public.browser.library.name=cspacePublicBrowser
cspace.public.browser.version=3.4.0
cspace.public.browser.version=3.5.0-rc1.0
cspace.public.browser.build.branch=main
cspace.public.browser.build.node.ver=20

Expand Down Expand Up @@ -198,10 +198,11 @@ db.jdbc.default.datasource=jdbc/default
#db.jdbc.urloptions.encoded=ssl=true&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory&amp;foo=true

#
# By default, as placeholders, we'll supply meaningless JDBC options -both encoded and non-encode forms.
# Use the JDBC_URL_PARAMS env var to set the urloptions for the jdbc connection string
# The db.jdbc.urloptions.encoded needs to be created in each ant target which uses it by calling the
# urlencode scriptdef. We can still reference it below as it will be added at runtime.
#
db.jdbc.urloptions=foo=true&bar=false
db.jdbc.urloptions.encoded=foo=true&amp;bar=false
db.jdbc.urloptions=${env.JDBC_URL_PARAMS}

#
# JDBC urls that CollectionSpace needs to talk to the "admin" database, Nuxeo databases, and the "cspace" database (i.e., the AuthN/AuthZ database)
Expand Down
14 changes: 12 additions & 2 deletions build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@
<os family="windows" />
</condition>

<scriptdef name="urlencode" language="javascript">
<attribute name="property"/>
<![CDATA[
var value = self.project.getProperty(attributes.get("property"));
var encoded = encodeURIComponent(value);
self.project.setProperty(attributes.get("property") + ".encoded", encoded)
]]>
</scriptdef>

<target name="init">
<!-- Create the time stamp -->
<tstamp />
Expand Down Expand Up @@ -215,10 +224,10 @@
</target>

<!--
This target sends the 'create_nuxeo_db' and 'create_nuxeo_db' targets to all the Ant sub-modules/directories
and creates some database utility functions
This target calls the 'create_nuxeo_db' and 'create_cspace_db' targets and creates some database utility functions
-->
<target name="-create_db" depends="-validate_create_db_unix, -validate_create_db_windows">
<urlencode property="db.jdbc.urloptions" />
<antcall target="create_nuxeo_db" />
<antcall target="create_cspace_db" />
<antcall target="create_update_userid_db_function" />
Expand Down Expand Up @@ -303,6 +312,7 @@
</target>

<target name="import" description="import default configuration">
<urlencode property="db.jdbc.urloptions" />
<ant antfile="services/build.xml" target="import" inheritAll="false" />
</target>

Expand Down
2 changes: 1 addition & 1 deletion cspace-ui/anthro/build.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ tenant.ui.basename=/cspace/${tenant.shortname}

tenant.ui.profile.plugin.package.name=cspace-ui-plugin-profile-anthro
tenant.ui.profile.plugin.library.name=cspaceUIPluginProfileAnthro
tenant.ui.profile.plugin.version=9.1.0
tenant.ui.profile.plugin.version=9.2.0-rc1.0
tenant.ui.profile.plugin.build.branch=main

# If not set, defaults to /gateway/${tenant.shortname} on the current host.
Expand Down
59 changes: 58 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<name>services</name>

<properties>
<revision>8.2.0</revision>
<revision>8.3.0-RC.1</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cspace.services.version>${revision}</cspace.services.version>
<cspace.services.client.version>${revision}</cspace.services.client.version>
Expand Down Expand Up @@ -318,6 +318,63 @@
</execution>
</executions>
</plugin>

<!-- Integration Test plugins: jetty, failsafe, and remote-resources -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.57.v20241219</version>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<skip>${skipTests}</skip>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.5.3</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*IT.class</include>
</includes>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>3.3.0</version>
</plugin>
</plugins>
</pluginManagement>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<itemsInPage>3</itemsInPage>
<totalItems>3</totalItems>
<fieldsReturned>
csid|uri|refName|updatedAt|workflowState|identificationNumber|blobCsid|title
csid|uri|refName|updatedAt|workflowState|altText|identificationNumber|blobCsid|title
</fieldsReturned>
<list-item>
<csid>${first}</csid>
Expand Down Expand Up @@ -32,4 +32,4 @@
<workflowState>project</workflowState>
<identificationNumber>${identificationNumberLast}</identificationNumber>
</list-item>
</ns2:abstract-common-list>
</ns2:abstract-common-list>
13 changes: 8 additions & 5 deletions services/JaxRsServiceProvider/build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
</description>
<!-- set global properties for this build -->
<property name="services.trunk" value="../.."/>
<import file="${services.trunk}/build.xml" />
<!-- enviornment should be declared before reading build.properties -->
<property environment="env" />
<property file="${services.trunk}/build.properties" />
<property name="application.trunk" location="${services.trunk}/../application" />
<property name="cspace.tool.csmake" value="csmake" />
<property name="application.trunk" location="${services.trunk}/../application" />
<property name="cspace.tool.csmake" value="csmake" />
<property name="mvn.opts" value="-V" />
<property name="src" location="src"/>

Expand Down Expand Up @@ -52,10 +53,12 @@

<target name="package" depends="package-unix,package-windows"
description="Package CollectionSpace Services" />
<urlencode property="db.jdbc.urloptions" />
<target name="package-unix" if="osfamily-unix">
<exec executable="mvn" failonerror="true">
<arg value="package" />
<arg value="-Dmaven.test.skip=true" />
<arg value="-Ddb.jdbc.urloptions.encoded=${db.jdbc.urloptions.encoded}" />
<arg value="-f" />
<arg value="${basedir}/pom.xml" />
<arg value="-N" />
Expand Down Expand Up @@ -150,15 +153,15 @@
<delete dir="${jee.deploy.cspace}/${cspace.services.context}"/>
<copy file="${basedir}/target/${cspace.services.war}" todir="${jee.deploy.cspace}"/>
</target>

<!--
This target attempts to generate a set of Service artifacts (Nuxeo bundles and tenant bindings) by using the
Application layer's configuration files.

This target has a dependency on the Application layer's source tree. It assumes the Application layer's src tree root
is a directory sibling of the Source layer's source tree root. Also, it assumes the "csmake.jar" exists in the target
directory of the Application layer's "tomcat-main" module.

This target also assumes that the system environment variable 'CSPACE_JEESERVER_HOME' is set and pointing to the root
JEE server (usually Apache Tomcat) where CollectionSpace is installed. All generated Service artifacts wi
-->
Expand Down
5 changes: 5 additions & 0 deletions services/JaxRsServiceProvider/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,11 @@
<artifactId>org.collectionspace.services.restrictedmedia.service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.collectionspace.services</groupId>
<artifactId>org.collectionspace.services.advancedsearch.service</artifactId>
<version>${project.version}</version>
</dependency>

<!--dependency>
<groupId>org.collectionspace.services</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.collectionspace.services.pottag.PottagResource;
import org.collectionspace.services.report.ReportResource;
import org.collectionspace.services.acquisition.AcquisitionResource;
import org.collectionspace.services.advancedsearch.AdvancedSearch;
import org.collectionspace.services.dimension.DimensionResource;
import org.collectionspace.services.servicegroup.ServiceGroupResource;
import org.collectionspace.services.structureddate.StructuredDateResource;
Expand Down Expand Up @@ -131,6 +132,7 @@ public CollectionSpaceJaxRsApplication() {
singletons.add(new IndexResource());
singletons.add(new LoginResource());
singletons.add(new LogoutResource());
singletons.add(new AdvancedSearch());

addResourceToMapAndSingletons(new VocabularyResource());
addResourceToMapAndSingletons(new PersonAuthorityResource());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,6 @@
<class>org.collectionspace.services.account.Status</class>
<properties>
<property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"/>

<!--property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="test"/>
<property name="hibernate.connection.password" value="test"/>
<property name="hibernate.connection.url" value="${db.jdbc.cspace.url.encoded}"/-->
</properties>
</persistence-unit>
</persistence>
Loading
Loading