Author: bdaw
Date: 2009-01-16 08:49:44 -0500 (Fri, 16 Jan 2009)
New Revision: 221
Modified:
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/metadata/IdentityRepositoryConfigurationMetaDataImpl.java
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/AbstractIdentityStoreRepository.java
idm/trunk/identity-impl/src/test/java/org/jboss/identity/idm/impl/configuration/ConfigurationTestCase.java
idm/trunk/identity-impl/src/test/resources/organization-test-config.xml
idm/trunk/identity-impl/src/test/resources/store-test-config.xml
idm/trunk/identity-impl/src/test/resources/test-config.xml
idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/configuration/metadata/IdentityRepositoryConfigurationMetaData.java
Log:
checking if config is consistent
Modified:
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java
===================================================================
---
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java 2009-01-16
04:49:18 UTC (rev 220)
+++
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java 2009-01-16
13:49:44 UTC (rev 221)
@@ -36,6 +36,7 @@
import org.jboss.identity.idm.spi.configuration.metadata.IdentityConfigurationMetaData;
import org.jboss.identity.idm.spi.configuration.metadata.RelationshipMetaData;
import
org.jboss.identity.idm.spi.configuration.metadata.IdentityObjectAttributeMetaData;
+import org.jboss.identity.idm.spi.configuration.metadata.IdentityObjectTypeMetaData;
import org.jboss.identity.idm.spi.exception.IdentityConfigurationException;
import org.jboss.identity.idm.impl.api.attribute.IdentityObjectAttributeMetaDataImpl;
import org.jboss.identity.idm.impl.configuration.jaxb2.generated.JbossIdentityType;
@@ -59,6 +60,8 @@
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedList;
+import java.util.Set;
+import java.util.HashSet;
/**
* @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
@@ -68,8 +71,16 @@
{
//TODO: check if configuration is consistent. Part of constraints should be checked by
schema. Test cases needed :)
+ static Set<String> attributeTypes = new HashSet<String>();
+ static
+ {
+ attributeTypes.add("text");
+ attributeTypes.add("binary");
+ }
+
+
public static IdentityConfigurationMetaData createConfigurationMetaData(File
xmlConfig) throws IdentityConfigurationException
{
@@ -126,6 +137,8 @@
configurationMD.getRealms().add(createRealmConfigurationMetaData(realmType));
}
}
+
+ checkDataConsistency(configurationMD);
return configurationMD;
@@ -344,4 +357,299 @@
return options;
}
+ public static void checkDataConsistency(IdentityConfigurationMetaData configurationMD)
throws IdentityConfigurationException
+ {
+
+ // IdentityStore
+
+ if (configurationMD.getRepositories() == null ||
configurationMD.getIdentityStores().size() == 0)
+ {
+ throw new IdentityConfigurationException("No identity-store
configured");
+ }
+
+ // Helper structure to keep track of all IdentityObjectType mappings in stores
+ Map<String, Set<String>> storeObjectTypeNameMappings = new
HashMap<String, Set<String>>();
+
+ for (IdentityStoreConfigurationMetaData storeMD :
configurationMD.getIdentityStores())
+ {
+
+ // id
+ if (storeMD.getId() == null || storeMD.getId().length() == 0)
+ {
+ throw new IdentityConfigurationException("identity-store name
required");
+ }
+
+ // Helper structure containing all configured identity object type names
+
+ Set<String> storeObjectTypeNames = new HashSet<String>();
+ if (storeMD.getSupportedIdentityTypes() != null)
+ {
+ for (IdentityObjectTypeMetaData typeMD :
storeMD.getSupportedIdentityTypes())
+ {
+ storeObjectTypeNames.add(typeMD.getName());
+ }
+ }
+
+ storeObjectTypeNameMappings.put(storeMD.getId(), storeObjectTypeNames);
+
+ // className
+ if (storeMD.getClassName() == null || storeMD.getClassName().length() == 0)
+ {
+ throw new IdentityConfigurationException("identity-store \"" +
storeMD.getId() + "\" class name required");
+ }
+
+ // supported relationship types are not required but we gather the names to
check consistency in other parts
+
+ Set<String> supportedRelTypes = new HashSet<String>();
+ if (storeMD.getSupportedRelationshipTypes() != null)
+ {
+ supportedRelTypes = new
HashSet<String>(storeMD.getSupportedRelationshipTypes());
+ }
+
+ // all configured identity object types
+ if (storeMD.getSupportedIdentityTypes() == null ||
storeMD.getSupportedIdentityTypes().size() == 0)
+ {
+ throw new IdentityConfigurationException("identity-store \"" +
storeMD.getId() + "\" doesn't have any supported " +
+ "identity-object-types configured");
+ }
+
+ // check each configured types
+ for (IdentityObjectTypeMetaData typeMD : storeMD.getSupportedIdentityTypes())
+ {
+ // Name
+ if (typeMD.getName() == null || typeMD.getName().length() == 0)
+ {
+ throw new IdentityConfigurationException("identity-store
\"" + storeMD.getId() + "\" identity-object-type name" +
+ "is not specified");
+ }
+
+ // Attributes
+
+ if (typeMD.getAttributes() != null)
+ {
+ for (IdentityObjectAttributeMetaData attrMD : typeMD.getAttributes())
+ {
+ // Name
+ if (attrMD.getName() == null || attrMD.getName().length() == 0)
+ {
+ throw new IdentityConfigurationException("Attribute name not
specified in identity-store \"" + storeMD.getId() + "\"");
+ }
+
+ if (attrMD.getType() == null || attrMD.getType().length() == 0)
+ {
+ throw new IdentityConfigurationException("Attribute type not
specified for attribute \"" + attrMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+
+ if (!attributeTypes.contains(attrMD.getType()))
+ {
+ throw new IdentityConfigurationException("Unsupported attribute
type in attribute \"" + attrMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+
+ }
+ }
+
+ // Relationships
+
+ if (typeMD.getRelationships() != null)
+ {
+ for (RelationshipMetaData relMD : typeMD.getRelationships())
+ {
+ if (relMD.getIdentityObjectTypeRef() == null)
+ {
+ throw new
IdentityConfigurationException("identity-object-type-ref not specified" +
+ "in identity-object-type \"" + typeMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+
+ if (!storeObjectTypeNames.contains(relMD.getIdentityObjectTypeRef()))
+ {
+ throw new
IdentityConfigurationException("identity-object-type-ref contains " +
+ "not configured name \"" +
relMD.getIdentityObjectTypeRef() + "\" in " +
+ "identity-object-type \"" + typeMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+
+ if (relMD.getRelationshipTypeRef() == null)
+ {
+ throw new IdentityConfigurationException("relationship-type-ref
not specified" +
+ "in identity-object-type \"" + typeMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+
+ if (!supportedRelTypes.contains(relMD.getRelationshipTypeRef()))
+ {
+ throw new IdentityConfigurationException("relationship-type-ref
name is not supported" +
+ "by identity-store. Relationship name \"" +
relMD.getRelationshipTypeRef() + "\" in " +
+ "identity-object-type \"" + typeMD.getName()
+ + "\" in identity-store \"" + storeMD.getId()
+ "\"");
+ }
+ }
+ }
+ }
+ }
+
+ // Helper structures
+
+ Set<String> configuredRepoNames = new HashSet<String>();
+
+ Map<String, Set<String>> repoObjectTypeNamesMappings = new
HashMap<String, Set<String>>();
+
+ // IdentityStoreRepository
+
+ if (configurationMD.getRepositories() == null ||
configurationMD.getRepositories().size() == 0)
+ {
+ throw new IdentityConfigurationException("No IdentityRepository
configured");
+ }
+
+ for (IdentityRepositoryConfigurationMetaData repoMD :
configurationMD.getRepositories())
+ {
+ Set<String> repoObjectNames = new HashSet<String>();
+
+ // id
+ if (repoMD.getId() == null || repoMD.getId().length() == 0)
+ {
+ throw new IdentityConfigurationException("repository name is
required");
+ }
+
+ configuredRepoNames.add(repoMD.getId());
+
+ // className
+ if (repoMD.getClassName() == null || repoMD.getClassName().length() == 0)
+ {
+ throw new IdentityConfigurationException("repository \"" +
repoMD.getId() + "\" class name required");
+ }
+
+ // defaultAttributeStore
+ if (repoMD.getDefaultAttributeStoreId() == null ||
repoMD.getDefaultAttributeStoreId().length() == 0)
+ {
+ throw new IdentityConfigurationException("default-attribute-store in
repository \"" + repoMD.getId() + "\" is required");
+ }
+
+ if
(!storeObjectTypeNameMappings.containsKey(repoMD.getDefaultAttributeStoreId()))
+ {
+ throw new IdentityConfigurationException("default-attribute-store
\"" + repoMD.getDefaultAttributeStoreId() +
+ "in repository \"" + repoMD.getId() + "\" is not
present in configuration");
+ }
+
+ // defaultIdentityStore
+ if (repoMD.getDefaultAttributeStoreId() == null ||
repoMD.getDefaultAttributeStoreId().length() == 0)
+ {
+ throw new IdentityConfigurationException("default-identity-store in
repository \"" + repoMD.getId() + "\" is required");
+ }
+
+ if
(!storeObjectTypeNameMappings.containsKey(repoMD.getDefaultIdentityStoreId()))
+ {
+ throw new IdentityConfigurationException("default-identity-store
\"" + repoMD.getDefaultIdentityStoreId() +
+ "in repository \"" + repoMD.getId() + "\" is not
present in configuration");
+ }
+
+
+
+// if (repoMD.getIdentityStoreToIdentityObjectTypeMappings() == null ||
+// repoMD.getIdentityStoreToIdentityObjectTypeMappings().size() == 0)
+// {
+// throw new IdentityConfigurationException("No identity-store-mappings
defined in repository \"" + repoMD.getId() + "\"");
+// }
+
+ // If there are no repo mappings then add all mappings from the default store
+ if (repoMD.getIdentityStoreToIdentityObjectTypeMappings().size() == 0)
+ {
+ Set<String> names =
storeObjectTypeNameMappings.get(repoMD.getDefaultIdentityStoreId());
+ repoObjectTypeNamesMappings.put(repoMD.getId(), names);
+ }
+
+ for (IdentityStoreMappingMetaData mappingsMD :
repoMD.getIdentityStoreToIdentityObjectTypeMappings())
+ {
+ if (mappingsMD.getIdentityStoreId() == null ||
+ mappingsMD.getIdentityStoreId().length() == 0)
+ {
+ throw new IdentityConfigurationException("No identity-store-mappings
defined in repository \"" + repoMD.getId() + "\"");
+ }
+
+ if
(!storeObjectTypeNameMappings.containsKey(mappingsMD.getIdentityStoreId()))
+ {
+ throw new IdentityConfigurationException("Store with id from
identity-store-id \"" + mappingsMD.getIdentityStoreId() +
+ "in identity-store-mapping in repository \"" +
repoMD.getId() + "\" is not present in configuration");
+ }
+
+ if (mappingsMD.getIdentityObjectTypeMappings() == null ||
+ mappingsMD.getIdentityObjectTypeMappings().size() == 0)
+ {
+ throw new IdentityConfigurationException("identity-store-mapping with
\"" + mappingsMD.getIdentityStoreId() +
+ "in repository \"" + repoMD.getId() + "\"
doesn't have any identity-object-types listed");
+ }
+
+ for (String identityTypeName : mappingsMD.getIdentityObjectTypeMappings())
+ {
+ Set<String> validNames =
storeObjectTypeNameMappings.get(mappingsMD.getIdentityStoreId());
+
+ if (!validNames.contains(identityTypeName))
+ {
+ throw new IdentityConfigurationException("identity-object-type
\"" + identityTypeName + "\" specified in " +
+ "identity-store-mapping in repository \"" +
repoMD.getId() + "\" is not configured in specified " +
+ "identity-store");
+ }
+
+ repoObjectNames.add(identityTypeName);
+ }
+ }
+
+ repoObjectTypeNamesMappings.put(repoMD.getId(), repoObjectNames);
+ }
+
+
+ // Realms
+
+ if (configurationMD.getRealms() == null || configurationMD.getRealms().size() ==
0)
+ {
+ throw new IdentityConfigurationException("No realm configured");
+ }
+
+ for (RealmConfigurationMetaData realmMD : configurationMD.getRealms())
+ {
+ if (realmMD.getId() == null || realmMD.getId().length() == 0)
+ {
+ throw new IdentityConfigurationException("realm id is missing");
+ }
+
+ if (realmMD.getIdentityRepositoryIdRef() == null ||
realmMD.getIdentityRepositoryIdRef().length() == 0)
+ {
+ throw new IdentityConfigurationException("repository-id-ref in realm
\"" + realmMD.getId() + "\" is missing");
+ }
+
+ if (!configuredRepoNames.contains(realmMD.getIdentityRepositoryIdRef()))
+ {
+ throw new IdentityConfigurationException("repository-id-ref
\"" + realmMD.getIdentityRepositoryIdRef() +
+ "\" in realm \"" + realmMD.getId() + "\"
doesn't reference configured repository");
+ }
+
+ if (realmMD.getIdentityMapping() == null ||
realmMD.getIdentityMapping().length() == 0)
+ {
+ throw new IdentityConfigurationException("identity-mapping in realm
\"" + realmMD.getId() + "\" is missing");
+ }
+
+ // Group type mappings are not required
+ if (realmMD.getGroupTypeMappings() != null )
+ {
+ Set<String> validNames =
repoObjectTypeNamesMappings.get(realmMD.getIdentityRepositoryIdRef());
+
+ for (String typeName : realmMD.getGroupTypeMappings().values())
+ {
+ if (!validNames.contains(typeName))
+ {
+ throw new
IdentityConfigurationException("identity-object-type-name in realm \"" +
realmMD.getId() + "\" " +
+ "doesn't reference identity-object-type configured in
repository \"" + realmMD.getIdentityRepositoryIdRef() +
+ "\"");
+
+ }
+ }
+ }
+ }
+
+
+
+ }
+
}
Modified:
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/metadata/IdentityRepositoryConfigurationMetaDataImpl.java
===================================================================
---
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/metadata/IdentityRepositoryConfigurationMetaDataImpl.java 2009-01-16
04:49:18 UTC (rev 220)
+++
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/configuration/metadata/IdentityRepositoryConfigurationMetaDataImpl.java 2009-01-16
13:49:44 UTC (rev 221)
@@ -94,7 +94,7 @@
this.defaultIdentityStoreId = defaultIdentityStoreId;
}
- public String getDefaultAttributeStroeId()
+ public String getDefaultAttributeStoreId()
{
return defaultAttributeStroeId;
}
Modified:
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/AbstractIdentityStoreRepository.java
===================================================================
---
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/AbstractIdentityStoreRepository.java 2009-01-16
04:49:18 UTC (rev 220)
+++
idm/trunk/identity-impl/src/main/java/org/jboss/identity/idm/impl/repository/AbstractIdentityStoreRepository.java 2009-01-16
13:49:44 UTC (rev 221)
@@ -59,7 +59,7 @@
Map<String, AttributeStore> bootstrappedAttributeStores)
throws IdentityException
{
- String asId = configurationMD.getDefaultAttributeStroeId();
+ String asId = configurationMD.getDefaultAttributeStoreId();
String isId = configurationMD.getDefaultIdentityStoreId();
if (asId != null && bootstrappedAttributeStores.keySet().contains(asId))
Modified:
idm/trunk/identity-impl/src/test/java/org/jboss/identity/idm/impl/configuration/ConfigurationTestCase.java
===================================================================
---
idm/trunk/identity-impl/src/test/java/org/jboss/identity/idm/impl/configuration/ConfigurationTestCase.java 2009-01-16
04:49:18 UTC (rev 220)
+++
idm/trunk/identity-impl/src/test/java/org/jboss/identity/idm/impl/configuration/ConfigurationTestCase.java 2009-01-16
13:49:44 UTC (rev 221)
@@ -41,11 +41,11 @@
public void testSimple() throws Exception
{
- IdentityConfigurationMetaData config =
JAXB2IdentityConfiguration.createConfigurationMetaData(new
File("src/test/resources/test-config.xml"));
+ IdentityConfigurationMetaData config =
JAXB2IdentityConfiguration.createConfigurationMetaData(new
File("src/test/resources/store-test-config.xml"));
assertNotNull(config);
- assertEquals("Hibernate Identity Store",
config.getIdentityStores().get(0).getId() );
+ assertEquals("HibernateTestStore",
config.getIdentityStores().get(0).getId() );
}
Modified: idm/trunk/identity-impl/src/test/resources/organization-test-config.xml
===================================================================
--- idm/trunk/identity-impl/src/test/resources/organization-test-config.xml 2009-01-16
04:49:18 UTC (rev 220)
+++ idm/trunk/identity-impl/src/test/resources/organization-test-config.xml 2009-01-16
13:49:44 UTC (rev 221)
@@ -182,9 +182,9 @@
<name>picture</name>
<mapping>user.picture</mapping>
<type>binary</type>
- <isRequired/>
- <isMultivalued/>
- <isReadOnly/>
+ <isRequired>false</isRequired>
+ <isMultivalued>false</isMultivalued>
+ <isReadOnly>false</isReadOnly>
</attribute>
</attributes>
<options/>
@@ -432,25 +432,25 @@
<name>phone</name>
<mapping>telephoneNumber</mapping>
<type>text</type>
- <isRequired/>
- <isMultivalued/>
- <isReadOnly/>
+ <isRequired>false</isRequired>
+ <isMultivalued>false</isMultivalued>
+ <isReadOnly>false</isReadOnly>
</attribute>
<attribute>
<name>description</name>
<mapping>description</mapping>
<type>text</type>
- <isRequired/>
- <isMultivalued/>
- <isReadOnly/>
+ <isRequired>false</isRequired>
+ <isMultivalued>false</isMultivalued>
+ <isReadOnly>false</isReadOnly>
</attribute>
<attribute>
<name>carLicense</name>
<mapping>carLicense</mapping>
<type>text</type>
- <isRequired/>
- <isMultivalued/>
- <isReadOnly/>
+ <isRequired>false</isRequired>
+ <isMultivalued>false</isMultivalued>
+ <isReadOnly>false</isReadOnly>
</attribute>
</attributes>
<options>
Modified: idm/trunk/identity-impl/src/test/resources/store-test-config.xml
===================================================================
--- idm/trunk/identity-impl/src/test/resources/store-test-config.xml 2009-01-16 04:49:18
UTC (rev 220)
+++ idm/trunk/identity-impl/src/test/resources/store-test-config.xml 2009-01-16 13:49:44
UTC (rev 221)
@@ -18,13 +18,13 @@
<external-config/>
<default-identity-store-id>HibernateTestStore</default-identity-store-id>
<default-attribute-store-id>HibernateTestStore</default-attribute-store-id>
- <identity-store-mappings>
- <identity-store-mapping>
-
<identity-store-id>HibernateTestStore</identity-store-id>
- <identity-object-types/>
- <options/>
- </identity-store-mapping>
- </identity-store-mappings>
+ <!--<identity-store-mappings>-->
+ <!--<identity-store-mapping>-->
+
<!--<identity-store-id>HibernateTestStore</identity-store-id>-->
+ <!--<identity-object-types/>-->
+ <!--<options/>-->
+ <!--</identity-store-mapping>-->
+ <!--</identity-store-mappings>-->
</repository>
</repositories>
<stores>
@@ -50,6 +50,13 @@
<options/>
</identity-object-type>
<identity-object-type>
+ <name>GROUP</name>
+ <relationships/>
+ <credentials/>
+ <attributes/>
+ <options/>
+ </identity-object-type>
+ <identity-object-type>
<name>ORGANIZATION</name>
<relationships>
<relationship>
Modified: idm/trunk/identity-impl/src/test/resources/test-config.xml
===================================================================
--- idm/trunk/identity-impl/src/test/resources/test-config.xml 2009-01-16 04:49:18 UTC
(rev 220)
+++ idm/trunk/identity-impl/src/test/resources/test-config.xml 2009-01-16 13:49:44 UTC
(rev 221)
@@ -4,22 +4,11 @@
xsi:schemaLocation="urn:jboss:identity:idm:config:v1_0_alpha
identity-config.xsd">
<realms>
<realm>
- <id></id>
- <repository-id-ref></repository-id-ref>
- <realm-configuration>
- <!--Use direct type mappper when not specified-->
- <!--<identity-type-mappings>-->
-
<!--<identity-mapping>JBOSS_IDENTITY_IDENTITY</identity-mapping>-->
- <!--<group-type-mapping>-->
- <!--<group-type-name>ORGANIZATION</group-type-name>-->
-
<!--<identity-object-type-name>JBOSS_IDENTITY_GROUP_ORGANIZATION</identity-object-type-name>-->
- <!--</group-type-mapping>-->
- <!--<group-type-mapping>-->
-
<!--<group-type-name>ORGANIZATION_UNIT</group-type-name>-->
-
<!--<identity-object-type-name>JBOSS_IDENTITY_GROUP_ORGANIZATION_UNIT</identity-object-type-name>-->
- <!--</group-type-mapping>-->
- <!--</identity-type-mappings>-->
- </realm-configuration>
+ <id>Sample Ralm</id>
+ <repository-id-ref>Fallback Repository - ACME</repository-id-ref>
+ <identity-type-mappings>
+ <identity-mapping>IDENTITY</identity-mapping>
+ </identity-type-mappings>
</realm>
</realms>
<repositories>
@@ -49,19 +38,6 @@
<options/>
</identity-store-mapping>
</identity-store-mappings>
- <!--<option-groups>-->
- <!--<option-group>-->
- <!--<name></name>-->
- <!--<options>-->
- <!--<option>-->
- <!--<name></name>-->
- <!--<values>-->
- <!--<value></value>-->
- <!--</values>-->
- <!--</option>-->
- <!--</options>-->
- <!--</option-group>-->
- <!--</option-groups>-->
</repository>
</repositories>
<stores>
@@ -112,6 +88,7 @@
<attributes>
<attribute>
<name>user.name.given</name>
+ <type>text</type>
<mapping/>
<isRequired>false</isRequired>
<isMultivalued>true</isMultivalued>
Modified:
idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/configuration/metadata/IdentityRepositoryConfigurationMetaData.java
===================================================================
---
idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/configuration/metadata/IdentityRepositoryConfigurationMetaData.java 2009-01-16
04:49:18 UTC (rev 220)
+++
idm/trunk/identity-spi/src/main/java/org/jboss/identity/idm/spi/configuration/metadata/IdentityRepositoryConfigurationMetaData.java 2009-01-16
13:49:44 UTC (rev 221)
@@ -56,7 +56,7 @@
/**
* @return id of the default AttributeStore
*/
- String getDefaultAttributeStroeId();
+ String getDefaultAttributeStoreId();
/**
* @return configuration meta data of IdentityStore mappings
Show replies by date