Author: bdekruijff at gmail.com
Date: Thu Jan 13 19:58:35 2011
New Revision: 626
Log:
AMDATU-207 refactorred useradminstore-fs to use fsstorage lib
Added:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStore.java
- copied, changed from r622,
/trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
Removed:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleNameList.java
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSUtil.java
Modified:
trunk/amdatu-core/useradminstore-fs/pom.xml
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSGroup.java
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRole.java
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSUser.java
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/osgi/FSUserAdminStorageProviderActivatorTest.java
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/service/mock/MockGroup.java
Modified: trunk/amdatu-core/useradminstore-fs/pom.xml
==============================================================================
--- trunk/amdatu-core/useradminstore-fs/pom.xml (original)
+++ trunk/amdatu-core/useradminstore-fs/pom.xml Thu Jan 13 19:58:35 2011
@@ -15,6 +15,12 @@
<dependencies>
<dependency>
+ <groupId>org.amdatu.libraries</groupId>
+ <artifactId>fsstorage</artifactId>
+ <version>${platform.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>org.ops4j.pax.useradmin</groupId>
<artifactId>pax-useradmin-service</artifactId>
<scope>provided</scope>
@@ -30,6 +36,7 @@
<instructions>
<Bundle-Activator>org.amdatu.core.useradminstore.fs.osgi.FSUserAdminStorageProviderActivator</Bundle-Activator>
<Bundle-SymbolicName>org.amdatu.core.useradminstore-fs</Bundle-SymbolicName>
+ <Embed-Dependency>*;scope=compile</Embed-Dependency>
</instructions>
</configuration>
</plugin>
Modified:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSGroup.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSGroup.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSGroup.java
Thu Jan 13 19:58:35 2011
@@ -31,7 +31,6 @@
public FSGroup(final Group group) {
super(group);
- m_type = Role.GROUP;
Role[] members = group.getMembers();
if (m_members == null) {
m_members = new HashMap<String, Role>();
@@ -54,7 +53,11 @@
public FSGroup(final String name, final Dictionary properties, final
Dictionary credentials) {
super(name, properties, credentials);
- m_type = Role.GROUP;
+ }
+
+ @Override
+ public int getType() {
+ return Role.GROUP;
}
public boolean addMember(Role role) {
Modified:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRole.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRole.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRole.java
Thu Jan 13 19:58:35 2011
@@ -19,14 +19,18 @@
import java.util.Dictionary;
import java.util.Hashtable;
+import org.amdatu.libraries.fsstorage.FSStoreEntity;
import org.osgi.service.useradmin.Role;
-public abstract class FSRole implements Role {
+public abstract class FSRole implements Role, FSStoreEntity {
- protected int m_type;
protected String m_name;
protected Dictionary m_properties;
+ public String getId() {
+ return m_name;
+ }
+
public String getName() {
return m_name;
}
@@ -36,7 +40,7 @@
}
public int getType() {
- return m_type;
+ return Role.ROLE;
}
public void setProperties(Dictionary dictionary) {
Modified:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
Thu Jan 13 19:58:35 2011
@@ -17,211 +17,22 @@
package org.amdatu.core.useradminstore.fs.internal;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.ops4j.pax.useradmin.service.spi.StorageException;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-
-public final class FSRoleStorage {
-
- private final File m_file;
- private final Map<String, FSRole> m_roles;
-
- public FSRoleStorage(final File file)
- throws StorageException {
- m_file = file;
- m_roles = new HashMap<String, FSRole>();
- try {
- readRoles();
- }
- catch (IOException e) {
- throw new StorageException(e.getMessage());
- }
- }
-
- public void save() throws StorageException {
- try {
- writeRoles();
- }
- catch (IOException e) {
- throw new StorageException(e.getMessage());
- }
- }
-
- public FSRole getRole(final String roleName) {
- return m_roles.get(roleName);
- }
- public FSRole addRole(final FSRole role) {
- return m_roles.put(role.getName(), role);
- }
-
- public FSRole removeRole(final FSRole role) {
- return m_roles.remove(role.getName());
- }
-
- private void readRoles() throws IOException {
- if (m_file.exists()) {
- FileInputStream fis = null;
- ObjectInputStream ois = null;
- try {
- fis = new FileInputStream(m_file);
- ois = new ObjectInputStream(fis);
- final int numberOfUsers = ois.readInt();
- for (int i = 0; i < numberOfUsers; i++) {
- FSRole role = readRole(ois);
- m_roles.put(role.getName(), role);
- }
- }
- finally {
- FSUtil.closeInputStreamsSafely(ois, fis);
- }
- }
- }
+import org.amdatu.libraries.fsstorage.FSStorageBase;
- private FSRole readRole(final ObjectInputStream ois) throws IOException,
- UnsupportedEncodingException {
+public class FSRoleStorage extends FSStorageBase<FSRoleStore, FSRole> {
- final int roleType = ois.readInt();
- final String name = FSUtil.readString(ois);
- final Dictionary properties = readDictionary(ois);
- final Dictionary credentials = readDictionary(ois);
-
- if (roleType == Role.USER) {
- return new FSUser(name, properties, credentials);
- }
- else if (roleType == Role.GROUP) {
- FSGroup group = new FSGroup(name, properties, credentials);
- group.setMembers(readMembers(ois));
- group.setRequiredMembers(readMembers(ois));
- return group;
- }
- else {
- throw new IllegalStateException("Deserialization error: illegal
roletype " + roleType);
- }
- }
-
- private List<FSRole> readMembers(final ObjectInputStream ois) throws
IOException {
- final int numberOfMembers = ois.readInt();
- if (numberOfMembers == 0) {
- return null;
- }
- final List<FSRole> members = new LinkedList<FSRole>();
- for (int i = 0; i < numberOfMembers; i++) {
- final int memberType = ois.readInt();
- if (memberType == Role.USER) {
- members.add(new FSUser(FSUtil.readString(ois), null, null));
- }
- else if (memberType == Role.GROUP) {
- members.add(new FSGroup(FSUtil.readString(ois), null, null));
- }
- else {
- throw new IllegalStateException("Deserialization error:
illegal membertype " + memberType);
- }
- }
- return members;
- }
-
- private Dictionary readDictionary(final ObjectInputStream ois) throws
IOException {
- final int numberOfEntries = ois.readInt();
- if (numberOfEntries == 0) {
- return null;
- }
- final Dictionary dictionary = new Hashtable();
- for (int j = 0; j < numberOfEntries; j++) {
- final String key = FSUtil.readString(ois);
- final int type = ois.readInt();
- switch (type) {
- case 0:
- byte[] byteValue = FSUtil.readBytes(ois);
- dictionary.put(key, byteValue);
- break;
- case 1:
- String stringValue = FSUtil.readString(ois);
- dictionary.put(key, stringValue);
- break;
- default:
- break;
- }
- }
- return dictionary;
- }
-
- private void writeRoles() throws IOException {
- FileOutputStream fos = null;
- ObjectOutputStream oos = null;
- try {
- fos = new FileOutputStream(m_file);
- oos = new ObjectOutputStream(fos);
- oos.writeInt(m_roles.size());
- for (FSRole role : m_roles.values()) {
- writeRole(oos, role);
- }
- oos.flush();
- }
- finally {
- FSUtil.closeOutputStreamsSafely(oos, fos);
- }
- }
-
- private void writeRole(ObjectOutputStream oos, FSRole role) throws
UnsupportedEncodingException,
- IOException {
- oos.writeInt(role.getType());
- FSUtil.writeString(oos, role.getName());
- writeDictionary(oos, role.getProperties());
- writeDictionary(oos, ((User) role).getCredentials());
- if (role.getType() == Role.GROUP) {
- writeMembers(oos, ((FSGroup) role).getMembers());
- writeMembers(oos, ((FSGroup) role).getRequiredMembers());
- }
- }
+ private static final String ENTITYLIST_FILENAME = "roleNameList.ser";
+ private static final String STORAGEFILE_PREFIX = "t_";
+ private static final String STORAGEFILE_POSTFIX = ".ser";
- private void writeMembers(final ObjectOutputStream oos, final Role[]
members) throws IOException {
- if (members == null) {
- oos.writeInt(0);
- }
- else {
- oos.writeInt(members.length);
- for (Role member : members) {
- oos.writeInt(member.getType());
- FSUtil.writeString(oos, member.getName());
- }
- }
+ public FSRoleStorage(File dataDirectory) throws IOException {
+ super(dataDirectory, ENTITYLIST_FILENAME, STORAGEFILE_PREFIX,
STORAGEFILE_POSTFIX);
}
- private void writeDictionary(final ObjectOutputStream oos, final
Dictionary dictionary) throws IOException {
- if (dictionary == null) {
- oos.writeInt(0);
- }
- else {
- oos.writeInt(dictionary.size());
- Enumeration keys = dictionary.keys();
- while (keys.hasMoreElements()) {
- String key = (String) keys.nextElement();
- FSUtil.writeString(oos, key);
- Object value = dictionary.get(key);
- if (value instanceof byte[]) {
- oos.writeInt(0);
- FSUtil.writeBytes(oos, (byte[]) value);
- }
- else if (value instanceof String) {
- oos.writeInt(1);
- FSUtil.writeString(oos, (String) value);
- }
- }
- }
+ @Override
+ protected FSRoleStore newFSStore(File file) throws IOException {
+ return new FSRoleStore(file);
}
-}
+}
\ No newline at end of file
Copied:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStore.java
(from r622,
/trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java)
==============================================================================
---
/trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStorage.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSRoleStore.java
Thu Jan 13 19:58:35 2011
@@ -17,88 +17,32 @@
package org.amdatu.core.useradminstore.fs.internal;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
-import org.ops4j.pax.useradmin.service.spi.StorageException;
+import org.amdatu.libraries.fsstorage.FSStorageUtil;
+import org.amdatu.libraries.fsstorage.FSStoreBase;
+import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
-public final class FSRoleStorage {
+public final class FSRoleStore extends FSStoreBase<FSRole> {
- private final File m_file;
- private final Map<String, FSRole> m_roles;
-
- public FSRoleStorage(final File file)
- throws StorageException {
- m_file = file;
- m_roles = new HashMap<String, FSRole>();
- try {
- readRoles();
- }
- catch (IOException e) {
- throw new StorageException(e.getMessage());
- }
- }
-
- public void save() throws StorageException {
- try {
- writeRoles();
- }
- catch (IOException e) {
- throw new StorageException(e.getMessage());
- }
- }
-
- public FSRole getRole(final String roleName) {
- return m_roles.get(roleName);
- }
-
- public FSRole addRole(final FSRole role) {
- return m_roles.put(role.getName(), role);
- }
-
- public FSRole removeRole(final FSRole role) {
- return m_roles.remove(role.getName());
+ public FSRoleStore(File file) throws IOException {
+ super(file);
}
- private void readRoles() throws IOException {
- if (m_file.exists()) {
- FileInputStream fis = null;
- ObjectInputStream ois = null;
- try {
- fis = new FileInputStream(m_file);
- ois = new ObjectInputStream(fis);
- final int numberOfUsers = ois.readInt();
- for (int i = 0; i < numberOfUsers; i++) {
- FSRole role = readRole(ois);
- m_roles.put(role.getName(), role);
- }
- }
- finally {
- FSUtil.closeInputStreamsSafely(ois, fis);
- }
- }
- }
-
- private FSRole readRole(final ObjectInputStream ois) throws IOException,
+ protected FSRole readEntity(ObjectInputStream ois) throws IOException,
UnsupportedEncodingException {
-
- final int roleType = ois.readInt();
- final String name = FSUtil.readString(ois);
- final Dictionary properties = readDictionary(ois);
- final Dictionary credentials = readDictionary(ois);
+ int roleType = ois.readInt();
+ String name = FSStorageUtil.readString(ois);
+ Dictionary<String, Object> properties =
FSStorageUtil.readDictionary(ois);
+ Dictionary<String, Object> credentials =
FSStorageUtil.readDictionary(ois);
if (roleType == Role.USER) {
return new FSUser(name, properties, credentials);
@@ -114,6 +58,18 @@
}
}
+ protected void writeEntity(ObjectOutputStream oos, FSRole role) throws
UnsupportedEncodingException,
+ IOException {
+ oos.writeInt(role.getType());
+ FSStorageUtil.writeString(oos, role.getName());
+ FSStorageUtil.writeDictionary(oos, role.getProperties());
+ FSStorageUtil.writeDictionary(oos, ((User) role).getCredentials());
+ if (role.getType() == Role.GROUP) {
+ writeMembers(oos, ((Group) role).getMembers());
+ writeMembers(oos, ((Group) role).getRequiredMembers());
+ }
+ }
+
private List<FSRole> readMembers(final ObjectInputStream ois) throws
IOException {
final int numberOfMembers = ois.readInt();
if (numberOfMembers == 0) {
@@ -123,10 +79,10 @@
for (int i = 0; i < numberOfMembers; i++) {
final int memberType = ois.readInt();
if (memberType == Role.USER) {
- members.add(new FSUser(FSUtil.readString(ois), null, null));
+ members.add(new FSUser(FSStorageUtil.readString(ois), null,
null));
}
else if (memberType == Role.GROUP) {
- members.add(new FSGroup(FSUtil.readString(ois), null, null));
+ members.add(new FSGroup(FSStorageUtil.readString(ois), null,
null));
}
else {
throw new IllegalStateException("Deserialization error:
illegal membertype " + memberType);
@@ -135,60 +91,6 @@
return members;
}
- private Dictionary readDictionary(final ObjectInputStream ois) throws
IOException {
- final int numberOfEntries = ois.readInt();
- if (numberOfEntries == 0) {
- return null;
- }
- final Dictionary dictionary = new Hashtable();
- for (int j = 0; j < numberOfEntries; j++) {
- final String key = FSUtil.readString(ois);
- final int type = ois.readInt();
- switch (type) {
- case 0:
- byte[] byteValue = FSUtil.readBytes(ois);
- dictionary.put(key, byteValue);
- break;
- case 1:
- String stringValue = FSUtil.readString(ois);
- dictionary.put(key, stringValue);
- break;
- default:
- break;
- }
- }
- return dictionary;
- }
-
- private void writeRoles() throws IOException {
- FileOutputStream fos = null;
- ObjectOutputStream oos = null;
- try {
- fos = new FileOutputStream(m_file);
- oos = new ObjectOutputStream(fos);
- oos.writeInt(m_roles.size());
- for (FSRole role : m_roles.values()) {
- writeRole(oos, role);
- }
- oos.flush();
- }
- finally {
- FSUtil.closeOutputStreamsSafely(oos, fos);
- }
- }
-
- private void writeRole(ObjectOutputStream oos, FSRole role) throws
UnsupportedEncodingException,
- IOException {
- oos.writeInt(role.getType());
- FSUtil.writeString(oos, role.getName());
- writeDictionary(oos, role.getProperties());
- writeDictionary(oos, ((User) role).getCredentials());
- if (role.getType() == Role.GROUP) {
- writeMembers(oos, ((FSGroup) role).getMembers());
- writeMembers(oos, ((FSGroup) role).getRequiredMembers());
- }
- }
-
private void writeMembers(final ObjectOutputStream oos, final Role[]
members) throws IOException {
if (members == null) {
oos.writeInt(0);
@@ -197,30 +99,7 @@
oos.writeInt(members.length);
for (Role member : members) {
oos.writeInt(member.getType());
- FSUtil.writeString(oos, member.getName());
- }
- }
- }
-
- private void writeDictionary(final ObjectOutputStream oos, final
Dictionary dictionary) throws IOException {
- if (dictionary == null) {
- oos.writeInt(0);
- }
- else {
- oos.writeInt(dictionary.size());
- Enumeration keys = dictionary.keys();
- while (keys.hasMoreElements()) {
- String key = (String) keys.nextElement();
- FSUtil.writeString(oos, key);
- Object value = dictionary.get(key);
- if (value instanceof byte[]) {
- oos.writeInt(0);
- FSUtil.writeBytes(oos, (byte[]) value);
- }
- else if (value instanceof String) {
- oos.writeInt(1);
- FSUtil.writeString(oos, (String) value);
- }
+ FSStorageUtil.writeString(oos, member.getName());
}
}
}
Modified:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSUser.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSUser.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/internal/FSUser.java
Thu Jan 13 19:58:35 2011
@@ -27,19 +27,22 @@
private Dictionary m_credentials;
public FSUser(final User user) {
- m_type = Role.USER;
m_name = user.getName();
m_properties = user.getProperties();
m_credentials = user.getCredentials();
}
public FSUser(final String name, final Dictionary properties, final
Dictionary credentials) {
- m_type = Role.USER;
m_name = name;
m_properties = properties;
m_credentials = credentials;
}
+ @Override
+ public int getType() {
+ return Role.USER;
+ }
+
public Object getcredential(final String key) {
if (m_credentials != null) {
return m_credentials.get(key);
Modified:
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
Thu Jan 13 19:58:35 2011
@@ -1,6 +1,7 @@
package org.amdatu.core.useradminstore.fs.service;
import java.io.File;
+import java.io.IOException;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Enumeration;
@@ -13,7 +14,6 @@
import org.amdatu.core.useradminstore.fs.internal.FSGroup;
import org.amdatu.core.useradminstore.fs.internal.FSRole;
-import org.amdatu.core.useradminstore.fs.internal.FSRoleNameList;
import org.amdatu.core.useradminstore.fs.internal.FSRoleStorage;
import org.amdatu.core.useradminstore.fs.internal.FSUser;
import org.ops4j.pax.useradmin.service.spi.StorageException;
@@ -37,75 +37,27 @@
public static final String CONFIGURATION_PID =
"org.amdatu.core.useradminstore-fs";
public final static String DATA_DIRECTORY = "datadir";
- // File naming constants
- private static final String ENTITYLIST_FILENAME = "roleNameList.ser";
- private static final String STORAGEFILE_PREFIX = "t_";
- private static final String STORAGEFILE_POSTFIX = ".ser";
-
- // DM injected (option)
private volatile LogService m_logService;
-
- // Storage directory
- private File m_dataDirectory;
-
- // Collaborator
- private FSRoleNameList m_roleNamelist;
-
- /*
- * Constructors
- */
+ private FSRoleStorage m_storage;
public FSUserAdminStorageProvider() throws StorageException {
}
- /*
- * Accessor methods
- */
-
- public synchronized File getDataDirectory() {
- return m_dataDirectory;
+ public FSRoleStorage getFSStorage() {
+ return m_storage;
}
- public synchronized void setDataDirectory(File dataDirectory) throws
StorageException {
- if (!dataDirectory.isAbsolute()) {
- File userDirectory = new File(System.getProperty("user.dir"));
- dataDirectory = new File(userDirectory, dataDirectory.getPath());
- }
- if (!((dataDirectory.exists() && dataDirectory.canRead() &&
dataDirectory.canWrite()) || dataDirectory
- .mkdirs())) {
- throw new StorageException("Unable to access data directory: "
- + dataDirectory.getAbsolutePath());
- }
- m_dataDirectory = dataDirectory;
- m_roleNamelist = new FSRoleNameList(new File(m_dataDirectory,
ENTITYLIST_FILENAME));
-
- if (m_logService != null)
- m_logService.log(LogService.LOG_DEBUG, "Datadirectory set to: " +
m_dataDirectory.getAbsolutePath());
- }
-
- /*
- * DM Service lifecycle
- */
-
public synchronized void start() throws StorageException {
- // by contract DM ConfigurationDependency contract dataDirectory has
- // been set through the updated method.
if (m_logService != null)
m_logService.log(LogService.LOG_INFO, "Filesystem UserAdmin
storage provider started");
}
public synchronized void stop() {
- m_roleNamelist = null;
-
if (m_logService != null)
m_logService.log(LogService.LOG_INFO, "Filesystem UserAdmin
storage provider stopped");
}
- /*
- * DM ManagedService
- */
-
- public synchronized void updated(Dictionary dictionary) throws
ConfigurationException {
+ public synchronized void updated(Dictionary<String, Object> dictionary)
throws ConfigurationException {
if (dictionary != null) {
String dataDirectoryName = (String) dictionary.get(DATA_DIRECTORY);
if (dataDirectoryName == null || "".equals(dataDirectoryName)) {
@@ -121,204 +73,258 @@
}
}
+ public synchronized void setDataDirectory(File dataDirectory) throws
StorageException {
+ if (!dataDirectory.isAbsolute()) {
+ File userDirectory = new File(System.getProperty("user.dir"));
+ dataDirectory = new File(userDirectory, dataDirectory.getPath());
+ }
+ if (!((dataDirectory.exists() && dataDirectory.canRead() &&
dataDirectory.canWrite()) || dataDirectory
+ .mkdirs())) {
+ throw new StorageException("Unable to access data directory: "
+ + dataDirectory.getAbsolutePath());
+ }
+ try {
+ m_storage = new FSRoleStorage(dataDirectory);
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
+ if (m_logService != null)
+ m_logService.log(LogService.LOG_DEBUG, "Datadirectory set to: "
+ + m_storage.getDataDirectory().getAbsolutePath());
+ }
+
/*
* PAX StorageProvider API
*/
- public synchronized boolean addMember(final Group group, final Role role)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole internalRole = internalRoleFile.getRole(group.getName());
- if (internalRole != null && internalRole.getType() == Role.GROUP) {
- ((FSGroup) internalRole).addMember(role);
- internalRoleFile.save();
- return true;
+ public boolean addMember(final Group group, final Role role) throws
StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(group.getName());
+ if (internalRole != null && internalRole.getType() == Role.GROUP) {
+ ((FSGroup) internalRole).addMember(role);
+ m_storage.addEntity(internalRole);
+ return true;
+ }
+ return false;
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- return false;
}
- public synchronized boolean addRequiredMember(Group group, Role role)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole internalRole = internalRoleFile.getRole(group.getName());
- if (internalRole != null && internalRole.getType() == Role.GROUP) {
- ((FSGroup) internalRole).addRequiredMember(role);
- internalRoleFile.save();
- return true;
+ public boolean addRequiredMember(Group group, Role role) throws
StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(group.getName());
+ if (internalRole != null && internalRole.getType() == Role.GROUP) {
+ ((FSGroup) internalRole).addRequiredMember(role);
+ m_storage.addEntity(internalRole);
+ return true;
+ }
+ return false;
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- return false;
}
- public synchronized void clearRoleAttributes(final Role role) throws
StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(role.getName());
- final FSRole internalRole = internalRoleFile.getRole(role.getName());
- if (internalRole != null && internalRole.getProperties() != null) {
- internalRole.setProperties(null);
- internalRoleFile.save();
+ public void clearRoleAttributes(final Role role) throws StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(role.getName());
+ if (internalRole != null && internalRole.getProperties() != null) {
+ internalRole.setProperties(null);
+ m_storage.addEntity(internalRole);
+ }
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
}
- public synchronized void clearUserCredentials(final User user) throws
StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(user.getName());
- final FSRole internalRole = internalRoleFile.getRole(user.getName());
- if (internalRole != null && internalRole.getType() == Role.USER
- && ((FSUser) internalRole).getCredentials() != null) {
- ((FSUser) internalRole).setCredentials(null);
- internalRoleFile.save();
+ public void clearUserCredentials(final User user) throws StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(user.getName());
+ if (internalRole != null && internalRole.getType() == Role.USER
+ && ((FSUser) internalRole).getCredentials() !=
null) {
+ ((FSUser) internalRole).setCredentials(null);
+ m_storage.addEntity(internalRole);
+ }
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
}
- public synchronized Group createGroup(final UserAdminFactory
userAdminFactory, final String groupName)
+ public Group createGroup(final UserAdminFactory userAdminFactory, final
String groupName)
throws StorageException {
- // FIXME guard against overwrite?
+ checkState();
final Group group = userAdminFactory.createGroup(groupName, null,
null);
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole storedRole = internalRoleFile.addRole(new FSGroup(group));
- if (storedRole == null) {
- m_roleNamelist.addRoleName(group.getName());
+ try {
+ m_storage.addEntity(new FSGroup(group));
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- internalRoleFile.save();
return group;
}
- public synchronized User createUser(final UserAdminFactory
userAdminFactory, final String userName)
+ public User createUser(final UserAdminFactory userAdminFactory, final
String userName)
throws StorageException {
- // FIXME guard against overwrite?
+ checkState();
final User user = userAdminFactory.createUser(userName, null, null);
- final FSRoleStorage internalRoleFile = getStorageFile(user.getName());
- final FSRole storedRole = internalRoleFile.addRole(new FSUser(user));
- if (storedRole == null) {
- m_roleNamelist.addRoleName(user.getName());
+ try {
+ m_storage.addEntity(new FSUser(user));
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- internalRoleFile.save();
return user;
}
public boolean deleteRole(Role role) throws StorageException {
- // FIXME ugly construct
- final FSRoleStorage internalRoleFile = getStorageFile(role.getName());
- final FSRole internalRole = internalRoleFile.getRole(role.getName());
- if (internalRole != null) {
- if (internalRole.getType() == Role.USER) {
- internalRoleFile.removeRole(new FSUser((User) role));
- }
- else if (internalRole.getType() == Role.GROUP) {
- internalRoleFile.removeRole(new FSGroup((Group) role));
- }
- m_roleNamelist.removeRoleName(role.getName());
- internalRoleFile.save();
- return true;
+ checkState();
+ try {
+ FSRole internalRole = m_storage.removeEntity(role.getName());
+ if (internalRole != null)
+ return true;
+ return false;
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- return false;
}
- public synchronized Collection<Role> findRoles(final UserAdminFactory
userAdminFactory, final String filterString)
+ public Collection<Role> findRoles(final UserAdminFactory userAdminFactory,
final String filterString)
throws StorageException {
+ checkState();
List<Role> matchingRoles = new LinkedList<Role>();
try {
+ List<FSRole> internalRoles = m_storage.getAll();
Filter filter = FrameworkUtil.createFilter(filterString);
- List<String> allRoleNames = m_roleNamelist.getAll();
- for (String roleName : allRoleNames) {
- Role role = getRole(userAdminFactory, roleName);
- if (filter.match(role.getProperties())) {
- matchingRoles.add(role);
+ for (FSRole internalRole : internalRoles) {
+ if (filter.match(internalRole.getProperties())) {
+ matchingRoles.add(internalRole);
}
}
}
catch (InvalidSyntaxException e) {
throw new StorageException(e.getMessage());
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
return matchingRoles;
}
- public synchronized Collection<Role> getMembers(final UserAdminFactory
userAdminFactory, final Group group)
+ public Collection<Role> getMembers(final UserAdminFactory
userAdminFactory, final Group group)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole internalRole = internalRoleFile.getRole(group.getName());
- if (internalRole != null && internalRole.getType() == Role.GROUP) {
- Set<Role> members = new HashSet<Role>();
- for (Role role : ((FSGroup) internalRole).getMembers()) {
- if (role.getType() == Role.USER) {
- User newuser =
- userAdminFactory.createUser(role.getName(),
dictionaryToMap(role.getProperties()),
- dictionaryToMap(((User)
role).getCredentials()));
- members.add(newuser);
- }
- else if (role.getType() == Role.GROUP) {
- Group newgroup =
- userAdminFactory.createGroup(role.getName(),
dictionaryToMap(role.getProperties()),
- dictionaryToMap(((Group)
role).getCredentials()));
- members.add(newgroup);
+ checkState();
+ Set<Role> members = new HashSet<Role>();
+ try {
+ FSRole internalRole = m_storage.getEntity(group.getName());
+ if (internalRole != null && internalRole.getType() == Role.GROUP) {
+ for (Role role : ((FSGroup) internalRole).getMembers()) {
+ if (role.getType() == Role.USER) {
+ User newuser =
+
userAdminFactory.createUser(role.getName(),
dictionaryToMap(role.getProperties()),
+ dictionaryToMap(((User)
role).getCredentials()));
+ members.add(newuser);
+ }
+ else if (role.getType() == Role.GROUP) {
+ Group newgroup =
+
userAdminFactory.createGroup(role.getName(),
dictionaryToMap(role.getProperties()),
+ dictionaryToMap(((Group)
role).getCredentials()));
+ members.add(newgroup);
+ }
}
}
- return members;
}
- return new HashSet<Role>();
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
+ return members;
}
- public synchronized Collection<Role> getRequiredMembers(final
UserAdminFactory userAdminFactory, final Group group)
+ public Collection<Role> getRequiredMembers(final UserAdminFactory
userAdminFactory, final Group group)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole internalRole = internalRoleFile.getRole(group.getName());
+ checkState();
Set<Role> members = new HashSet<Role>();
- if (internalRole != null && internalRole.getType() == Role.GROUP) {
- for (Role role : ((FSGroup) internalRole).getRequiredMembers()) {
- if (role.getType() == Role.USER) {
- User newuser =
- userAdminFactory.createUser(role.getName(),
dictionaryToMap(role.getProperties()),
- dictionaryToMap(((User)
role).getCredentials()));
- members.add(newuser);
- }
- else if (role.getType() == Role.GROUP) {
-
- Group newgroup =
userAdminFactory.createGroup(internalRole.getName(),
- dictionaryToMap(internalRole.getProperties()),
- dictionaryToMap(((Group)
internalRole).getCredentials()));
- for (Role member : ((FSGroup) internalRole).getMembers()) {
- newgroup.addMember(getRole(userAdminFactory,
member.getName()));
+ try {
+ FSRole internalRole = m_storage.getEntity(group.getName());
+ if (internalRole != null && internalRole.getType() == Role.GROUP) {
+ for (Role role : ((FSGroup)
internalRole).getRequiredMembers()) {
+ if (role.getType() == Role.USER) {
+ User newuser =
+
userAdminFactory.createUser(role.getName(),
dictionaryToMap(role.getProperties()),
+ dictionaryToMap(((User)
role).getCredentials()));
+ members.add(newuser);
}
- for (Role member : ((FSGroup)
internalRole).getRequiredMembers()) {
- newgroup.addRequiredMember(getRole(userAdminFactory,
member.getName()));
+ else if (role.getType() == Role.GROUP) {
+
+ Group newgroup =
userAdminFactory.createGroup(internalRole.getName(),
+ dictionaryToMap(internalRole.getProperties()),
+ dictionaryToMap(((Group)
internalRole).getCredentials()));
+ for (Role member : ((FSGroup)
internalRole).getMembers()) {
+ newgroup.addMember(getRole(userAdminFactory,
member.getName()));
+ }
+ for (Role member : ((FSGroup)
internalRole).getRequiredMembers()) {
+
newgroup.addRequiredMember(getRole(userAdminFactory, member.getName()));
+ }
+ members.add(newgroup);
}
- members.add(newgroup);
}
}
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
return members;
}
- public synchronized Role getRole(final UserAdminFactory userAdminFactory,
final String roleName)
+ public Role getRole(final UserAdminFactory userAdminFactory, final String
roleName)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(roleName);
- final FSRole internalRole = internalRoleFile.getRole(roleName);
- if (internalRole != null) {
- if (internalRole.getType() == Role.USER) {
- return userAdminFactory.createUser(internalRole.getName(),
- dictionaryToMap(internalRole.getProperties()),
- dictionaryToMap(((User)
internalRole).getCredentials()));
- }
- else if (internalRole.getType() == Role.GROUP) {
- Group newgroup =
userAdminFactory.createGroup(internalRole.getName(),
- dictionaryToMap(internalRole.getProperties()),
- dictionaryToMap(((Group) internalRole).getCredentials()));
- for (Role member : ((FSGroup) internalRole).getMembers()) {
- newgroup.addMember(getRole(userAdminFactory,
member.getName()));
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(roleName);
+ if (internalRole != null) {
+ if (internalRole.getType() == Role.USER) {
+ return userAdminFactory.createUser(internalRole.getName(),
+ dictionaryToMap(internalRole.getProperties()),
+ dictionaryToMap(((User)
internalRole).getCredentials()));
}
- for (Role member : ((FSGroup)
internalRole).getRequiredMembers()) {
- newgroup.addRequiredMember(getRole(userAdminFactory,
member.getName()));
+ else if (internalRole.getType() == Role.GROUP) {
+ Group newgroup =
userAdminFactory.createGroup(internalRole.getName(),
+ dictionaryToMap(internalRole.getProperties()),
+ dictionaryToMap(((Group)
internalRole).getCredentials()));
+ for (Role member : ((FSGroup) internalRole).getMembers()) {
+ newgroup.addMember(getRole(userAdminFactory,
member.getName()));
+ }
+ for (Role member : ((FSGroup)
internalRole).getRequiredMembers()) {
+ newgroup.addRequiredMember(getRole(userAdminFactory,
member.getName()));
+ }
+ return newgroup;
}
- return newgroup;
}
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
return null;
}
- public synchronized User getUser(final UserAdminFactory userAdminFactory,
final String key, final String value)
+ public User getUser(final UserAdminFactory userAdminFactory, final String
key, final String value)
throws StorageException {
+ checkState();
List<User> matchingUsers = new LinkedList<User>();
try {
Filter filter = FrameworkUtil.createFilter("(" + key + "=" + value
+ ")");
- List<String> allRoleNames = m_roleNamelist.getAll();
- for (String roleName : allRoleNames) {
- Role role = getRole(userAdminFactory, roleName);
+ List<FSRole> fsRoles = m_storage.getAll();
+ for (FSRole fsRole : fsRoles) {
+ Role role = getRole(userAdminFactory, fsRole.getId());
if (role.getType() == Role.USER &&
filter.match(role.getProperties())) {
matchingUsers.add((User) role);
}
@@ -327,73 +333,92 @@
catch (InvalidSyntaxException e) {
throw new StorageException(e.getMessage());
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
if (matchingUsers.size() == 1) {
return matchingUsers.get(0);
}
return null;
}
- public synchronized boolean removeMember(final Group group, final Role
role) throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(group.getName());
- final FSRole internalRole = internalRoleFile.getRole(group.getName());
- if (internalRole != null && internalRole.getType() == Role.GROUP
- && ((FSGroup) internalRole).removeMember(role)) {
- internalRoleFile.save();
- return true;
+ public boolean removeMember(final Group group, final Role role) throws
StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(group.getName());
+ if (internalRole != null && internalRole.getType() == Role.GROUP
+ && ((FSGroup)
internalRole).removeMember(role)) {
+ m_storage.addEntity(internalRole);
+ return true;
+ }
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+
}
return false;
}
- public synchronized void removeRoleAttribute(final Role role, final String
key) throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(role.getName());
- final FSRole internalRole = internalRoleFile.getRole(role.getName());
- if (internalRole != null) {
- Object value = internalRole.getProperties().remove(key);
- if (value != null) {
- internalRoleFile.save();
+ public void removeRoleAttribute(final Role role, final String key) throws
StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(role.getName());
+ if (internalRole != null) {
+ Object value = internalRole.getProperties().remove(key);
+ if (value != null) {
+ m_storage.addEntity(internalRole);
+ }
}
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
}
- public synchronized void removeUserCredential(final User user, final
String key) throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(user.getName());
- final FSRole internalRole = internalRoleFile.getRole(user.getName());
- if (internalRole != null && internalRole.getType() == Role.USER) {
- Object value = ((FSUser) internalRole).removeCredential(key);
- if (value != null) {
- internalRoleFile.save();
+ public void removeUserCredential(final User user, final String key) throws
StorageException {
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(user.getName());
+ if (internalRole != null && internalRole.getType() == Role.USER) {
+ Object value = ((FSUser) internalRole).removeCredential(key);
+ if (value != null) {
+ m_storage.addEntity(internalRole);
+ }
}
}
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
+ }
}
- public synchronized void setRoleAttribute(final Role role, final String
key, final Object value)
+ public void setRoleAttribute(final Role role, final String key, final
Object value)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(role.getName());
- final FSRole internalRole = internalRoleFile.getRole(role.getName());
- if (internalRole != null) {
- internalRole.setProperty(key, value);
- internalRoleFile.save();
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(role.getName());
+ if (internalRole != null) {
+ internalRole.setProperty(key, value);
+ m_storage.addEntity(internalRole);
+ }
+ }
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
}
- public synchronized void setUserCredential(final User user, final String
key, final Object value)
+ public void setUserCredential(final User user, final String key, final
Object value)
throws StorageException {
- final FSRoleStorage internalRoleFile = getStorageFile(user.getName());
- final FSRole internalRole = internalRoleFile.getRole(user.getName());
- if (internalRole != null && internalRole.getType() == Role.USER) {
- ((FSUser) internalRole).setCredential(key, value);
- internalRoleFile.save();
+ checkState();
+ try {
+ FSRole internalRole = m_storage.getEntity(user.getName());
+ if (internalRole != null && internalRole.getType() == Role.USER) {
+ ((FSUser) internalRole).setCredential(key, value);
+ m_storage.addEntity(internalRole);
+ }
}
- }
-
- private FSRoleStorage getStorageFile(final String entityId) throws
StorageException {
- final int hash = Math.abs(entityId.hashCode());
- final String subdirName = "" + (hash % 50);
- final File subdirFile = new File(m_dataDirectory, subdirName);
- if (!subdirFile.exists()) {
- subdirFile.mkdir();
+ catch (IOException e) {
+ throw new StorageException(e.getMessage());
}
- return new FSRoleStorage(new File(subdirFile, STORAGEFILE_PREFIX +
hash + STORAGEFILE_POSTFIX));
}
private Map<String, Object> dictionaryToMap(final Dictionary<String,
Object> dictionary) {
@@ -408,4 +433,10 @@
}
return map;
}
+
+ private void checkState() throws StorageException {
+ if (m_storage == null)
+ throw new StorageException("Storage backend is not configured");
+ }
+
}
\ No newline at end of file
Modified:
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/osgi/FSUserAdminStorageProviderActivatorTest.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/osgi/FSUserAdminStorageProviderActivatorTest.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/osgi/FSUserAdminStorageProviderActivatorTest.java
Thu Jan 13 19:58:35 2011
@@ -196,9 +196,10 @@
provider.createUser(new MockUserAdminFactory(), "Bram");
// assert that the correct storage directory was actually used
- Assert.assertEquals(((FSUserAdminStorageProvider)
provider).getDataDirectory().getAbsolutePath(),
+ Assert.assertEquals(
+ ((FSUserAdminStorageProvider)
provider).getFSStorage().getDataDirectory().getAbsolutePath(),
absolutebundleStorageDirectory.getAbsolutePath());
- String[] files = ((FSUserAdminStorageProvider)
provider).getDataDirectory().list();
+ String[] files = ((FSUserAdminStorageProvider)
provider).getFSStorage().getDataDirectory().list();
Assert.assertTrue(files.length > 0);
// checkerdiecheck
Modified:
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/service/mock/MockGroup.java
==============================================================================
---
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/service/mock/MockGroup.java
(original)
+++
trunk/amdatu-core/useradminstore-fs/src/test/java/org/amdatu/core/useradminstore/fs/service/mock/MockGroup.java
Thu Jan 13 19:58:35 2011
@@ -32,6 +32,11 @@
super(name, properties, credentials);
}
+ @Override
+ public int getType() {
+ return Role.GROUP;
+ }
+
public boolean addMember(Role role) {
if (m_members == null) {
m_members = new HashSet<Role>();