diff --git a/src/main/java/ch/eitchnet/privilege/i18n/AccessDeniedException.java b/src/main/java/ch/eitchnet/privilege/base/AccessDeniedException.java
similarity index 96%
rename from src/main/java/ch/eitchnet/privilege/i18n/AccessDeniedException.java
rename to src/main/java/ch/eitchnet/privilege/base/AccessDeniedException.java
index 818335103..0c8fa5283 100644
--- a/src/main/java/ch/eitchnet/privilege/i18n/AccessDeniedException.java
+++ b/src/main/java/ch/eitchnet/privilege/base/AccessDeniedException.java
@@ -17,7 +17,7 @@
* along with Privilege. If not, see .
*
*/
-package ch.eitchnet.privilege.i18n;
+package ch.eitchnet.privilege.base;
/**
* Exception thrown if access is denied during login, or if a certain privilege is not granted
diff --git a/src/main/java/ch/eitchnet/privilege/i18n/PrivilegeException.java b/src/main/java/ch/eitchnet/privilege/base/PrivilegeException.java
similarity index 97%
rename from src/main/java/ch/eitchnet/privilege/i18n/PrivilegeException.java
rename to src/main/java/ch/eitchnet/privilege/base/PrivilegeException.java
index 0f9fe5111..dc254418a 100644
--- a/src/main/java/ch/eitchnet/privilege/i18n/PrivilegeException.java
+++ b/src/main/java/ch/eitchnet/privilege/base/PrivilegeException.java
@@ -17,7 +17,7 @@
* along with Privilege. If not, see .
*
*/
-package ch.eitchnet.privilege.i18n;
+package ch.eitchnet.privilege.base;
/**
* Main {@link RuntimeException} thrown if something goes wrong in Privilege
diff --git a/src/main/java/ch/eitchnet/privilege/handler/DefaultEncryptionHandler.java b/src/main/java/ch/eitchnet/privilege/handler/DefaultEncryptionHandler.java
index 1dbd99a0f..fb614673e 100644
--- a/src/main/java/ch/eitchnet/privilege/handler/DefaultEncryptionHandler.java
+++ b/src/main/java/ch/eitchnet/privilege/handler/DefaultEncryptionHandler.java
@@ -28,9 +28,9 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.helper.HashHelper;
import ch.eitchnet.privilege.helper.XmlConstants;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
/**
*
diff --git a/src/main/java/ch/eitchnet/privilege/handler/DefaultPrivilegeHandler.java b/src/main/java/ch/eitchnet/privilege/handler/DefaultPrivilegeHandler.java
index 9cc7e9127..a152e8cbd 100644
--- a/src/main/java/ch/eitchnet/privilege/handler/DefaultPrivilegeHandler.java
+++ b/src/main/java/ch/eitchnet/privilege/handler/DefaultPrivilegeHandler.java
@@ -31,9 +31,9 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ch.eitchnet.privilege.base.AccessDeniedException;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.helper.ClassHelper;
-import ch.eitchnet.privilege.i18n.AccessDeniedException;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.Certificate;
import ch.eitchnet.privilege.model.PrivilegeRep;
import ch.eitchnet.privilege.model.Restrictable;
@@ -718,7 +718,8 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
DefaultPrivilegeHandler.logger.info("User " + username + " authenticated: " + session);
} catch (RuntimeException e) {
- DefaultPrivilegeHandler.logger.error("User " + username + " Failed to authenticate: " + e.getLocalizedMessage());
+ DefaultPrivilegeHandler.logger.error("User " + username + " Failed to authenticate: "
+ + e.getLocalizedMessage());
throw e;
} finally {
clearPassword(password);
@@ -786,7 +787,8 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
Role role = this.persistenceHandler.getRole(roleName);
if (role == null) {
- DefaultPrivilegeHandler.logger.error("No role is defined with name " + roleName + " which is configured for user " + user);
+ DefaultPrivilegeHandler.logger.error("No role is defined with name " + roleName
+ + " which is configured for user " + user);
continue;
}
@@ -1188,7 +1190,8 @@ public class DefaultPrivilegeHandler implements PrivilegeHandler {
this.sessionMap.put(sessionId, new CertificateSessionPair(session, systemUserCertificate));
// log
- DefaultPrivilegeHandler.logger.info("The system user " + systemUsername + " is logged in with session " + session);
+ DefaultPrivilegeHandler.logger.info("The system user " + systemUsername + " is logged in with session "
+ + session);
return systemUserCertificate;
}
diff --git a/src/main/java/ch/eitchnet/privilege/handler/PersistenceHandler.java b/src/main/java/ch/eitchnet/privilege/handler/PersistenceHandler.java
index bba8f20c0..498f6e8e7 100644
--- a/src/main/java/ch/eitchnet/privilege/handler/PersistenceHandler.java
+++ b/src/main/java/ch/eitchnet/privilege/handler/PersistenceHandler.java
@@ -118,7 +118,7 @@ public interface PersistenceHandler {
/**
* Informs this {@link PersistenceHandler} to persist any changes which need to be saved
*
- * @return true if changes were persisted successfully, false if something went wrong
+ * @return true if changes were persisted successfully, false if nothing needed to be persisted
*/
public boolean persist();
diff --git a/src/main/java/ch/eitchnet/privilege/handler/PrivilegeHandler.java b/src/main/java/ch/eitchnet/privilege/handler/PrivilegeHandler.java
index 4f2c54b2a..7889905e7 100644
--- a/src/main/java/ch/eitchnet/privilege/handler/PrivilegeHandler.java
+++ b/src/main/java/ch/eitchnet/privilege/handler/PrivilegeHandler.java
@@ -22,8 +22,8 @@ package ch.eitchnet.privilege.handler;
import java.util.List;
import java.util.Locale;
-import ch.eitchnet.privilege.i18n.AccessDeniedException;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.AccessDeniedException;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.model.Certificate;
import ch.eitchnet.privilege.model.PrivilegeRep;
import ch.eitchnet.privilege.model.Restrictable;
@@ -401,7 +401,7 @@ public interface PrivilegeHandler {
*
*
*
- * If the user is not the administrator, then a {@link ch.eitchnet.privilege.i18n.PrivilegeException} is thrown
+ * If the user is not the administrator, then a {@link ch.eitchnet.privilege.base.PrivilegeException} is thrown
*
*
* @param certificate
diff --git a/src/main/java/ch/eitchnet/privilege/handler/XmlPersistenceHandler.java b/src/main/java/ch/eitchnet/privilege/handler/XmlPersistenceHandler.java
index 2d5fc12b8..6ea6fda2e 100644
--- a/src/main/java/ch/eitchnet/privilege/handler/XmlPersistenceHandler.java
+++ b/src/main/java/ch/eitchnet/privilege/handler/XmlPersistenceHandler.java
@@ -35,9 +35,9 @@ import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.helper.XmlConstants;
import ch.eitchnet.privilege.helper.XmlHelper;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.UserState;
import ch.eitchnet.privilege.model.internal.Privilege;
import ch.eitchnet.privilege.model.internal.Role;
@@ -150,11 +150,13 @@ public class XmlPersistenceHandler implements PersistenceHandler {
throw new PrivilegeException("[" + PersistenceHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_MODEL_FILE + " is invalid");
}
+
// get model file
File modelFile = new File(this.modelPath);
boolean modelFileUnchanged = modelFile.exists() && modelFile.lastModified() == this.modelsFileDate;
- if (!(modelFileUnchanged && this.roleMapDirty && this.userMapDirty)) {
- XmlPersistenceHandler.logger.warn("Not persisting as current file is unchanged and model data is not dirty");
+ if (modelFileUnchanged && !this.roleMapDirty && !this.userMapDirty) {
+ XmlPersistenceHandler.logger
+ .warn("Not persisting as current file is unchanged and model data is not dirty");
return false;
}
@@ -181,19 +183,14 @@ public class XmlPersistenceHandler implements PersistenceHandler {
}
rootElement.add(rolesElement);
- // reset dirty states and return if something was dirty, false otherwise
- if (this.userMapDirty || this.roleMapDirty) {
- this.userMapDirty = false;
- this.roleMapDirty = false;
-
- return true;
-
- }
+ // now write the file
+ XmlHelper.writeElement(rootElement, modelFile);
+ // reset dirty states
this.userMapDirty = false;
this.roleMapDirty = false;
- return false;
+ return true;
}
/**
@@ -259,10 +256,13 @@ public class XmlPersistenceHandler implements PersistenceHandler {
* @see ch.eitchnet.privilege.handler.PersistenceHandler#initialize(java.util.Map)
*/
@Override
- public void initialize(Map parameterMap) {
+ public void initialize(Map paramsMap) {
+
+ // copy parameter map
+ this.parameterMap = Collections.unmodifiableMap(new HashMap(paramsMap));
// get and validate base bath
- String basePath = parameterMap.get(XmlConstants.XML_PARAM_BASE_PATH);
+ String basePath = this.parameterMap.get(XmlConstants.XML_PARAM_BASE_PATH);
File basePathF = new File(basePath);
if (!basePathF.exists() && !basePathF.isDirectory()) {
throw new PrivilegeException("[" + PersistenceHandler.class.getName() + "] Defined parameter "
@@ -270,7 +270,7 @@ public class XmlPersistenceHandler implements PersistenceHandler {
}
// get model file name
- String modelFileName = parameterMap.get(XmlConstants.XML_PARAM_MODEL_FILE);
+ String modelFileName = this.parameterMap.get(XmlConstants.XML_PARAM_MODEL_FILE);
if (modelFileName == null || modelFileName.isEmpty()) {
throw new PrivilegeException("[" + PersistenceHandler.class.getName() + "] Defined parameter "
+ XmlConstants.XML_PARAM_MODEL_FILE + " is invalid");
@@ -321,9 +321,11 @@ public class XmlPersistenceHandler implements PersistenceHandler {
for (Element roleElement : rolesElementList) {
String roleName = roleElement.getTextTrim();
if (roleName.isEmpty()) {
- XmlPersistenceHandler.logger.error("User " + username + " has a role defined with no name, Skipped.");
+ XmlPersistenceHandler.logger.error("User " + username
+ + " has a role defined with no name, Skipped.");
} else if (!this.roleMap.containsKey(roleName)) {
- XmlPersistenceHandler.logger.error("User " + username + " has a inexistant role " + roleName + ", Skipped.");
+ XmlPersistenceHandler.logger.error("User " + username + " has a inexistant role " + roleName
+ + ", Skipped.");
} else {
roles.add(roleName);
}
diff --git a/src/main/java/ch/eitchnet/privilege/helper/ClassHelper.java b/src/main/java/ch/eitchnet/privilege/helper/ClassHelper.java
index 41b10b775..5852805d8 100644
--- a/src/main/java/ch/eitchnet/privilege/helper/ClassHelper.java
+++ b/src/main/java/ch/eitchnet/privilege/helper/ClassHelper.java
@@ -19,7 +19,7 @@
*/
package ch.eitchnet.privilege.helper;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.PrivilegeException;
/**
* The {@link ClassHelper} class is a helper to instantiate classes using reflection
diff --git a/src/main/java/ch/eitchnet/privilege/helper/InitializationHelper.java b/src/main/java/ch/eitchnet/privilege/helper/InitializationHelper.java
index 94ff3d9d2..401cdb5fd 100644
--- a/src/main/java/ch/eitchnet/privilege/helper/InitializationHelper.java
+++ b/src/main/java/ch/eitchnet/privilege/helper/InitializationHelper.java
@@ -29,11 +29,11 @@ import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.handler.DefaultPrivilegeHandler;
import ch.eitchnet.privilege.handler.EncryptionHandler;
import ch.eitchnet.privilege.handler.PersistenceHandler;
import ch.eitchnet.privilege.handler.PrivilegeHandler;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.policy.PrivilegePolicy;
import ch.eitchnet.utils.helper.StringHelper;
diff --git a/src/main/java/ch/eitchnet/privilege/helper/XmlHelper.java b/src/main/java/ch/eitchnet/privilege/helper/XmlHelper.java
index eec3c9eb2..900c8ca87 100644
--- a/src/main/java/ch/eitchnet/privilege/helper/XmlHelper.java
+++ b/src/main/java/ch/eitchnet/privilege/helper/XmlHelper.java
@@ -37,7 +37,7 @@ import org.dom4j.io.XMLWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.PrivilegeException;
/**
* Helper class for performing XML based tasks using Dom4J
diff --git a/src/main/java/ch/eitchnet/privilege/model/Certificate.java b/src/main/java/ch/eitchnet/privilege/model/Certificate.java
index 87d30a3da..0d165e57c 100644
--- a/src/main/java/ch/eitchnet/privilege/model/Certificate.java
+++ b/src/main/java/ch/eitchnet/privilege/model/Certificate.java
@@ -23,8 +23,8 @@ import java.io.Serializable;
import java.util.Locale;
import java.util.Map;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.handler.PrivilegeHandler;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.internal.Session;
/**
diff --git a/src/main/java/ch/eitchnet/privilege/model/PrivilegeRep.java b/src/main/java/ch/eitchnet/privilege/model/PrivilegeRep.java
index e13d6a1f4..ca3b596d9 100644
--- a/src/main/java/ch/eitchnet/privilege/model/PrivilegeRep.java
+++ b/src/main/java/ch/eitchnet/privilege/model/PrivilegeRep.java
@@ -22,8 +22,8 @@ package ch.eitchnet.privilege.model;
import java.io.Serializable;
import java.util.Set;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.handler.PrivilegeHandler;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.internal.Privilege;
import ch.eitchnet.privilege.model.internal.Role;
import ch.eitchnet.privilege.policy.PrivilegePolicy;
diff --git a/src/main/java/ch/eitchnet/privilege/model/internal/Privilege.java b/src/main/java/ch/eitchnet/privilege/model/internal/Privilege.java
index c62456fbd..55c4fe1a5 100644
--- a/src/main/java/ch/eitchnet/privilege/model/internal/Privilege.java
+++ b/src/main/java/ch/eitchnet/privilege/model/internal/Privilege.java
@@ -23,8 +23,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.handler.PrivilegeHandler;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.PrivilegeRep;
import ch.eitchnet.privilege.model.Restrictable;
import ch.eitchnet.privilege.policy.PrivilegePolicy;
diff --git a/src/main/java/ch/eitchnet/privilege/model/internal/Role.java b/src/main/java/ch/eitchnet/privilege/model/internal/Role.java
index ab929ffde..d6825717b 100644
--- a/src/main/java/ch/eitchnet/privilege/model/internal/Role.java
+++ b/src/main/java/ch/eitchnet/privilege/model/internal/Role.java
@@ -23,7 +23,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.model.PrivilegeRep;
import ch.eitchnet.privilege.model.RoleRep;
diff --git a/src/main/java/ch/eitchnet/privilege/model/internal/Session.java b/src/main/java/ch/eitchnet/privilege/model/internal/Session.java
index 7e3bb8614..4abcd08d5 100644
--- a/src/main/java/ch/eitchnet/privilege/model/internal/Session.java
+++ b/src/main/java/ch/eitchnet/privilege/model/internal/Session.java
@@ -19,8 +19,8 @@
*/
package ch.eitchnet.privilege.model.internal;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.handler.PrivilegeHandler;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
import ch.eitchnet.privilege.model.Certificate;
/**
diff --git a/src/main/java/ch/eitchnet/privilege/model/internal/User.java b/src/main/java/ch/eitchnet/privilege/model/internal/User.java
index 9e12026ac..0405ecec3 100644
--- a/src/main/java/ch/eitchnet/privilege/model/internal/User.java
+++ b/src/main/java/ch/eitchnet/privilege/model/internal/User.java
@@ -26,7 +26,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.model.UserRep;
import ch.eitchnet.privilege.model.UserState;
@@ -91,9 +91,6 @@ public final class User {
if (username == null || username.isEmpty()) {
throw new PrivilegeException("No username defined!");
}
-
- // password may be null, meaning not able to login
-
if (firstname == null || firstname.isEmpty()) {
throw new PrivilegeException("No firstname defined!");
}
@@ -104,9 +101,10 @@ public final class User {
throw new PrivilegeException("No userState defined!");
}
+ // password may be null, meaning not able to login
// roles may be null, meaning not able to login and must be added later
-
- // local may be null, meaning use system default
+ // locale may be null, meaning use system default
+ // properties may be null, meaning no properties
this.userId = userId;
@@ -117,11 +115,20 @@ public final class User {
this.firstname = firstname;
this.surname = surname;
- this.roles = Collections.unmodifiableSet(roles);
+ if (roles == null)
+ this.roles = Collections.emptySet();
+ else
+ this.roles = Collections.unmodifiableSet(roles);
- this.locale = locale;
+ if (locale == null)
+ this.locale = Locale.getDefault();
+ else
+ this.locale = locale;
- this.propertyMap = Collections.unmodifiableMap(propertyMap);
+ if (propertyMap == null)
+ this.propertyMap = Collections.emptyMap();
+ else
+ this.propertyMap = Collections.unmodifiableMap(propertyMap);
}
/**
diff --git a/src/main/java/ch/eitchnet/privilege/policy/DefaultPrivilege.java b/src/main/java/ch/eitchnet/privilege/policy/DefaultPrivilege.java
index ebb061656..3db6be69b 100644
--- a/src/main/java/ch/eitchnet/privilege/policy/DefaultPrivilege.java
+++ b/src/main/java/ch/eitchnet/privilege/policy/DefaultPrivilege.java
@@ -19,8 +19,8 @@
*/
package ch.eitchnet.privilege.policy;
-import ch.eitchnet.privilege.i18n.AccessDeniedException;
-import ch.eitchnet.privilege.i18n.PrivilegeException;
+import ch.eitchnet.privilege.base.AccessDeniedException;
+import ch.eitchnet.privilege.base.PrivilegeException;
import ch.eitchnet.privilege.model.Restrictable;
import ch.eitchnet.privilege.model.internal.Privilege;
import ch.eitchnet.privilege.model.internal.Role;
diff --git a/src/main/java/ch/eitchnet/privilege/policy/PrivilegePolicy.java b/src/main/java/ch/eitchnet/privilege/policy/PrivilegePolicy.java
index 50fc79837..62041e636 100644
--- a/src/main/java/ch/eitchnet/privilege/policy/PrivilegePolicy.java
+++ b/src/main/java/ch/eitchnet/privilege/policy/PrivilegePolicy.java
@@ -19,7 +19,7 @@
*/
package ch.eitchnet.privilege.policy;
-import ch.eitchnet.privilege.i18n.AccessDeniedException;
+import ch.eitchnet.privilege.base.AccessDeniedException;
import ch.eitchnet.privilege.model.Restrictable;
import ch.eitchnet.privilege.model.internal.Privilege;
import ch.eitchnet.privilege.model.internal.Role;