Add QCodeReferenceWithProperties and InitializableViaCodeReference; also, refactor QCodeLoader to eliminate most of the specialized methods - in favor of generally using getAdHoc (now that just needs a better name, lol)

This commit is contained in:
2025-03-18 11:37:23 -05:00
parent ae4e269b88
commit d033d3f464
13 changed files with 196 additions and 163 deletions

View File

@ -22,12 +22,19 @@
package com.kingsrook.qqq.backend.core.actions.customizers;
import java.util.Map;
import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.model.metadata.code.InitializableViaCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReferenceWithProperties;
import com.kingsrook.qqq.backend.core.utils.StringUtils;
import com.kingsrook.qqq.backend.core.utils.Timer;
import com.kingsrook.qqq.backend.core.utils.ValueUtils;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
/*******************************************************************************
@ -80,6 +87,7 @@ class QCodeLoaderTest extends BaseTest
}
/*******************************************************************************
**
*******************************************************************************/
@ -91,4 +99,50 @@ class QCodeLoaderTest extends BaseTest
}
}
/*******************************************************************************
**
*******************************************************************************/
@Test
void testCodeReferenceWithProperties()
{
assertNull(QCodeLoader.getAdHoc(SomeClass.class, new QCodeReference(SomeClass.class)));
SomeClass someObject = QCodeLoader.getAdHoc(SomeClass.class, new QCodeReferenceWithProperties(SomeClass.class, Map.of("property", "someValue")));
assertEquals("someValue", someObject.someProperty);
SomeClass someOtherObject = QCodeLoader.getAdHoc(SomeClass.class, new QCodeReferenceWithProperties(SomeClass.class, Map.of("property", "someOtherValue")));
assertEquals("someOtherValue", someOtherObject.someProperty);
}
/***************************************************************************
**
***************************************************************************/
public static class SomeClass implements InitializableViaCodeReference
{
private String someProperty;
/***************************************************************************
**
***************************************************************************/
@Override
public void initialize(QCodeReference codeReference)
{
if(codeReference instanceof QCodeReferenceWithProperties codeReferenceWithProperties)
{
someProperty = ValueUtils.getValueAsString(codeReferenceWithProperties.getProperties().get("property"));
}
if(!StringUtils.hasContent(someProperty))
{
throw new IllegalStateException("Missing property");
}
}
}
}