Make l10n more generic and extensible.
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Feb 2021 08:22:15 +0000 (09:22 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Feb 2021 08:22:15 +0000 (09:22 +0100)
core/org.argeo.suite.ui/OSGI-INF/leadPane.xml
core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultEditionLayer.java
core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultHeader.java
core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java
core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUiUtils.java

index 9d3f2dd467be9f8ea661962ac5b18de2243fa8ca..0775c5790f6044fdfefb49254e963f442381ecef 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" immediate="false" name="Default Lead Pane">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" immediate="false" name="Default Lead Pane">
    <implementation class="org.argeo.suite.ui.DefaultLeadPane"/>
    <service>
       <provide interface="org.argeo.cms.ui.CmsUiProvider"/>
index 9c2ad475e6e5c219622c1cd38f73609f48ccf7da..ac5559f987fce221d44b9b871c9a3696a9aae949 100644 (file)
@@ -101,7 +101,7 @@ public class DefaultEditionLayer implements SuiteLayer {
                }
        }
 
-       public void destroy() {
+       public void destroy(BundleContext bundleContext, Map<String, String> properties) {
                
        }
        
index 080bac2cfa121b92817a22a95aecabfb700c6641..84a5ebd394197d0c51658f3c91bc26fa42740567 100644 (file)
@@ -116,7 +116,7 @@ public class DefaultHeader implements CmsUiProvider, ManagedService {
                }
        }
 
