Refactor Argeo APIs
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 11 Mar 2024 08:00:48 +0000 (09:00 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 11 Mar 2024 08:00:48 +0000 (09:00 +0100)
98 files changed:
Makefile
org.argeo.api.app/.classpath [new file with mode: 0644]
org.argeo.api.app/.gitignore [new file with mode: 0644]
org.argeo.api.app/.project [new file with mode: 0644]
org.argeo.api.app/META-INF/.gitignore [new file with mode: 0644]
org.argeo.api.app/bnd.bnd [new file with mode: 0644]
org.argeo.api.app/build.properties [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/AppUserState.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityConstants.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityDefinition.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityMimeType.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityName.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityNames.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/EntityType.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/IdRange.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/RankedObject.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/SuiteRole.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/Term.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/TermsManager.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/Typology.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/WGS84PosName.java [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/entity.xsd [new file with mode: 0644]
org.argeo.api.app/src/org/argeo/api/app/entityFeature.xsd [new file with mode: 0644]
org.argeo.app.api/.classpath [deleted file]
org.argeo.app.api/.gitignore [deleted file]
org.argeo.app.api/.project [deleted file]
org.argeo.app.api/META-INF/.gitignore [deleted file]
org.argeo.app.api/bnd.bnd [deleted file]
org.argeo.app.api/build.properties [deleted file]
org.argeo.app.api/src/org/argeo/app/api/AppUserState.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityConstants.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityDefinition.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityMimeType.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityName.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityNames.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/EntityType.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/IdRange.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/RankedObject.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/SuiteRole.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/Term.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/TermsManager.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/Typology.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/WGS84PosName.java [deleted file]
org.argeo.app.api/src/org/argeo/app/api/entity.xsd [deleted file]
org.argeo.app.api/src/org/argeo/app/api/entityFeature.xsd [deleted file]
org.argeo.app.core/OSGI-INF/termsContentProvider.xml
org.argeo.app.core/src/org/argeo/app/acr/terms/TermContent.java
org.argeo.app.core/src/org/argeo/app/acr/terms/TermsContentProvider.java
org.argeo.app.core/src/org/argeo/app/acr/terms/TypologyContent.java
org.argeo.app.core/src/org/argeo/app/core/AbstractEntityDefinition.java
org.argeo.app.core/src/org/argeo/app/core/SuiteContentNamespace.java
org.argeo.app.core/src/org/argeo/app/core/SuiteUtils.java
org.argeo.app.core/src/org/argeo/app/docbook/DbkAcrUtils.java
org.argeo.app.geo/OSGI-INF/wfsHttpHandler.xml
org.argeo.app.geo/src/org/argeo/app/api/geo/FeatureAdapter.java
org.argeo.app.geo/src/org/argeo/app/geo/acr/GeoEntityUtils.java
org.argeo.app.geo/src/org/argeo/app/geo/http/WfsHttpHandler.java
org.argeo.app.jcr/OSGI-INF/appUserState.xml
org.argeo.app.jcr/OSGI-INF/termsManager.xml
org.argeo.app.jcr/src/org/argeo/app/jcr/CustomMaintenanceService.java
org.argeo.app.jcr/src/org/argeo/app/jcr/JcrEntityDefinition.java
org.argeo.app.jcr/src/org/argeo/app/jcr/SuiteJcrUtils.java
org.argeo.app.jcr/src/org/argeo/app/jcr/docbook/DbkJcrUtils.java
org.argeo.app.jcr/src/org/argeo/app/jcr/odk/OdkJcrUtils.java
org.argeo.app.jcr/src/org/argeo/app/jcr/terms/SuiteTerm.java
org.argeo.app.jcr/src/org/argeo/app/jcr/terms/SuiteTermsManager.java
org.argeo.app.jcr/src/org/argeo/app/jcr/terms/SuiteTypology.java
org.argeo.app.jcr/src/org/argeo/internal/app/jcr/AppUserStateImpl.java
org.argeo.app.jcr/src/org/argeo/internal/app/jcr/SuiteMaintenanceService.java
org.argeo.app.servlet.odk/OSGI-INF/odkSubmissionServlet.xml
org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkFormListServlet.java
org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkManifestServlet.java
org.argeo.app.servlet.odk/src/org/argeo/app/servlet/odk/OdkSubmissionServlet.java
org.argeo.app.servlet.publish/bnd.bnd
org.argeo.suite.knowledge/OSGI-INF/swtArgeoApp.xml
org.argeo.suite.knowledge/OSGI-INF/termsEntryArea.xml
org.argeo.suite.knowledge/bnd.bnd
swt/org.argeo.app.swt/bnd.bnd
swt/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImageManager.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/space/SpaceEntryArea.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/terms/AbstractTermsPart.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/terms/MultiTermsPart.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/terms/SingleTermPart.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/terms/TermsEntryArea.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/DefaultLeadPane.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java
swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml
swt/org.argeo.app.ui/src/org/argeo/app/ui/RecentItems.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteUiUtils.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/docbook/DbkImageManager.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/forms/AbstractTermsPart.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/forms/MultiTermsPart.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/forms/SingleTermPart.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/ContentEntryArea.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/library/JcrContentEntryArea.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OpenLayersMap.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/openlayers/OverviewMap.java
swt/org.argeo.app.ui/src/org/argeo/app/ui/people/PersonUiProvider.java

index e724f9bd67d837362d9e34d3d1027319845897a6..134414d126b21f0f2519c4426ca5ffcd2d560f1c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ uninstall: osgi-uninstall
 A2_CATEGORY = org.argeo.suite
 
 BUNDLES = \
-org.argeo.app.api \
+org.argeo.api.app \
 org.argeo.app.core \
 org.argeo.app.jcr \
 org.argeo.app.geo \
diff --git a/org.argeo.api.app/.classpath b/org.argeo.api.app/.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.api.app/.gitignore b/org.argeo.api.app/.gitignore
new file mode 100644 (file)
index 0000000..09e3bc9
--- /dev/null
@@ -0,0 +1,2 @@
+/bin/
+/target/
diff --git a/org.argeo.api.app/.project b/org.argeo.api.app/.project
new file mode 100644 (file)
index 0000000..9081a67
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>org.argeo.api.app</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.api.app/META-INF/.gitignore b/org.argeo.api.app/META-INF/.gitignore
new file mode 100644 (file)
index 0000000..4854a41
--- /dev/null
@@ -0,0 +1 @@
+/MANIFEST.MF
diff --git a/org.argeo.api.app/bnd.bnd b/org.argeo.api.app/bnd.bnd
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/org.argeo.api.app/build.properties b/org.argeo.api.app/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.api.app/src/org/argeo/api/app/AppUserState.java b/org.argeo.api.app/src/org/argeo/api/app/AppUserState.java
new file mode 100644 (file)
index 0000000..9250e99
--- /dev/null
@@ -0,0 +1,9 @@
+package org.argeo.api.app;
+
+import org.argeo.api.acr.Content;
+import org.argeo.api.cms.CmsSession;
+
+/** Access to content which is specific to a user and their state. */
+public interface AppUserState {
+       Content getOrCreateSessionDir(CmsSession session);
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityConstants.java b/org.argeo.api.app/src/org/argeo/api/app/EntityConstants.java
new file mode 100644 (file)
index 0000000..a609ad8
--- /dev/null
@@ -0,0 +1,8 @@
+package org.argeo.api.app;
+
+/** Constant related to entities, typically used in an OSGi context. */
+public interface EntityConstants {
+       final static String TYPE = "entity.type";
+//     final static String DEFAULT_EDITOR_ID = "entity.defaultEditorId";
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityDefinition.java b/org.argeo.api.app/src/org/argeo/api/app/EntityDefinition.java
new file mode 100644 (file)
index 0000000..8ac73fa
--- /dev/null
@@ -0,0 +1,8 @@
+package org.argeo.api.app;
+
+/** The definition of an entity, a composite configurable data structure. */
+public interface EntityDefinition {
+//     String getEditorId(Node entity);
+
+       String getType();
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityMimeType.java b/org.argeo.api.app/src/org/argeo/api/app/EntityMimeType.java
new file mode 100644 (file)
index 0000000..1a0f64c
--- /dev/null
@@ -0,0 +1,60 @@
+package org.argeo.api.app;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+/** Supported mime types. */
+public enum EntityMimeType {
+       XML("text/xml", "xml"), CSV("text/csv", "csv");
+
+       private final String mimeType;
+       private final String[] extensions;
+
+       EntityMimeType(String mimeType, String... extensions) {
+               this.mimeType = mimeType;
+               this.extensions = extensions;
+       }
+
+       public String getMimeType() {
+               return mimeType;
+       }
+
+       public String[] getExtensions() {
+               return extensions;
+       }
+
+       public String getDefaultExtension() {
+               if (extensions.length > 0)
+                       return extensions[0];
+               else
+                       return null;
+       }
+
+       public String toHttpContentType(Charset charset) {
+               if (charset == null)
+                       return mimeType;
+               return mimeType + "; charset=" + charset.name();
+       }
+
+       public String toHttpContentType() {
+               if (mimeType.startsWith("text/")) {
+                       return toHttpContentType(StandardCharsets.UTF_8);
+               } else {
+                       return mimeType;
+               }
+       }
+
+       public static EntityMimeType find(String mimeType) {
+               for (EntityMimeType entityMimeType : values()) {
+                       if (entityMimeType.mimeType.equals(mimeType))
+                               return entityMimeType;
+               }
+               return null;
+       }
+
+       @Override
+       public String toString() {
+               return mimeType;
+       }
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityName.java b/org.argeo.api.app/src/org/argeo/api/app/EntityName.java
new file mode 100644 (file)
index 0000000..9abfc96
--- /dev/null
@@ -0,0 +1,31 @@
+package org.argeo.api.app;
+
+import org.argeo.api.acr.QNamed;
+
+/** Names used in the entity namespace http://www.argeo.org/ns/entity. */
+public enum EntityName implements QNamed {
+       type, relatedTo, //
+       // time,
+       date,
+       // geography
+       minLat, minLon, maxLat, maxLon,
+       // geo entities
+       place,
+       //
+       ;
+
+       @Override
+       public String getDefaultPrefix() {
+               return "entity";
+       }
+
+       public String basePath() {
+               return '/' + name();
+       }
+
+       @Override
+       public String getNamespace() {
+               return "http://www.argeo.org/ns/entity";
+       }
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityNames.java b/org.argeo.api.app/src/org/argeo/api/app/EntityNames.java
new file mode 100644 (file)
index 0000000..5cb69d5
--- /dev/null
@@ -0,0 +1,70 @@
+package org.argeo.api.app;
+
+import org.argeo.api.acr.ldap.LdapAttr;
+
+/** Constants used to name entity structures. */
+public interface EntityNames {
+       @Deprecated
+       final String FORM_BASE = "form";
+       final String SUBMISSIONS_BASE = "submissions";
+       @Deprecated
+       final String TERM = "term";
+       final String NAME = "name";
+
+//     final String ENTITY_DEFINITIONS_PATH = "/entity";
+       @Deprecated
+       final String TYPOLOGIES_PATH = "/" + TERM;
+       /** Administrative units. */
+       final String ADM = "adm";
+
+       @Deprecated
+       final String ENTITY_TYPE = EntityName.type.get();
+
+       // GENERIC CONCEPTS
+//     /** The language which is relevant. */
+//     final String XML_LANG = "xml:lang";
+       /** The date which is relevant. */
+       @Deprecated
+       final String ENTITY_DATE = EntityName.date.get();
+       @Deprecated
+       final String ENTITY_RELATED_TO = EntityName.relatedTo.get();
+
+       // DEFAULT FOLDER NAMES
+       final String MEDIA = "media";
+       final String FILES = "files";
+
+       // LDAP-LIKE ENTITIES
+       @Deprecated
+       final String DISPLAY_NAME = LdapAttr.displayName.get();
+       // Persons
+       @Deprecated
+       final String GIVEN_NAME = LdapAttr.givenName.get();
+       @Deprecated
+       final String SURNAME = LdapAttr.sn.get();
+       @Deprecated
+       final String EMAIL = LdapAttr.mail.get();
+       @Deprecated
+       final String OU = LdapAttr.ou.get();
+
+       // WGS84
+       @Deprecated
+       final String GEO_LAT = WGS84PosName.lat.get();
+       @Deprecated
+       final String GEO_LONG = WGS84PosName.lon.get();
+       @Deprecated
+       final String GEO_ALT = WGS84PosName.alt.get();
+
+       // SVG
+       @Deprecated
+       final String SVG_WIDTH = "svg:width";
+       @Deprecated
+       final String SVG_HEIGHT = "svg:height";
+       @Deprecated
+       final String SVG_LENGTH = "svg:length";
+       @Deprecated
+       final String SVG_UNIT = "svg:unit";
+       @Deprecated
+       final String SVG_DUR = "svg:dur";
+       @Deprecated
+       final String SVG_DIRECTION = "svg:direction";
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/EntityType.java b/org.argeo.api.app/src/org/argeo/api/app/EntityType.java
new file mode 100644 (file)
index 0000000..929045a
--- /dev/null
@@ -0,0 +1,38 @@
+package org.argeo.api.app;
+
+import org.argeo.api.acr.QNamed;
+
+/** Types used in the entity namespace http://www.argeo.org/ns/entity. */
+public enum EntityType implements QNamed {
+       // entity
+       entity, local, relatedTo,
+       // structure
+       space, document,
+       // typology
+       typologies, terms, term,
+       // form
+       form, formSet, formSubmission,
+       // graphics
+       box,
+       // geography
+       geopoint, bearing, geobounded,
+       // ldap
+       person, user;
+
+       public final static String ENTITY_NAMESPACE_URI = "http://www.argeo.org/ns/entity";
+       public final static String ENTITY_DEFAULT_PREFIX = "entity";
+
+       @Override
+       public String getDefaultPrefix() {
+               return ENTITY_DEFAULT_PREFIX;
+       }
+
+       public String basePath() {
+               return '/' + name();
+       }
+
+       @Override
+       public String getNamespace() {
+               return ENTITY_NAMESPACE_URI;
+       }
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/IdRange.java b/org.argeo.api.app/src/org/argeo/api/app/IdRange.java
new file mode 100644 (file)
index 0000000..c70e96a
--- /dev/null
@@ -0,0 +1,133 @@
+package org.argeo.api.app;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ThreadLocalRandom;
+
+/** A range of numerical IDs (typically numerical uid or gid). */
+public class IdRange {
+       // see https://systemd.io/UIDS-GIDS/#special-distribution-uid-ranges
+       final static long MIN_INCLUDED = Long.parseUnsignedLong("66000");
+       final static long MAX_EXCLUDED = Long.parseUnsignedLong("4294967294");
+
+       // We use long as a de facto unsigned int
+       
+       /** included */
+       private final long min;
+       /** included */
+       private final long max;
+
+       public IdRange(long min, long max) {
+               this.min = min;
+               this.max = max;
+       }
+
+       public IdRange(long minPow10) {
+               this(minPow10, maxFromMinPow10(minPow10));
+       }
+
+       public long getMin() {
+               return min;
+       }
+
+       public long getMax() {
+               return max;
+       }
+
+       @Override
+       public int hashCode() {
+               return (int) min;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (obj instanceof IdRange idRange) {
+                       return min == idRange.min && max == idRange.max;
+               } else
+                       return false;
+       }
+
+       @Override
+       public String toString() {
+               return "[" + Long.toUnsignedString(min) + "," + Long.toUnsignedString(max) + "]";
+       }
+
+       /*
+        * RANGE GENERATION
+        */
+       public static synchronized Set<IdRange> randomRanges10000(int count, Set<IdRange> forbiddenRanges) {
+               Set<IdRange> res = new HashSet<>();
+
+               for (int i = 0; i < count; i++) {
+                       IdRange newRange = null;
+                       do {
+                               newRange = randomRange10000();
+                       } while (overlap(newRange, res) || overlap(newRange, forbiddenRanges));
+                       res.add(newRange);
+               }
+               return res;
+       }
+
+       public static synchronized IdRange randomRange10000() {
+               // TODO make it more generic
+               long minPred = 7l;
+               long maxPred = 429496l;
+
+               long rand = ThreadLocalRandom.current().nextLong(minPred, maxPred);
+               long min = rand * 10000l;
+               return new IdRange(min);
+       }
+
+       public static boolean overlap(IdRange idRange, Set<IdRange> idRanges) {
+               for (IdRange other : idRanges) {
+                       if (overlap(idRange, other))
+                               return true;
+               }
+               return false;
+       }
+
+       public static boolean overlap(IdRange idRange, IdRange other) {
+               // see
+               // https://stackoverflow.com/questions/3269434/whats-the-most-efficient-way-to-test-if-two-ranges-overlap
+               return idRange.min <= other.max && other.min <= idRange.max;
+       }
+
+       /*
+        * UTILITIES
+        */
+
+       private static long maxFromMinPow10(long minPow10) {
+               if ((minPow10 % 100) != 0) {
+                       throw new IllegalArgumentException(minPow10 + " must at least ends with two zeroes");
+               }
+               int exp = 2;
+               exp: for (int i = exp + 1; i < 10; i++) {
+                       if ((minPow10 % pow10(i)) != 0)
+                               break exp;
+                       exp++;
+               }
+//             System.out.println(exp);
+
+               long max = minPow10 + pow10(exp) - 1;
+               return max;
+       }
+
+       /** Power of 10. */
+       private static long pow10(int exp) {
+               if (exp == 0)
+                       return 1;
+               else
+                       return 10 * pow10(exp - 1);
+       }
+
+       public static void main(String... args) {
+               System.out.println(maxFromMinPow10(100));
+               System.out.println(maxFromMinPow10(78500));
+               System.out.println(maxFromMinPow10(716850000));
+
+//             System.out.println(pow10(6));
+//             System.out.println(maxFromMinPow10(12));
+//             System.out.println(maxFromMinPow10(124));
+//             System.out.println(maxFromMinPow10(99814565));
+       }
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/RankedObject.java b/org.argeo.api.app/src/org/argeo/api/app/RankedObject.java
new file mode 100644 (file)
index 0000000..e9c47ce
--- /dev/null
@@ -0,0 +1,113 @@
+package org.argeo.api.app;
+
+import java.util.Map;
+
+import org.argeo.api.cms.CmsLog;
+
+/**
+ * A container for an object whose relevance can be ranked. Typically used in an
+ * OSGi context with the service.ranking property.
+ */
+public class RankedObject<T> {
+       private final static CmsLog log = CmsLog.getLog(RankedObject.class);
+
+       private final static String SERVICE_RANKING = "service.ranking";
+//     private final static String SERVICE_ID = "service.id";
+
+       private T object;
+       private Map<String, Object> properties;
+       private final int rank;
+
+       public RankedObject(T object, Map<String, Object> properties) {
+               this(object, properties, extractRanking(properties));
+       }
+
+       public RankedObject(T object, Map<String, Object> properties, int rank) {
+               super();
+               this.object = object;
+               this.properties = properties;
+               this.rank = rank;
+       }
+
+       private static int extractRanking(Map<String, Object> properties) {
+               if (properties == null)
+                       return 0;
+               if (properties.containsKey(SERVICE_RANKING))
+                       return (Integer) properties.get(SERVICE_RANKING);
+//             else if (properties.containsKey(SERVICE_ID))
+//                     return (Long) properties.get(SERVICE_ID);
+               else
+                       return 0;
+       }
+
+       public T get() {
+               return object;
+       }
+
+       public Map<String, Object> getProperties() {
+               return properties;
+       }
+
+       public int getRank() {
+               return rank;
+       }
+
+       @Override
+       public int hashCode() {
+               return object.hashCode();
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (!(obj instanceof RankedObject))
+                       return false;
+               RankedObject<?> other = (RankedObject<?>) obj;
+               return rank == other.rank && object.equals(other.object);
+       }
+
+       @Override
+       public String toString() {
+               return object.getClass().getName() + " with rank " + rank;
+       }
+
+       public static <K, T> boolean hasHigherRank(Map<K, RankedObject<T>> map, K key, Map<String, Object> properties) {
+               if (!map.containsKey(key))
+                       return true;
+               RankedObject<T> rankedObject = new RankedObject<>(null, properties);
+               RankedObject<T> current = map.get(key);
+               return current.getRank() < rankedObject.getRank();
+       }
+
+       /**
+        * @return the {@link RankedObject}, or <code>null</code> if the current one was
+        *         kept
+        */
+       public static <K, T> RankedObject<T> putIfHigherRank(Map<K, RankedObject<T>> map, K key, T object,
+                       Map<String, Object> properties) {
+               RankedObject<T> rankedObject = new RankedObject<>(object, properties);
+               if (!map.containsKey(key)) {
+                       map.put(key, rankedObject);
+                       if (log.isTraceEnabled())
+                               log.trace(
+                                               "Added " + key + " as " + object.getClass().getName() + " with rank " + rankedObject.getRank());
+                       return rankedObject;
+               } else {
+                       RankedObject<T> current = map.get(key);
+                       if (current.getRank() < rankedObject.getRank()) {
+                               map.put(key, rankedObject);
+                               if (log.isDebugEnabled())
+                                       log.debug("Replaced " + key + " by " + object.getClass().getName() + " with rank "
+                                                       + rankedObject.getRank());
+                               return rankedObject;
+                       } else if (current.getRank() == rankedObject.getRank()) {
+                               log.error("Already " + key + " by " + current.get().getClass().getName() + " with rank "
+                                               + rankedObject.getRank() + ", ignoring " + rankedObject.get().getClass().getName());
+                               return null;
+                       } else {
+                               return null;
+                       }
+               }
+
+       }
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/SuiteRole.java b/org.argeo.api.app/src/org/argeo/api/app/SuiteRole.java
new file mode 100644 (file)
index 0000000..07f2499
--- /dev/null
@@ -0,0 +1,47 @@
+package org.argeo.api.app;
+
+import javax.xml.namespace.QName;
+
+import org.argeo.api.acr.ArgeoNamespace;
+import org.argeo.api.acr.ContentName;
+import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.cms.CmsConstants;
+import org.argeo.api.cms.auth.SystemRole;
+
+/** Standard suite system roles. */
+public enum SuiteRole implements SystemRole {
+       /** An external person who has read access to part of the information. */
+       observer,
+       /** An active coworker. */
+       coworker,
+       /** Someone who is allowed validate and publish information. */
+       publisher,
+       /** Someone with manager status within an organisation. Does not necessarily give more rights. */
+       manager,
+       //
+       ;
+
+       private final static String QUALIFIER = "app.";
+
+       private final ContentName name;
+
+       SuiteRole() {
+               name = new ContentName(ArgeoNamespace.ROLE_NAMESPACE_URI, QUALIFIER + name());
+       }
+
+       @Override
+       public QName qName() {
+               return name;
+       }
+
+       @Deprecated
+       private String getRolePrefix() {
+               return "org.argeo.suite";
+       }
+
+       @Deprecated
+       public String dn() {
+               return new StringBuilder(LdapAttr.cn.name()).append("=").append(getRolePrefix()).append(".").append(name())
+                               .append(",").append(CmsConstants.SYSTEM_ROLES_BASEDN).toString();
+       }
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/Term.java b/org.argeo.api.app/src/org/argeo/api/app/Term.java
new file mode 100644 (file)
index 0000000..18ee8e2
--- /dev/null
@@ -0,0 +1,22 @@
+package org.argeo.api.app;
+
+import java.util.List;
+
+/**
+ * A name within a {@link Typology}, used to qualify an entity (categories,
+ * keywords, etc.).
+ */
+public interface Term {
+       String getId();
+
+       String getName();
+
+//     String getRelativePath();
+
+       Typology getTypology();
+
+       List<? extends Term> getSubTerms();
+
+       Term getParentTerm();
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/TermsManager.java b/org.argeo.api.app/src/org/argeo/api/app/TermsManager.java
new file mode 100644 (file)
index 0000000..dadaf9a
--- /dev/null
@@ -0,0 +1,16 @@
+package org.argeo.api.app;
+
+import java.util.List;
+import java.util.Set;
+
+/** Provides optimised access and utilities around terms typologies. */
+public interface TermsManager {
+       Typology getTypology(String typology);
+
+       Set<Typology> getTypologies();
+
+       Term getTerm(String id);
+
+       List<Term> listAllTerms(String typology);
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/Typology.java b/org.argeo.api.app/src/org/argeo/api/app/Typology.java
new file mode 100644 (file)
index 0000000..ea560a9
--- /dev/null
@@ -0,0 +1,15 @@
+package org.argeo.api.app;
+
+import java.util.List;
+
+/** A structured and exhaustive set of {@link Term}s. */
+public interface Typology {
+
+       String getId();
+
+       boolean isFlat();
+
+       List<? extends Term> getSubTerms();
+
+       Term findTermByName(String name);
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/WGS84PosName.java b/org.argeo.api.app/src/org/argeo/api/app/WGS84PosName.java
new file mode 100644 (file)
index 0000000..929e98d
--- /dev/null
@@ -0,0 +1,40 @@
+package org.argeo.api.app;
+
+import org.argeo.api.acr.QNamed;
+
+/**
+ * Geographical coordinate in WGS84 reference datum.
+ * 
+ * @see https://www.w3.org/2003/01/geo/
+ */
+public enum WGS84PosName implements QNamed {
+       lat, lon("long"), alt;
+
+       private final String localName;
+
+       private WGS84PosName() {
+               localName = null;
+       }
+
+       private WGS84PosName(String localName) {
+               this.localName = localName;
+       }
+
+       @Override
+       public String getNamespace() {
+               return "http://www.w3.org/2003/01/geo/wgs84_pos#";
+       }
+
+       @Override
+       public String getDefaultPrefix() {
+               return "geo";
+       }
+
+       @Override
+       public String localName() {
+               if (localName != null)
+                       return localName;
+               return QNamed.super.localName();
+       }
+
+}
diff --git a/org.argeo.api.app/src/org/argeo/api/app/entity.xsd b/org.argeo.api.app/src/org/argeo/api/app/entity.xsd
new file mode 100644 (file)
index 0000000..a2fbfcd
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+       elementFormDefault="qualified" attributeFormDefault="unqualified"
+       targetNamespace="http://www.argeo.org/ns/entity"
+       xmlns:entity="http://www.argeo.org/ns/entity">
+
+       <xs:attribute name="date" type="xs:date" />
+
+       <xs:element name="local">
+               <xs:complexType>
+                       <xs:sequence>
+                               <xs:any minOccurs="0" maxOccurs="unbounded"
+                                       namespace="##local" processContents="lax" />
+                       </xs:sequence>
+                       <xs:anyAttribute namespace="##any"
+                               processContents="lax" />
+               </xs:complexType>
+       </xs:element>
+
+       <xs:element name="terms">
+               <xs:complexType>
+                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                               <xs:element ref="entity:term"></xs:element>
+                       </xs:sequence>
+               </xs:complexType>
+       </xs:element>
+
+       <xs:element name="term">
+               <xs:complexType>
+                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                               <xs:element ref="entity:term"></xs:element>
+                       </xs:sequence>
+                       <xs:anyAttribute namespace="##any"
+                               processContents="lax" />
+               </xs:complexType>
+       </xs:element>
+</xs:schema>
\ No newline at end of file
diff --git a/org.argeo.api.app/src/org/argeo/api/app/entityFeature.xsd b/org.argeo.api.app/src/org/argeo/api/app/entityFeature.xsd
new file mode 100644 (file)
index 0000000..805bd1a
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+       xmlns="http://apaf.on.netiket.eu/ns/apaf"
+       targetNamespace="http://apaf.on.netiket.eu/ns/apaf"
+       xmlns:entity="http://www.argeo.org/ns/entity" xmlns:dav="DAV:"
+       xmlns:gml="http://www.opengis.net/gml">
+<!--   <xs:import -->
+<!--           schemaLocation="entity.xsd" -->
+<!--           namespace="http://www.argeo.org/ns/entity"></xs:import> -->
+       <!-- <xs:import -->
+       <!-- schemaLocation="https://schemas.opengis.net/gml/3.2.1/gml.xsd" -->
+       <!-- namespace="http://www.opengis.net/gml/3.2"></xs:import> -->
+       <xs:import namespace="http://www.opengis.net/gml"
+               schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" />
+
+       <xs:complexType name="entityFeatureType">
+               <xs:complexContent>
+                       <xs:extension base="gml:AbstractFeatureType">
+                               <xs:sequence>
+                                       <xs:element name="area" type="gml:PolygonPropertyType" />
+                                       <xs:element name="geopoint" type="gml:PointPropertyType" />
+                                       <xs:element name="path" type="xs:string" />
+                               </xs:sequence>
+                       </xs:extension>
+               </xs:complexContent>
+       </xs:complexType>
+
+       <xs:element name="entityFeature" type="entityFeatureType"
+               substitutionGroup="gml:_Feature" />
+
+       <!-- <xs:complexType name="TestFeatureCollectionType"> <xs:complexContent> 
+               <xs:extension base="gml:AbstractFeatureCollectionType" /> </xs:complexContent> 
+               </xs:complexType> <xs:element name="TestFeatureCollection" type="TestFeatureCollectionType" 
+               /> -->
+
+</xs:schema>
\ No newline at end of file
diff --git a/org.argeo.app.api/.classpath b/org.argeo.app.api/.classpath
deleted file mode 100644 (file)
index 81fe078..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?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.app.api/.gitignore b/org.argeo.app.api/.gitignore
deleted file mode 100644 (file)
index 09e3bc9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-/bin/
-/target/
diff --git a/org.argeo.app.api/.project b/org.argeo.app.api/.project
deleted file mode 100644 (file)
index 2f51e20..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>org.argeo.app.api</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.app.api/META-INF/.gitignore b/org.argeo.app.api/META-INF/.gitignore
deleted file mode 100644 (file)
index 4854a41..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/MANIFEST.MF
diff --git a/org.argeo.app.api/bnd.bnd b/org.argeo.app.api/bnd.bnd
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/org.argeo.app.api/build.properties b/org.argeo.app.api/build.properties
deleted file mode 100644 (file)
index 34d2e4d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .
diff --git a/org.argeo.app.api/src/org/argeo/app/api/AppUserState.java b/org.argeo.app.api/src/org/argeo/app/api/AppUserState.java
deleted file mode 100644 (file)
index bcb0593..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.argeo.app.api;
-
-import org.argeo.api.acr.Content;
-import org.argeo.api.cms.CmsSession;
-
-/** Access to content which is specific to a user and their state. */
-public interface AppUserState {
-       Content getOrCreateSessionDir(CmsSession session);
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityConstants.java b/org.argeo.app.api/src/org/argeo/app/api/EntityConstants.java
deleted file mode 100644 (file)
index f04a6d0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.app.api;
-
-/** Constant related to entities, typically used in an OSGi context. */
-public interface EntityConstants {
-       final static String TYPE = "entity.type";
-//     final static String DEFAULT_EDITOR_ID = "entity.defaultEditorId";
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityDefinition.java b/org.argeo.app.api/src/org/argeo/app/api/EntityDefinition.java
deleted file mode 100644 (file)
index 97f7d7c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.argeo.app.api;
-
-/** The definition of an entity, a composite configurable data structure. */
-public interface EntityDefinition {
-//     String getEditorId(Node entity);
-
-       String getType();
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityMimeType.java b/org.argeo.app.api/src/org/argeo/app/api/EntityMimeType.java
deleted file mode 100644 (file)
index eaefcd0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.argeo.app.api;
-
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-
-/** Supported mime types. */
-public enum EntityMimeType {
-       XML("text/xml", "xml"), CSV("text/csv", "csv");
-
-       private final String mimeType;
-       private final String[] extensions;
-
-       EntityMimeType(String mimeType, String... extensions) {
-               this.mimeType = mimeType;
-               this.extensions = extensions;
-       }
-
-       public String getMimeType() {
-               return mimeType;
-       }
-
-       public String[] getExtensions() {
-               return extensions;
-       }
-
-       public String getDefaultExtension() {
-               if (extensions.length > 0)
-                       return extensions[0];
-               else
-                       return null;
-       }
-
-       public String toHttpContentType(Charset charset) {
-               if (charset == null)
-                       return mimeType;
-               return mimeType + "; charset=" + charset.name();
-       }
-
-       public String toHttpContentType() {
-               if (mimeType.startsWith("text/")) {
-                       return toHttpContentType(StandardCharsets.UTF_8);
-               } else {
-                       return mimeType;
-               }
-       }
-
-       public static EntityMimeType find(String mimeType) {
-               for (EntityMimeType entityMimeType : values()) {
-                       if (entityMimeType.mimeType.equals(mimeType))
-                               return entityMimeType;
-               }
-               return null;
-       }
-
-       @Override
-       public String toString() {
-               return mimeType;
-       }
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityName.java b/org.argeo.app.api/src/org/argeo/app/api/EntityName.java
deleted file mode 100644 (file)
index 4330294..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.argeo.app.api;
-
-import org.argeo.api.acr.QNamed;
-
-/** Names used in the entity namespace http://www.argeo.org/ns/entity. */
-public enum EntityName implements QNamed {
-       type, relatedTo, //
-       // time,
-       date,
-       // geography
-       minLat, minLon, maxLat, maxLon,
-       // geo entities
-       place,
-       //
-       ;
-
-       @Override
-       public String getDefaultPrefix() {
-               return "entity";
-       }
-
-       public String basePath() {
-               return '/' + name();
-       }
-
-       @Override
-       public String getNamespace() {
-               return "http://www.argeo.org/ns/entity";
-       }
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityNames.java b/org.argeo.app.api/src/org/argeo/app/api/EntityNames.java
deleted file mode 100644 (file)
index b6240b3..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.argeo.app.api;
-
-import org.argeo.api.acr.ldap.LdapAttr;
-
-/** Constants used to name entity structures. */
-public interface EntityNames {
-       @Deprecated
-       final String FORM_BASE = "form";
-       final String SUBMISSIONS_BASE = "submissions";
-       @Deprecated
-       final String TERM = "term";
-       final String NAME = "name";
-
-//     final String ENTITY_DEFINITIONS_PATH = "/entity";
-       @Deprecated
-       final String TYPOLOGIES_PATH = "/" + TERM;
-       /** Administrative units. */
-       final String ADM = "adm";
-
-       @Deprecated
-       final String ENTITY_TYPE = EntityName.type.get();
-
-       // GENERIC CONCEPTS
-//     /** The language which is relevant. */
-//     final String XML_LANG = "xml:lang";
-       /** The date which is relevant. */
-       @Deprecated
-       final String ENTITY_DATE = EntityName.date.get();
-       @Deprecated
-       final String ENTITY_RELATED_TO = EntityName.relatedTo.get();
-
-       // DEFAULT FOLDER NAMES
-       final String MEDIA = "media";
-       final String FILES = "files";
-
-       // LDAP-LIKE ENTITIES
-       @Deprecated
-       final String DISPLAY_NAME = LdapAttr.displayName.get();
-       // Persons
-       @Deprecated
-       final String GIVEN_NAME = LdapAttr.givenName.get();
-       @Deprecated
-       final String SURNAME = LdapAttr.sn.get();
-       @Deprecated
-       final String EMAIL = LdapAttr.mail.get();
-       @Deprecated
-       final String OU = LdapAttr.ou.get();
-
-       // WGS84
-       @Deprecated
-       final String GEO_LAT = WGS84PosName.lat.get();
-       @Deprecated
-       final String GEO_LONG = WGS84PosName.lon.get();
-       @Deprecated
-       final String GEO_ALT = WGS84PosName.alt.get();
-
-       // SVG
-       @Deprecated
-       final String SVG_WIDTH = "svg:width";
-       @Deprecated
-       final String SVG_HEIGHT = "svg:height";
-       @Deprecated
-       final String SVG_LENGTH = "svg:length";
-       @Deprecated
-       final String SVG_UNIT = "svg:unit";
-       @Deprecated
-       final String SVG_DUR = "svg:dur";
-       @Deprecated
-       final String SVG_DIRECTION = "svg:direction";
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/EntityType.java b/org.argeo.app.api/src/org/argeo/app/api/EntityType.java
deleted file mode 100644 (file)
index 8a258eb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.argeo.app.api;
-
-import org.argeo.api.acr.QNamed;
-
-/** Types used in the entity namespace http://www.argeo.org/ns/entity. */
-public enum EntityType implements QNamed {
-       // entity
-       entity, local, relatedTo,
-       // structure
-       space, document,
-       // typology
-       typologies, terms, term,
-       // form
-       form, formSet, formSubmission,
-       // graphics
-       box,
-       // geography
-       geopoint, bearing, geobounded,
-       // ldap
-       person, user;
-
-       public final static String ENTITY_NAMESPACE_URI = "http://www.argeo.org/ns/entity";
-       public final static String ENTITY_DEFAULT_PREFIX = "entity";
-
-       @Override
-       public String getDefaultPrefix() {
-               return ENTITY_DEFAULT_PREFIX;
-       }
-
-       public String basePath() {
-               return '/' + name();
-       }
-
-       @Override
-       public String getNamespace() {
-               return ENTITY_NAMESPACE_URI;
-       }
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/IdRange.java b/org.argeo.app.api/src/org/argeo/app/api/IdRange.java
deleted file mode 100644 (file)
index e47eb5e..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.argeo.app.api;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ThreadLocalRandom;
-
-/** A range of numerical IDs (typically numerical uid or gid). */
-public class IdRange {
-       // see https://systemd.io/UIDS-GIDS/#special-distribution-uid-ranges
-       final static long MIN_INCLUDED = Long.parseUnsignedLong("66000");
-       final static long MAX_EXCLUDED = Long.parseUnsignedLong("4294967294");
-
-       // We use long as a de facto unsigned int
-       
-       /** included */
-       private final long min;
-       /** included */
-       private final long max;
-
-       public IdRange(long min, long max) {
-               this.min = min;
-               this.max = max;
-       }
-
-       public IdRange(long minPow10) {
-               this(minPow10, maxFromMinPow10(minPow10));
-       }
-
-       public long getMin() {
-               return min;
-       }
-
-       public long getMax() {
-               return max;
-       }
-
-       @Override
-       public int hashCode() {
-               return (int) min;
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (obj instanceof IdRange idRange) {
-                       return min == idRange.min && max == idRange.max;
-               } else
-                       return false;
-       }
-
-       @Override
-       public String toString() {
-               return "[" + Long.toUnsignedString(min) + "," + Long.toUnsignedString(max) + "]";
-       }
-
-       /*
-        * RANGE GENERATION
-        */
-       public static synchronized Set<IdRange> randomRanges10000(int count, Set<IdRange> forbiddenRanges) {
-               Set<IdRange> res = new HashSet<>();
-
-               for (int i = 0; i < count; i++) {
-                       IdRange newRange = null;
-                       do {
-                               newRange = randomRange10000();
-                       } while (overlap(newRange, res) || overlap(newRange, forbiddenRanges));
-                       res.add(newRange);
-               }
-               return res;
-       }
-
-       public static synchronized IdRange randomRange10000() {
-               // TODO make it more generic
-               long minPred = 7l;
-               long maxPred = 429496l;
-
-               long rand = ThreadLocalRandom.current().nextLong(minPred, maxPred);
-               long min = rand * 10000l;
-               return new IdRange(min);
-       }
-
-       public static boolean overlap(IdRange idRange, Set<IdRange> idRanges) {
-               for (IdRange other : idRanges) {
-                       if (overlap(idRange, other))
-                               return true;
-               }
-               return false;
-       }
-
-       public static boolean overlap(IdRange idRange, IdRange other) {
-               // see
-               // https://stackoverflow.com/questions/3269434/whats-the-most-efficient-way-to-test-if-two-ranges-overlap
-               return idRange.min <= other.max && other.min <= idRange.max;
-       }
-
-       /*
-        * UTILITIES
-        */
-
-       private static long maxFromMinPow10(long minPow10) {
-               if ((minPow10 % 100) != 0) {
-                       throw new IllegalArgumentException(minPow10 + " must at least ends with two zeroes");
-               }
-               int exp = 2;
-               exp: for (int i = exp + 1; i < 10; i++) {
-                       if ((minPow10 % pow10(i)) != 0)
-                               break exp;
-                       exp++;
-               }
-//             System.out.println(exp);
-
-               long max = minPow10 + pow10(exp) - 1;
-               return max;
-       }
-
-       /** Power of 10. */
-       private static long pow10(int exp) {
-               if (exp == 0)
-                       return 1;
-               else
-                       return 10 * pow10(exp - 1);
-       }
-
-       public static void main(String... args) {
-               System.out.println(maxFromMinPow10(100));
-               System.out.println(maxFromMinPow10(78500));
-               System.out.println(maxFromMinPow10(716850000));
-
-//             System.out.println(pow10(6));
-//             System.out.println(maxFromMinPow10(12));
-//             System.out.println(maxFromMinPow10(124));
-//             System.out.println(maxFromMinPow10(99814565));
-       }
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java b/org.argeo.app.api/src/org/argeo/app/api/RankedObject.java
deleted file mode 100644 (file)
index fab42d7..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.argeo.app.api;
-
-import java.util.Map;
-
-import org.argeo.api.cms.CmsLog;
-
-/**
- * A container for an object whose relevance can be ranked. Typically used in an
- * OSGi context with the service.ranking property.
- */
-public class RankedObject<T> {
-       private final static CmsLog log = CmsLog.getLog(RankedObject.class);
-
-       private final static String SERVICE_RANKING = "service.ranking";
-//     private final static String SERVICE_ID = "service.id";
-
-       private T object;
-       private Map<String, Object> properties;
-       private final int rank;
-
-       public RankedObject(T object, Map<String, Object> properties) {
-               this(object, properties, extractRanking(properties));
-       }
-
-       public RankedObject(T object, Map<String, Object> properties, int rank) {
-               super();
-               this.object = object;
-               this.properties = properties;
-               this.rank = rank;
-       }
-
-       private static int extractRanking(Map<String, Object> properties) {
-               if (properties == null)
-                       return 0;
-               if (properties.containsKey(SERVICE_RANKING))
-                       return (Integer) properties.get(SERVICE_RANKING);
-//             else if (properties.containsKey(SERVICE_ID))
-//                     return (Long) properties.get(SERVICE_ID);
-               else
-                       return 0;
-       }
-
-       public T get() {
-               return object;
-       }
-
-       public Map<String, Object> getProperties() {
-               return properties;
-       }
-
-       public int getRank() {
-               return rank;
-       }
-
-       @Override
-       public int hashCode() {
-               return object.hashCode();
-       }
-
-       @Override
-       public boolean equals(Object obj) {
-               if (!(obj instanceof RankedObject))
-                       return false;
-               RankedObject<?> other = (RankedObject<?>) obj;
-               return rank == other.rank && object.equals(other.object);
-       }
-
-       @Override
-       public String toString() {
-               return object.getClass().getName() + " with rank " + rank;
-       }
-
-       public static <K, T> boolean hasHigherRank(Map<K, RankedObject<T>> map, K key, Map<String, Object> properties) {
-               if (!map.containsKey(key))
-                       return true;
-               RankedObject<T> rankedObject = new RankedObject<>(null, properties);
-               RankedObject<T> current = map.get(key);
-               return current.getRank() < rankedObject.getRank();
-       }
-
-       /**
-        * @return the {@link RankedObject}, or <code>null</code> if the current one was
-        *         kept
-        */
-       public static <K, T> RankedObject<T> putIfHigherRank(Map<K, RankedObject<T>> map, K key, T object,
-                       Map<String, Object> properties) {
-               RankedObject<T> rankedObject = new RankedObject<>(object, properties);
-               if (!map.containsKey(key)) {
-                       map.put(key, rankedObject);
-                       if (log.isTraceEnabled())
-                               log.trace(
-                                               "Added " + key + " as " + object.getClass().getName() + " with rank " + rankedObject.getRank());
-                       return rankedObject;
-               } else {
-                       RankedObject<T> current = map.get(key);
-                       if (current.getRank() < rankedObject.getRank()) {
-                               map.put(key, rankedObject);
-                               if (log.isDebugEnabled())
-                                       log.debug("Replaced " + key + " by " + object.getClass().getName() + " with rank "
-                                                       + rankedObject.getRank());
-                               return rankedObject;
-                       } else if (current.getRank() == rankedObject.getRank()) {
-                               log.error("Already " + key + " by " + current.get().getClass().getName() + " with rank "
-                                               + rankedObject.getRank() + ", ignoring " + rankedObject.get().getClass().getName());
-                               return null;
-                       } else {
-                               return null;
-                       }
-               }
-
-       }
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/SuiteRole.java b/org.argeo.app.api/src/org/argeo/app/api/SuiteRole.java
deleted file mode 100644 (file)
index 5a2fc6b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.argeo.app.api;
-
-import javax.xml.namespace.QName;
-
-import org.argeo.api.acr.ArgeoNamespace;
-import org.argeo.api.acr.ContentName;
-import org.argeo.api.acr.ldap.LdapAttr;
-import org.argeo.api.cms.CmsConstants;
-import org.argeo.cms.SystemRole;
-
-/** Standard suite system roles. */
-public enum SuiteRole implements SystemRole {
-       /** An external person who has read access to part of the information. */
-       observer,
-       /** An active coworker. */
-       coworker,
-       /** Someone who is allowed validate and publish information. */
-       publisher,
-       /** Someone with manager status within an organisation. Does not necessarily give more rights. */
-       manager,
-       //
-       ;
-
-       private final static String QUALIFIER = "app.";
-
-       private final ContentName name;
-
-       SuiteRole() {
-               name = new ContentName(ArgeoNamespace.ROLE_NAMESPACE_URI, QUALIFIER + name());
-       }
-
-       @Override
-       public QName qName() {
-               return name;
-       }
-
-       @Deprecated
-       private String getRolePrefix() {
-               return "org.argeo.suite";
-       }
-
-       @Deprecated
-       public String dn() {
-               return new StringBuilder(LdapAttr.cn.name()).append("=").append(getRolePrefix()).append(".").append(name())
-                               .append(",").append(CmsConstants.SYSTEM_ROLES_BASEDN).toString();
-       }
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/Term.java b/org.argeo.app.api/src/org/argeo/app/api/Term.java
deleted file mode 100644 (file)
index 5a7f09e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.argeo.app.api;
-
-import java.util.List;
-
-/**
- * A name within a {@link Typology}, used to qualify an entity (categories,
- * keywords, etc.).
- */
-public interface Term {
-       String getId();
-
-       String getName();
-
-//     String getRelativePath();
-
-       Typology getTypology();
-
-       List<? extends Term> getSubTerms();
-
-       Term getParentTerm();
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/TermsManager.java b/org.argeo.app.api/src/org/argeo/app/api/TermsManager.java
deleted file mode 100644 (file)
index 03e1150..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.argeo.app.api;
-
-import java.util.List;
-import java.util.Set;
-
-/** Provides optimised access and utilities around terms typologies. */
-public interface TermsManager {
-       Typology getTypology(String typology);
-
-       Set<Typology> getTypologies();
-
-       Term getTerm(String id);
-
-       List<Term> listAllTerms(String typology);
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/Typology.java b/org.argeo.app.api/src/org/argeo/app/api/Typology.java
deleted file mode 100644 (file)
index f57e692..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.argeo.app.api;
-
-import java.util.List;
-
-/** A structured and exhaustive set of {@link Term}s. */
-public interface Typology {
-
-       String getId();
-
-       boolean isFlat();
-
-       List<? extends Term> getSubTerms();
-
-       Term findTermByName(String name);
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/WGS84PosName.java b/org.argeo.app.api/src/org/argeo/app/api/WGS84PosName.java
deleted file mode 100644 (file)
index 4ba1a13..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.argeo.app.api;
-
-import org.argeo.api.acr.QNamed;
-
-/**
- * Geographical coordinate in WGS84 reference datum.
- * 
- * @see https://www.w3.org/2003/01/geo/
- */
-public enum WGS84PosName implements QNamed {
-       lat, lon("long"), alt;
-
-       private final String localName;
-
-       private WGS84PosName() {
-               localName = null;
-       }
-
-       private WGS84PosName(String localName) {
-               this.localName = localName;
-       }
-
-       @Override
-       public String getNamespace() {
-               return "http://www.w3.org/2003/01/geo/wgs84_pos#";
-       }
-
-       @Override
-       public String getDefaultPrefix() {
-               return "geo";
-       }
-
-       @Override
-       public String localName() {
-               if (localName != null)
-                       return localName;
-               return QNamed.super.localName();
-       }
-
-}
diff --git a/org.argeo.app.api/src/org/argeo/app/api/entity.xsd b/org.argeo.app.api/src/org/argeo/app/api/entity.xsd
deleted file mode 100644 (file)
index a2fbfcd..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-       elementFormDefault="qualified" attributeFormDefault="unqualified"
-       targetNamespace="http://www.argeo.org/ns/entity"
-       xmlns:entity="http://www.argeo.org/ns/entity">
-
-       <xs:attribute name="date" type="xs:date" />
-
-       <xs:element name="local">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:any minOccurs="0" maxOccurs="unbounded"
-                                       namespace="##local" processContents="lax" />
-                       </xs:sequence>
-                       <xs:anyAttribute namespace="##any"
-                               processContents="lax" />
-               </xs:complexType>
-       </xs:element>
-
-       <xs:element name="terms">
-               <xs:complexType>
-                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                               <xs:element ref="entity:term"></xs:element>
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-
-       <xs:element name="term">
-               <xs:complexType>
-                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                               <xs:element ref="entity:term"></xs:element>
-                       </xs:sequence>
-                       <xs:anyAttribute namespace="##any"
-                               processContents="lax" />
-               </xs:complexType>
-       </xs:element>
-</xs:schema>
\ No newline at end of file
diff --git a/org.argeo.app.api/src/org/argeo/app/api/entityFeature.xsd b/org.argeo.app.api/src/org/argeo/app/api/entityFeature.xsd
deleted file mode 100644 (file)
index 805bd1a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-       xmlns="http://apaf.on.netiket.eu/ns/apaf"
-       targetNamespace="http://apaf.on.netiket.eu/ns/apaf"
-       xmlns:entity="http://www.argeo.org/ns/entity" xmlns:dav="DAV:"
-       xmlns:gml="http://www.opengis.net/gml">
-<!--   <xs:import -->
-<!--           schemaLocation="entity.xsd" -->
-<!--           namespace="http://www.argeo.org/ns/entity"></xs:import> -->
-       <!-- <xs:import -->
-       <!-- schemaLocation="https://schemas.opengis.net/gml/3.2.1/gml.xsd" -->
-       <!-- namespace="http://www.opengis.net/gml/3.2"></xs:import> -->
-       <xs:import namespace="http://www.opengis.net/gml"
-               schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gml.xsd" />
-
-       <xs:complexType name="entityFeatureType">
-               <xs:complexContent>
-                       <xs:extension base="gml:AbstractFeatureType">
-                               <xs:sequence>
-                                       <xs:element name="area" type="gml:PolygonPropertyType" />
-                                       <xs:element name="geopoint" type="gml:PointPropertyType" />
-                                       <xs:element name="path" type="xs:string" />
-                               </xs:sequence>
-                       </xs:extension>
-               </xs:complexContent>
-       </xs:complexType>
-
-       <xs:element name="entityFeature" type="entityFeatureType"
-               substitutionGroup="gml:_Feature" />
-
-       <!-- <xs:complexType name="TestFeatureCollectionType"> <xs:complexContent> 
-               <xs:extension base="gml:AbstractFeatureCollectionType" /> </xs:complexContent> 
-               </xs:complexType> <xs:element name="TestFeatureCollection" type="TestFeatureCollectionType" 
-               /> -->
-
-</xs:schema>
\ No newline at end of file
index 4d5a1d21545d615123e9b608a25af939f9c298fa..2a1d10e178157d167279eccd893ce6ae678ec344 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" name="org.argeo.app.termsContentProvider">
    <implementation class="org.argeo.app.acr.terms.TermsContentProvider"/>
-   <reference bind="setService" cardinality="1..1" interface="org.argeo.app.api.TermsManager" name="TermsManager" policy="static"/>
+   <reference bind="setService" cardinality="1..1" interface="org.argeo.api.app.TermsManager" name="TermsManager" policy="static"/>
    <service>
       <provide interface="org.argeo.api.acr.spi.ContentProvider"/>
    </service>
index 672f66f27beec11dd51c1ae45a4b71b5568b153e..2cc5fb5d84329bf7ddc110cf4a7b5cf1731b3721 100644 (file)
@@ -8,7 +8,7 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedSession;
-import org.argeo.app.api.Term;
+import org.argeo.api.app.Term;
 import org.argeo.cms.acr.AbstractContent;
 
 public class TermContent extends AbstractContent {
index 2d7a5d1a615ab1b111fa40eae5a723fe61584464..8e586678da241584aee21839f0b9f4c6f0d1aea9 100644 (file)
@@ -7,10 +7,10 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentNotFoundException;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedSession;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
-import org.argeo.app.api.Typology;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
+import org.argeo.api.app.Typology;
 import org.argeo.cms.acr.AbstractSimpleContentProvider;
 import org.argeo.cms.acr.ContentUtils;
 
index 63bb8a3917ce2caaf8db39e409d9aa080e548535..d4b0c00b9c8df7b20a8a2626a0164aab4c9895fa 100644 (file)
@@ -8,7 +8,7 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ContentProvider;
 import org.argeo.api.acr.spi.ProvidedSession;
-import org.argeo.app.api.Typology;
+import org.argeo.api.app.Typology;
 import org.argeo.cms.acr.AbstractContent;
 
 public class TypologyContent extends AbstractContent {
index 7e10bf0e109f5d8c386e852ffdd4b775d8092841..7ccabd18795cd53930c5dd86ba7c0632bce04fcc 100644 (file)
@@ -1,6 +1,6 @@
 package org.argeo.app.core;
 
-import org.argeo.app.api.EntityDefinition;
+import org.argeo.api.app.EntityDefinition;
 
 public abstract class AbstractEntityDefinition implements EntityDefinition {
 
index ec77eda02f8ce7702f0e0952cef6e58d20624e71..ecb07c92e6639fd4d671f1d5160e74af1c8c6012 100644 (file)
@@ -12,7 +12,7 @@ public enum SuiteContentNamespace implements ContentNamespace {
        // ARGEO
        //
        ENTITY("entity", "http://www.argeo.org/ns/entity",
-                       "platform:/plugin/org.argeo.app.api/org/argeo/app/api/entity.xsd", null),
+                       "platform:/plugin/org.argeo.app.api/org/argeo/api/app/entity.xsd", null),
        //
        ARGEO_DBK("argeodbk", "http://www.argeo.org/ns/argeodbk", null, null),
        //
index 7b614a74ea0939a5d494e0b3b7f90227442db2e6..adaf510c41344ad77cb9b9ed9db0d9767442c151 100644 (file)
@@ -8,8 +8,8 @@ import javax.xml.namespace.QName;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ldap.LdapAttr;
 import org.argeo.api.acr.ldap.LdapObj;
-import org.argeo.app.api.EntityType;
-import org.argeo.cms.RoleNameUtils;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.cms.auth.RoleNameUtils;
 
 /** Utilities around the Argeo Suite APIs. */
 public class SuiteUtils {
index 8a92db379ec76ee4fb77b6bce3fe6809f7f2d983..fed027d7477c904ebd81c9107b2ddfbf4e769770 100644 (file)
@@ -1,7 +1,7 @@
 package org.argeo.app.docbook;
 
 import org.argeo.api.acr.Content;
-import org.argeo.app.api.EntityType;
+import org.argeo.api.app.EntityType;
 
 /** Utilities when using ACR to access DocBook. */
 public class DbkAcrUtils {
index 0347631b79467cf68f43af8ab20d30e6e672aab7..8a08f57ba1ec9e7156f51ae14e3cc92f75948f16 100644 (file)
@@ -6,5 +6,5 @@
    </service>
    <property name="context.path" type="String" value="/api/wfs/" />
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.spi.ProvidedRepository" name="ProvidedRepository" policy="static"/>
-   <reference bind="addFeatureAdapter" cardinality="0..n" interface="org.argeo.app.api.geo.FeatureAdapter" name="FeatureAdapter" policy="dynamic" unbind="removeFeatureAdapter"/>
+   <reference bind="addFeatureAdapter" cardinality="0..n" interface="org.argeo.api.app.geo.FeatureAdapter" name="FeatureAdapter" policy="dynamic" unbind="removeFeatureAdapter"/>
 </scr:component>
index 69689a95b07f1e54ca015184534b5112e43f0293..1dffbabf3429a59cef3229d09d71d6943f070b6b 100644 (file)
@@ -4,7 +4,7 @@ import javax.xml.namespace.QName;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.search.AndFilter;
-import org.argeo.app.api.EntityType;
+import org.argeo.api.app.EntityType;
 import org.argeo.app.geo.acr.GeoEntityUtils;
 import org.locationtech.jts.geom.Geometry;
 
index 162081a58ad40c3545277409a7ad2c90e59572b0..2fd0ad1f3c9484c7a591499afb8d5e5ce07d25b1 100644 (file)
@@ -17,10 +17,10 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentName;
 import org.argeo.api.acr.DName;
 import org.argeo.api.acr.QNamed;
+import org.argeo.api.app.EntityName;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.WGS84PosName;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityName;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.WGS84PosName;
 import org.argeo.app.geo.GeoJson;
 import org.argeo.app.geo.JTS;
 import org.locationtech.jts.geom.Coordinate;
index 47cae24fcf445b291f42aaa4415029f50a7b09ed..9c0f8dc20153a48b925fd02100e0b20283985c30 100644 (file)
@@ -22,10 +22,10 @@ import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.ldap.LdapAttr;
 import org.argeo.api.acr.search.AndFilter;
 import org.argeo.api.acr.spi.ProvidedRepository;
+import org.argeo.api.app.EntityName;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.WGS84PosName;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityName;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.WGS84PosName;
 import org.argeo.app.api.geo.FeatureAdapter;
 import org.argeo.app.api.geo.WfsKvp;
 import org.argeo.app.geo.CqlUtils;
index 481884ef92ed2f869c3baa666cef6cea67b85e86..c870036239591d65ece4e9e3dc9438385e9741e5 100644 (file)
@@ -2,7 +2,7 @@
 <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.argeo.internal.app.jcr.appUserState">
    <implementation class="org.argeo.internal.app.jcr.AppUserStateImpl"/>
    <service>
-      <provide interface="org.argeo.app.api.AppUserState"/>
+      <provide interface="org.argeo.api.app.AppUserState"/>
    </service>
    <reference bind="setJcrContentProvider" cardinality="1..1" interface="org.argeo.cms.jcr.acr.JcrContentProvider" name="JcrContentProvider" policy="static"/>
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.ContentRepository" name="ContentRepository" policy="static"/>
index e6a2abd94909a4e7841c7d5165ea149ab32f1b76..e75fec3e1eea2b03fdb438fdc5e8611146b9385e 100644 (file)
@@ -3,6 +3,6 @@
    <implementation class="org.argeo.app.jcr.terms.SuiteTermsManager"/>
    <reference bind="setRepository" cardinality="1..1" interface="javax.jcr.Repository" name="Repository" policy="static" target="(cn=ego)"/>
    <service>
-      <provide interface="org.argeo.app.api.TermsManager"/>
+      <provide interface="org.argeo.api.app.TermsManager"/>
    </service>
 </scr:component>
index 7fd9d2ecca2a3bf57492a6eef9fad54066723703..2882be00e169ef2bbb9dfa4e3a560777bcacb2a7 100644 (file)
@@ -11,8 +11,8 @@ import javax.jcr.ItemExistsException;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityType;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.maintenance.AbstractMaintenanceService;
 
index 8795d02d7f63c341192455697feaa31e1c42d97a..26950a463aabcd6046140b7189d5cc8589406717 100644 (file)
@@ -6,8 +6,8 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
-import org.argeo.app.api.EntityConstants;
-import org.argeo.app.api.EntityDefinition;
+import org.argeo.api.app.EntityConstants;
+import org.argeo.api.app.EntityDefinition;
 import org.argeo.cms.jcr.CmsJcrUtils;
 import org.argeo.jcr.Jcr;
 import org.osgi.framework.BundleContext;
index b846e0eb5ca9d7e2af7ff29eaa16813c5491cbb0..82589f2efeb2a9ae85cec3007d94eb67ad6a3ee5 100644 (file)
@@ -13,12 +13,12 @@ import javax.jcr.security.Privilege;
 import javax.security.auth.x500.X500Principal;
 
 import org.argeo.api.acr.ldap.LdapAttr;
+import org.argeo.api.app.AppUserState;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsSession;
-import org.argeo.app.api.AppUserState;
-import org.argeo.app.api.EntityType;
+import org.argeo.api.cms.auth.RoleNameUtils;
 import org.argeo.app.core.SuiteUtils;
-import org.argeo.cms.RoleNameUtils;
 import org.argeo.jcr.JcrException;
 import org.argeo.jcr.JcrUtils;
 
index 4454905225dff545e7ed68d7f393a4150cb99dfc..c7692dd7d91c66e86a872beb79178de6ef7769e3 100644 (file)
@@ -13,8 +13,8 @@ import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.docbook.DbkAttr;
 import org.argeo.app.docbook.DbkType;
 import org.argeo.jcr.Jcr;
index 881523f42f927293f1c5a9b36fb492af4669dd12..3b608e1561ddd424b107f6cb2fc4d4db97506c66 100644 (file)
@@ -15,9 +15,9 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 
+import org.argeo.api.app.EntityMimeType;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityMimeType;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.odk.OdkNames;
 import org.argeo.app.odk.OrxListName;
 import org.argeo.app.odk.OrxManifestName;
index db4e4a6d85d26c25360a7c039380996c35d340e5..958b54500f9ccdeeab9ce214d549d1d91e2dae5c 100644 (file)
@@ -3,7 +3,7 @@ package org.argeo.app.jcr.terms;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.argeo.app.api.Term;
+import org.argeo.api.app.Term;
 
 /**
  * A single term. Helper to optimise {@link SuiteTermsManager} implementation.
index eba0529ac50c7d629e96bc88f3579d93cd9c03b8..30ecb764301164a1145be5f33024cc3013a15b54 100644 (file)
@@ -13,12 +13,12 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.argeo.api.app.EntityNames;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
+import org.argeo.api.app.Typology;
 import org.argeo.api.cms.CmsConstants;
-import org.argeo.app.api.EntityNames;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
-import org.argeo.app.api.Typology;
 import org.argeo.cms.jcr.CmsJcrUtils;
 import org.argeo.jcr.Jcr;
 import org.argeo.jcr.JcrException;
index 0040abbd3f10b2b9cae1a178de369afaddd46816..b0095be3f81daae0fc0da1793594cb18f861aef4 100644 (file)
@@ -5,8 +5,8 @@ import java.util.List;
 
 import javax.jcr.Node;
 
-import org.argeo.app.api.Term;
-import org.argeo.app.api.Typology;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.Typology;
 import org.argeo.jcr.Jcr;
 
 /** A typology. Helper to optimise {@link SuiteTermsManager} implementation. */
index 5b481f73e0bab92cee791f12d6aab6941fb6c4cd..11c42d374dd818f9f6e6f1e7dcd14ccc123c1ee6 100644 (file)
@@ -5,9 +5,9 @@ import javax.jcr.Node;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentRepository;
 import org.argeo.api.acr.ContentSession;
+import org.argeo.api.app.AppUserState;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsSession;
-import org.argeo.app.api.AppUserState;
 import org.argeo.app.jcr.SuiteJcrUtils;
 import org.argeo.cms.acr.ContentUtils;
 import org.argeo.cms.jcr.acr.JcrContentProvider;
index ceeb4f5b1519ae9b564ca918c31b435a3bc3942b..b0198a01d3a9f59e023518eaaeb995e2f1b81be6 100644 (file)
@@ -8,8 +8,8 @@ import javax.jcr.Session;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.security.Privilege;
 
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
-import org.argeo.app.api.EntityType;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.maintenance.AbstractMaintenanceService;
 
index f2d312e80959e94a04df98e829b506b27e662544..29ff8ba2202e183a97f8c749f96b51c1656e8617 100644 (file)
@@ -8,5 +8,5 @@
    <property name="osgi.http.whiteboard.context.select" type="String" value="(osgi.http.whiteboard.context.name=odkServletContext)"/>
    <property name="osgi.http.whiteboard.servlet.multipart.enabled" type="String" value="true"/>
    <reference bind="addSubmissionListener" cardinality="0..n" interface="org.argeo.app.xforms.FormSubmissionListener" name="FormSubmissionListener" policy="dynamic" unbind="removeSubmissionListener"/>
-   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.app.api.AppUserState" name="AppUserState" policy="static"/>
+   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.api.app.AppUserState" name="AppUserState" policy="static"/>
 </scr:component>
index 5310542cd46c9aa5620e33fb5bfb2aceb329044c..965082c70d9ce274e830ad0a39a41e5045b0a9e4 100644 (file)
@@ -16,9 +16,9 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.odk.OrxListName;
 import org.argeo.app.odk.OrxManifestName;
 import org.argeo.cms.auth.RemoteAuthUtils;
index de88a232fc57db372c6f9e62f3ba918415e07ae1..e5e2de6ebce277a157341a023da1472a8b675695 100644 (file)
@@ -29,9 +29,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.io.output.NullOutputStream;
-import org.argeo.app.api.EntityMimeType;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.WGS84PosName;
+import org.argeo.api.app.EntityMimeType;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.WGS84PosName;
 import org.argeo.app.geo.GeoShapeUtils;
 import org.argeo.app.odk.OrxManifestName;
 import org.argeo.cms.auth.RemoteAuthUtils;
index da79b5ef924f786b52bf866ccb8a453e84d83d75..68e701d5fc4ed7250692fcced41c35c39d40680e 100644 (file)
@@ -21,9 +21,9 @@ import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.Part;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.app.AppUserState;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.CmsSession;
-import org.argeo.app.api.AppUserState;
 import org.argeo.app.image.ImageProcessor;
 import org.argeo.app.odk.OrxType;
 import org.argeo.app.xforms.FormSubmissionListener;
index 1e0191d9cb6c695f79e4a876f796d049f6008efe..935672f19dca1dbd4895b57dc04882175951b14c 100644 (file)
@@ -3,7 +3,7 @@ org.apache.xmlgraphics.image.loader,\
 org.osgi.service.http.context,\
 javax.jcr.nodetype,\
 org.osgi.framework,\
-org.argeo.app.api,\
+org.argeo.api.app,\
 org.argeo.cms.acr.xml,\
 javax.servlet.*;version="[3,5)",\
 *
index 1d9358215b66500f7c8d0b7ed3a47c12f8f4ae95..314a0e430640143d4becff96fce254c7b1ad53cc 100644 (file)
@@ -10,5 +10,5 @@
    <reference bind="addLayer" cardinality="1..n" interface="org.argeo.app.swt.ux.SwtAppLayer" name="SuiteLayer" policy="dynamic" unbind="removeLayer"/>
    <reference bind="setCmsContext" cardinality="1..1" interface="org.argeo.api.cms.CmsContext" name="CmsContext" policy="static"/>
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.ContentRepository" name="ContentRepository" policy="static"/>
-   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.app.api.AppUserState" name="AppUserState" policy="static"/>
+   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.api.app.AppUserState" name="AppUserState" policy="static"/>
 </scr:component>
index 07b259d795b9dc15372e0703b3b18a8595c3bd23..187f6e27bb21a10461562581ce6e37eaf979a413 100644 (file)
@@ -6,5 +6,5 @@
    </service>
    <property name="service.ranking" type="Integer" value="-1000"/>
    <properties entry="config/termsEntryArea.properties"/>
-   <reference bind="setTermsManager" cardinality="1..1" interface="org.argeo.app.api.TermsManager" name="TermsManager" policy="static"/>
+   <reference bind="setTermsManager" cardinality="1..1" interface="org.argeo.api.app.TermsManager" name="TermsManager" policy="static"/>
 </scr:component>
index 782418466d5b0561bfefe81ef931295d8315f8ab..ef68882212632e07d3a9145129bbf9f8f7705e0f 100644 (file)
@@ -7,7 +7,7 @@ OSGI-INF/termsEntryArea.xml,\
 OSGI-INF/termsLayer.xml,\
 
 Import-Package:\
-org.argeo.app.api,\
+org.argeo.api.app,\
 org.argeo.cms.swt.acr;resolution:=optional,\
 org.argeo.app.swt.ux;resolution:=optional,\
 org.argeo.app.swt.terms;resolution:=optional,\
index 21c1d25740ed9022c1c6485645d5ca76efe6e085..1e979d6596e7611fbf11057f332ea4924e37cb08 100644 (file)
@@ -2,6 +2,6 @@ Import-Package:\
 org.eclipse.swt,\
 org.argeo.api.cms.ux,\
 org.argeo.cms.ux.acr,\
-org.argeo.app.api,\
+org.argeo.api.app,\
 org.argeo.cms.osgi,\
 *
\ No newline at end of file
index 7154652404eb5261e82304895933ddaf3071d031..6d22d9f8ead2314480e656c677e61e50fc011caa 100644 (file)
@@ -11,10 +11,10 @@ import java.nio.charset.StandardCharsets;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.DName;
 import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.app.EntityNames;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.ux.Cms2DSize;
 import org.argeo.api.cms.ux.CmsImageManager;
-import org.argeo.app.api.EntityNames;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.docbook.DbkAttr;
 import org.argeo.app.docbook.DbkType;
 import org.argeo.cms.acr.SvgAttrs;
index 2c28a79373925f1429088cd6cbdd49ea37184eef..fabab760df77c59b48a18b2c36e7c7ed9b77a00e 100644 (file)
@@ -6,8 +6,8 @@ import java.util.List;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.api.EntityType;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
 import org.argeo.cms.swt.widgets.SwtTreeView;
index 2ca2a57a00e34debe48be2b8b22f4fd460b36775..bab73db84d95dd08b50c6447e15ccf6a8c38a062 100644 (file)
@@ -1,10 +1,10 @@
 package org.argeo.app.swt.terms;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
+import org.argeo.api.app.Typology;
 import org.argeo.api.cms.ux.CmsIcon;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
-import org.argeo.app.api.Typology;
 import org.argeo.cms.Localized;
 import org.argeo.cms.swt.CmsSwtTheme;
 import org.argeo.cms.swt.CmsSwtUtils;
index 80b6f721e41b3b8fd74c71182c607ccbaaa30887..252b597f33ddba6cd666ddc74f3d99974e1cc2ee 100644 (file)
@@ -5,9 +5,9 @@ import java.util.List;
 
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
 import org.argeo.app.ux.SuiteStyle;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.MouseDoubleClick;
index 0a1abda3744636e659248f725b3f6e8118b4e025..c82417344312f40ee7095861a8411065abac2c88 100644 (file)
@@ -3,8 +3,8 @@ package org.argeo.app.swt.terms;
 import java.util.List;
 
 import org.argeo.api.acr.Content;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
 import org.argeo.app.ux.SuiteStyle;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.MouseDoubleClick;
index 912c43f100951f92bf9d4b8a9033a6f2ba40c054..8c645ad44aeed3f7a5480bb65df04870f28f9bda 100644 (file)
@@ -3,9 +3,9 @@ package org.argeo.app.swt.terms;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.TermsManager;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.TermsManager;
 import org.argeo.app.ux.SuiteUxEvent;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
index 2b17dee36458749520db9bcb2090b529af8c9b2b..a46112bdca2f2a18abb5b6c6853d439976d045ff 100644 (file)
@@ -9,10 +9,10 @@ import java.util.Set;
 import java.util.TreeMap;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.app.RankedObject;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsIcon;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.api.RankedObject;
 import org.argeo.app.core.SuiteUtils;
 import org.argeo.app.ux.SuiteIcon;
 import org.argeo.app.ux.SuiteStyle;
index 28641638d7f93a0ffdae1419153d5f0ecdce8374..d123aa09c1821b447b76d948c8eebe53b8eaf1c0 100644 (file)
@@ -22,6 +22,11 @@ import javax.xml.namespace.QName;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.ContentRepository;
 import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.api.app.AppUserState;
+import org.argeo.api.app.EntityConstants;
+import org.argeo.api.app.EntityName;
+import org.argeo.api.app.EntityType;
+import org.argeo.api.app.RankedObject;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsEvent;
 import org.argeo.api.cms.CmsEventSubscriber;
@@ -30,11 +35,6 @@ import org.argeo.api.cms.CmsSession;
 import org.argeo.api.cms.ux.CmsTheme;
 import org.argeo.api.cms.ux.CmsUi;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.api.AppUserState;
-import org.argeo.app.api.EntityConstants;
-import org.argeo.app.api.EntityName;
-import org.argeo.app.api.EntityType;
-import org.argeo.app.api.RankedObject;
 import org.argeo.app.ux.AbstractArgeoApp;
 import org.argeo.app.ux.AppUi;
 import org.argeo.app.ux.SuiteUxEvent;
index 604f9f97aca32e7de305d8117d537bdf139a3a4a..2c299a39c3638479e482eaddce32ff724844e4dc 100644 (file)
@@ -10,5 +10,5 @@
    <reference bind="addLayer" cardinality="1..n" interface="org.argeo.app.swt.ux.SwtAppLayer" name="SuiteLayer" policy="dynamic" unbind="removeLayer"/>
    <reference bind="setCmsContext" cardinality="1..1" interface="org.argeo.api.cms.CmsContext" name="CmsContext" policy="static"/>
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.ContentRepository" name="ContentRepository" policy="static"/>
-   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.app.api.AppUserState" name="AppUserState" policy="static"/>
+   <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.api.app.AppUserState" name="AppUserState" policy="static"/>
 </scr:component>
index 3cc62104d1d32d7ce41ed27ac5ef796707847d92..c9bcd5a27b1998ed509998cb31293ef3de78719f 100644 (file)
@@ -15,7 +15,7 @@ import javax.jcr.observation.EventListener;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryResult;
 
-import org.argeo.app.api.EntityType;
+import org.argeo.api.app.EntityType;
 import org.argeo.app.jcr.XPathUtils;
 import org.argeo.app.ui.widgets.DelayedText;
 import org.argeo.app.ux.SuiteIcon;
index 62463c792eab8a2a666867e51c536d37fa26e563..f5cfba5873fc63e124b665bc95f51ad98a1348bc 100644 (file)
@@ -13,10 +13,10 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
 import org.apache.commons.io.IOUtils;
+import org.argeo.api.app.EntityNames;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.ux.CmsEditable;
 import org.argeo.api.cms.ux.CmsStyle;
-import org.argeo.app.api.EntityNames;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.swt.ux.SuiteSwtUtils;
 import org.argeo.app.ux.SuiteUxEvent;
 import org.argeo.cms.acr.ContentUtils;
index fef7a025260ebb9c0a07fb7b55f4e268b4d5fa96..3136bf3560a9c5f047e4d4e7108896098c578ee6 100644 (file)
@@ -17,10 +17,10 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NodeType;
 
+import org.argeo.api.app.EntityNames;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.ux.Cms2DSize;
 import org.argeo.api.cms.ux.CmsImageManager;
-import org.argeo.app.api.EntityNames;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.docbook.DbkAttr;
 import org.argeo.app.docbook.DbkType;
 import org.argeo.app.jcr.docbook.DbkJcrUtils;
index b1cadcad923b912e17770764219d6bd787cf2882..788c2537d734c854be9dfb8b028df60ad97e2a4d 100644 (file)
@@ -2,10 +2,10 @@ package org.argeo.app.ui.forms;
 
 import javax.jcr.Item;
 
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
+import org.argeo.api.app.Typology;
 import org.argeo.api.cms.ux.CmsIcon;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
-import org.argeo.app.api.Typology;
 import org.argeo.cms.Localized;
 import org.argeo.cms.swt.CmsSwtTheme;
 import org.argeo.cms.swt.CmsSwtUtils;
index 57a694907c44d0790d027062c483a5586e02070e..69785968eeb39201b23b32aa7c016ceba21b396d 100644 (file)
@@ -5,9 +5,9 @@ import java.util.List;
 
 import javax.jcr.Item;
 
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
 import org.argeo.api.cms.CmsLog;
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.SwtEditablePart;
 import org.argeo.cms.swt.MouseDoubleClick;
index 57086ad643854830a96997d5b9720906ab8234c3..401fe3ac45bda3124ef9dde05bb1bcc490fd0261 100644 (file)
@@ -4,8 +4,8 @@ import java.util.List;
 
 import javax.jcr.Item;
 
-import org.argeo.app.api.Term;
-import org.argeo.app.api.TermsManager;
+import org.argeo.api.app.Term;
+import org.argeo.api.app.TermsManager;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.SwtEditablePart;
 import org.argeo.cms.swt.MouseDoubleClick;
index 4664758360065dadc1cb7c2c832f64572b29fc11..aa939d6fd6b9f9a339e4e7cf74fa8e3b69f97bcd 100644 (file)
@@ -3,9 +3,9 @@ package org.argeo.app.ui.library;
 import org.argeo.api.acr.Content;
 import org.argeo.api.acr.NamespaceUtils;
 import org.argeo.api.acr.spi.ProvidedContent;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.ux.SuiteUxEvent;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.acr.SwtUiProvider;
index 286a4cb54bf72f0175d8cf791d6a9cf321f175c9..f2e3e3b99fe7df368af060d32b5c72d6c7ec7cbc 100644 (file)
@@ -11,8 +11,8 @@ import javax.jcr.nodetype.NodeType;
 import javax.jcr.query.Query;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.ui.SuiteUiUtils;
 import org.argeo.app.ui.widgets.TreeOrSearchArea;
 import org.argeo.app.ux.SuiteIcon;
index 40b33883afc590d8c9c06745c4cfebb62959c7ea..c0994eb00e4a720b0c8872a34aaeb15a91d4e9f2 100644 (file)
@@ -13,11 +13,11 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 
 import org.apache.commons.io.IOUtils;
-import org.argeo.app.api.EntityNames;
-import org.argeo.app.api.EntityType;
 import org.argeo.app.ux.SuiteUxEvent;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.ux.CmsView;
+import org.argeo.api.app.EntityNames;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.eclipse.swt.SWT;
index e4e63b86eb030f889561c2cefe76bb038926bab6..f1d3900284c8eff44f7e2a7ba3238752d031ff7f 100644 (file)
@@ -11,8 +11,8 @@ import javax.jcr.observation.EventListener;
 import javax.jcr.query.Query;
 
 import org.argeo.api.acr.Content;
+import org.argeo.api.app.EntityType;
 import org.argeo.api.cms.CmsConstants;
-import org.argeo.app.api.EntityType;
 import org.argeo.cms.jcr.acr.JcrContentProvider;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ui.CmsUiProvider;
index 780512e7aef7a86a541dc4bf6ee3cd0f2c27ac8f..a7be1ef2325175f27ef704e7d4e87cf47d08eec1 100644 (file)
@@ -8,20 +8,20 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.QNamed;
 import org.argeo.api.acr.ldap.LdapAttr;
 import org.argeo.api.acr.ldap.LdapObj;
+import org.argeo.api.app.SuiteRole;
+import org.argeo.api.cms.auth.RoleNameUtils;
+import org.argeo.api.cms.auth.SystemRole;
 import org.argeo.api.cms.directory.CmsGroup;
 import org.argeo.api.cms.directory.CmsUser;
 import org.argeo.api.cms.directory.CmsUserManager;
 import org.argeo.api.cms.directory.HierarchyUnit;
 import org.argeo.api.cms.directory.HierarchyUnit.Type;
-import org.argeo.app.api.SuiteRole;
 import org.argeo.app.swt.ux.SuiteSwtUtils;
 import org.argeo.app.ux.SuiteMsg;
 import org.argeo.app.ux.SuiteStyle;
 import org.argeo.cms.CmsMsg;
 import org.argeo.cms.CurrentUser;
 import org.argeo.cms.Localized;
-import org.argeo.cms.RoleNameUtils;
-import org.argeo.cms.SystemRole;
 import org.argeo.cms.auth.CmsSystemRole;
 import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.swt.Selected;