Introduce CMS JSon
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 24 Sep 2023 09:33:37 +0000 (11:33 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 24 Sep 2023 09:33:37 +0000 (11:33 +0200)
org.argeo.cms.lib.json/.classpath [new file with mode: 0644]
org.argeo.cms.lib.json/.project [new file with mode: 0644]
org.argeo.cms.lib.json/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
org.argeo.cms.lib.json/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
org.argeo.cms.lib.json/.settings/org.eclipse.pde.core.prefs [new file with mode: 0644]
org.argeo.cms.lib.json/bnd.bnd [new file with mode: 0644]
org.argeo.cms.lib.json/build.properties [new file with mode: 0644]
org.argeo.cms.lib.json/src/org/argeo/cms/acr/json/AcrJsonUtils.java [new file with mode: 0644]

diff --git a/org.argeo.cms.lib.json/.classpath b/org.argeo.cms.lib.json/.classpath
new file mode 100644 (file)
index 0000000..81fe078
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.argeo.cms.lib.json/.project b/org.argeo.cms.lib.json/.project
new file mode 100644 (file)
index 0000000..cd9a550
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.cms.lib.json</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.ManifestBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.pde.SchemaBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.pde.PluginNature</nature>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/org.argeo.cms.lib.json/.settings/org.eclipse.core.resources.prefs b/org.argeo.cms.lib.json/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..99f26c0
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.argeo.cms.lib.json/.settings/org.eclipse.jdt.core.prefs b/org.argeo.cms.lib.json/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..62ef348
--- /dev/null
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/org.argeo.cms.lib.json/.settings/org.eclipse.pde.core.prefs b/org.argeo.cms.lib.json/.settings/org.eclipse.pde.core.prefs
new file mode 100644 (file)
index 0000000..f29e940
--- /dev/null
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
diff --git a/org.argeo.cms.lib.json/bnd.bnd b/org.argeo.cms.lib.json/bnd.bnd
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/org.argeo.cms.lib.json/build.properties b/org.argeo.cms.lib.json/build.properties
new file mode 100644 (file)
index 0000000..34d2e4d
--- /dev/null
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.argeo.cms.lib.json/src/org/argeo/cms/acr/json/AcrJsonUtils.java b/org.argeo.cms.lib.json/src/org/argeo/cms/acr/json/AcrJsonUtils.java
new file mode 100644 (file)
index 0000000..f288c60
--- /dev/null
@@ -0,0 +1,43 @@
+package org.argeo.cms.acr.json;
+
+import javax.xml.namespace.QName;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.acr.NamespaceUtils;
+import org.argeo.api.acr.QNamed;
+
+import jakarta.json.stream.JsonGenerator;
+
+/** Utilities around ACR and the JSON format. */
+public class AcrJsonUtils {
+       public static void writeAttr(JsonGenerator g, Content content, String attr) {
+               writeAttr(g, content, NamespaceUtils.parsePrefixedName(attr));
+       }
+
+       public static void writeAttr(JsonGenerator g, Content content, QNamed attr) {
+               writeAttr(g, content, attr.qName());
+       }
+
+       public static void writeAttr(JsonGenerator g, Content content, QName attr) {
+               // String value = content.attr(attr);
+               Object value = content.get(attr);
+               if (value != null) {
+                       // TODO specify NamespaceContext
+                       String key = NamespaceUtils.toPrefixedName(attr);
+                       if (value instanceof Double v)
+                               g.write(key, v);
+                       else if (value instanceof Long v)
+                               g.write(key, v);
+                       else if (value instanceof Integer v)
+                               g.write(key, v);
+                       else if (value instanceof Boolean v)
+                               g.write(key, v);
+                       else
+                               g.write(key, value.toString());
+               }
+       }
+
+       /** singleton */
+       private AcrJsonUtils() {
+       }
+}