From: Mathieu Baudier Date: Tue, 6 Feb 2018 13:15:30 +0000 (+0100) Subject: Fix regressions X-Git-Tag: argeo-commons-2.1.71~13 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=9a6babc07d80c6aa8c10adc12f40f84eef3619c5;p=lgpl%2Fargeo-commons.git Fix regressions --- diff --git a/org.argeo.cms.ui.workbench/META-INF/spring/common.xml b/org.argeo.cms.ui.workbench/META-INF/spring/common.xml index e88329254..4b1b75435 100644 --- a/org.argeo.cms.ui.workbench/META-INF/spring/common.xml +++ b/org.argeo.cms.ui.workbench/META-INF/spring/common.xml @@ -16,6 +16,6 @@ - + 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 index 000000000..c9ab94648 --- /dev/null +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/DefaultRepositoryRegister.java @@ -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 repositories = Collections.unmodifiableMap(new TreeMap()); + + @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 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 map = new TreeMap(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 map = new TreeMap(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.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/NodeContentProvider.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/NodeContentProvider.java index df2ece76a..fc7f16a1b 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/NodeContentProvider.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/NodeContentProvider.java @@ -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 index 000000000..cd9540925 --- /dev/null +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/RepositoryRegister.java @@ -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 getRepositories(); +} diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/model/RepositoriesElem.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/model/RepositoriesElem.java index 70922fe1b..45c13fb28 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/model/RepositoriesElem.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/model/RepositoriesElem.java @@ -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; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java index 35586453b..44eb446df 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java @@ -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; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DataModels.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DataModels.java index b758a3063..5f5b95405 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DataModels.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DataModels.java @@ -60,9 +60,17 @@ class DataModels implements BundleListener { if (providedDataModels.size() == 0) return; List 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 required; - private DataModel(BundleCapability bundleCapability, List requiredDataModels) { + private DataModel(String name, BundleCapability bundleCapability, List requiredDataModels) { assert CMS_DATA_MODEL_NAMESPACE.equals(bundleCapability.getNamespace()); + this.name = name; Map 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)); diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java index bff544ab2..b42220a6c 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java @@ -86,7 +86,7 @@ class DeployConfig implements ConfigurationListener { if (NodeConstants.NODE.equals(dataModel.getName())) continue dataModels; Dictionary 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 index c9835848d..000000000 --- a/org.argeo.jcr/src/org/argeo/jcr/DefaultRepositoryRegister.java +++ /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 repositories = Collections - .unmodifiableMap(new TreeMap()); - - @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 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 map = new TreeMap( - 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 map = new TreeMap( - 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 index 2e3d4550d..000000000 --- a/org.argeo.jcr/src/org/argeo/jcr/RepositoryRegister.java +++ /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 getRepositories(); -}