Author: bdaw
Date: 2008-11-18 16:49:18 -0500 (Tue, 18 Nov 2008)
New Revision: 123
Added:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/AttributeFilterSearchControl.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/PageSearchControl.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/SortByNameSearchControl.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateRealm.java
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObject.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipName.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipType.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/repository/FallbackIdentityStoreRepository.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreImpl.java
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/ldap/LDAPIdentityStoreImpl.java
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreTestCase.java
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateModelTestCase.java
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateTestBase.java
trunk/identity-impl/src/test/resources/META-INF/persistence.xml
trunk/identity-spi/src/main/java/org/jboss/identity/spi/store/IdentityStore.java
trunk/parent/pom.xml
Log:
Hibernate store improvements
Added:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/AttributeFilterSearchControl.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/AttributeFilterSearchControl.java
(rev 0)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/AttributeFilterSearchControl.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -0,0 +1,35 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+
+package org.jboss.identity.impl.api;
+
+import org.jboss.identity.api.IdentitySearchControl;
+import org.jboss.identity.spi.searchcontrol.IdentityObjectSearchControl;
+
+/**
+ * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class AttributeFilterSearchControl implements IdentitySearchControl,
IdentityObjectSearchControl
+{
+
+}
Added:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/PageSearchControl.java
===================================================================
--- trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/PageSearchControl.java
(rev 0)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/PageSearchControl.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -0,0 +1,63 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+
+package org.jboss.identity.impl.api;
+
+import org.jboss.identity.api.IdentitySearchControl;
+import org.jboss.identity.spi.searchcontrol.IdentityObjectSearchControl;
+
+/**
+ * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class PageSearchControl implements IdentitySearchControl,
IdentityObjectSearchControl
+{
+ private int offset;
+
+ private int limit;
+
+ public PageSearchControl(int offset, int limit)
+ {
+ this.offset = offset;
+ this.limit = limit;
+ }
+
+ public int getOffset()
+ {
+ return offset;
+ }
+
+ public void setOffset(int offset)
+ {
+ this.offset = offset;
+ }
+
+ public int getLimit()
+ {
+ return limit;
+ }
+
+ public void setLimit(int limit)
+ {
+ this.limit = limit;
+ }
+}
Added:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/SortByNameSearchControl.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/SortByNameSearchControl.java
(rev 0)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/api/SortByNameSearchControl.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -0,0 +1,50 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+
+package org.jboss.identity.impl.api;
+
+import org.jboss.identity.spi.searchcontrol.IdentityObjectSearchControl;
+import org.jboss.identity.api.IdentitySearchControl;
+
+/**
+ * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
+ * @version : 0.1 $
+ */
+public class SortByNameSearchControl implements IdentitySearchControl,
IdentityObjectSearchControl
+{
+ private boolean ascending;
+
+ public SortByNameSearchControl(boolean ascending)
+ {
+ this.ascending = ascending;
+ }
+
+ public boolean isAscending()
+ {
+ return ascending;
+ }
+
+ public void setAscending(boolean ascending)
+ {
+ this.ascending = ascending;
+ }
+}
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/configuration/jaxb2/JAXB2IdentityConfiguration.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -94,21 +94,36 @@
IdentityConfigurationMetaDataImpl configurationMD = new
IdentityConfigurationMetaDataImpl();
- for (IdentityStoreType identityStoreType :
identityConfig.getStores().getIdentityStores().getIdentityStore())
+ if (identityConfig.getStores() != null &&
+ identityConfig.getStores().getIdentityStores() != null &&
+ identityConfig.getStores().getIdentityStores().getIdentityStore() != null)
{
-
configurationMD.getIdentityStores().add(createIdentityStoreConfigurationMetaData(identityStoreType));
+
+ for (IdentityStoreType identityStoreType :
identityConfig.getStores().getIdentityStores().getIdentityStore())
+ {
+
configurationMD.getIdentityStores().add(createIdentityStoreConfigurationMetaData(identityStoreType));
+ }
}
- for (RepositoryType repositoryType :
identityConfig.getRepositories().getRepository())
+ if (identityConfig.getRepositories() != null &&
+ identityConfig.getRepositories().getRepository() != null)
{
-
configurationMD.getRepositories().add(createIdentityRepositoryConfigurationMetaData(repositoryType));
+
+ for (RepositoryType repositoryType :
identityConfig.getRepositories().getRepository())
+ {
+
configurationMD.getRepositories().add(createIdentityRepositoryConfigurationMetaData(repositoryType));
+ }
}
- for (RealmType realmType : identityConfig.getRealms().getRealm())
+ if (identityConfig.getRealms() != null &&
+ identityConfig.getRealms().getRealm() != null)
{
- configurationMD.getRealms().add(createRealmConfigurationMetaData(realmType));
+ for (RealmType realmType : identityConfig.getRealms().getRealm())
+ {
+
configurationMD.getRealms().add(createRealmConfigurationMetaData(realmType));
+ }
}
-
+
return configurationMD;
}
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObject.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObject.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObject.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -28,7 +28,6 @@
import java.util.HashMap;
import java.util.Collections;
import java.util.Arrays;
-import java.util.LinkedList;
import java.util.List;
import javax.persistence.Column;
@@ -47,9 +46,6 @@
import org.jboss.identity.exception.PolicyValidationException;
import org.jboss.identity.spi.model.IdentityObject;
-import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectType;
-import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectRelationship;
-import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectAttribute;
/**
* @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
@@ -58,19 +54,29 @@
@NamedQueries({
@NamedQuery(
name = "findIdentityObjectByNameAndType",
- query = "select o from HibernateIdentityObject o where o.name like :name and
o.identityType.name like :typeName"
+ query = "select o from HibernateIdentityObject o where o.realm like :realm and
o.name like :name and o.identityType.name like :typeName"
),
@NamedQuery(
name = "findIdentityObjectsByType",
- query = "select o from HibernateIdentityObject o where o.identityType.name
like :typeName"
+ query = "select o from HibernateIdentityObject o where o.realm like :realm and
o.identityType.name like :typeName"
),
@NamedQuery(
+ name = "findIdentityObjectsByTypeOrderedByNameAsc",
+ query = "select o from HibernateIdentityObject o where o.realm like :realm and
o.identityType.name like :typeName " +
+ "order by o.name asc"
+ ),
+ @NamedQuery(
+ name = "findIdentityObjectsByTypeOrderedByNameDesc",
+ query = "select o from HibernateIdentityObject o where o.realm like :realm and
o.identityType.name like :typeName " +
+ "order by o.name desc"
+ ),
+ @NamedQuery(
name = "countIdentityObjectsByType",
- query = "select count(o.id) from HibernateIdentityObject o where
o.identityType.name like :typeName"
+ query = "select count(o.id) from HibernateIdentityObject o where o.realm like
:realm and o.identityType.name like :typeName"
)
})
@Entity
-@Table(name = "identity_obj", uniqueConstraints =
{@UniqueConstraint(columnNames = {"NAME", "IDENTITY_TYPE"})})
+@Table(name = "identity_obj", uniqueConstraints =
{@UniqueConstraint(columnNames = {"NAME", "IDENTITY_TYPE",
"REALM"})})
public class HibernateIdentityObject implements IdentityObject
{
@Id
@@ -93,14 +99,19 @@
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
private Map<String, HibernateIdentityObjectAttribute> attributes = new
HashMap<String, HibernateIdentityObjectAttribute>();
+ @ManyToOne(fetch = FetchType.EAGER)
+ @JoinColumn(nullable = false, unique = false, name="REALM")
+ private HibernateRealm realm;
+
public HibernateIdentityObject()
{
}
- public HibernateIdentityObject(String name, HibernateIdentityObjectType identityType)
+ public HibernateIdentityObject(String name, HibernateIdentityObjectType identityType,
HibernateRealm realm)
{
this.name = name;
this.identityType = identityType;
+ this.realm = realm;
}
public String getId()
@@ -236,6 +247,16 @@
fromRelationships.add(toRelationship);
}
+ public HibernateRealm getRealm()
+ {
+ return realm;
+ }
+
+ public void setRealm(HibernateRealm realm)
+ {
+ this.realm = realm;
+ }
+
public void validatePolicy() throws PolicyValidationException
{
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipName.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipName.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipName.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -29,43 +29,73 @@
import javax.persistence.NamedQuery;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
+import javax.persistence.UniqueConstraint;
/**
* @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
* @version : 0.1 $
*/
@Entity
-@Table(name="identity_relationship_name")
+@Table(name="identity_relationship_name", uniqueConstraints =
{@UniqueConstraint(columnNames = {"NAME", "REALM"})})
@NamedQueries({
@NamedQuery(
name = "findIdentityObjectRelationshipNameByName",
- query = "select rn from HibernateIdentityObjectRelationshipName rn where
rn.name like :name"
+ query = "select rn from HibernateIdentityObjectRelationshipName rn where
rn.name like :name and rn.realm like :realm"
),
@NamedQuery(
name = "findIdentityObjectRelationshipNames",
- query = "select rn.name from HibernateIdentityObjectRelationshipName rn"
+ query = "select rn.name from HibernateIdentityObjectRelationshipName rn where
rn.realm like :realm"
),
@NamedQuery(
+ name = "findIdentityObjectRelationshipNamesOrderedByNameAsc",
+ query = "select rn.name from HibernateIdentityObjectRelationshipName rn where
rn.realm like :realm " +
+ "order by rn.name asc"
+ ),
+ @NamedQuery(
+ name = "findIdentityObjectRelationshipNamesOrderedByNameDesc",
+ query = "select rn.name from HibernateIdentityObjectRelationshipName rn where
rn.realm like :realm " +
+ "order by rn.name desc"
+ ),
+ @NamedQuery(
name = "findIdentityObjectRelationshipNamesForIdentityObject",
- query = "select r.name.name from HibernateIdentityObjectRelationship r where
r.fromIdentityObject like :identityObject or r.toIdentityObject like
:identityObject"
- )
- })
+ query = "select r.name.name from HibernateIdentityObjectRelationship r where
" +
+ "r.fromIdentityObject like :identityObject or r.toIdentityObject like
:identityObject"
+ ),
+ @NamedQuery(
+ name =
"findIdentityObjectRelationshipNamesForIdentityObjectOrderedByNameAsc",
+ query = "select r.name.name from HibernateIdentityObjectRelationship r where
" +
+ "r.fromIdentityObject like :identityObject or r.toIdentityObject like
:identityObject " +
+ "order by r.name.name asc"
+ ),
+ @NamedQuery(
+ name =
"findIdentityObjectRelationshipNamesForIdentityObjectOrdereByNameDesc",
+ query = "select r.name.name from HibernateIdentityObjectRelationship r where
" +
+ "r.fromIdentityObject like :identityObject or r.toIdentityObject like
:identityObject " +
+ "order by r.name.name desc")
+})
public class HibernateIdentityObjectRelationshipName
{
@Id
@GeneratedValue
- Long id;
+ private Long id;
@Column(nullable = false, unique = true, name = "NAME")
- String name;
+ private String name;
+ @ManyToOne
+ @JoinColumn(nullable = false, name="REALM")
+ private HibernateRealm realm;
+
public HibernateIdentityObjectRelationshipName()
{
}
- public HibernateIdentityObjectRelationshipName(String name)
+ public HibernateIdentityObjectRelationshipName(String name, HibernateRealm realm)
{
this.name = name;
+ this.realm = realm;
}
public Long getId()
@@ -87,4 +117,14 @@
{
this.name = name;
}
+
+ public HibernateRealm getRealm()
+ {
+ return realm;
+ }
+
+ public void setRealm(HibernateRealm realm)
+ {
+ this.realm = realm;
+ }
}
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipType.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipType.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateIdentityObjectRelationshipType.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -29,6 +29,8 @@
import javax.persistence.Table;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
+import javax.persistence.ManyToOne;
+import javax.persistence.JoinColumn;
import org.jboss.identity.spi.model.IdentityObjectRelationshipType;
@@ -63,7 +65,6 @@
this.name = name;
}
-
public HibernateIdentityObjectRelationshipType(IdentityObjectRelationshipType type)
{
if (type == null)
Added:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateRealm.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateRealm.java
(rev 0)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/model/hibernate/HibernateRealm.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -0,0 +1,164 @@
+/*
+* JBoss, a division of Red Hat
+* Copyright 2006, Red Hat Middleware, LLC, and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+*/
+
+package org.jboss.identity.impl.model.hibernate;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+import javax.persistence.Id;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Column;
+import javax.persistence.OneToMany;
+import javax.persistence.FetchType;
+import javax.persistence.CascadeType;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
+ * @version : 0.1 $
+ */
+@NamedQueries({
+ @NamedQuery(
+ name = "findIRealmByName",
+ query = "select o from HibernateRealm o where o.name like :name"
+ )
+})
+@Entity
+@Table(name = "identity_realm", uniqueConstraints =
{@UniqueConstraint(columnNames = {"NAME"})})
+public class HibernateRealm
+{
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @Column(name = "NAME", nullable = false)
+ private String name;
+
+ @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
+ private Map<String, HibernateIdentityObjectAttribute> attributes = new
HashMap<String, HibernateIdentityObjectAttribute>();
+
+ public HibernateRealm()
+ {
+ }
+
+ public HibernateRealm(String name)
+ {
+ this.name = name;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
+ public Set<String> getAttribute(String name) {
+ if (attributes.containsKey(name))
+ {
+ return Collections.unmodifiableSet((attributes.get(name)).getValues());
+ }
+ return new HashSet<String>();
+ }
+
+ public Map<String, String[]> getAttributes()
+ {
+ Map<String, String[]> map = new HashMap<String, String[]>();
+
+ for (HibernateIdentityObjectAttribute attribute : attributes.values())
+ {
+ Set<String> values = attribute.getValues();
+ map.put(attribute.getName(),values.toArray(new String[values.size()]));
+ }
+
+ return Collections.unmodifiableMap(map);
+ }
+
+ public void setAttribute(String name, String[] values)
+ {
+
+ attributes.put(name, new HibernateIdentityObjectAttribute(name, values));
+ }
+
+ public void setAttribute(String name, Set<String> values)
+ {
+
+ attributes.put(name, new HibernateIdentityObjectAttribute(name, values));
+ }
+
+ public void addAttributeValues(String name, String[] values)
+ {
+ if (!attributes.containsKey(name))
+ {
+ setAttribute(name, values);
+ }
+ else
+ {
+ Set<String> mergedValues = new
HashSet<String>((attributes.get(name)).getValues());
+ List<String> list = Arrays.asList(values);
+ mergedValues.addAll(new HashSet<String>(list));
+ setAttribute(name, mergedValues);
+ }
+ }
+
+ public void setAttributes(Map<String, Set<String>> values)
+ {
+ Map<String, HibernateIdentityObjectAttribute> newAttrs= new
HashMap<String, HibernateIdentityObjectAttribute>();
+
+ for (String name : values.keySet())
+ {
+
+ newAttrs.put(name, new HibernateIdentityObjectAttribute(name, new
HashSet<String>(values.get(name))));
+ }
+ attributes = newAttrs;
+ }
+
+ public void removeAttribute(String name)
+ {
+ attributes.remove(name);
+ }
+
+
+}
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/repository/FallbackIdentityStoreRepository.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/repository/FallbackIdentityStoreRepository.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/repository/FallbackIdentityStoreRepository.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -188,8 +188,13 @@
return targetStore.createIdentityObject(targetCtx, name, identityObjectType);
}
+ public IdentityObject createIdentityObject(IdentityStoreInvocationContext
invocationCtx, String name, IdentityObjectType identityObjectType, Map<String,
String[]> attributes) throws IdentityException
+ {
+ IdentityStore targetStore = resolveIdentityStore(identityObjectType);
+ IdentityStoreInvocationContext targetCtx = resolveInvocationContext(targetStore,
invocationCtx);
+ return targetStore.createIdentityObject(targetCtx, name, identityObjectType,
attributes);
+ }
-
public void removeIdentityObject(IdentityStoreInvocationContext invocationCtx,
IdentityObject identity) throws IdentityException
{
IdentityStore targetStore = resolveIdentityStore(identity);
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreImpl.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreImpl.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreImpl.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -41,11 +41,15 @@
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectRelationshipType;
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectType;
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectRelationshipName;
+import org.jboss.identity.impl.model.hibernate.HibernateRealm;
import org.jboss.identity.impl.NotYetImplementedException;
+import org.jboss.identity.impl.api.PageSearchControl;
+import org.jboss.identity.impl.api.SortByNameSearchControl;
import org.jboss.identity.impl.store.FeaturesMetaDataImpl;
import org.hibernate.ejb.HibernateEntityManager;
import org.hibernate.ejb.HibernateEntityManagerFactory;
import org.hibernate.criterion.Restrictions;
+import org.hibernate.HibernateException;
import javax.persistence.NoResultException;
import javax.persistence.Query;
@@ -93,6 +97,8 @@
public static final String IS_REALM_AWARE = "isRealmAware";
+ public static final String DEFAULT_REALM_NAME =
HibernateIdentityStoreImpl.class.getName() + ".DEFAULT_REALM";
+
private String id;
private FeaturesMetaData supportedFeatures;
@@ -109,8 +115,11 @@
static {
// List all supported controls classes
- //TODO:
- //supportedSearchControls.add()
+ //TODO: attributefilter?
+
+ supportedSearchControls.add(PageSearchControl.class);
+ supportedSearchControls.add(SortByNameSearchControl.class);
+
}
public HibernateIdentityStoreImpl(String id)
@@ -138,6 +147,7 @@
HibernateEntityManager em =
(HibernateEntityManager)emFactory.createEntityManager();
+
if (populateMembershipTypes != null &&
populateMembershipTypes.equalsIgnoreCase("true"))
{
List<String> memberships = new LinkedList<String>();
@@ -179,12 +189,43 @@
}
+ String realmAware = configurationMD.getOptionSingleValue(IS_REALM_AWARE);
+
+ if (realmAware != null && realmAware.equalsIgnoreCase("true"))
+ {
+ this.isRealmAware = true;
+ }
+
+ // Default realm
+
+ HibernateRealm realm = null;
+
+ try
+ {
+
+ em.getTransaction().begin();
+
+ realm = (HibernateRealm)em.getSession().
+ createCriteria(HibernateRealm.class).add(Restrictions.eq("name",
DEFAULT_REALM_NAME)).uniqueResult();
+
+ em.getTransaction().commit();
+
+ }
+ catch (HibernateException e)
+ {
+ // Realm does not exist
+ }
+
+ if (realm == null)
+ {
+ addRealm(em, DEFAULT_REALM_NAME);
+ }
+
}
public IdentityStoreSession createIdentityStoreSession() throws IdentityException
{
-
try
{
return new
HibernateIdentityStoreSessionImpl((HibernateEntityManager)emFactory.createEntityManager());
@@ -193,7 +234,6 @@
{
throw new IdentityException("Failed to obtain
HibernateEntityManager",e);
}
-
}
public String getId()
@@ -211,18 +251,31 @@
return supportedFeatures;
}
- public IdentityObject createIdentityObject(IdentityStoreInvocationContext ctx, String
name, IdentityObjectType identityObjectType) throws IdentityException
+ public IdentityObject createIdentityObject(IdentityStoreInvocationContext
invocationCtx, String name, IdentityObjectType identityObjectType) throws
IdentityException
{
+ return createIdentityObject(invocationCtx, name, identityObjectType, null);
+ }
+ public IdentityObject createIdentityObject(IdentityStoreInvocationContext ctx,
+ String name,
+ IdentityObjectType identityObjectType,
+ Map<String, String[]> attributes)
throws IdentityException
+ {
+
if (name == null)
{
throw new IllegalArgumentException("IdentityObject name is null");
}
-
+
checkIOType(identityObjectType);
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+ HibernateRealm realm = getRealm(em, ctx);
+
// Check if object with a given name and type is not present already
- List results =
getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectByNameAndType")
+ List results = em.createNamedQuery("findIdentityObjectByNameAndType")
+ .setParameter("realm", realm)
.setParameter("name", name)
.setParameter("typeName",
identityObjectType.getName()).getResultList();
@@ -235,8 +288,16 @@
HibernateIdentityObjectType hibernateType = getHibernateIdentityObjectType(ctx,
identityObjectType);
- HibernateIdentityObject io = new HibernateIdentityObject(name, hibernateType);
+ HibernateIdentityObject io = new HibernateIdentityObject(name, hibernateType,
realm);
+ if (attributes != null)
+ {
+ for (Map.Entry<String, String[]> entry : attributes.entrySet())
+ {
+ io.setAttribute(entry.getKey(), entry.getValue());
+ }
+ }
+
try
{
getHibernateEntityManager(ctx).persist(io);
@@ -272,12 +333,15 @@
HibernateIdentityObjectType jpaType = getHibernateIdentityObjectType(ctx,
identityType);
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
int count;
try
{
- count = ((Number)getHibernateEntityManager(ctx)
+ count = ((Number)em
.createNamedQuery("countIdentityObjectsByType")
.setParameter("typeName", jpaType.getName())
+ .setParameter("realm", getRealm(em, ctx))
.getSingleResult()).intValue();
}
catch (Exception e)
@@ -302,9 +366,13 @@
HibernateIdentityObject hibernateObject = null;
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
try
{
- hibernateObject =
(HibernateIdentityObject)getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectByNameAndType")
+ hibernateObject = (HibernateIdentityObject)getHibernateEntityManager(ctx).
+ createNamedQuery("findIdentityObjectByNameAndType")
+ .setParameter("realm", getRealm(em, ctx))
.setParameter("name", name)
.setParameter("typeName", hibernateType.getName())
.getSingleResult();
@@ -328,7 +396,7 @@
try
{
- hibernateObject =
(HibernateIdentityObject)getHibernateEntityManager(ctx).find(HibernateIdentityObject.class,
id);
+ hibernateObject =
getHibernateEntityManager(ctx).find(HibernateIdentityObject.class, new Long(id));
}
catch(Exception e)
{
@@ -344,29 +412,68 @@
IdentityObjectType identityType,
IdentityObjectSearchControl[]
controls) throws IdentityException
{
- //TODO:OrderBy
- //TODO:Improve pagination
-
checkIOType(identityType);
+ checkControls(controls);
+
+ PageSearchControl pageSearchControl = null;
+ SortByNameSearchControl sortSearchControl = null;
+
+ if (controls != null)
+ {
+ for (IdentityObjectSearchControl control : controls)
+ {
+ if (control instanceof PageSearchControl)
+ {
+ pageSearchControl = (PageSearchControl)control;
+ }
+ else if (control instanceof SortByNameSearchControl)
+ {
+ sortSearchControl = (SortByNameSearchControl)control;
+ }
+ }
+ }
+
HibernateIdentityObjectType hibernateType = getHibernateIdentityObjectType(ctx,
identityType);
List<IdentityObject> results;
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
try
{
- Query q =
getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectsByType")
- .setParameter("typeName", hibernateType.getName());
+ Query q = null;
- //TODO: controls
- //.setFirstResult(offset);
+ if (sortSearchControl != null)
+ {
+ if (sortSearchControl.isAscending())
+ {
+ q =
em.createNamedQuery("findIdentityObjectsByTypeOrderedByNameAsc");
+ }
+ else
+ {
+ q =
em.createNamedQuery("findIdentityObjectsByTypeOrderedByNameDesc");
+ }
+ }
+ else
+ {
+ q = em.createNamedQuery("findIdentityObjectsByType");
+ }
-// if (limit > 0)
-// {
-// q.setMaxResults(limit);
-// }
+ q.setParameter("realm", getRealm(em, ctx))
+ .setParameter("typeName", hibernateType.getName());
+
+ if (pageSearchControl != null)
+ {
+ q.setFirstResult(pageSearchControl.getOffset());
+ if (pageSearchControl.getLimit() > 0)
+ {
+ q.setMaxResults(pageSearchControl.getLimit());
+ }
+ }
+
results = (List<IdentityObject>)q.getResultList();
}
@@ -388,70 +495,94 @@
public Collection<IdentityObject>
findIdentityObject(IdentityStoreInvocationContext ctx, IdentityObject identity,
IdentityObjectRelationshipType relationshipType, boolean parent,
IdentityObjectSearchControl[] controls) throws IdentityException
{
//TODO:test
- //TODO:Improve pagination
HibernateIdentityObject hibernateObject = safeGet(ctx, identity);
List<IdentityObject> results = null;
+ PageSearchControl pageSearchControl = null;
+ SortByNameSearchControl sortSearchControl = null;
+
+ if (controls != null)
+ {
+ for (IdentityObjectSearchControl control : controls)
+ {
+ if (control instanceof PageSearchControl)
+ {
+ pageSearchControl = (PageSearchControl)control;
+ }
+ else if (control instanceof SortByNameSearchControl)
+ {
+ sortSearchControl = (SortByNameSearchControl)control;
+ }
+ }
+ }
+
+ boolean orderByName = false;
+ boolean ascending = true;
+
+ if (sortSearchControl != null)
+ {
+ orderByName = true;
+ ascending = sortSearchControl.isAscending();
+ }
+
try
{
org.hibernate.Query q = null;
StringBuilder hqlString = new StringBuilder("");
- //TODO: controls
-// if (orderByName)
-// {
-// hqlString.append(" orderBy ior.toIdentityObject.name");
-// if (ascending)
-// {
-// hqlString.append(" asc");
-// }
-// }
+ if (orderByName)
+ {
+ hqlString.append(" orderBy ior.toIdentityObject.name");
+ if (ascending)
+ {
+ hqlString.append(" asc");
+ }
+ }
if (parent)
{
hqlString.append("select ior.toIdentityObject from
HibernateIdentityObjectRelationship ior where ior.type.name like :relType and
ior.fromIdentityObject like :identity");
- //TODO: controls
-// if (orderByName)
-// {
-// hqlString.append(" orderBy ior.toIdentityObject.name");
-// if (ascending)
-// {
-// hqlString.append(" asc");
-// }
-// }
+ if (orderByName)
+ {
+ hqlString.append(" orderBy ior.toIdentityObject.name");
+ if (ascending)
+ {
+ hqlString.append(" asc");
+ }
+ }
}
else
{
hqlString.append("select ior.fromIdentityObject from
HibernateIdentityObjectRelationship ior where ior.type.name like :relType and
ior.toIdentityObject like :identity");
- //TODO: controls
-// if (orderByName)
-// {
-// hqlString.append(" orderBy ior.toIdentityObject.name");
-// if (ascending)
-// {
-// hqlString.append(" asc");
-// }
-// }
+ if (orderByName)
+ {
+ hqlString.append(" orderBy ior.toIdentityObject.name");
+ if (ascending)
+ {
+ hqlString.append(" asc");
+ }
+ }
}
q =
getHibernateEntityManager(ctx).getSession().createQuery(hqlString.toString())
.setParameter("relType", relationshipType.getName())
.setParameter("identity",hibernateObject);
- //TODO: controls
- //.setFirstResult(offset);
+
+ if (pageSearchControl != null)
+ {
+ q.setFirstResult(pageSearchControl.getOffset());
+ if (pageSearchControl.getLimit() > 0)
+ {
+ q.setMaxResults(pageSearchControl.getLimit());
+ }
+ }
- //TODO: controls
-// if (limit > 0)
-// {
-// q.setMaxResults(limit);
-// }
-
results = q.list();
@@ -474,7 +605,7 @@
IdentityObjectRelationshipType relationshipType,
String name, boolean createNames) throws
IdentityException
{
- //TODO: name
+ //TODO: check name
if (relationshipType == null)
{
@@ -523,7 +654,7 @@
public void removeRelationship(IdentityStoreInvocationContext ctx, IdentityObject
fromIdentity, IdentityObject toIdentity, IdentityObjectRelationshipType relationshipType,
String name) throws IdentityException
{
- //TODO: name
+ //TODO: check name
if (relationshipType == null)
{
@@ -616,17 +747,21 @@
throw new IllegalArgumentException("name is null");
}
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+ HibernateRealm realm = getRealm(em, ctx);
+
try
{
- HibernateIdentityObjectRelationshipName hiorn =
(HibernateIdentityObjectRelationshipName)getHibernateEntityManager(ctx).getSession().createCriteria(HibernateIdentityObjectRelationshipName.class)
- .add(Restrictions.eq("name", name)).uniqueResult();
+ HibernateIdentityObjectRelationshipName hiorn =
(HibernateIdentityObjectRelationshipName)em.getSession().createCriteria(HibernateIdentityObjectRelationshipName.class)
+ .add(Restrictions.eq("name",
name)).add(Restrictions.eq("realm", realm)).uniqueResult();
if (hiorn != null)
{
throw new IdentityException("Relationship name already exists");
}
- hiorn = new HibernateIdentityObjectRelationshipName(name);
+ hiorn = new HibernateIdentityObjectRelationshipName(name, realm);
getHibernateEntityManager(ctx).persist(hiorn);
}
@@ -646,10 +781,13 @@
throw new IllegalArgumentException("name is null");
}
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+
try
{
- HibernateIdentityObjectRelationshipName hiorn =
(HibernateIdentityObjectRelationshipName)getHibernateEntityManager(ctx).getSession().createCriteria(HibernateIdentityObjectRelationshipName.class)
- .add(Restrictions.eq("name", name)).uniqueResult();
+ HibernateIdentityObjectRelationshipName hiorn =
(HibernateIdentityObjectRelationshipName)em.getSession().createCriteria(HibernateIdentityObjectRelationshipName.class)
+ .add(Restrictions.eq("name",
name)).add(Restrictions.eq("realm", getRealm(em, ctx))).uniqueResult();
if (hiorn == null)
{
@@ -671,22 +809,60 @@
public Set<String> getRelationshipNames(IdentityStoreInvocationContext ctx,
IdentityObjectSearchControl[] controls) throws IdentityException,
OperationNotSupportedException
{
- //TODO: orderByName
-
Set<String> names = new HashSet<String>();
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+ PageSearchControl pageSearchControl = null;
+ SortByNameSearchControl sortSearchControl = null;
+
+ if (controls != null)
+ {
+ for (IdentityObjectSearchControl control : controls)
+ {
+ if (control instanceof PageSearchControl)
+ {
+ pageSearchControl = (PageSearchControl)control;
+ }
+ else if (control instanceof SortByNameSearchControl)
+ {
+ sortSearchControl = (SortByNameSearchControl)control;
+ }
+ }
+ }
+
+
try
{
- Query q =
getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectRelationshipNames");
- //TODO: controls
- // .setFirstResult(offset);
+ Query q = null;
- //TODO: controls
-// if(limit > 0)
-// {
-// q.setMaxResults(limit);
-// }
+ if (sortSearchControl != null)
+ {
+ if (sortSearchControl.isAscending())
+ {
+ q =
em.createNamedQuery("findIdentityObjectRelationshipNamesOrderedByNameAsc");
+ }
+ else
+ {
+ q =
em.createNamedQuery("findIdentityObjectRelationshipNamesOrderedByNameDesc");
+ }
+ }
+ else
+ {
+ q = em.createNamedQuery("findIdentityObjectRelationshipNames");
+ }
+ q.setParameter("realm", getRealm(em, ctx));
+
+ if (pageSearchControl != null)
+ {
+ q.setFirstResult(pageSearchControl.getOffset());
+ if (pageSearchControl.getLimit() > 0)
+ {
+ q.setMaxResults(pageSearchControl.getLimit());
+ }
+ }
+
List<String> results = (List<String>)q.getResultList();
names = new HashSet<String>(results);
@@ -705,31 +881,64 @@
return getRelationshipNames(ctx, new IdentityObjectSearchControl[]{});
}
-
-
public Set<String> getRelationshipNames(IdentityStoreInvocationContext ctx,
IdentityObject identity, IdentityObjectSearchControl[] controls) throws IdentityException,
OperationNotSupportedException
{
- //TODO: NYI
- //TODO: orderByName
-
Set<String> names;
HibernateIdentityObject hibernateObject = safeGet(ctx, identity);
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+ PageSearchControl pageSearchControl = null;
+ SortByNameSearchControl sortSearchControl = null;
+
+ if (controls != null)
+ {
+ for (IdentityObjectSearchControl control : controls)
+ {
+ if (control instanceof PageSearchControl)
+ {
+ pageSearchControl = (PageSearchControl)control;
+ }
+ else if (control instanceof SortByNameSearchControl)
+ {
+ sortSearchControl = (SortByNameSearchControl)control;
+ }
+ }
+ }
+
try
{
- Query q =
getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectRelationshipNamesForIdentityObject")
- .setParameter("identityObject", hibernateObject);
- //TODO: controls
-// .setFirstResult(offset);
+ Query q = null;
- //TODO: controls
-// if(limit > 0)
-// {
-// q.setMaxResults(limit);
-// }
+ if (sortSearchControl != null)
+ {
+ if (sortSearchControl.isAscending())
+ {
+ q =
em.createNamedQuery("findIdentityObjectRelationshipNamesForIdentityObjectOrderedByNameAsc");
+ }
+ else
+ {
+ q =
em.createNamedQuery("findIdentityObjectRelationshipNamesForIdentityObjectOrderedByNameDesc");
+ }
+ }
+ else
+ {
+ q =
em.createNamedQuery("findIdentityObjectRelationshipNamesForIdentityObject");
+ }
+ q.setParameter("identityObject", hibernateObject);
+
+ if (pageSearchControl != null)
+ {
+ q.setFirstResult(pageSearchControl.getOffset());
+ if (pageSearchControl.getLimit() > 0)
+ {
+ q.setMaxResults(pageSearchControl.getLimit());
+ }
+ }
+
List<String> results = (List<String>)q.getResultList();
names = new HashSet<String>(results);
@@ -814,18 +1023,12 @@
}
}
- public boolean hasPasswordAttribute(IdentityStoreInvocationContext ctx,
IdentityObjectType type) throws IdentityException
+ public boolean validateCredential(IdentityStoreInvocationContext ctx, IdentityObject
identityObject, IdentityObjectCredential credential) throws IdentityException
{
//TODO: NYI
throw new NotYetImplementedException();
}
- public boolean validateCredential(IdentityStoreInvocationContext ctx, IdentityObject
identityObject, IdentityObjectCredential credential) throws IdentityException
- {
- //TODO: NYI
- throw new NotYetImplementedException();
- }
-
public void updateCredential(IdentityStoreInvocationContext ctx, IdentityObject
identityObject, IdentityObjectCredential credential) throws IdentityException
{
//TODO: NYI
@@ -902,9 +1105,12 @@
HibernateIdentityObjectType hibernateType = null;
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+
try
{
- hibernateType =
(HibernateIdentityObjectType)getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectTypeByName")
+ hibernateType =
(HibernateIdentityObjectType)em.createNamedQuery("findIdentityObjectTypeByName")
.setParameter("name", type.getName())
.getSingleResult() ;
}
@@ -921,16 +1127,20 @@
HibernateIdentityObject hibernateObject = null;
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
+
try
{
- hibernateObject =
(HibernateIdentityObject)getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectByNameAndType")
+ hibernateObject =
(HibernateIdentityObject)em.createNamedQuery("findIdentityObjectByNameAndType")
.setParameter("name", io.getName())
.setParameter("typeName", io.getIdentityType().getName())
+ .setParameter("realm", getRealm(em, ctx))
.getSingleResult();
}
catch (Exception e)
{
- throw new IdentityException("IdentityObject[ " + io.getName() + "
| " + io.getIdentityType().getName() + "] not present in the store.");
+ throw new IdentityException("IdentityObject[ " + io.getName() + "
| " + io.getIdentityType().getName() + "] not present in the store.", e);
}
return hibernateObject;
@@ -941,9 +1151,11 @@
HibernateIdentityObjectRelationshipType relationshipType = null;
+ HibernateEntityManager em = getHibernateEntityManager(ctx);
+
try
{
- relationshipType =
(HibernateIdentityObjectRelationshipType)getHibernateEntityManager(ctx).createNamedQuery("findIdentityObjectRelationshipTypeByName")
+ relationshipType =
(HibernateIdentityObjectRelationshipType)em.createNamedQuery("findIdentityObjectRelationshipTypeByName")
.setParameter("name", iot.getName())
.getSingleResult();
}
@@ -1001,6 +1213,77 @@
em.getTransaction().commit();
}
+ public void addRealm(HibernateEntityManager em, String realmName) throws
IdentityException
+ {
+ try
+ {
+ em.getTransaction().begin();
+ HibernateRealm realm = new HibernateRealm(realmName);
+ em.persist(realm);
+
+ em.getTransaction().commit();
+
+ }
+ catch (Exception e)
+ {
+ throw new IdentityException("Failed to create store realm", e);
+ }
+ }
+
+
+ public HibernateRealm getRealm(HibernateEntityManager em,
IdentityStoreInvocationContext ctx) throws IdentityException
+ {
+ if (ctx.getRealmId() == null)
+ {
+ throw new IllegalStateException("Realm Id not present");
+ }
+
+ HibernateRealm realm = null;
+
+ // If store is not realm aware return null to create/get objects accessible from
other realms
+ if (!isRealmAware())
+ {
+ realm = (HibernateRealm)em.getSession().
+ createCriteria(HibernateRealm.class).add(Restrictions.eq("name",
DEFAULT_REALM_NAME)).uniqueResult();
+
+ if (realm == null)
+ {
+ throw new IllegalStateException("Default store realm is not present:
" + DEFAULT_REALM_NAME);
+ }
+
+ }
+ else
+ {
+ realm = (HibernateRealm)em.getSession().
+ createCriteria(HibernateRealm.class).add(Restrictions.eq("name",
ctx.getRealmId())).uniqueResult();
+ }
+
+
+
+ return realm;
+ }
+
+ private boolean isRealmAware()
+ {
+ return isRealmAware;
+ }
+
+ private void checkControls(IdentityObjectSearchControl[] controls) throws
IdentityException
+ {
+ if (controls != null)
+ {
+ for (IdentityObjectSearchControl control : controls)
+ {
+ if (!supportedSearchControls.contains(control.getClass()))
+ {
+ throw new IdentityException("IdentityObjectSearchControl not
supported by this IdentityStore: " + control.getClass());
+ }
+ }
+ }
+ }
+
+
+
}
Modified:
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/ldap/LDAPIdentityStoreImpl.java
===================================================================
---
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/ldap/LDAPIdentityStoreImpl.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/main/java/org/jboss/identity/impl/store/ldap/LDAPIdentityStoreImpl.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -63,6 +63,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.Arrays;
+import java.util.Collections;
import java.util.logging.Logger;
import java.util.logging.Level;
@@ -124,8 +125,16 @@
return supportedFeatures;
}
- public IdentityObject createIdentityObject(IdentityStoreInvocationContext
invocationCtx, String name, IdentityObjectType type) throws IdentityException
+ public IdentityObject createIdentityObject(IdentityStoreInvocationContext
invocationCtx, String name, IdentityObjectType identityObjectType) throws
IdentityException
{
+ return createIdentityObject(invocationCtx, name, identityObjectType, null);
+ }
+
+ public IdentityObject createIdentityObject(IdentityStoreInvocationContext
invocationCtx,
+ String name,
+ IdentityObjectType type,
+ Map<String, String[]> attributes)
throws IdentityException
+ {
if (name == null)
{
throw new IdentityException("Name cannot be null");
@@ -152,6 +161,31 @@
//create attribute using provided configuration
Map<String, String[]> attributesToAdd =
getTypeConfiguration(invocationCtx, type).getCreateEntryAttributeValues();
+ //merge
+ if (attributes != null)
+ {
+ for (Map.Entry<String, String[]> entry : attributes.entrySet())
+ {
+
+ if (!attributesToAdd.containsKey(entry.getKey()))
+ {
+ attributesToAdd.put(entry.getKey(), entry.getValue());
+ }
+ else
+ {
+ List<String> list1 =
Arrays.asList(attributesToAdd.get(entry.getKey()));
+ List<String> list2 = Arrays.asList(entry.getValue());
+
+ list1.addAll(list2);
+
+ String[] vals = list1.toArray(new String[list1.size()]);
+
+ attributesToAdd.put(entry.getKey(), vals);
+
+ }
+ }
+ }
+
//attributes
for (Iterator it1 = attributesToAdd.keySet().iterator(); it1.hasNext();)
{
Modified:
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreTestCase.java
===================================================================
---
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreTestCase.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateIdentityStoreTestCase.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -23,14 +23,23 @@
package org.jboss.identity.impl.store.hibernate;
import org.jboss.identity.spi.model.IdentityObject;
+import org.jboss.identity.spi.model.IdentityObjectType;
+import org.jboss.identity.spi.model.IdentityObjectRelationshipType;
import org.jboss.identity.spi.store.IdentityStoreInvocationContext;
import org.jboss.identity.spi.store.IdentityStore;
+import org.jboss.identity.spi.store.FeaturesMetaData;
+import org.jboss.identity.spi.store.IdentityStoreSession;
+import org.jboss.identity.spi.searchcontrol.IdentityObjectSearchControl;
+import org.jboss.identity.spi.credential.IdentityObjectCredentialType;
import org.jboss.identity.impl.store.hibernate.HibernateIdentityStoreImpl;
import org.jboss.identity.impl.store.hibernate.HibernateTestBase;
import org.jboss.identity.impl.store.RelationshipTypeEnum;
import org.jboss.identity.impl.store.IdentityTypeEnum;
import org.jboss.identity.impl.store.CommonIdentityStoreTest;
import org.jboss.identity.impl.store.IdentityStoreTestContext;
+import org.jboss.identity.impl.store.FeaturesMetaDataImpl;
+import org.jboss.identity.impl.model.hibernate.HibernateRealm;
+import org.jboss.identity.exception.IdentityException;
import org.hibernate.ejb.HibernateEntityManager;
import java.util.Collection;
@@ -48,6 +57,8 @@
protected HibernateIdentityStoreImpl store;
+ protected IdentityStoreInvocationContext ctx;
+
protected CommonIdentityStoreTest commonTest;
public HibernateIdentityStoreTestCase(String testName)
@@ -56,6 +67,8 @@
commonTest = new CommonIdentityStoreTest(this);
}
+
+
@Override
protected void setUp() throws Exception
{
@@ -68,11 +81,74 @@
{
return em;
}
+
+ @Override
+ public FeaturesMetaData getSupportedFeatures()
+ {
+ return new FeaturesMetaData()
+ {
+ public boolean isControlSupported(IdentityObjectType identityObjectType,
IdentityObjectSearchControl control)
+ {
+ return true;
+ }
+
+ public boolean isControlSupported(IdentityObjectType identityObjectType,
Class controlClazz)
+ {
+ return true;
+ }
+
+ public Set<String> getSupportedIdentityObjectTypes()
+ {
+ return null;
+ }
+
+ public boolean isIdentityObjectTypeSupported(IdentityObjectType
identityObjectType)
+ {
+ return true;
+ }
+
+ public boolean isRelationshipTypeSupported(IdentityObjectType fromType,
IdentityObjectType toType, IdentityObjectRelationshipType relationshipType) throws
IdentityException
+ {
+ return true;
+ }
+
+ public Set<String> getSupportedRelationshipTypes()
+ {
+ return null;
+ }
+
+ public boolean isCredentialSupported(IdentityObjectType
identityObjectType, IdentityObjectCredentialType credentialType)
+ {
+ return true;
+ }
+ };
+ }
};
+ ctx = new IdentityStoreInvocationContext()
+ {
+ public IdentityStoreSession getIdentityStoreSession()
+ {
+ return null;
+ }
+
+ public String getRealmId()
+ {
+ return "testRealm";
+ }
+ };
+
populateIdentityTypes();
populateRelationshipTypes();
+ em.getTransaction().begin();
+
+ HibernateRealm realm = new
HibernateRealm(HibernateIdentityStoreImpl.DEFAULT_REALM_NAME);
+ em.persist(realm);
+
+ em.getTransaction().commit();
+
+
}
private void populateRelationshipTypes() throws Exception
@@ -85,7 +161,7 @@
for (int i = 0; i < types.length; i++)
{
RelationshipTypeEnum type = types[i];
- store.addIdentityObjectRelationshipType(null, type);
+ store.addIdentityObjectRelationshipType(ctx, type);
}
em.getTransaction().commit();
@@ -101,7 +177,7 @@
for (int i = 0; i < types.length; i++)
{
IdentityTypeEnum type = types[i];
- store.addIdentityObjectType(null, type);
+ store.addIdentityObjectType(ctx, type);
}
em.getTransaction().commit();
@@ -130,7 +206,7 @@
public IdentityStoreInvocationContext getCtx()
{
- return null;
+ return ctx;
}
// Tests
@@ -154,8 +230,8 @@
em.getTransaction().begin();
- IdentityObject user1 = store.createIdentityObject(null, "Adam",
IdentityTypeEnum.USER);
- IdentityObject user2 = store.createIdentityObject(null, "Eva",
IdentityTypeEnum.USER);
+ IdentityObject user1 = store.createIdentityObject(ctx, "Adam",
IdentityTypeEnum.USER);
+ IdentityObject user2 = store.createIdentityObject(ctx, "Eva",
IdentityTypeEnum.USER);
em.flush();
@@ -164,11 +240,11 @@
attrs.put("key1", new String[]{"val1", "val2",
"val3"});
attrs.put("key2", new String[]{"val1", "val2",
"val3", "val4"});
- store.addAttributes(null, user1, attrs);
+ store.addAttributes(ctx, user1, attrs);
em.flush();
- Map<String, String[]> persistedAttrs = store.getAttributes(null, user1);
+ Map<String, String[]> persistedAttrs = store.getAttributes(ctx, user1);
assertEquals(2, persistedAttrs.keySet().size());
@@ -184,11 +260,11 @@
attrs.put("key3", new String[]{"val1"});
- store.addAttributes(null, user1, attrs);
+ store.addAttributes(ctx, user1, attrs);
em.flush();
- persistedAttrs = store.getAttributes(null, user1);
+ persistedAttrs = store.getAttributes(ctx, user1);
assertEquals(3, persistedAttrs.keySet().size());
@@ -205,11 +281,11 @@
attrs.put("key3", new String[]{"val2"});
- store.addAttributes(null, user1, attrs);
+ store.addAttributes(ctx, user1, attrs);
em.flush();
- persistedAttrs = store.getAttributes(null, user1);
+ persistedAttrs = store.getAttributes(ctx, user1);
assertEquals(3, persistedAttrs.keySet().size());
@@ -218,11 +294,11 @@
em.flush();
- store.updateAttributes(null, user1, attrs);
+ store.updateAttributes(ctx, user1, attrs);
em.flush();
- persistedAttrs = store.getAttributes(null, user1);
+ persistedAttrs = store.getAttributes(ctx, user1);
assertEquals(3, persistedAttrs.keySet().size());
@@ -233,11 +309,11 @@
Set<String> names = new HashSet<String>();
names.add("key3");
- store.removeAttributes(null, user1, new String[] {"key3"});
+ store.removeAttributes(ctx, user1, new String[] {"key3"});
em.flush();
- persistedAttrs = store.getAttributes(null, user1);
+ persistedAttrs = store.getAttributes(ctx, user1);
assertEquals(2, persistedAttrs.keySet().size());
Modified:
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateModelTestCase.java
===================================================================
---
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateModelTestCase.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateModelTestCase.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -32,6 +32,7 @@
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObject;
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectType;
import org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectRelationship;
+import org.jboss.identity.impl.model.hibernate.HibernateRealm;
/**
* @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw
Dawidowicz</a>
@@ -48,6 +49,8 @@
em.getTransaction().begin();
+ HibernateRealm realm = new HibernateRealm("default");
+ em.persist(realm);
//
@@ -60,6 +63,7 @@
HibernateIdentityObject io = new HibernateIdentityObject();
io.setName("John Kowalski");
+ io.setRealm(realm);
io.setIdentityType(iot);
em.persist(io);
@@ -108,23 +112,26 @@
em.getTransaction().begin();
+ HibernateRealm realm = new HibernateRealm("default");
+ em.persist(realm);
+
HibernateIdentityObjectType groupType = new
HibernateIdentityObjectType("Group");
em.persist(groupType);
HibernateIdentityObjectType userType = new
HibernateIdentityObjectType("User");
em.persist(userType);
- HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType);
+ HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType, realm);
em.persist(user1);
- HibernateIdentityObject user2 = new HibernateIdentityObject("user2",
userType);
+ HibernateIdentityObject user2 = new HibernateIdentityObject("user2",
userType, realm);
em.persist(user2);
- HibernateIdentityObject user3 = new HibernateIdentityObject("user3",
userType);
+ HibernateIdentityObject user3 = new HibernateIdentityObject("user3",
userType, realm);
em.persist(user3);
- HibernateIdentityObject group1 = new HibernateIdentityObject("group1",
groupType);
+ HibernateIdentityObject group1 = new HibernateIdentityObject("group1",
groupType, realm);
em.persist(group1);
- HibernateIdentityObject group2 = new HibernateIdentityObject("group2",
groupType);
+ HibernateIdentityObject group2 = new HibernateIdentityObject("group2",
groupType, realm);
em.persist(group2);
- HibernateIdentityObject group3 = new HibernateIdentityObject("group3",
groupType);
+ HibernateIdentityObject group3 = new HibernateIdentityObject("group3",
groupType, realm);
em.persist(group3);
HibernateIdentityObjectRelationshipType memberType = new
HibernateIdentityObjectRelationshipType("member");
@@ -167,14 +174,17 @@
em.getTransaction().begin();
+ HibernateRealm realm = new HibernateRealm("default");
+ em.persist(realm);
+
HibernateIdentityObjectType groupType = new
HibernateIdentityObjectType("Group");
em.persist(groupType);
HibernateIdentityObjectType userType = new
HibernateIdentityObjectType("User");
em.persist(userType);
- HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType);
+ HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType, realm);
em.persist(user1);
- HibernateIdentityObject user2 = new HibernateIdentityObject("user2",
userType);
+ HibernateIdentityObject user2 = new HibernateIdentityObject("user2",
userType, realm);
em.persist(user2);
em.getTransaction().commit();
@@ -183,7 +193,7 @@
try
{
- HibernateIdentityObject user3 = new HibernateIdentityObject("user2",
userType);
+ HibernateIdentityObject user3 = new HibernateIdentityObject("user2",
userType, realm);
em.persist(user3);
// Should fail
@@ -199,13 +209,13 @@
em.getTransaction().begin();
- HibernateIdentityObject user4 = new HibernateIdentityObject("group1",
userType);
+ HibernateIdentityObject user4 = new HibernateIdentityObject("group1",
userType, realm);
em.persist(user4);
- HibernateIdentityObject group1 = new HibernateIdentityObject("group1",
groupType);
+ HibernateIdentityObject group1 = new HibernateIdentityObject("group1",
groupType, realm);
em.persist(group1);
- HibernateIdentityObject group2 = new HibernateIdentityObject("group2",
groupType);
+ HibernateIdentityObject group2 = new HibernateIdentityObject("group2",
groupType, realm);
em.persist(group2);
em.flush();
@@ -213,7 +223,7 @@
try
{
- HibernateIdentityObject group3 = new HibernateIdentityObject("group2",
groupType);
+ HibernateIdentityObject group3 = new HibernateIdentityObject("group2",
groupType, realm);
em.persist(group3);
// Should fail
@@ -227,7 +237,7 @@
em.getTransaction().begin();
- HibernateIdentityObject group4 = new HibernateIdentityObject("user1",
groupType);
+ HibernateIdentityObject group4 = new HibernateIdentityObject("user1",
groupType, realm);
em.persist(group4);
em.getTransaction().commit();
@@ -244,9 +254,12 @@
em.getTransaction().begin();
+ HibernateRealm realm = new HibernateRealm("default");
+ em.persist(realm);
+
HibernateIdentityObjectType userType = new
HibernateIdentityObjectType("User");
em.persist(userType);
- HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType);
+ HibernateIdentityObject user1 = new HibernateIdentityObject("user1",
userType, realm);
em.persist(user1);
Set<String> values1 = new HashSet<String>();
@@ -264,7 +277,7 @@
em.getTransaction().begin();
- user1 = em.find(HibernateIdentityObject.class, user1.getId());
+ user1 = em.find(HibernateIdentityObject.class, new Long(user1.getId()));
assertEquals(2, user1.getAttributes().entrySet().size() );
assertNotNull(user1.getAttributes().get("simple1"));
assertEquals(3, user1.getAttributes().get("simple1").length);
Modified:
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateTestBase.java
===================================================================
---
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateTestBase.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-impl/src/test/java/org/jboss/identity/impl/store/hibernate/HibernateTestBase.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -42,7 +42,7 @@
{
private static Logger logger =
Logger.getLogger(HibernateModelTestCase.class.getName());
- private HibernateTestSupport hibernateSupport = new
HibernateTestSupport("unit-testing-jpa", "jboss-identity-model");
+ private HibernateTestSupport hibernateSupport = new
HibernateTestSupport("unit-testing-jpa", "jboss-identity-model1");
protected HibernateEntityManager em;
Modified: trunk/identity-impl/src/test/resources/META-INF/persistence.xml
===================================================================
--- trunk/identity-impl/src/test/resources/META-INF/persistence.xml 2008-11-12 14:36:05
UTC (rev 122)
+++ trunk/identity-impl/src/test/resources/META-INF/persistence.xml 2008-11-18 21:49:18
UTC (rev 123)
@@ -9,6 +9,7 @@
<provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <class>org.jboss.identity.impl.model.hibernate.HibernateRealm</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObject</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectAttribute</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectType</class>
@@ -22,7 +23,7 @@
<property name="hibernate.connection.url"
value="jdbc:hsqldb:mem:unit-testing-jpa1"/>
<property name="hibernate.connection.driver_class"
value="org.hsqldb.jdbcDriver"/>
<property name="hibernate.dialect"
value="org.hibernate.dialect.HSQLDialect"/>
- <property name="hibernate.hbm2ddl.auto"
value="update"/>
+ <property name="hibernate.hbm2ddl.auto"
value="create"/>
<property name="hibernate.connection.username"
value="sa"/>
<property name="hibernate.connection.password"
value=""/>
</properties>
@@ -34,6 +35,7 @@
<provider>org.hibernate.ejb.HibernatePersistence</provider>
+ <class>org.jboss.identity.impl.model.hibernate.HibernateRealm</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObject</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectAttribute</class>
<class>org.jboss.identity.impl.model.hibernate.HibernateIdentityObjectType</class>
Modified:
trunk/identity-spi/src/main/java/org/jboss/identity/spi/store/IdentityStore.java
===================================================================
---
trunk/identity-spi/src/main/java/org/jboss/identity/spi/store/IdentityStore.java 2008-11-12
14:36:05 UTC (rev 122)
+++
trunk/identity-spi/src/main/java/org/jboss/identity/spi/store/IdentityStore.java 2008-11-18
21:49:18 UTC (rev 123)
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Set;
+import java.util.Map;
import org.jboss.identity.spi.model.IdentityObject;
import org.jboss.identity.spi.model.IdentityObjectType;
@@ -76,10 +77,25 @@
* @return
* @throws IdentityException
*/
- IdentityObject createIdentityObject(IdentityStoreInvocationContext invocationCtx,
String name, IdentityObjectType identityObjectType) throws IdentityException;
+ IdentityObject createIdentityObject(IdentityStoreInvocationContext invocationCtx,
+ String name,
+ IdentityObjectType identityObjectType) throws
IdentityException;
+ /**
+ * Create new identity with a given name
+ *
+ * @param invocationCtx
+ * @param name
+ * @param identityObjectType
+ * @return
+ * @throws IdentityException
+ */
+ IdentityObject createIdentityObject(IdentityStoreInvocationContext invocationCtx,
+ String name,
+ IdentityObjectType identityObjectType,
+ Map<String, String[]> attributes) throws
IdentityException;
- //TODO: create method with a set of attributes (for required attrs)
+
/**
Modified: trunk/parent/pom.xml
===================================================================
--- trunk/parent/pom.xml 2008-11-12 14:36:05 UTC (rev 122)
+++ trunk/parent/pom.xml 2008-11-18 21:49:18 UTC (rev 123)
@@ -45,7 +45,7 @@
<disableXmlReport>false</disableXmlReport>
<testFailureIgnore>false</testFailureIgnore>
<includes>
- <include>**/APITestCase.java</include>
+ <include>**/*TestCase.java</include>
</includes>
<forkMode>pertest</forkMode>
<argLine>${surefire.jvm.args}</argLine>