Merges changes from PennState/SCIMple 2.22.3
diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
index cf4c8fd..4007db3 100644
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
+++ b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/provider/ProviderRegistry.java
@@ -30,6 +30,8 @@
import java.util.Map;
import java.util.Set;
+import javax.ejb.Lock;
+import javax.ejb.LockType;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.enterprise.inject.Instance;
@@ -99,6 +101,7 @@
private Map<Class<? extends ScimResource>, Instance<? extends Provider<? extends ScimResource>>> providerMap = new HashMap<>();
+ @Lock(LockType.WRITE)
public <T extends ScimResource> void registerProvider(Class<T> clazz, Instance<? extends Provider<T>> providerInstance) throws InvalidProviderException, JsonProcessingException, UnableToRetrieveExtensionsException {
Provider<T> provider = providerInstance.get();
@@ -130,6 +133,8 @@
providerMap.put(clazz, providerInstance);
}
+ @Deprecated
+ @Lock(LockType.READ)
@SuppressWarnings("unchecked")
public <T extends ScimResource> Provider<T> getProvider(Class<T> clazz) {
Instance<? extends Provider<? extends ScimResource>> providerInstance = providerMap.get(clazz);
@@ -181,13 +186,13 @@
return resourceType;
}
- public static Schema generateBaseSchema(Class<?> clazz) throws InvalidProviderException {
+ private static Schema generateBaseSchema(Class<?> clazz) throws InvalidProviderException {
List<Field> fieldList = ScimUtils.getFieldsUpTo(clazz, BaseResource.class);
return generateSchema(clazz, fieldList);
}
- public static Schema generateExtensionSchema(Class<?> clazz) throws InvalidProviderException {
+ private static Schema generateExtensionSchema(Class<?> clazz) throws InvalidProviderException {
log.debug("----> In generateExtensionSchema");
return generateSchema(clazz, ScimUtils.getFieldsUpTo(clazz, Object.class));
diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
index 978954f..7aca970 100644
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
+++ b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
@@ -32,6 +32,7 @@
import javax.ejb.Stateless;
import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.CDI;
import javax.inject.Inject;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
index 4d76b79..77e882d 100644
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
+++ b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
@@ -22,21 +22,36 @@
*/
package org.apache.directory.scim.server.rest;
-import javax.inject.Inject;
+import javax.ejb.Stateless;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.util.TypeLiteral;
import org.apache.directory.scim.server.provider.Provider;
-import org.apache.directory.scim.server.provider.ProviderRegistry;
import org.apache.directory.scim.spec.protocol.GroupResource;
import org.apache.directory.scim.spec.resources.ScimGroup;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Stateless
public class GroupResourceImpl extends BaseResourceTypeResourceImpl<ScimGroup> implements GroupResource {
- @Inject
- ProviderRegistry providerRegistry;
+// @Inject
+//// @ProviderQualifier(ScimGroup.class)
+// Provider<ScimGroup> provider;
@Override
public Provider<ScimGroup> getProvider() {
- return providerRegistry.getProvider(ScimGroup.class);
+ try {
+ final TypeLiteral<Provider<ScimGroup>> typeLiteral = new TypeLiteral<Provider<ScimGroup>>() {
+ };
+ final Instance<Provider<ScimGroup>> select = CDI.current().select(typeLiteral);
+ return select.get();
+ } catch (final Exception e) {
+ log.warn("Provider doesn't exist", e);
+ return null;
+ }
}
}
diff --git a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
index 7dec691..6b319b3 100644
--- a/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
+++ b/scim-server/scim-server-common/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
@@ -23,6 +23,9 @@
package org.apache.directory.scim.server.rest;
import javax.ejb.Stateless;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.util.TypeLiteral;
import javax.inject.Inject;
import org.apache.directory.scim.server.provider.Provider;
@@ -30,19 +33,34 @@
import org.apache.directory.scim.spec.protocol.UserResource;
import org.apache.directory.scim.spec.resources.ScimUser;
+import lombok.extern.slf4j.Slf4j;
+
/**
* @author shawn
*
*/
+@Slf4j
@Stateless
public class UserResourceImpl extends BaseResourceTypeResourceImpl<ScimUser> implements UserResource {
- @Inject
- ProviderRegistry providerRegistry;
-
+// @Inject
+// ProviderRegistry providerRegistry;
+//
+// @Inject
+//// @ProviderQualifier(ScimUser.class)
+// Provider<ScimUser> provider;
+
@Override
public Provider<ScimUser> getProvider() {
- return providerRegistry.getProvider(ScimUser.class);
+ try {
+ TypeLiteral<Provider<ScimUser>> typeLiteral = new TypeLiteral<Provider<ScimUser>>() {
+ };
+ Instance<Provider<ScimUser>> select = CDI.current().select(typeLiteral);
+ return select.get();
+ } catch (Exception e) {
+ log.warn("Provider doesn't exist", e);
+ return null;
+ }
}
}