-       public void destroy() {
+       public void destroy(BundleContext bundleContext, Map<String, String> properties) {
 
        }
 
index 6e4ea4ce951b4d929242c088bfc9fdfaa3a6eb57..b2ebcb297b1e6200d65d937eedb3f02d98023714 100644 (file)
@@ -14,13 +14,10 @@ import javax.jcr.RepositoryException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.cms.LocaleUtils;
 import org.argeo.cms.Localized;
 import org.argeo.cms.auth.CurrentUser;
-import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.ui.CmsView;
-import org.argeo.cms.ui.util.CmsIcon;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.argeo.suite.RankedObject;
 import org.argeo.suite.SuiteUtils;
@@ -30,8 +27,9 @@ import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleWiring;
 
 /** Side pane listing various perspectives. */
 public class DefaultLeadPane implements CmsUiProvider {
@@ -43,7 +41,9 @@ public class DefaultLeadPane implements CmsUiProvider {
 
        private Map<String, RankedObject<SuiteLayer>> layers = Collections.synchronizedSortedMap(new TreeMap<>());
        private List<String> defaultLayers;
-       private List<String> adminLayers= new ArrayList<>();
+       private List<String> adminLayers = new ArrayList<>();
+
+       private ClassLoader l10nClassLoader;
 
        @Override
        public Control createUi(Composite parent, Node node) throws RepositoryException {
@@ -111,7 +111,7 @@ public class DefaultLeadPane implements CmsUiProvider {
                                        buttonParent = adminLayersC;
                                else
                                        buttonParent = appLayersC;
-                               Button b = createLayerButton(buttonParent, layerId, title, icon);
+                               Button b = SuiteUiUtils.createLayerButton(buttonParent, layerId, title, icon, l10nClassLoader);
                                if (first == null)
                                        first = b;
                        }
@@ -119,7 +119,10 @@ public class DefaultLeadPane implements CmsUiProvider {
                return first;
        }
 
-       public void init(Map<String, Object> properties) {
+       public void init(BundleContext bundleContext, Map<String, Object> properties) {
+               l10nClassLoader = bundleContext != null ? bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader()
+                               : getClass().getClassLoader();
+
                String[] defaultLayers = (String[]) properties.get(Property.defaultLayers.toString());
                if (defaultLayers == null)
                        throw new IllegalArgumentException("Default layers must be set.");
@@ -134,6 +137,10 @@ public class DefaultLeadPane implements CmsUiProvider {
                }
        }
 
+       public void destroy(BundleContext bundleContext, Map<String, String> properties) {
+
+       }
+
        public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
                if (properties.containsKey(Constants.SERVICE_PID)) {
                        String pid = (String) properties.get(Constants.SERVICE_PID);
@@ -152,25 +159,25 @@ public class DefaultLeadPane implements CmsUiProvider {
                }
        }
 
-       protected Button createLayerButton(Composite parent, String layer, Localized msg, CmsIcon icon) {
-               CmsTheme theme = CmsTheme.getCmsTheme(parent);
-               Button button = new Button(parent, SWT.PUSH);
-               CmsUiUtils.style(button, SuiteStyle.leadPane);
-               if (icon != null)
-                       button.setImage(icon.getBigIcon(theme));
-               button.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, false));
-               // button.setToolTipText(msg.lead());
-               if (msg != null) {
-                       Label lbl = new Label(parent, SWT.CENTER);
-                       CmsUiUtils.style(lbl, SuiteStyle.leadPane);
-                       // CmsUiUtils.markup(lbl);
-                       ClassLoader l10nClassLoader = getClass().getClassLoader();
-                       String txt = LocaleUtils.lead(msg, l10nClassLoader);
-//                     String txt = msg.lead();
-                       lbl.setText(txt);
-                       lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
-               }
-               CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer);
-               return button;
-       }
+//     protected Button createLayerButton(Composite parent, String layer, Localized msg, CmsIcon icon) {
+//             CmsTheme theme = CmsTheme.getCmsTheme(parent);
+//             Button button = new Button(parent, SWT.PUSH);
+//             CmsUiUtils.style(button, SuiteStyle.leadPane);
+//             if (icon != null)
+//                     button.setImage(icon.getBigIcon(theme));
+//             button.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, false));
+//             // button.setToolTipText(msg.lead());
+//             if (msg != null) {
+//                     Label lbl = new Label(parent, SWT.CENTER);
+//                     CmsUiUtils.style(lbl, SuiteStyle.leadPane);
+//                     // CmsUiUtils.markup(lbl);
+//                     ClassLoader l10nClassLoader = getClass().getClassLoader();
+//                     String txt = LocaleUtils.lead(msg, l10nClassLoader);
+////                   String txt = msg.lead();
+//                     lbl.setText(txt);
+//                     lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
+//             }
+//             CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer);
+//             return button;
+//     }
 }
index 79edb6416e38ffd7644037b9bbae3b68fce58ea2..0cfee182596230c9875f0d87b84a49dc0ea966d5 100644 (file)
@@ -7,12 +7,15 @@ import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.argeo.cms.LocaleUtils;
 import org.argeo.cms.Localized;
 import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.ui.CmsEditable;
+import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsView;
 import org.argeo.cms.ui.dialogs.LightweightDialog;
 import org.argeo.cms.ui.util.CmsEvent;
+import org.argeo.cms.ui.util.CmsIcon;
 import org.argeo.cms.ui.util.CmsUiUtils;
 import org.argeo.eclipse.ui.EclipseUiUtils;
 import org.argeo.entity.EntityNames;
@@ -324,6 +327,27 @@ public class SuiteUiUtils {
                return event.getTopic().equals(cmsEvent.topic());
        }
 
+       public static Button createLayerButton(Composite parent, String layer, Localized msg, CmsIcon icon,
+                       ClassLoader l10nClassLoader) {
+               CmsTheme theme = CmsTheme.getCmsTheme(parent);
+               Button button = new Button(parent, SWT.PUSH);
+               CmsUiUtils.style(button, SuiteStyle.leadPane);
+               if (icon != null)
+                       button.setImage(icon.getBigIcon(theme));
+               button.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, true, false));
+               // button.setToolTipText(msg.lead());
+               if (msg != null) {
+                       Label lbl = new Label(parent, SWT.CENTER);
+                       CmsUiUtils.style(lbl, SuiteStyle.leadPane);
+                       String txt = LocaleUtils.lead(msg, l10nClassLoader);
+//                     String txt = msg.lead();
+                       lbl.setText(txt);
+                       lbl.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
+               }
+               CmsUiUtils.sendEventOnSelect(button, SuiteEvent.switchLayer.topic(), SuiteEvent.LAYER, layer);
+               return button;
+       }
+
 //     public static String createAndConfigureEntity(Shell shell, Session referenceSession, String mainMixin,
 //                     String... additionnalProps) {
 //