mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-26 13:53:14 +00:00
Refactored. NB: This code is unsupported and illustrates non-anemic domain objects that do not leverage transparent persistence capabilities (I recommend you use transparent persistence capabilities where possible - I hope to check in different packages with new patterns in due course).
This commit is contained in:
parent
12c78791de
commit
ed03eee2df
@ -0,0 +1,55 @@
|
|||||||
|
package org.acegisecurity.domain.service;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
import org.acegisecurity.domain.PersistableEntity;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts between a PersistableEntity's internal ID (expressed as a String
|
||||||
|
* and the corresponding PersistableEntity sourced from an ImmutableManager).
|
||||||
|
*
|
||||||
|
* @author Ben Alex
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ImmutableManagerEditor extends PropertyEditorSupport {
|
||||||
|
protected final transient Log log = LogFactory.getLog(getClass());
|
||||||
|
private ImmutableManager immutableManager;
|
||||||
|
|
||||||
|
private final boolean fallbackToNull;
|
||||||
|
|
||||||
|
public ImmutableManagerEditor(ImmutableManager immutableManager, boolean fallbackToNull) {
|
||||||
|
Assert.notNull(immutableManager, "ImmutableManager required");
|
||||||
|
this.immutableManager = immutableManager;
|
||||||
|
this.fallbackToNull = fallbackToNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
if (this.fallbackToNull && !StringUtils.hasText(text)) {
|
||||||
|
// treat empty String as null value
|
||||||
|
setValue(null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Long id = new Long(text);
|
||||||
|
PersistableEntity value = immutableManager.readId(id);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Property Editor converted '" + text + "' to object: " + value);
|
||||||
|
}
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
String result = null;
|
||||||
|
if (getValue() != null) {
|
||||||
|
result = ((PersistableEntity) getValue()).getInternalId().toString();
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled())
|
||||||
|
log.debug("Property Editor returning: " + result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package org.acegisecurity.domain.util;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
public class EnumEditor extends PropertyEditorSupport {
|
||||||
|
protected final transient Log log = LogFactory.getLog(getClass());
|
||||||
|
|
||||||
|
private final Class<? extends Enum> enumClass;
|
||||||
|
|
||||||
|
private final boolean fallbackToNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new EnumEditor, which can create an Enum by retrieving
|
||||||
|
* the map of enum keys.
|
||||||
|
*
|
||||||
|
* <p>The fallbackToNull indicates whether null should be returned if
|
||||||
|
* a null String is provided to the property editor or if the provided
|
||||||
|
* String could not be used to locate an Enum. If set to true, null
|
||||||
|
* will be returned. If set to false, IllegalArgumentException will be thrown.
|
||||||
|
*/
|
||||||
|
public <E extends Enum<E>> EnumEditor(Class<E> enumClass, boolean fallbackToNull) {
|
||||||
|
this.enumClass = enumClass;
|
||||||
|
this.fallbackToNull = fallbackToNull;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the Enum from the given text.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
if (this.fallbackToNull && !StringUtils.hasText(text)) {
|
||||||
|
// treat empty String as null value
|
||||||
|
setValue(null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Enum value = Enum.valueOf(this.enumClass, text);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Property Editor converted '" + text + "' to object: " + value);
|
||||||
|
}
|
||||||
|
setValue(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
String result = null;
|
||||||
|
if (getValue() != null) {
|
||||||
|
result = ((Enum) getValue()).name();
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled())
|
||||||
|
log.debug("Property Editor returning: " + result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user