Compare commits

...
Author SHA1 Message Date
james.maes 971249bdc4 docs: point CLAUDE.md at the qqq-snapshot profile
Part of QRun-IO/qqq-all#1
2026-09-25 19:38:27 -05:00
james.maes df03ac582a build: replace qqq.version override with opt-in qqq-snapshot profile
-Pqqq-snapshot imports qqq-bom-pom 4.1.0-SNAPSHOT and brings the snapshots repository with it.

Part of QRun-IO/qqq-all#1
2026-09-25 19:38:26 -05:00
james.maes 0a63b1f013 revert: keep existing pom <licenses> block
Licensing alignment is a separate owner decision (QRun-IO/qqq#765 step 2). Reverts a181b3b.

Part of QRun-IO/qqq-all#1
2026-09-25 19:37:24 -05:00
james.maes 036e8b1cfa docs: update CLAUDE.md notes for the parent 2.0.0 re-pin
Part of QRun-IO/qqq-all#1
2026-09-25 19:25:27 -05:00
james.maes a181b3bca3 build: declare Apache-2.0 license in pom
Part of QRun-IO/qqq-all#1
2026-09-25 19:25:26 -05:00
james.maes 6afce06460 build: add opt-in qqq.version override profile
-Dqqq.version=4.1.0-SNAPSHOT verifies against another qqq line; default builds keep the parent's pin.

Part of QRun-IO/qqq-all#1
2026-09-25 19:25:26 -05:00
james.maes 35aa2da4fe build: re-pin to qbit-build-parent 2.0.0 (qqq 4.0.0)
Drop the shadowing qqq-bom-pom import (ADR-0007) and move off two APIs removed in qqq 4.0.

Part of QRun-IO/qqq-all#1
2026-09-25 19:25:20 -05:00
james.maes 795ac7e81e test: cover sparse-update fallback in TableViewFieldCustomizer
A sparse update must validate against the fieldName on the old record.

Part of QRun-IO/qqq-all#1
2026-09-25 19:24:54 -05:00
james.maes debc4fd940 chore: merge main into develop
Back-merge of the 0.4.0 release; kept develop's 0.5.0-SNAPSHOT revision.

Part of QRun-IO/qqq-all#1
2026-09-25 19:19:05 -05:00
Darin Kelkhoff 523fd34095 chore: fix ot use revision property in <version> tag 2026-03-13 10:10:36 -05:00
CircleCI 9a6eca0189 Bump version to 0.4.0 [skip ci] 2026-03-13 15:05:08 +00:00
Darin Kelkhoff 67252ae1f3 Merge pull request #6 from QRun-IO/release/0.4
Release/0.4
2026-03-13 10:03:20 -05:00
5 changed files with 68 additions and 24 deletions

No files matched your search

+3 -2
View File
@@ -18,5 +18,6 @@ Notes for agents working here:
CONTRIBUTING.md are copy-pasted from qbit-user-role-permissions.
- Licensing metadata is contradictory (LICENSE/NOTICE = Apache-2.0; pom, file headers,
checkstyle template = AGPL-3.0; README footer says proprietary). Open PR #5 fixes the pom.
- Depends on `qqq-bom-pom:0.40.0-SNAPSHOT` — snapshot resolution may break; see dossier
"v4.0 impact" before bumping qqq versions.
- Default builds take the qqq version only from `qbit-build-parent` (2.0.0 = qqq 4.0.0);
do not add an always-on `qqq-bom-pom` import (ADR-0007). To check the next qqq line, run
`mvn -B verify -Pqqq-snapshot` (4.1.0-SNAPSHOT; override with `-Dqqq.snapshot.version`).
+35 -19
View File
@@ -25,7 +25,7 @@
<parent>
<groupId>com.kingsrook</groupId>
<artifactId>qbit-build-parent</artifactId>
<version>1.5.1</version>
<version>2.0.0</version>
</parent>
<groupId>com.kingsrook.qbits</groupId>
@@ -68,18 +68,6 @@
<revision>0.5.0-SNAPSHOT</revision>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-bom-pom</artifactId>
<version>0.40.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.kingsrook.qqq</groupId>
@@ -110,11 +98,39 @@
</dependency>
</dependencies>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
</repository>
</repositories>
<profiles>
<!-- Opt-in check against the next qqq line: mvn -B verify -Pqqq-snapshot -->
<!-- (override the version with -Dqqq.snapshot.version=...). Default builds -->
<!-- take the qqq version only from qbit-build-parent. -->
<profile>
<id>qqq-snapshot</id>
<properties>
<qqq.snapshot.version>4.1.0-SNAPSHOT</qqq.snapshot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-bom-pom</artifactId>
<version>${qqq.snapshot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>sonatype-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
</project>
@@ -36,6 +36,7 @@ import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData;
import com.kingsrook.qqq.backend.core.model.statusmessages.BadInputStatusMessage;
import com.kingsrook.qqq.backend.core.model.statusmessages.SystemErrorStatusMessage;
import com.kingsrook.qqq.backend.core.utils.ValueUtils;
/*******************************************************************************
@@ -57,8 +58,8 @@ public class TableViewFieldCustomizer implements TableCustomizerInterface
try
{
Integer id = record.getValueInteger("id");
String fieldName = RecordCustomizerUtilityInterface.getValueFromRecordOrOldRecord("fieldName", record, id, oldRecordMap);
String accessLevelId = RecordCustomizerUtilityInterface.getValueFromRecordOrOldRecord("accessLevel", record, id, oldRecordMap);
String fieldName = ValueUtils.getValueAsString(RecordCustomizerUtilityInterface.getValueFromRecordElseFromOldRecord("fieldName", record, id, oldRecordMap));
String accessLevelId = ValueUtils.getValueAsString(RecordCustomizerUtilityInterface.getValueFromRecordElseFromOldRecord("accessLevel", record, id, oldRecordMap));
String[] parts = fieldName.split("\\.");
String tableName = parts[0];
@@ -78,7 +78,7 @@ public class BaseTest
// basic definition of an instance //
/////////////////////////////////////
QInstance qInstance = new QInstance();
qInstance.setAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS));
qInstance.withInstanceDefaultAuthentication(new QAuthenticationMetaData().withType(QAuthenticationType.FULLY_ANONYMOUS));
qInstance.addBackend(new RDBMSBackendMetaData()
.withName(RDBMS_BACKEND_NAME)
.withVendor("h2")
@@ -96,6 +96,32 @@ class TableViewFieldCustomizerTest extends BaseTest
/*******************************************************************************
** a sparse update (e.g., only accessLevel set) must validate against the
** fieldName from the old record.
*******************************************************************************/
@Test
void testSparseUpdateUsesOldRecordValues() throws QException
{
QContext.getQInstance().addTable(new QTableMetaData()
.withName("testTable3")
.withField(new QFieldMetaData("mandatory", QFieldType.STRING).withIsRequired(true))
.withField(new QFieldMetaData("optional", QFieldType.STRING)));
Optional<List<QRecord>> oldRecordList = Optional.of(List.of(
new TableViewField().withId(1).withFieldName("testTable3.mandatory").withAccessLevel(FieldAccessLevel.EDITABLE_REQUIRED).toQRecord(),
new TableViewField().withId(2).withFieldName("testTable3.optional").withAccessLevel(FieldAccessLevel.EDITABLE_OPTIONAL).toQRecord()));
QRecord mandatoryToReadOnly = new QRecord().withValue("id", 1).withValue("accessLevel", FieldAccessLevel.READ_ONLY.getId());
QRecord optionalToReadOnly = new QRecord().withValue("id", 2).withValue("accessLevel", FieldAccessLevel.READ_ONLY.getId());
new TableViewFieldCustomizer().preInsertOrUpdate(null, List.of(mandatoryToReadOnly, optionalToReadOnly), false, oldRecordList);
assertThat(mandatoryToReadOnly.getErrors()).hasSizeGreaterThan(0);
assertThat(optionalToReadOnly.getErrors()).isNullOrEmpty();
}
/***************************************************************************
*
***************************************************************************/