Factorise access to content data path
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 1 Sep 2023 10:23:08 +0000 (12:23 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 1 Sep 2023 10:23:08 +0000 (12:23 +0200)
org.argeo.cms/src/org/argeo/cms/acr/ContentUtils.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/CmsSwtUtils.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/AcrSwtImageManager.java
swt/org.argeo.cms.swt/src/org/argeo/cms/swt/acr/LinkedControl.java

index bf5954411bc157a32003bf17d3e4363e8ee9d5bc..2e101a0d6f51b825c7d2a1bf9f19f713deb33107 100644 (file)
@@ -1,10 +1,13 @@
 package org.argeo.cms.acr;
 
 import java.io.PrintStream;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.StringJoiner;
+import java.util.StringTokenizer;
 import java.util.function.BiConsumer;
 
 import javax.security.auth.login.LoginContext;
@@ -16,6 +19,7 @@ import org.argeo.api.acr.ContentRepository;
 import org.argeo.api.acr.ContentSession;
 import org.argeo.api.acr.DName;
 import org.argeo.api.cms.CmsAuth;
+import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.CmsSession;
 import org.argeo.api.cms.directory.CmsDirectory;
 import org.argeo.api.cms.directory.CmsUserManager;
@@ -217,6 +221,33 @@ public class ContentUtils {
                return relativePath;
        }
 
+       /** A path in the node repository */
+       public static String getDataPath(Content node) {
+               // TODO make it more configurable?
+               StringBuilder buf = new StringBuilder(CmsConstants.PATH_API_ACR);
+               buf.append(node.getPath());
+               return buf.toString();
+       }
+
+       /** A path in the node repository */
+       public static String getDataPathForUrl(Content node) {
+               return cleanPathForUrl(getDataPath(node));
+       }
+
+       /** Clean reserved URL characters for use in HTTP links. */
+       public static String cleanPathForUrl(String path) {
+               StringTokenizer st = new StringTokenizer(path, "/");
+               StringBuilder sb = new StringBuilder();
+               while (st.hasMoreElements()) {
+                       sb.append('/');
+                       String encoded = URLEncoder.encode(st.nextToken(), StandardCharsets.UTF_8);
+                       encoded = encoded.replace("+", "%20");
+                       sb.append(encoded);
+
+               }
+               return sb.toString();
+       }
+
        /** Singleton. */
        private ContentUtils() {
 
index 5d964090b9abbd908ff1fc3f007c85afe11a76f8..3a91dbc23dc5db5db2c7569f75d00a272b3f8d42 100644 (file)
@@ -1,10 +1,7 @@
 package org.argeo.cms.swt;
 
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.StringTokenizer;
 
 import org.argeo.api.cms.ux.CmsIcon;
 import org.argeo.api.cms.ux.CmsStyle;
@@ -294,20 +291,6 @@ public class CmsSwtUtils {
                        child.dispose();
        }
 
-       /** Clean reserved URL characters for use in HTTP links. */
-       public static String cleanPathForUrl(String path) {
-               StringTokenizer st = new StringTokenizer(path, "/");
-               StringBuilder sb = new StringBuilder();
-               while (st.hasMoreElements()) {
-                       sb.append('/');
-                       String encoded = URLEncoder.encode(st.nextToken(), StandardCharsets.UTF_8);
-                       encoded = encoded.replace("+", "%20");
-                       sb.append(encoded);
-
-               }
-               return sb.toString();
-       }
-
        /** Singleton. */
        private CmsSwtUtils() {
        }
index 0984f57fb2786a5366f833ac9f551c3ba9e31348..3c825c1ffd79a457521bead97ded6e20cbf12ae3 100644 (file)
@@ -5,11 +5,10 @@ import java.io.InputStream;
 import java.util.Optional;
 
 import org.argeo.api.acr.Content;
-import org.argeo.api.cms.CmsConstants;
 import org.argeo.api.cms.ux.Cms2DSize;
+import org.argeo.cms.acr.ContentUtils;
 import org.argeo.cms.acr.SvgAttrs;
 import org.argeo.cms.swt.AbstractSwtImageManager;
-import org.argeo.cms.swt.CmsSwtUtils;
 import org.argeo.cms.ux.CmsUxUtils;
 import org.eclipse.swt.graphics.ImageData;
 
@@ -44,15 +43,7 @@ public class AcrSwtImageManager extends AbstractSwtImageManager<Content> {
        }
 
        protected String getDataPathForUrl(Content content) {
-               return CmsSwtUtils.cleanPathForUrl(getDataPath(content));
-       }
-
-       /** A path in the node repository */
-       protected String getDataPath(Content node) {
-               // TODO make it more configurable?
-               StringBuilder buf = new StringBuilder(CmsConstants.PATH_API_ACR);
-               buf.append(node.getPath());
-               return buf.toString();
+               return ContentUtils.getDataPathForUrl(content);
        }
 
        @Override
index 6a75dfb2c440c43740b6210da663e18e17c6f866..4333f48df309cefa847005d417e3211d3711ccb4 100644 (file)
@@ -3,7 +3,7 @@ package org.argeo.cms.swt.acr;
 import java.net.URI;
 
 import org.argeo.api.acr.Content;
-import org.argeo.cms.swt.CmsSwtUtils;
+import org.argeo.cms.acr.ContentUtils;
 import org.argeo.cms.swt.widgets.StyledControl;
 import org.eclipse.swt.widgets.Composite;
 
@@ -56,7 +56,7 @@ public abstract class LinkedControl extends StyledControl {
                if (plainUri != null)
                        return plainUri;
                if (linkedContent != null)
-                       return URI.create("#" + CmsSwtUtils.cleanPathForUrl(linkedContent.getPath()));
+                       return URI.create("#" + ContentUtils.cleanPathForUrl(linkedContent.getPath()));
                return null;
 
        }