Fix regressions
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 6 Feb 2018 13:15:30 +0000 (14:15 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 6 Feb 2018 13:15:30 +0000 (14:15 +0100)
org.argeo.cms.ui.workbench/META-INF/spring/common.xml
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/DefaultRepositoryRegister.java [new file with mode: 0644]
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/NodeContentProvider.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/RepositoryRegister.java [new file with mode: 0644]
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/model/RepositoriesElem.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/DataModels.java
org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java
org.argeo.jcr/src/org/argeo/jcr/DefaultRepositoryRegister.java [deleted file]
org.argeo.jcr/src/org/argeo/jcr/RepositoryRegister.java [deleted file]

index e88329254d83884d8711649ec1346a8372fb752b..4b1b75435da4f4fc7d9a07fd83795901b21f8b07 100644 (file)
@@ -16,6 +16,6 @@
                <property name="userAdminServiceReference" ref="userAdmin" />\r
        </bean>\r
        \r
-       <bean id="repositoryRegister" class="org.argeo.jcr.DefaultRepositoryRegister" />\r
+       <bean id="repositoryRegister" class="org.argeo.cms.ui.workbench.internal.jcr.DefaultRepositoryRegister" />\r
        \r
 </beans>\r
diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/DefaultRepositoryRegister.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/DefaultRepositoryRegister.java
new file mode 100644 (file)
index 0000000..c9ab946
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.cms.ui.workbench.internal.jcr;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Observable;
+import java.util.TreeMap;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.node.NodeConstants;
+
+public class DefaultRepositoryRegister extends Observable implements RepositoryRegister {
+       /** Key for a JCR repository alias */
+       private final static String CN = NodeConstants.CN;
+       /** Key for a JCR repository URI */
+       // public final static String JCR_REPOSITORY_URI = "argeo.jcr.repository.uri";
+       private final static Log log = LogFactory.getLog(DefaultRepositoryRegister.class);
+
+       /** Read only map which will be directly exposed. */
+       private Map<String, Repository> repositories = Collections.unmodifiableMap(new TreeMap<String, Repository>());
+
+       @SuppressWarnings("rawtypes")
+       public synchronized Repository getRepository(Map parameters) throws RepositoryException {
+               if (!parameters.containsKey(CN))
+                       throw new RepositoryException("Parameter " + CN + " has to be defined.");
+               String alias = parameters.get(CN).toString();
+               if (!repositories.containsKey(alias))
+                       throw new RepositoryException("No repository registered with alias " + alias);
+
+               return repositories.get(alias);
+       }
+
+       /** Access to the read-only map */
+       public synchronized Map<String, Repository> getRepositories() {
+               return repositories;
+       }
+
+       /** Registers a service, typically called when OSGi services are bound. */
+       @SuppressWarnings("rawtypes")
+       public synchronized void register(Repository repository, Map properties) {
+               String alias;
+               if (properties == null || !properties.containsKey(CN)) {
+                       log.warn("Cannot register a repository if no " + CN + " property is specified.");
+                       return;
+               }
+               alias = properties.get(CN).toString();
+               Map<String, Repository> map = new TreeMap<String, Repository>(repositories);
+               map.put(alias, repository);
+               repositories = Collections.unmodifiableMap(map);
+               setChanged();
+               notifyObservers(alias);
+       }
+
+       /** Unregisters a service, typically called when OSGi services are unbound. */
+       @SuppressWarnings("rawtypes")
+       public synchronized void unregister(Repository repository, Map properties) {
+               // TODO: also check bean name?
+               if (properties == null || !properties.containsKey(CN)) {
+                       log.warn("Cannot unregister a repository without property " + CN);
+                       return;
+               }
+
+               String alias = properties.get(CN).toString();
+               Map<String, Repository> map = new TreeMap<String, Repository>(repositories);
+               if (map.remove(alias) == null) {
+                       log.warn("No repository was registered with alias " + alias);
+                       return;
+               }
+               repositories = Collections.unmodifiableMap(map);
+               setChanged();
+               notifyObservers(alias);
+       }
+}
index df2ece76a1b1c14f530065cd7e66dc87e9f14d99..fc7f16a1b5f0f1346d476e470cf8bf199c877a60 100644 (file)
@@ -29,7 +29,6 @@ import javax.jcr.nodetype.NodeType;
 import org.argeo.cms.ui.workbench.internal.jcr.model.RepositoriesElem;
 import org.argeo.cms.ui.workbench.internal.jcr.model.SingleJcrNodeElem;
 import org.argeo.eclipse.ui.TreeParent;
-import org.argeo.jcr.RepositoryRegister;
 import org.argeo.node.NodeConstants;
 import org.argeo.node.NodeUtils;
 import org.argeo.node.security.Keyring;
diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/RepositoryRegister.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/RepositoryRegister.java
new file mode 100644 (file)
index 0000000..cd95409
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.cms.ui.workbench.internal.jcr;
+
+import java.util.Map;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
+
+/** Allows to register repositories by name. */
+public interface RepositoryRegister extends RepositoryFactory {
+       /**
+        * The registered {@link Repository} as a read-only map. Note that this
+        * method should be called for each access in order to be sure to be up to
+        * date in case repositories have registered/unregistered
+        */
+       public Map<String, Repository> getRepositories();
+}
index 70922fe1bd8291e64c749fab21593e6126bcb3e0..45c13fb28e84c6b486e9cd5cb4ce30a2f80ee01a 100644 (file)
@@ -25,10 +25,10 @@ import javax.jcr.RepositoryFactory;
 import javax.jcr.Session;
 
 import org.argeo.cms.ArgeoNames;
+import org.argeo.cms.ui.workbench.internal.jcr.RepositoryRegister;
 import org.argeo.eclipse.ui.EclipseUiException;
 import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
-import org.argeo.jcr.RepositoryRegister;
 import org.argeo.node.NodeUtils;
 import org.argeo.node.security.Keyring;
 
index 35586453b8235dbca048948067a4f667d1da7c74..44eb446df788a105e398405ac3ed5658172ef3e0 100644 (file)
@@ -29,17 +29,18 @@ import javax.jcr.observation.EventListener;
 import javax.jcr.observation.ObservationManager;
 
 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
+import org.argeo.cms.ui.workbench.internal.jcr.DefaultRepositoryRegister;
 import org.argeo.cms.ui.workbench.internal.jcr.JcrBrowserUtils;
 import org.argeo.cms.ui.workbench.internal.jcr.JcrDClickListener;
 import org.argeo.cms.ui.workbench.internal.jcr.NodeContentProvider;
 import org.argeo.cms.ui.workbench.internal.jcr.NodeLabelProvider;
 import org.argeo.cms.ui.workbench.internal.jcr.PropertiesContentProvider;
+import org.argeo.cms.ui.workbench.internal.jcr.RepositoryRegister;
 import org.argeo.cms.ui.workbench.internal.jcr.model.SingleJcrNodeElem;
 import org.argeo.eclipse.ui.EclipseUiException;
 import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
 import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer;
-import org.argeo.jcr.RepositoryRegister;
 import org.argeo.node.security.Keyring;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
@@ -71,7 +72,7 @@ public class JcrBrowserView extends ViewPart {
 
        /* DEPENDENCY INJECTION */
        private Keyring keyring;
-       private RepositoryRegister repositoryRegister;
+       private RepositoryRegister repositoryRegister = new DefaultRepositoryRegister();
        private RepositoryFactory repositoryFactory;
        private Repository nodeRepository;
 
index b758a30637a9aac70d79c5a846618b1fad62455e..5f5b95405c1ddb0bf4c134a9fceeb983c6b026d3 100644 (file)
@@ -60,9 +60,17 @@ class DataModels implements BundleListener {
                if (providedDataModels.size() == 0)
                        return;
                List<BundleWire> requiredDataModels = wiring.getRequiredWires(CMS_DATA_MODEL_NAMESPACE);
+               // process requirements first
+               for (BundleWire bundleWire : requiredDataModels) {
+                       processBundle(bundleWire.getProvider().getBundle());
+               }
                for (BundleCapability bundleCapability : providedDataModels) {
-                       DataModel dataModel = new DataModel(bundleCapability, requiredDataModels);
-                       dataModels.put(dataModel.getName(), dataModel);
+                       String name = (String) bundleCapability.getAttributes().get(DataModelNamespace.NAME);
+                       assert name != null;
+                       if (!dataModels.containsKey(name)) {
+                               DataModel dataModel = new DataModel(name, bundleCapability, requiredDataModels);
+                               dataModels.put(dataModel.getName(), dataModel);
+                       }
                }
        }
 
@@ -85,11 +93,10 @@ class DataModels implements BundleListener {
                private final String cnd;
                private final List<DataModel> required;
 
-               private DataModel(BundleCapability bundleCapability, List<BundleWire> requiredDataModels) {
+               private DataModel(String name, BundleCapability bundleCapability, List<BundleWire> requiredDataModels) {
                        assert CMS_DATA_MODEL_NAMESPACE.equals(bundleCapability.getNamespace());
+                       this.name = name;
                        Map<String, Object> attrs = bundleCapability.getAttributes();
-                       name = (String) attrs.get(DataModelNamespace.NAME);
-                       assert name != null;
                        abstrct = KernelUtils.asBoolean((String) attrs.get(DataModelNamespace.ABSTRACT));
                        // standalone = KernelUtils.asBoolean((String)
                        // attrs.get(DataModelNamespace.CAPABILITY_STANDALONE_ATTRIBUTE));
index bff544ab23dbba6fc5bcdfcf4649d81d33237a41..b42220a6c8701635d22012b532ed4a32e3ad1ce5 100644 (file)
@@ -86,7 +86,7 @@ class DeployConfig implements ConfigurationListener {
                        if (NodeConstants.NODE.equals(dataModel.getName()))
                                continue dataModels;
                        Dictionary<String, Object> config = InitUtils.getRepositoryConfig(dataModel.getName(),
-                                       getProps(NodeConstants.NODE_REPOS_FACTORY_PID, NodeConstants.NODE));
+                                       getProps(NodeConstants.NODE_REPOS_FACTORY_PID, dataModel.getName()));
                        if (config.size() != 0)
                                putFactoryDeployConfig(NodeConstants.NODE_REPOS_FACTORY_PID, config);
                }
diff --git a/org.argeo.jcr/src/org/argeo/jcr/DefaultRepositoryRegister.java b/org.argeo.jcr/src/org/argeo/jcr/DefaultRepositoryRegister.java
deleted file mode 100644 (file)
index c983584..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.jcr;
-
-import java.util.Collections;
-import java.util.Map;
-import java.util.Observable;
-import java.util.TreeMap;
-
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-@Deprecated
-public class DefaultRepositoryRegister extends Observable implements
-               RepositoryRegister {
-       // FIXME factorize with node
-       /** Key for a JCR repository alias */
-       public final static String JCR_REPOSITORY_ALIAS = "argeo.jcr.repository.alias";
-       /** Key for a JCR repository URI */
-       public final static String JCR_REPOSITORY_URI = "argeo.jcr.repository.uri";
-       private final static Log log = LogFactory
-                       .getLog(DefaultRepositoryRegister.class);
-
-       /** Read only map which will be directly exposed. */
-       private Map<String, Repository> repositories = Collections
-                       .unmodifiableMap(new TreeMap<String, Repository>());
-
-       @SuppressWarnings("rawtypes")
-       public synchronized Repository getRepository(Map parameters)
-                       throws RepositoryException {
-               if (!parameters.containsKey(JCR_REPOSITORY_ALIAS))
-                       throw new RepositoryException("Parameter " + JCR_REPOSITORY_ALIAS
-                                       + " has to be defined.");
-               String alias = parameters.get(JCR_REPOSITORY_ALIAS).toString();
-               if (!repositories.containsKey(alias))
-                       throw new RepositoryException(
-                                       "No repository registered with alias " + alias);
-
-               return repositories.get(alias);
-       }
-
-       /** Access to the read-only map */
-       public synchronized Map<String, Repository> getRepositories() {
-               return repositories;
-       }
-
-       /** Registers a service, typically called when OSGi services are bound. */
-       @SuppressWarnings("rawtypes")
-       public synchronized void register(Repository repository, Map properties) {
-               String alias;
-               if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) {
-                       log.warn("Cannot register a repository if no "
-                                       + JCR_REPOSITORY_ALIAS + " property is specified.");
-                       return;
-               }
-               alias = properties.get(JCR_REPOSITORY_ALIAS).toString();
-               Map<String, Repository> map = new TreeMap<String, Repository>(
-                               repositories);
-               map.put(alias, repository);
-               repositories = Collections.unmodifiableMap(map);
-               setChanged();
-               notifyObservers(alias);
-       }
-
-       /** Unregisters a service, typically called when OSGi services are unbound. */
-       @SuppressWarnings("rawtypes")
-       public synchronized void unregister(Repository repository, Map properties) {
-               // TODO: also check bean name?
-               if (properties == null || !properties.containsKey(JCR_REPOSITORY_ALIAS)) {
-                       log.warn("Cannot unregister a repository without property "
-                                       + JCR_REPOSITORY_ALIAS);
-                       return;
-               }
-
-               String alias = properties.get(JCR_REPOSITORY_ALIAS).toString();
-               Map<String, Repository> map = new TreeMap<String, Repository>(
-                               repositories);
-               if (map.remove(alias) == null) {
-                       log.warn("No repository was registered with alias " + alias);
-                       return;
-               }
-               repositories = Collections.unmodifiableMap(map);
-               setChanged();
-               notifyObservers(alias);
-       }
-}
diff --git a/org.argeo.jcr/src/org/argeo/jcr/RepositoryRegister.java b/org.argeo.jcr/src/org/argeo/jcr/RepositoryRegister.java
deleted file mode 100644 (file)
index 2e3d455..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.argeo.jcr;
-
-import java.util.Map;
-
-import javax.jcr.Repository;
-import javax.jcr.RepositoryFactory;
-
-/** Allows to register repositories by name. */
-public interface RepositoryRegister extends RepositoryFactory {
-       /**
-        * The registered {@link Repository} as a read-only map. Note that this
-        * method should be called for each access in order to be sure to be up to
-        * date in case repositories have registered/unregistered
-        */
-       public Map<String, Repository> getRepositories();
-}