From ca7179bf7798f908814bf0ab1e9307255c958b65 Mon Sep 17 00:00:00 2001 From: Arpad Magosanyi Date: Sat, 6 Sep 2025 10:00:20 +0200 Subject: [PATCH 1/4] created sumties TRUE and FALSE closes: #10 Made sure that bridi creation keeps the BridiElement level consistent Single inheritance of types for now, an error is thrown if an element have more types. @id notation works in query, does not work in creation System initialization made more consistent. Save is a standard function from now on. Test coverage increase, code structure changes. konveyor version is 0.4.15 --- .../element/BridiElementEndToEndTest.java | 12 ++ ...lementSystemInitializationServiceTest.java | 129 ++++++++++++++++++ .../inez/element/BridiElementTestData.java | 10 +- .../CreateBridiElementServiceTest.java | 2 +- .../query/QueryProcessorEndToEndTest.java | 7 +- .../src/main/resources/mymodel.definition | 3 +- .../src/main/resources/mymodel.xml | 30 +++- inez.model.tests/src/main/resources/root.xml | 101 +++++++------- .../src/main/resources/test.properties | 0 .../java/io/github/magwas/inez/InezImpl.java | 55 ++------ .../magwas/inez/element/BridiElement.java | 25 +++- ...idiElementSystemInitializationService.java | 35 ++--- .../magwas/inez/element/ElementConstants.java | 18 ++- .../GetBridiElementReferenceIdsService.java | 23 ++++ .../GetBridiElementReferencesService.java | 10 +- .../element/GetBridiElementTypeIdService.java | 29 ++++ .../element/GetBridiElementTypeService.java | 18 +-- .../magwas/inez/element/IsOfTypeService.java | 27 ++++ .../element/RepresentBridiElementService.java | 27 ++-- .../inez/osgi/SpringBootBundleActivator.java | 4 +- .../CreateBridisFromDefinitionService.java | 34 +++++ .../query/CreateBridisFromQueryService.java | 36 +++++ .../inez/query/QueryProcessorService.java | 10 +- .../inez/storage/CreateSumtiService.java | 20 +++ .../src/main/resources/element.definition | 33 ++--- .../magwas/inez/parse/BridiFieldTestData.java | 40 +++--- .../io/github/magwas/inez/parser/Bridi.g4 | 2 +- inez.target/inez.target | 6 +- pom.xml | 4 +- 29 files changed, 533 insertions(+), 217 deletions(-) create mode 100644 inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationServiceTest.java rename {inez.model => inez.model.tests}/src/main/resources/test.properties (100%) create mode 100644 inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java create mode 100644 inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java create mode 100644 inez.model/src/main/java/io/github/magwas/inez/element/IsOfTypeService.java create mode 100644 inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromDefinitionService.java create mode 100644 inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromQueryService.java create mode 100644 inez.model/src/main/java/io/github/magwas/inez/storage/CreateSumtiService.java diff --git a/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementEndToEndTest.java b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementEndToEndTest.java index e25ee05..76e9bc9 100644 --- a/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementEndToEndTest.java +++ b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementEndToEndTest.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.stream.Collectors; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -40,11 +41,22 @@ public class BridiElementEndToEndTest implements BridiTestData { @Autowired BridiElementFactory bridiElementFactory; + @BeforeEach + void setUp() { + sumtiRepository.findAll().forEach(x -> sumtiRepository.delete(x)); + bridiReferenceRepository.findAll() + .forEach(x -> bridiReferenceRepository.delete(x)); + } + @Test void test() throws IOException { assertTrue(inez.getBridiReferenceRepository() == bridiReferenceRepository); assertTrue(bridiElementSystemInitialization.inez == inez); bridiElementSystemInitialization.apply(); + BridiElement elementModel = bridiElementFactory.apply(ELEMENT_MODEL_ID); + assertTrue(elementModel.getChildren() + .anyMatch(x -> x.getReferences().map(y -> y.id).toList() + .contains(ElementConstants.IS_FUNCTION_FOR_ID))); BridiElement root = bridiElementFactory.apply(ROOT_ID); String rootXml = loadResourceAsString("root.xml"); String theXml = root.toXml(); diff --git a/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationServiceTest.java b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationServiceTest.java new file mode 100644 index 0000000..dfbbaac --- /dev/null +++ b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationServiceTest.java @@ -0,0 +1,129 @@ +package io.github.magwas.inez.element; + +import static org.mockito.Mockito.verify; + +import java.io.IOException; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; + +import io.github.magwas.testing.TestBase; + +public class BridiElementSystemInitializationServiceTest extends TestBase + implements ElementConstants { + + @InjectMocks + public BridiElementSystemInitializationService bridiElementSystemInitialization; + + @BeforeEach + public void setUp() throws Throwable { + super.setUp(); + bridiElementSystemInitialization.apply(); + } + + @Test + @DisplayName("creates sumti IS_A") + void test() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(IS_A_ID, + IS_A_REPR); + } + + @Test + @DisplayName("creates sumti CONTAINS") + void test1() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(CONTAINS_ID, + CONTAINS_REPR); + } + + @Test + @DisplayName("creates sumti ROOT") + void test2() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(ROOT_ID, ROOT_ID); + } + + @Test + @DisplayName("creates sumti THING") + void test3() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(THING_ID, + THING_ID); + } + + @Test + @DisplayName("creates sumti CONTAINER") + void test4() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(CONTAINER_ID, + CONTAINER_ID); + } + + @Test + @DisplayName("creates sumti UNPLACED") + void test5() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(UNPLACED_ID, + UNPLACED_ID); + } + + @Test + @DisplayName("creates sumti TRUE") + void test6() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(TRUE_ID, TRUE_ID); + } + + @Test + @DisplayName("creates sumti FALSE") + void test7() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(FALSE_ID, + FALSE_ID); + } + + @Test + @DisplayName("creates sumti IS_FUNCTION_FOR") + void test8() throws IOException { + verify(bridiElementSystemInitialization.inez) + .createSumti(IS_FUNCTION_FOR_ID, IS_FUNCTION_FOR_REPR); + } + + @Test + @DisplayName("creates sumti SAVE_FUNCTION_REF") + void test9() throws IOException { + verify(bridiElementSystemInitialization.inez) + .createSumti(SAVE_FUNCTION_REF_ID, SAVE_FUNCTION_REF_ID); + } + + @Test + @DisplayName("creates sumti DOSAVE") + void test10() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(DOSAVE_ID, + DOSAVE_REPR); + } + + @Test + @DisplayName("creates sumti DIAGRAM") + void test11() throws IOException { + verify(bridiElementSystemInitialization.inez).createSumti(DIAGRAM_ID, + DIAGRAM_ID); + } + + @Test + @DisplayName("creates sumti DIAGRAM_ELEMENT") + void test12() throws IOException { + verify(bridiElementSystemInitialization.inez) + .createSumti(DIAGRAM_ELEMENT_ID, DIAGRAM_ELEMENT_REPR); + } + + @Test + @DisplayName("creates bridis from the definition file") + void test13() throws IOException { + verify(bridiElementSystemInitialization.inez) + .createFromdefinitions(ELEMENT_DEFINITIONS_RESOURCE); + } + + @Test + @DisplayName("logs success") + void test14() throws IOException { + verify(bridiElementSystemInitialization.logger) + .info("BridiElement system initialized"); + } + +} diff --git a/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementTestData.java b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementTestData.java index 4b8f295..a1f2ee9 100644 --- a/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementTestData.java +++ b/inez.model.tests/src/main/java/io/github/magwas/inez/element/BridiElementTestData.java @@ -7,18 +7,26 @@ import io.github.magwas.inez.parse.IdUtil; public interface BridiElementTestData extends BridiFieldTestData { + String DOG_ID = "id:dog"; String CONTAINS_ID = "CONTAINS"; String ROOT_ID = "ROOT"; + String ELEMENT_MODEL_ID = "id:elementModel"; String CONTAINER_ID = "CONTAINER"; String CONTAINS_ELEMENT_REPR = "{my model} contains {alice}"; String CONTAINS_ELEMENT_ID = IdUtil.createID(CONTAINS_ELEMENT_REPR); String MY_MODEL_REPR = "my model"; String MY_MODEL_ID = IdUtil.createID(MY_MODEL_REPR); String FOLDER_ID = IdUtil.createID("folder"); + String ALICE_IS_A_HUMAN_ID = "id:{alice} is a {human}"; + String HUMAN_IS_A_ANIMAL_ID = "id:{human} is a {animal}"; + String DOG_IS_A_ANIMAL_ID = "id:{dog} is a {animal}"; + String MY_MODEL_IS_A_FOLDER_ID = "id:{my model} is a {folder}"; List CONTAINS_ELEMENT_REFERENCES = List.of(CONTAINS_ID, MY_MODEL_ID, ALICE_ID); String HUMAN_REPR = "human"; String HUMAN_ID = IdUtil.createID(HUMAN_REPR); - Set MY_FOLDER_CHILDREN = Set.of(ALICE_ID, HUMAN_ID, IS_A_ID); + Set MY_FOLDER_CHILDREN = Set.of(ALICE_ID, HUMAN_ID, DOG_ID, + MY_MODEL_IS_A_FOLDER_ID, DOG_IS_A_ANIMAL_ID, HUMAN_IS_A_ANIMAL_ID, + ALICE_IS_A_HUMAN_ID); } diff --git a/inez.model.tests/src/main/java/io/github/magwas/inez/element/CreateBridiElementServiceTest.java b/inez.model.tests/src/main/java/io/github/magwas/inez/element/CreateBridiElementServiceTest.java index bb74c1c..53e5b87 100644 --- a/inez.model.tests/src/main/java/io/github/magwas/inez/element/CreateBridiElementServiceTest.java +++ b/inez.model.tests/src/main/java/io/github/magwas/inez/element/CreateBridiElementServiceTest.java @@ -27,7 +27,7 @@ public class CreateBridiElementServiceTest extends TestBase @BeforeEach @Override - public void setUp() { + public void setUp() throws Throwable { super.setUp(); element = createBridiElement.apply(MY_MODEL_ID, HUMAN_ID, ALICE_REPR); @SuppressWarnings("unchecked") diff --git a/inez.model.tests/src/main/java/io/github/magwas/inez/query/QueryProcessorEndToEndTest.java b/inez.model.tests/src/main/java/io/github/magwas/inez/query/QueryProcessorEndToEndTest.java index bf23d39..e00bcbd 100644 --- a/inez.model.tests/src/main/java/io/github/magwas/inez/query/QueryProcessorEndToEndTest.java +++ b/inez.model.tests/src/main/java/io/github/magwas/inez/query/QueryProcessorEndToEndTest.java @@ -4,6 +4,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.io.IOException; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -22,7 +23,6 @@ import io.github.magwas.inez.BridiTestData; import io.github.magwas.inez.InezImpl; import io.github.magwas.inez.TestConfig; -import io.github.magwas.inez.element.ElementConstants; import io.github.magwas.inez.functions.Save; import io.github.magwas.inez.osgi.SpringBootBundleActivator; import io.github.magwas.runtime.LogUtil; @@ -37,7 +37,7 @@ class QueryProcessorEndToEndTest implements BridiTestData { InezImpl inez; @BeforeEach - void setUp() { + void setUp() throws IOException { ServiceReference sr = mock(ServiceReference.class); BundleContext ctx = mock(BundleContext.class); when((ServiceReference) ctx @@ -50,7 +50,6 @@ void setUp() { @Test void test1() { - inez.create(TEST_TEXT).peek(x -> LogUtil.debug("created:" + x)).toList(); assertEquals(List.of(ALICE), inez.findAllByRepresentation(ALICE_REPR).toList()); @@ -62,8 +61,6 @@ void test1() { "{cecile} {{$?} {banana}}"); assertQuery(Set.of(ALICE_EATS_BANANA, ALICE_EATS_CHIPS), "{alice} {{eats} {$?}}"); - inez.createSumti(ElementConstants.IS_FUNCTION_FOR, - "{0} is function for {1}"); assertQuery(Set.of("putty"), "doSave {" + "putty" + "}"); assertEquals(1, inez.findAllByRepresentation("putty").count()); List putty = inez.findAllByRepresentation("putty").toList(); diff --git a/inez.model.tests/src/main/resources/mymodel.definition b/inez.model.tests/src/main/resources/mymodel.definition index e08484d..ecb2ed5 100644 --- a/inez.model.tests/src/main/resources/mymodel.definition +++ b/inez.model.tests/src/main/resources/mymodel.definition @@ -2,8 +2,7 @@ {my model} is a {folder} {my model} contains {alice} {my model} contains {human} +{my model} contains {dog} {human} is a {animal} {alice} is a {human} -{my model} contains {[{0} is a {1}]} -{my model} contains {[{my model} contains {alice}]} {dog} is a {animal} \ No newline at end of file diff --git a/inez.model.tests/src/main/resources/mymodel.xml b/inez.model.tests/src/main/resources/mymodel.xml index 7291db7..0095b55 100644 --- a/inez.model.tests/src/main/resources/mymodel.xml +++ b/inez.model.tests/src/main/resources/mymodel.xml @@ -1,16 +1,36 @@ - - - + + + + + + + + IS_A + id:alice + id:human - + + IS_A + id:dog + id:animal - + + + IS_A + id:human + id:animal + + + + IS_A + id:my model + id:folder diff --git a/inez.model.tests/src/main/resources/root.xml b/inez.model.tests/src/main/resources/root.xml index 95af500..39afc34 100644 --- a/inez.model.tests/src/main/resources/root.xml +++ b/inez.model.tests/src/main/resources/root.xml @@ -1,61 +1,58 @@ - - - - + + + IS_A + UNPLACED + id:model + + - - - - + + + IS_A + CONTAINER + THING + + - - + + + + - - - - - + - - - - - + - - - + - - - IS_A - CONTAINER - THING - + - - - IS_A - ROOT - CONTAINER - + + + + IS_A + id:folder + CONTAINER + + - - - IS_A - UNPLACED - id:model - + + + + IS_A + id:model + id:folder + + @@ -64,19 +61,21 @@ id:model - + - IS_A - id:folder - CONTAINER + IS_FUNCTION_FOR + io.github.magwas.inez.functions.Save + doSave - - - IS_A - id:model - id:folder - + + + + IS_A + ROOT + CONTAINER + + diff --git a/inez.model/src/main/resources/test.properties b/inez.model.tests/src/main/resources/test.properties similarity index 100% rename from inez.model/src/main/resources/test.properties rename to inez.model.tests/src/main/resources/test.properties diff --git a/inez.model/src/main/java/io/github/magwas/inez/InezImpl.java b/inez.model/src/main/java/io/github/magwas/inez/InezImpl.java index e564c93..7eac8c5 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/InezImpl.java +++ b/inez.model/src/main/java/io/github/magwas/inez/InezImpl.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.util.Collection; -import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; @@ -14,12 +13,13 @@ import io.github.magwas.inez.element.BridiElementFactory; import io.github.magwas.inez.element.BridiElementSystemInitializationService; import io.github.magwas.inez.element.ElementConstants; -import io.github.magwas.inez.parse.ParseTextService; -import io.github.magwas.inez.query.CreateBridisFromParserOutputService; +import io.github.magwas.inez.query.CreateBridisFromDefinitionService; +import io.github.magwas.inez.query.CreateBridisFromQueryService; import io.github.magwas.inez.query.QueryProcessorService; import io.github.magwas.inez.storage.BridiStoreChangeListenersService; import io.github.magwas.inez.storage.BridiStoreHistoryRepository; import io.github.magwas.inez.storage.CreateBridiFromSumtiService; +import io.github.magwas.inez.storage.CreateSumtiService; import io.github.magwas.inez.storage.DeleteBridiService; import io.github.magwas.inez.storage.FindAllByRepresentationService; import io.github.magwas.inez.storage.FindAllIdByRepresentationService; @@ -28,9 +28,7 @@ import io.github.magwas.inez.storage.SaveBridiService; import io.github.magwas.inez.storage.model.Sumti; import io.github.magwas.inez.storage.repository.BridiReferenceRepository; -import io.github.magwas.inez.storage.repository.SumtiRepository; import io.github.magwas.kodekonveyorannotations.Delegate; -import io.github.magwas.runtime.LogUtil; @Component @Delegate @@ -40,18 +38,12 @@ public class InezImpl implements Inez { @Autowired QueryProcessorService queryProcessor; @Autowired - ParseTextService parseText; - @Autowired - CreateBridisFromParserOutputService createBridisFromParserOutput; - @Autowired BridiStoreHistoryRepository bridiStoreHistoryRepository; @Autowired BridiReferenceRepository bridiReferenceRepository; @Autowired CreateBridiFromSumtiService createBridiFromSumti; @Autowired - SumtiRepository sumtiRepository; - @Autowired SaveBridiService saveBridi; @Autowired DeleteBridiService deleteBridi; @@ -67,16 +59,16 @@ public class InezImpl implements Inez { BridiElementSystemInitializationService bridiElementSystemInitialization; @Autowired BridiElementFactory bridiElementFactory; + @Autowired + CreateBridisFromQueryService createBridisFromQuery; + @Autowired + CreateSumtiService createSumti; private InezImpl() { } - public void initialize() { - try { - bridiElementSystemInitialization.apply(); - } catch (IOException e) { - throw new Error(e); - } + public void initialize() throws IOException { + bridiElementSystemInitialization.apply(); } public void registerListener(BridiStoreChangeListener listener) { @@ -92,12 +84,7 @@ public Stream query(String query) { } public Stream create(String query) { - LogUtil.debug("create(" + query); - List toSave = parseText.apply(query) - .map(createBridisFromParserOutput).flatMap(x -> x) - .peek(x -> LogUtil.debug("saving", x)).toList(); - saveBridi.apply(toSave); - return toSave.stream(); + return createBridisFromQuery.apply(query); } public Set save(Collection values) { @@ -116,31 +103,19 @@ public Optional findById(String id) { @Override public Sumti createSumti(String id, String representation) { - Sumti sumti = new Sumti(id, representation); - sumtiRepository.save(sumti); - return sumti; + return createSumti.apply(id, representation); } public BridiReferenceRepository getBridiReferenceRepository() { return bridiReferenceRepository; } + @Autowired + CreateBridisFromDefinitionService createBridisFromDefinition; + @Override public Stream createFromdefinitions(String definitionName) { - String elementDefinition; - try { - elementDefinition = loadResource(definitionName); - } catch (IOException e) { - throw new Error(e); - } - return create(elementDefinition); - } - - private String loadResource(String definitionName) throws IOException { - ClassLoader classloader = Thread.currentThread().getContextClassLoader(); - String elementDefinition = new String( - classloader.getResourceAsStream(definitionName).readAllBytes()); - return elementDefinition; + return createBridisFromDefinition.apply(definitionName); } public BridiElement root() { diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/BridiElement.java b/inez.model/src/main/java/io/github/magwas/inez/element/BridiElement.java index 97937fe..123f31d 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/BridiElement.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/BridiElement.java @@ -30,7 +30,7 @@ public class BridiElement implements ElementConstants { @Autowired GetBridiElementReferencesService getBridiElementReferences; @Autowired - RepresentBridiElementService representBridiElementService; + RepresentBridiElementService representBridiElement; @Autowired SumtiRepository sumtiRepository; @Autowired @@ -43,6 +43,13 @@ public class BridiElement implements ElementConstants { CreateBridiElementService createBridiElement; @Autowired BridiElementFactory bridiElementFactory; + @Autowired + IsOfTypeService isOfType; + + @Autowired + GetBridiElementReferenceIdsService getBridiElementReferenceIds; + @Autowired + GetBridiElementTypeIdService getBridiElementTypeId; void fixParent() { if (id.equals(ROOT_ID)) @@ -51,9 +58,21 @@ void fixParent() { if (parent != null) return; LogUtil.debug("fixing", id); + List references = getBridiElementReferenceIds.apply(id).toList(); + if (references.size() > 1) { + String firstSumtiID = references.get(1); + if (isOfType.apply(firstSumtiID, CONTAINER_ID)) + parent = firstSumtiID; + else + parent = getBridiElementParent.apply(firstSumtiID); + } + if (parent == null) { + parent = UNPLACED_ID; + } String unplacedId = "unplaced:" + id; sumtiRepository.save(new Sumti(unplacedId, unplacedId)); - addReferences.apply(unplacedId, List.of(CONTAINS_ID, UNPLACED_ID, id)); + LogUtil.debug("reparenting", id, parent); + addReferences.apply(unplacedId, List.of(CONTAINS_ID, parent, id)); } BridiElement(String id) { @@ -81,7 +100,7 @@ public BridiElement getParent() { } public String toXml() { - return representBridiElementService.apply(id); + return representBridiElement.apply(id); } @Override diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationService.java b/inez.model/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationService.java index 8715bfc..840a03f 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/BridiElementSystemInitializationService.java @@ -1,44 +1,37 @@ package io.github.magwas.inez.element; import java.io.IOException; -import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import io.github.magwas.inez.Bridi; import io.github.magwas.inez.InezImpl; -import io.github.magwas.runtime.LogUtil; +import io.github.magwas.runtime.LoggerService; @Service public class BridiElementSystemInitializationService implements ElementConstants { @Autowired InezImpl inez; + @Autowired + LoggerService logger; public void apply() throws IOException { + inez.createSumti(ROOT_ID, ROOT_ID); + inez.createSumti(UNPLACED_ID, UNPLACED_ID); inez.createSumti(IS_A_ID, IS_A_REPR); inez.createSumti(CONTAINS_ID, CONTAINS_REPR); - inez.createSumti(ROOT_ID, ROOT_ID); inez.createSumti(THING_ID, THING_ID); inez.createSumti(CONTAINER_ID, CONTAINER_ID); - inez.createSumti(RULE_ID, RULE_REPR); - inez.createSumti(UNPLACED_ID, UNPLACED_REPR); - String definitions = "element.definition"; - inez.createFromdefinitions(definitions).toArray(); - inez.save(List.of( - new Bridi(ElementConstants.IS_FUNCTION_FOR, "{0} is function for {1}", - null), - new Bridi("io.github.magwas.inez.functions.Save", - "io.github.magwas.inez.functions.Save", null), - new Bridi("doSave", "doSave {0}", null), - new Bridi("savefunctiondef", - "{io.github.magwas.inez.functions.Save} is function for {doSave}", - List.of(ElementConstants.IS_FUNCTION_FOR, - "io.github.magwas.inez.functions.Save", "doSave")))); - inez.save(List.of(new Bridi(ElementConstants.DIAGRAM_ID, "diagram", null), - new Bridi("diagElement", "shows {0} at {1},{2}", null))); - LogUtil.info("BridiElement system initialized"); + inez.createSumti(TRUE_ID, TRUE_ID); + inez.createSumti(FALSE_ID, FALSE_ID); + inez.createSumti(IS_FUNCTION_FOR_ID, IS_FUNCTION_FOR_REPR); + inez.createSumti(SAVE_FUNCTION_REF_ID, SAVE_FUNCTION_REF_ID); + inez.createSumti(DOSAVE_ID, DOSAVE_REPR); + inez.createSumti(DIAGRAM_ID, DIAGRAM_ID); + inez.createSumti(DIAGRAM_ELEMENT_ID, DIAGRAM_ELEMENT_REPR); + inez.createFromdefinitions(ELEMENT_DEFINITIONS_RESOURCE); + logger.info("BridiElement system initialized"); } } diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/ElementConstants.java b/inez.model/src/main/java/io/github/magwas/inez/element/ElementConstants.java index 02e8650..94281b2 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/ElementConstants.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/ElementConstants.java @@ -8,11 +8,21 @@ public interface ElementConstants { String THING_ID = "THING"; String ROOT_ID = "ROOT"; String CONTAINER_ID = "CONTAINER"; - String RULE_REPR = "rule for {0}: {1}"; - String RULE_ID = "RULE"; String UNPLACED_ID = "UNPLACED"; - String UNPLACED_REPR = "UNPLACED"; String DIAGRAM_ID = "DIAGRAM"; - String IS_FUNCTION_FOR = "IS_FUNCTION_FOR"; + String IS_FUNCTION_FOR_ID = "IS_FUNCTION_FOR"; + String IS_FUNCTION_FOR_REPR = "{0} is function for {1}"; + String TRUE_ID = "TRUE"; + String FALSE_ID = "FALSE"; + String SAVE_FUNCTION_REF_ID = "io.github.magwas.inez.functions.Save"; + String DOSAVE_ID = "doSave"; + String DOSAVE_REPR = "doSave {0}"; + String SAVE_FUNCTION_DEF_ID = "savefunctiondef"; + String SAVE_FUNCTION_DEF_REPR = "{io.github.magwas.inez.functions.Save} is function for {doSave}"; + String DIAGRAM_ELEMENT_ID = "diagramElement"; + String DIAGRAM_ELEMENT_REPR = "shows {0} at {1},{2}"; + String ELEMENT_DEFINITIONS_RESOURCE = "element.definition"; + + Integer MAX_TYPE_DEPTH = 10; } diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java new file mode 100644 index 0000000..4fca33c --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java @@ -0,0 +1,23 @@ +package io.github.magwas.inez.element; + +import java.util.stream.Stream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.inez.storage.repository.BridiReferenceRepository; + +@Service +public class GetBridiElementReferenceIdsService { + + @Autowired + BridiReferenceRepository bridiReferenceRepository; + + public Stream apply(String id) { + return bridiReferenceRepository + .findAllByBridiId(id).stream().sorted((arg0, arg1) -> Integer + .valueOf(arg0.position()).compareTo(arg1.position())) + .map(x -> x.sumtiId()); + } + +} \ No newline at end of file diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java index 648fdb4..956de9b 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java @@ -5,20 +5,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import io.github.magwas.inez.storage.repository.BridiReferenceRepository; - @Service public class GetBridiElementReferencesService { @Autowired - BridiReferenceRepository bridiReferenceRepository; + GetBridiElementReferenceIdsService getBridiElementReferenceIds; @Autowired BridiElementFactory bridiElementFactory; public Stream apply(String id) { - return bridiReferenceRepository.findAllByBridiId(id).stream() - .sorted((arg0, arg1) -> Integer.valueOf(arg0.position()) - .compareTo(arg1.position())) - .map(x -> bridiElementFactory.apply(x.sumtiId())); + return getBridiElementReferenceIds.apply(id) + .map(x -> bridiElementFactory.apply(x)); } } \ No newline at end of file diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java new file mode 100644 index 0000000..e6be382 --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java @@ -0,0 +1,29 @@ +package io.github.magwas.inez.element; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.runtime.LogUtil; + +@Service +public class GetBridiElementTypeIdService implements ElementConstants { + + @Autowired + GetRelativeForBridiElementService getRelativeForBridiElement; + + public String apply(String id) { + List types = getRelativeForBridiElement.apply(id, IS_A_ID, 1, 2) + .toList(); + if (types.size() > 1) { + throw new Error("more parents for " + id + ":" + types); + } + String type = THING_ID; + if (!types.isEmpty()) + type = types.get(0); + LogUtil.debug("type:" + type); + return type; + } + +} \ No newline at end of file diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeService.java index 660199c..9b52cd2 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeService.java @@ -1,29 +1,17 @@ package io.github.magwas.inez.element; -import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import io.github.magwas.runtime.LogUtil; - @Service -public class GetBridiElementTypeService implements ElementConstants { +public class GetBridiElementTypeService { @Autowired - GetRelativeForBridiElementService getRelativeForBridiElement; + GetBridiElementTypeIdService getBridiElementTypeId; @Autowired BridiElementFactory bridiElementFactory; public BridiElement apply(String id) { - List types = getRelativeForBridiElement.apply(id, IS_A_ID, 1, 2) - .toList(); - if (types.size() > 1) { - System.err.println("more parents for " + id + ":" + types); - } - String type = THING_ID; - if (!types.isEmpty()) - type = types.get(0); - LogUtil.debug("type:" + type); + String type = getBridiElementTypeId.apply(id); return bridiElementFactory.apply(type); } diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/IsOfTypeService.java b/inez.model/src/main/java/io/github/magwas/inez/element/IsOfTypeService.java new file mode 100644 index 0000000..fe71c81 --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/element/IsOfTypeService.java @@ -0,0 +1,27 @@ +package io.github.magwas.inez.element; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.runtime.LogUtil; + +@Service +public class IsOfTypeService implements ElementConstants { + + @Autowired + GetBridiElementTypeIdService getBridiElementTypeId; + + boolean apply(String id, String typeId) { + LogUtil.debug("IsOfTypeService", id, typeId); + for (int i = 0; i < MAX_TYPE_DEPTH; i++) { + if (id.equals(typeId)) + return true; + if (id.equals(THING_ID)) + return false; + id = getBridiElementTypeId.apply(id); + LogUtil.debug("id:", id); + } + throw new Error("Probable type loop"); + } + +} diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/RepresentBridiElementService.java b/inez.model/src/main/java/io/github/magwas/inez/element/RepresentBridiElementService.java index 1c6e945..de19af2 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/RepresentBridiElementService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/RepresentBridiElementService.java @@ -18,7 +18,7 @@ public class RepresentBridiElementService implements ElementConstants { @Autowired GetBridiElementTypeService getBridiElementType; @Autowired - GetBridiElementReferencesService getBridiElementReferences; + GetBridiElementReferenceIdsService getBridiElementReferenceIds; public String apply(String id) { return toString(id, 0); @@ -26,8 +26,7 @@ public String apply(String id) { String toString(String id, int i) { LogUtil.debug(id, i); - List references = getBridiElementReferences.apply(id) - .toList(); + List references = getBridiElementReferenceIds.apply(id).toList(); StringBuilder builder = new StringBuilder(); String indent = "\t"; builder.append(indent.repeat(i)); @@ -36,16 +35,18 @@ String toString(String id, int i) { builder.append("type='" + getBridiElementType.apply(id).id + "' "); builder.append("name='" + getBridiElementRepresentation.apply(id) + "'>"); builder.append("\n"); - builder.append(indent.repeat(i + 1)); - builder.append("\n"); - references.forEach(x -> { - builder.append(indent.repeat(i + 2)); - builder.append(""); - builder.append(x.id); - builder.append("\n"); - }); - builder.append(indent.repeat(i + 1)); - builder.append("\n"); + if (references.size() > 0) { + builder.append(indent.repeat(i + 1)); + builder.append("\n"); + references.forEach(x -> { + builder.append(indent.repeat(i + 2)); + builder.append(""); + builder.append(x); + builder.append("\n"); + }); + builder.append(indent.repeat(i + 1)); + builder.append("\n"); + } getBridiElementChildren.apply(id) .forEach(x -> builder.append(toString(x.id, i + 1))); builder.append(indent.repeat(i)); diff --git a/inez.model/src/main/java/io/github/magwas/inez/osgi/SpringBootBundleActivator.java b/inez.model/src/main/java/io/github/magwas/inez/osgi/SpringBootBundleActivator.java index c955163..df9d84b 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/osgi/SpringBootBundleActivator.java +++ b/inez.model/src/main/java/io/github/magwas/inez/osgi/SpringBootBundleActivator.java @@ -1,5 +1,7 @@ package io.github.magwas.inez.osgi; +import java.io.IOException; + import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; @@ -34,7 +36,7 @@ public class SpringBootBundleActivator implements BundleActivator { AutowireCapableBeanFactory autowireCapableBeanFactory; @Override - public void start(BundleContext bundleContext) { + public void start(BundleContext bundleContext) throws IOException { SpringBootBundleActivator.bundleContext = bundleContext; Thread.currentThread() .setContextClassLoader(this.getClass().getClassLoader()); diff --git a/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromDefinitionService.java b/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromDefinitionService.java new file mode 100644 index 0000000..1da3adf --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromDefinitionService.java @@ -0,0 +1,34 @@ +package io.github.magwas.inez.query; + +import java.io.IOException; +import java.util.stream.Stream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.inez.Bridi; + +@Service +public class CreateBridisFromDefinitionService { + + @Autowired + CreateBridisFromQueryService createBridisFromQuery; + + public Stream apply(String definitionName) throws Error { + String elementDefinition; + try { + elementDefinition = loadResource(definitionName); + } catch (IOException e) { + throw new Error(e); + } + return createBridisFromQuery.apply(elementDefinition); + } + + private String loadResource(String definitionName) throws IOException { + ClassLoader classloader = Thread.currentThread().getContextClassLoader(); + String elementDefinition = new String( + classloader.getResourceAsStream(definitionName).readAllBytes()); + return elementDefinition; + } + +} diff --git a/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromQueryService.java b/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromQueryService.java new file mode 100644 index 0000000..6c888fa --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/query/CreateBridisFromQueryService.java @@ -0,0 +1,36 @@ +package io.github.magwas.inez.query; + +import java.util.List; +import java.util.stream.Stream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.inez.Bridi; +import io.github.magwas.inez.element.BridiElementFactory; +import io.github.magwas.inez.parse.ParseTextService; +import io.github.magwas.inez.storage.SaveBridiService; +import io.github.magwas.runtime.LogUtil; + +@Service +public class CreateBridisFromQueryService { + @Autowired + ParseTextService parseText; + @Autowired + CreateBridisFromParserOutputService createBridisFromParserOutput; + @Autowired + SaveBridiService saveBridi; + @Autowired + BridiElementFactory bridiElementFactory; + + public Stream apply(String query) { + LogUtil.debug("create(" + query); + List toSave = parseText.apply(query) + .map(createBridisFromParserOutput).flatMap(x -> x) + .peek(x -> LogUtil.debug("saving", x)).toList(); + saveBridi.apply(toSave); + toSave.forEach(x -> bridiElementFactory.apply(x.id())); + return toSave.stream(); + } + +} diff --git a/inez.model/src/main/java/io/github/magwas/inez/query/QueryProcessorService.java b/inez.model/src/main/java/io/github/magwas/inez/query/QueryProcessorService.java index 123ef4e..d00a86e 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/query/QueryProcessorService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/query/QueryProcessorService.java @@ -1,6 +1,7 @@ package io.github.magwas.inez.query; import static io.github.magwas.runtime.LogUtil.debug; +import static io.github.magwas.runtime.LogUtil.warning; import java.util.ArrayList; import java.util.List; @@ -27,7 +28,6 @@ import io.github.magwas.inez.storage.FindAllIdByRepresentationService; import io.github.magwas.inez.storage.FindBridiByIdService; import io.github.magwas.inez.storage.GetBridiIdBySelbriAndSumtiIdsService; -import io.github.magwas.runtime.LogUtil; @Service public class QueryProcessorService @@ -54,7 +54,7 @@ public Stream apply(String query) { public Stream apply(ParserOutput parserOutput) { String top = parserOutput.top(); - LogUtil.debug("top:" + top); + debug("top:" + top); return query(top, parserOutput.referenceMap()); } @@ -115,13 +115,13 @@ private BridiFunction functionFor(List partList) { String top = partList.get(0); List ids = findAllIdByRepresentation.apply(top).toList(); if (ids.size() != 1) { - LogUtil.warning("ambigous representation:", top, ids); + warning("ambigous representation:", top, ids); return null; } debug("getRelativeForBridiElement.apply(", ids.get(0), - ElementConstants.IS_FUNCTION_FOR, 2, 1); + ElementConstants.IS_FUNCTION_FOR_ID, 2, 1); List rels = getRelativeForBridiElement - .apply(ids.get(0), ElementConstants.IS_FUNCTION_FOR, 2, 1).toList(); + .apply(ids.get(0), ElementConstants.IS_FUNCTION_FOR_ID, 2, 1).toList(); debug("rels", rels); if (rels.isEmpty()) return null; diff --git a/inez.model/src/main/java/io/github/magwas/inez/storage/CreateSumtiService.java b/inez.model/src/main/java/io/github/magwas/inez/storage/CreateSumtiService.java new file mode 100644 index 0000000..22df5ca --- /dev/null +++ b/inez.model/src/main/java/io/github/magwas/inez/storage/CreateSumtiService.java @@ -0,0 +1,20 @@ +package io.github.magwas.inez.storage; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import io.github.magwas.inez.storage.model.Sumti; +import io.github.magwas.inez.storage.repository.SumtiRepository; + +@Service +public class CreateSumtiService { + @Autowired + SumtiRepository sumtiRepository; + + public Sumti apply(String id, String representation) { + Sumti sumti = new Sumti(id, representation); + sumtiRepository.save(sumti); + return sumti; + } + +} diff --git a/inez.model/src/main/resources/element.definition b/inez.model/src/main/resources/element.definition index 953f040..462b6bc 100644 --- a/inez.model/src/main/resources/element.definition +++ b/inez.model/src/main/resources/element.definition @@ -1,21 +1,22 @@ -{CONTAINER} is a {THING} -{folder} is a {CONTAINER} -{model} is a {folder} -{ROOT} is a {CONTAINER} +{elementModel} is a {model} {ROOT} contains {elementModel} {ROOT} contains {UNPLACED} -{UNPLACED} is a {model} -{elementModel} is a {model} -{elementModel} contains {THING} {elementModel} contains {[{0} is a {1}]} -{elementModel} contains {CONTAINER} {elementModel} contains {[{0} contains {1}]} -{elementModel} contains {[rule for {0}: {1}]} -{elementModel} contains {[{CONTAINER} is a {THING}]} -{elementModel} contains {[{folder} is a {CONTAINER}]} -{elementModel} contains {[{ROOT} is a {CONTAINER}]} -{elementModel} contains {[{UNPLACED} is a {model}]} -{elementModel} contains {[{elementModel} is a {model}]} -{elementModel} contains {[{model} is a {folder}]} +{elementModel} contains {THING} +{elementModel} contains {CONTAINER} +{elementModel} contains {TRUE} +{elementModel} contains {FALSE} +{elementModel} contains {[{0} is function for {1}]} +{elementModel} contains {io.github.magwas.inez.functions.Save} +{elementModel} contains {[doSave {0}]} +{elementModel} contains {DIAGRAM} +{elementModel} contains {[shows {0} at {1},{2}]} {elementModel} contains {folder} -{elementModel} contains {model} \ No newline at end of file +{elementModel} contains {model} +{UNPLACED} is a {model} +{CONTAINER} is a {THING} +{folder} is a {CONTAINER} +{model} is a {folder} +{io.github.magwas.inez.functions.Save} is function for {[doSave {0}]} +{ROOT} is a {CONTAINER} \ No newline at end of file diff --git a/inez.parser.tests/src/main/java/io/github/magwas/inez/parse/BridiFieldTestData.java b/inez.parser.tests/src/main/java/io/github/magwas/inez/parse/BridiFieldTestData.java index 901225b..e037904 100644 --- a/inez.parser.tests/src/main/java/io/github/magwas/inez/parse/BridiFieldTestData.java +++ b/inez.parser.tests/src/main/java/io/github/magwas/inez/parse/BridiFieldTestData.java @@ -5,20 +5,20 @@ public interface BridiFieldTestData { String ALICE_REPR = "alice"; String ALICE_ID = IdUtil.createID(ALICE_REPR); - String THING_REPR = "thing"; + String THING_REPR = "THING"; String THING_ID = "THING"; String THING_REFERENCE = "@" + THING_ID; String SUMTI_REPR = "sumti"; String BRIDI_REPR = "bridi"; String IS_A_REPR = "{0} is a {1}"; - String SUMTI_IS_A_THING_REPR = "{sumti} is a {thing}"; + String SUMTI_IS_A_THING_REPR = "{sumti} is a {THING}"; String SUMTI_IS_A_THING_CHANGED_REPR = SUMTI_IS_A_THING_REPR + " changed"; - String THING_IS_A_SUMTI_REPR = "{thing} is a {sumti}"; + String THING_IS_A_SUMTI_REPR = "{THING} is a {sumti}"; String TAUTOLOGY_REPR = "the most basic tautology"; - String TAUTOLOGY_GENERATED_REPR = "{thing} is a {thing}"; - String SUMTI_IS_A_THING_IS_A_THING_REPR = "{{sumti} is a {thing}} is a {@thing}"; - String SUMTI_IS_A_THING_IS_A_THING_REPR_NOREFERENCE = "{{sumti} is a {thing}} is a {thing}"; - String TAUTOLOGY_IS_A_THING_REPR = "{{thing} is a {thing}} is a {thing}"; + String TAUTOLOGY_GENERATED_REPR = "{THING} is a {THING}"; + String SUMTI_IS_A_THING_IS_A_THING_REPR = "{{sumti} is a {THING}} is a {@THING}"; + String SUMTI_IS_A_THING_IS_A_THING_REPR_NOREFERENCE = "{{sumti} is a {THING}} is a {THING}"; + String TAUTOLOGY_IS_A_THING_REPR = "{{THING} is a {THING}} is a {THING}"; String STUFF_ID = "stuff"; String COULDBE_ID = "ID:could be"; @@ -28,15 +28,15 @@ public interface BridiFieldTestData { String GO1_REFERENCE = "@go1"; String NONEXISTENT_REFERENCE = "@nonexistent"; String NONEXISTENT_REPR = "nonexistent"; - String INPUT_BAD = "{bridi is a {thing}"; + String INPUT_BAD = "{bridi is a {THING}"; String INPUT_FROM_UNKNOWN_PARSER = "INPUT_FROM_UNKNOWN_PARSER"; String QUERY_NONEXISTING = "nonexisting"; - String QUERY_STRING_SIMPLE = "{$?} is a {thing}"; + String QUERY_STRING_SIMPLE = "{$?} is a {THING}"; String QUERY_STRING_ALL_ANY = "{$?} is a {$?}"; String QUERY_STRING_NONMATCHING = "{$?} is a {god}"; - String RECURSIVE_QUERY = "{{$?} is a {thing}} is a {thing}"; + String RECURSIVE_QUERY = "{{$?} is a {THING}} is a {THING}"; - String DESCRIPTION_SUMTI_IS_A_THING_STRING = "sumti is a thing"; + String DESCRIPTION_SUMTI_IS_A_THING_STRING = "sumti is a THING"; String GOD_REPR = "god"; String TWO_SUMTI_BRIDI_REPR = "{0} {1}"; String CECILE_LOOKS_AT_BANANA = "{cecile} {{looks at} {banana}}"; @@ -46,22 +46,20 @@ public interface BridiFieldTestData { String ALICE_EATS_CHIPS = "{alice} {{eats} {chips}}"; String ALICE_EATS_BANANA = "{alice} {{eats} {banana}}"; - String TEST_TEXT = ALICE_EATS_BANANA + "\n" + ALICE_EATS_CHIPS + "\n" - + BOB_EATS_BANANA + "\n" + BOB_EATS_CHIPS + "\n" + CECILE_EATS_BANANA - + "\n" + CECILE_LOOKS_AT_BANANA + "\n" + SUMTI_IS_A_THING_REPR + "\n" - + THING_IS_A_SUMTI_REPR + "\n" + TAUTOLOGY_GENERATED_REPR + "\n" - + SUMTI_IS_A_THING_IS_A_THING_REPR + "\n" - + SUMTI_IS_A_THING_IS_A_THING_REPR_NOREFERENCE + "\n" - + TAUTOLOGY_IS_A_THING_REPR; + String TEST_TEXT = SUMTI_IS_A_THING_IS_A_THING_REPR_NOREFERENCE + "\n" + + TAUTOLOGY_IS_A_THING_REPR + "\n" + ALICE_EATS_BANANA + "\n" + + ALICE_EATS_CHIPS + "\n" + BOB_EATS_BANANA + "\n" + BOB_EATS_CHIPS + "\n" + + CECILE_EATS_BANANA + "\n" + CECILE_LOOKS_AT_BANANA + "\n" + + SUMTI_IS_A_THING_REPR + "\n" + TAUTOLOGY_GENERATED_REPR; String SUMTI_ID = IdUtil.createID("sumti"); String BRIDI_ID = IdUtil.createID("bridi"); String IS_A_ID = "IS_A"; - String SUMTI_IS_A_THING_ID = IdUtil.createID("{sumti} is a {thing}"); + String SUMTI_IS_A_THING_ID = IdUtil.createID("{sumti} is a {THING}"); String SUMTI_IS_A_THING_IS_A_THING_ID = IdUtil - .createID("{{sumti} is a {thing}} is a {thing}"); + .createID("{{sumti} is a {THING}} is a {THING}"); String TAUTOLOGY_IS_A_THING_ID = IdUtil - .createID("{{thing} is a {thing}} is a {thing}"); + .createID("{{THING} is a {THING}} is a {THING}"); String THING_IS_A_SUMTI_ID = "not tautology"; String TAUTOLOGY_ID = "tautology"; diff --git a/inez.parser/src/main/antlr4/io/github/magwas/inez/parser/Bridi.g4 b/inez.parser/src/main/antlr4/io/github/magwas/inez/parser/Bridi.g4 index 56e9fd1..b0bd3ef 100644 --- a/inez.parser/src/main/antlr4/io/github/magwas/inez/parser/Bridi.g4 +++ b/inez.parser/src/main/antlr4/io/github/magwas/inez/parser/Bridi.g4 @@ -1,6 +1,6 @@ grammar Bridi; -fragment LETTER : [_a-zA-Z0-9$?: ]; +fragment LETTER : [_a-zA-Z0-9$?: .,]; PRE : '{'; POST: '}'; diff --git a/inez.target/inez.target b/inez.target/inez.target index 33d2a42..fa6329d 100644 --- a/inez.target/inez.target +++ b/inez.target/inez.target @@ -23,13 +23,13 @@ io.github.magwas konveyor-base-testing - 0.4.7 + 0.4.16 jar io.github.magwas konveyor-base - 0.4.7 + 0.4.16 jar @@ -167,4 +167,4 @@ - \ No newline at end of file + diff --git a/pom.xml b/pom.xml index 9862393..4633d42 100644 --- a/pom.xml +++ b/pom.xml @@ -6,10 +6,10 @@ io.github.magwas konveyor-parent - 0.4.7 + 0.4.16 - 0.4.7 + 0.4.16 true From 0f6a2a9a922d7bf63465c638fd10a1d5e674d079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20Magos=C3=A1nyi?= Date: Mon, 22 Sep 2025 13:33:21 +0200 Subject: [PATCH 2/4] Update inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java Co-authored-by: Balazs G <24852447+gbq6@users.noreply.github.com> --- .../magwas/inez/element/GetBridiElementReferencesService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java index 956de9b..fb45095 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferencesService.java @@ -17,4 +17,4 @@ public Stream apply(String id) { .map(x -> bridiElementFactory.apply(x)); } -} \ No newline at end of file +} From 0a49913aaf7a91c345dd9472333414d1a96d56ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20Magos=C3=A1nyi?= Date: Mon, 22 Sep 2025 13:33:39 +0200 Subject: [PATCH 3/4] Update inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java Co-authored-by: Balazs G <24852447+gbq6@users.noreply.github.com> --- .../magwas/inez/element/GetBridiElementTypeIdService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java index e6be382..6e77a99 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementTypeIdService.java @@ -26,4 +26,4 @@ public String apply(String id) { return type; } -} \ No newline at end of file +} From 81424b53b7de4b157a8ab90c37d410d36eca1b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20Magos=C3=A1nyi?= Date: Mon, 22 Sep 2025 13:34:18 +0200 Subject: [PATCH 4/4] Update inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java Co-authored-by: Balazs G <24852447+gbq6@users.noreply.github.com> --- .../magwas/inez/element/GetBridiElementReferenceIdsService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java index 4fca33c..2bae982 100644 --- a/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java +++ b/inez.model/src/main/java/io/github/magwas/inez/element/GetBridiElementReferenceIdsService.java @@ -20,4 +20,4 @@ public Stream apply(String id) { .map(x -> x.sumtiId()); } -} \ No newline at end of file +}