Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2017-03-23 08:44:55 +0000
committerPierre-Charles David2017-03-31 15:23:09 +0000
commit11a08da87535d6321668a6e1365025288cb592e4 (patch)
tree650905e9fc8a6a4dba32b10cfd11dcce10565f36
parentb63b49030f0b3e516335a4b37526668098c38bac (diff)
downloadorg.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.tar.gz
org.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.tar.xz
org.eclipse.sirius-11a08da87535d6321668a6e1365025288cb592e4.zip
[511763] Make PermissionService more resilient to misconfigurations
In case of a misconfigured IPermissionProvider extension, do not crash with an NPE but provide helpful error message to help identify (and fix) the root cause. Bug: 511763 Change-Id: I09e97426635345aa623e88ceecb8dc02e164f73d Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.ecore.extender/plugin.properties3
-rw-r--r--plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java5
-rw-r--r--plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java4
-rw-r--r--plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java20
4 files changed, 24 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.ecore.extender/plugin.properties b/plugins/org.eclipse.sirius.ecore.extender/plugin.properties
index 887a0a2d61..c4c8c81f21 100644
--- a/plugins/org.eclipse.sirius.ecore.extender/plugin.properties
+++ b/plugins/org.eclipse.sirius.ecore.extender/plugin.properties
@@ -1,5 +1,5 @@
# ====================================================================
-# Copyright (c) 2013 THALES GLOBAL SERVICES
+# Copyright (c) 2013, 2017 THALES GLOBAL SERVICES
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
@@ -26,4 +26,5 @@ ModelAccessorsRegistry_noResourceFound=No resource to get the ExtendedPackage
ModelUtils_missingInputStream=Input Stream for the model to load cannot be null.
ModelUtils_nullSerializationError=Cannot serialize null object.
PermissionAuthorityRegistryImpl_noResourceMessage=No resource to get the ExtendedPackage
+PermissionService_permissionProviderInstantiationError=An error occurred while trying to instantiate IPermissionProvider "{0}" from "{1}"
ReferencesResolver_resolveNonContainedReferencesTask=Resolving non contained references
diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java
index 22f78f5231..1848793f98 100644
--- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java
+++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/Messages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015, 2016 Obeo.
+ * Copyright (c) 2015, 2017 Obeo.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -57,6 +57,9 @@ public final class Messages {
@TranslatableMessage
public static String PermissionAuthorityRegistryImpl_noResourceMessage;
+
+ @TranslatableMessage
+ public static String PermissionService_permissionProviderInstantiationError;
@TranslatableMessage
public static String ReferencesResolver_resolveNonContainedReferencesTask;
diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java
index 4527fe1f65..c25e779d9e 100644
--- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java
+++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/PermissionService.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2012 THALES GLOBAL SERVICES.
+ * Copyright (c) 2007, 2017 THALES GLOBAL SERVICES.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -86,7 +86,7 @@ public final class PermissionService {
while (it.hasNext() && !foundSpecific) {
PermissionProviderDescriptor permissionProviderDescriptor = it.next();
IPermissionProvider permissionProvider = permissionProviderDescriptor.getPermissionProvider();
- if (permissionProvider.provides(resourceSet)) {
+ if (permissionProvider != null && permissionProvider.provides(resourceSet)) {
result = PermissionService.wrapPermissionAuthority(permissionProvider.getAuthority(resourceSet));
foundSpecific = true;
}
diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java
index 39ed278f49..da1d2b3bf7 100644
--- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java
+++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/internal/permission/descriptors/EclipsePermissionProviderDescriptor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011 THALES GLOBAL SERVICES.
+ * Copyright (c) 2011, 2017 THALES GLOBAL SERVICES and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,10 +10,16 @@
*******************************************************************************/
package org.eclipse.sirius.ecore.extender.business.internal.permission.descriptors;
+import java.text.MessageFormat;
+
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
-
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionProvider;
+import org.eclipse.sirius.ecore.extender.business.internal.ExtenderPlugin;
+import org.eclipse.sirius.ecore.extender.business.internal.Messages;
import org.eclipse.sirius.ecore.extender.business.internal.permission.PermissionProviderDescriptor;
/**
@@ -23,6 +29,8 @@ import org.eclipse.sirius.ecore.extender.business.internal.permission.Permission
*/
public class EclipsePermissionProviderDescriptor extends AbstractPermissionProviderDescriptor implements PermissionProviderDescriptor {
+ private static final String PROVIDER_CLASS_ATTR = "providerClass"; //$NON-NLS-1$
+
private IConfigurationElement configurationElement;
/**
@@ -50,9 +58,13 @@ public class EclipsePermissionProviderDescriptor extends AbstractPermissionProvi
public IPermissionProvider getPermissionProvider() {
if (permissionProvider == null) {
try {
- permissionProvider = (IPermissionProvider) configurationElement.createExecutableExtension("providerClass"); //$NON-NLS-1$
+ permissionProvider = (IPermissionProvider) configurationElement.createExecutableExtension(EclipsePermissionProviderDescriptor.PROVIDER_CLASS_ATTR);
} catch (final CoreException e) {
- // silent catch.
+ String providerClassName = configurationElement.getAttribute(EclipsePermissionProviderDescriptor.PROVIDER_CLASS_ATTR);
+ IContributor contributor = configurationElement.getDeclaringExtension().getContributor();
+ IStatus status = new Status(IStatus.ERROR, ExtenderPlugin.ID,
+ MessageFormat.format(Messages.PermissionService_permissionProviderInstantiationError, providerClassName, contributor.getName()), e);
+ ExtenderPlugin.getPlugin().getLog().log(status);
}
}
return permissionProvider;

Back to the top