[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences ...
Christian Bauer
christian at hibernate.org
Sat Dec 29 21:33:22 EST 2007
User: cbauer
Date: 07/12/29 21:33:22
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/preferences
WikiPreferenceProvider.java
WikiPreferenceValue.java
PreferenceValueUserType.java
Log:
Complete overhaul of the preferences system
Revision Changes Path
1.8 +185 -157 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiPreferenceProvider.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- WikiPreferenceProvider.java 19 Dec 2007 04:29:32 -0000 1.7
+++ WikiPreferenceProvider.java 30 Dec 2007 02:33:22 -0000 1.8
@@ -1,17 +1,15 @@
package org.jboss.seam.wiki.core.preferences;
-import org.hibernate.Session;
-import org.hibernate.validator.InvalidValue;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.*;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.model.User;
-import org.jboss.seam.wiki.core.model.WikiDocument;
-import org.jboss.seam.wiki.core.model.WikiNode;
-import org.jboss.seam.wiki.preferences.PreferenceComponent;
-import org.jboss.seam.wiki.preferences.PreferenceProperty;
+import org.jboss.seam.wiki.core.engine.WikiMacro;
import org.jboss.seam.wiki.preferences.PreferenceProvider;
import org.jboss.seam.wiki.preferences.PreferenceValue;
+import org.jboss.seam.wiki.preferences.PreferenceVisibility;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceRegistry;
import javax.persistence.EntityManager;
import java.io.Serializable;
@@ -21,205 +19,235 @@
* Implementation for the wiki, loads and stores <tt>WikiPreferenceValue</tt> objects.
* <p>
* This implementation tries to be as smart as possible and supports multi-level preference value overrides.
- * If you load values, they are automatically resolved for system, user, and instance levels. If you store
- * values, they are converted into the appropriate level (whatever the property setting of the meta model allows).
+ * If you load values, they are automatically resolved for system, user, and instance levels. If a value is
+ * present at system level but you want values for users, this implementation creates and returns those
+ * missing values. It will also persist them if you call <tt>store()</tt> and <tt>flush()</tt>.
+ * </p>
+ * <p>
+ * System and user-level values are loaded and stored in the database with the <tt>entityManager</tt>
+ * persistence context. be careful to only flush it if you want to after you retrieved and modified
+ * values with this provider.
+ * </p>
+ * <p>
+ * Instance-level values are not stored in the database, they are marshalled by converting <tt>WikiMacro</tt>
+ * (the instance this provider understands) parameters.
+ * </p>
*
* @author Christian Bauer
*/
@Name("preferenceProvider")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
-public class WikiPreferenceProvider implements PreferenceProvider, Serializable {
+public class WikiPreferenceProvider implements PreferenceProvider<User, WikiMacro>, Serializable {
@Logger Log log;
@In
EntityManager entityManager;
- private Map<PreferenceComponent, Set<PreferenceValue>> currentValueMap = new HashMap<PreferenceComponent, Set<PreferenceValue>>();
- private Set<PreferenceValue> queuedNewValues = new HashSet<PreferenceValue>();
+ @In
+ PreferenceRegistry preferenceRegistry;
+
+ // Queue in current conversation until flush()
+ List<PreferenceValue> newValueHolders = new ArrayList<PreferenceValue>();
- public Set<PreferenceValue> load(PreferenceComponent component, Object user, Object instance, boolean includeSystemPreferences) {
- log.debug("Loading preference values for component '" + component.getName() + "' and user '" + user + "' and instance '" + instance + "'");
+ public Set<PreferenceValue> loadValues(String preferenceEntityName,
+ User user, WikiMacro instance,
+ List<PreferenceVisibility> visibilities) {
- if (currentValueMap.get(component) != null) {
- log.debug("Returning cached preference values of current conversation");
- return currentValueMap.get(component);
- } else {
- log.debug("Resolving preference values and storing them in current conversation");
- currentValueMap.put(component, new TreeSet<PreferenceValue>());
+ log.debug("assembling preference values for '"
+ + preferenceEntityName
+ + "' and user '" + user
+ + "' and wiki macro ' " + instance + "'");
- // Only load and instance preferences if there actually can be instance preferences
- if (instance != null && ((WikiNode)instance).getId() != null && component.allowsInstanceOverride())
- loadInstanceValues(currentValueMap.get(component), component, (WikiNode)instance);
+ PreferenceEntity entity = preferenceRegistry.getPreferenceEntitiesByName().get(preferenceEntityName);
+ SortedSet<PreferenceValue> valueHolders = new TreeSet<PreferenceValue>();
- // Only load and user preferences if there actually can be user preferences
- if (user != null && component.allowsUserOverride())
- loadUserValues(currentValueMap.get(component), component, (User)user);
+ Set<PreferenceValue> systemValueHolders = null;
+ if (visibilities.contains(PreferenceVisibility.SYSTEM)) {
+ log.trace("retrieving SYSTEM preference values from database");
- // Always load system preferences
- loadSystemValues(currentValueMap.get(component), component, includeSystemPreferences);
+ systemValueHolders = loadSystemValues(preferenceEntityName);
- return currentValueMap.get(component);
+ // Check if all SYSTEM-level properties were present in the database
+ for (PreferenceEntity.Property systemVisibleProperty : entity.getPropertiesSystemVisible()) {
+ WikiPreferenceValue newValueHolder = new WikiPreferenceValue(systemVisibleProperty);
+ // If not, queue a new value holder (with a null "value") for that property and return it
+ if (!systemValueHolders.contains(newValueHolder)) {
+ systemValueHolders.add(newValueHolder);
+ newValueHolders.add(newValueHolder);
}
}
+ valueHolders.addAll(systemValueHolders);
+ }
- public Set<PreferenceValue> store(PreferenceComponent component, Set<PreferenceValue> valueHolders, Object user, Object instance) {
- log.debug("Storing preference values for component '" + component.getName() + "' and user '" + user + "' and instance '" + instance + "'");
-
- currentValueMap.put(component, new TreeSet<PreferenceValue>());
-
- for (PreferenceValue valueHolder : valueHolders) {
- log.trace("Storing preference value: " + valueHolder.getPreferenceProperty().getName() + " value: " + valueHolder.getValue());
-
- if (instance != null &&
- valueHolder.getPreferenceProperty().allowsInstanceOverride() &&
- (valueHolder.isSystemAssigned() || valueHolder.isUserAssigned()) &&
- valueHolder.isDirty()) {
-
- log.trace("New preference value object at INSTANCE level for property: " + valueHolder.getPreferenceProperty());
+ Set<PreferenceValue> userValueHolders;
+ if (visibilities.contains(PreferenceVisibility.USER)) {
+ if (user == null)
+ throw new IllegalArgumentException("can't load preferences for null user");
+ log.trace("retrieving USER preference values from database");
- WikiPreferenceValue newValueHolder = new WikiPreferenceValue(valueHolder.getPreferenceProperty());
- newValueHolder.setDocument((WikiDocument) instance);
- newValueHolder.setValue(valueHolder.getValue());
- newValueHolder.setDirty(false); // New object is not "dirty"
+ userValueHolders = loadUserValues(preferenceEntityName, user);
- queuedNewValues.add(newValueHolder);
- getSession().evict(valueHolder);
- currentValueMap.get(component).add(newValueHolder);
+ // We need them when we iterate through missing properties next
+ if (systemValueHolders == null) systemValueHolders = loadSystemValues(preferenceEntityName);
- } else if (user != null &&
- valueHolder.getPreferenceProperty().allowsUserOverride() &&
- valueHolder.isSystemAssigned() &&
- valueHolder.isDirty()) {
+ // Check if all USER-level properties were present in the database
+ for (PreferenceEntity.Property userVisibleProperty : entity.getPropertiesUserVisible()) {
+ WikiPreferenceValue newValueHolder = new WikiPreferenceValue(userVisibleProperty);
- log.trace("New preference value object at USER level for property: " + valueHolder.getPreferenceProperty());
+ // If not, queue a new value for that property and return it
+ if (!userValueHolders.contains(newValueHolder)) {
+ log.trace("creating new preference value for user, missing in database " + userVisibleProperty);
+ userValueHolders.add(newValueHolder);
+ newValueHolders.add(newValueHolder);
- WikiPreferenceValue newValueHolder = new WikiPreferenceValue(valueHolder.getPreferenceProperty());
- newValueHolder.setUser((User) user);
- newValueHolder.setValue(valueHolder.getValue());
- newValueHolder.setDirty(false); // New object is not "dirty"
+ newValueHolder.setUser(user);
- queuedNewValues.add(newValueHolder);
- getSession().evict(valueHolder);
- currentValueMap.get(component).add(newValueHolder);
- } else {
- currentValueMap.get(component).add(valueHolder);
+ // We need a "value" for that property, let's check if we have a SYSTEM-level property we can take it from
+ if (userVisibleProperty.getVisibility().contains(PreferenceVisibility.SYSTEM) &&
+ systemValueHolders != null && systemValueHolders.contains(newValueHolder)) {
+ for (PreferenceValue systemValue : systemValueHolders) {
+ if (systemValue.equals(newValueHolder)) {
+ log.trace("taking the initial value from the SYSTEM-level setting");
+ newValueHolder.setValue(systemValue.getValue());
+ newValueHolder.setDirty(false); // New value isn't dirty, by definition
}
}
-
- return currentValueMap.get(component);
}
-
-
- public void deleteUserPreferences(Object user) {
- log.debug("Deleting all preference values of user '" + user + "'");
- entityManager.createQuery("delete from WikiPreferenceValue wp where wp.user = :user and wp.document is null")
- .setParameter("user", user)
- .executeUpdate();
+ // If we don't have a value, well, then it's null (this is a property with USER and no SYSTEM visibility)
+ }
}
- public void deleteInstancePreferences(Object instance) {
- log.debug("Deleting all preference values of instance '" + instance + "'");
- entityManager.createQuery("delete from WikiPreferenceValue wp where wp.user is null and wp.document = :node")
- .setParameter("node", instance)
- .executeUpdate();
+ // Override SYSTEM values
+ valueHolders.removeAll(userValueHolders);
+ valueHolders.addAll(userValueHolders);
}
- public void flush() {
- log.debug("Flushing queued preference values of this conversation to the database");
+ if (visibilities.contains(PreferenceVisibility.INSTANCE)) {
+ if (instance == null)
+ throw new IllegalArgumentException("can't load preferences for null WikiMacro instance");
+ log.trace("extracting INSTANCE preference values from " + instance);
+ Set<PreferenceValue> instanceValues = loadInstanceValues(preferenceEntityName, instance);
+ // Override SYSTEM and USER values
+ valueHolders.removeAll(instanceValues);
+ valueHolders.addAll(instanceValues);
+ }
- // Persist new values (we need to do this during final flush because otherwise we have the persist()/identity generator problem
- for (PreferenceValue queuedNewValue : queuedNewValues) {
- log.trace("Persisting new preference value object: " + queuedNewValue);
- entityManager.persist(queuedNewValue);
+ return valueHolders;
}
- // Don't flush invalid values
- // (invalid values at this point come from the plugin prefs editor, users might click Update even with wrong values in the form)
- for (Map.Entry<PreferenceComponent, Set<PreferenceValue>> entry : currentValueMap.entrySet()) {
+ public void storeValues(Set<PreferenceValue> valueHolders, User user, WikiMacro instance) {
+ // TODO: We don't care about the arguments, maybe instance later on when we marshall stuff into WikiMacro params
- Set<PreferenceValue> invalidValues = new HashSet<PreferenceValue>();
- Map<PreferenceProperty, InvalidValue[]> validatedProperties = entry.getKey().validate(entry.getValue());
- for (Map.Entry<PreferenceProperty, InvalidValue[]> validationErrors: validatedProperties.entrySet()) {
- if (validationErrors.getValue().length >0) {
- WikiPreferenceValue dummy = new WikiPreferenceValue(validationErrors.getKey());
- invalidValues.add(dummy);
+ // The new ones need to be checked if they are dirty and manually persisted
+ for (PreferenceValue newPreferenceValue : newValueHolders) {
+ if (newPreferenceValue.isDirty()) {
+ log.debug("storing new preference value " + newPreferenceValue);
+ entityManager.persist(newPreferenceValue);
}
}
- for (PreferenceValue preferenceValue : entry.getValue()) {
- if (invalidValues.contains(preferenceValue)) {
- log.trace("Evicting invalid preference value from persistence context before flush: " + preferenceValue);
- getSession().evict(preferenceValue);
- }
+ // The old ones are automatically checked for dirty state by Hibernate
+
}
+
+ public void deleteUserPreferenceValues(User user) {
+ // NOOP, deleted by foreign key cascade on PREFERENCE table
}
- log.trace("Flushing persistence context");
+ public void flush() {
+ log.debug("flushing preference provider");
entityManager.flush();
+
+ // Reset queue
+ newValueHolders = new ArrayList<PreferenceValue>();
}
- /* #################### IMPLEMENTATION ######################### */
- private void loadSystemValues(Set<PreferenceValue> loadedValues, PreferenceComponent preferenceComponent, boolean includeSystemPreferences) {
- //noinspection unchecked
+ /* ######################################### IMPLEMENTATION DETAILS ######################################### */
+
+ private Set<PreferenceValue> loadSystemValues(String entityName) {
List<WikiPreferenceValue> values =
entityManager.createQuery(
"select wp from WikiPreferenceValue wp" +
- " where wp.componentName = :name and wp.user is null and wp.document is null"
- ).setParameter("name", preferenceComponent.getName())
- .setHint("org.hibernate.cacheable", true).getResultList();
-
- for (WikiPreferenceValue value : values) {
- PreferenceProperty property = preferenceComponent.getPropertiesByName().get( value.getPropertyName() );
- if (property == null)
- throw new RuntimeException("Orphaned preference value found in database, please clean up: " + value);
- value.setPreferenceProperty(property);
- if (value.getPreferenceProperty().allowsUserOverride() ||
- value.getPreferenceProperty().allowsInstanceOverride() ||
- includeSystemPreferences) {
- loadedValues.add(value);
- }
- }
+ " where wp.entityName = :name and wp.user is null"
+ ).setParameter("name", entityName)
+ .setHint("org.hibernate.cacheable", true)
+ .getResultList();
+ setPropertyReferences(values, entityName, PreferenceVisibility.SYSTEM);
+ return new HashSet(values);
}
- private void loadUserValues(Set<PreferenceValue> loadedValues, PreferenceComponent preferenceComponent, User user) {
- //noinspection unchecked
+ private Set<PreferenceValue> loadUserValues(String entityName, User user) {
List<WikiPreferenceValue> values =
entityManager.createQuery(
"select wp from WikiPreferenceValue wp" +
- " where wp.componentName = :name and wp.user = :user and wp.document is null"
- )
- .setParameter("name", preferenceComponent.getName())
+ " where wp.entityName = :name and wp.user = :user"
+ ).setParameter("name", entityName)
.setParameter("user", user)
.setHint("org.hibernate.cacheable", true)
.getResultList();
- for (WikiPreferenceValue value : values) {
- value.setPreferenceProperty(preferenceComponent.getPropertiesByName().get( value.getPropertyName() ));
- loadedValues.add(value);
+ setPropertyReferences(values, entityName, PreferenceVisibility.USER);
+ return new HashSet(values);
+ }
+
+ private Set<PreferenceValue> loadInstanceValues(String entityName, WikiMacro instance) {
+ Set<PreferenceValue> valueHolders = new HashSet<PreferenceValue>();
+ PreferenceEntity preferenceEntity = preferenceRegistry.getPreferenceEntitiesByName().get(entityName);
+ for (Map.Entry<String, String> entry : instance.getParams().entrySet()) {
+ log.trace("converting WikiMacro argument into WikiPreferenceValue: " + entry.getKey());
+
+ // TODO: Maybe we should log the following as DEBUG level, these occur when the user edits macro parameters
+
+ PreferenceEntity.Property property = preferenceEntity.getPropertiesByName().get(entry.getKey());
+ if (property == null) {
+ log.info("can't convert unknown property as WikiMacro argument: " + entry.getKey());
+ continue;
+ }
+ if (!property.getVisibility().contains(PreferenceVisibility.INSTANCE)) {
+ log.info("can't convert WikiMacro argument, not overridable at INSTANCE level: " + entry.getKey());
+ continue;
+ }
+ WikiPreferenceValue value = new WikiPreferenceValue(property, entry.getValue());
+ if (value.getValue() != null) {
+ log.trace("converted WikiMacro argument value into WikiPreferenceValue: " + value.getValue());
+ valueHolders.add(value);
+ } else {
+ log.info("could not convert WikiMacro argument value into WikiPreferenceValue: " + entry.getKey());
+ }
}
+ return valueHolders;
}
- private void loadInstanceValues(Set<PreferenceValue> loadedValues, PreferenceComponent preferenceComponent, WikiNode node) {
- //noinspection unchecked
- List<WikiPreferenceValue> values =
- entityManager.createQuery(
- "select wp from WikiPreferenceValue wp" +
- " where wp.componentName = :name and wp.user is null and wp.document = :node"
- )
- .setParameter("name", preferenceComponent.getName())
- .setParameter("node", node)
- .setHint("org.hibernate.cacheable", true)
- .getResultList();
- for (WikiPreferenceValue value : values) {
- value.setPreferenceProperty(preferenceComponent.getPropertiesByName().get( value.getPropertyName() ));
- loadedValues.add(value);
+ private void setPropertyReferences(List<WikiPreferenceValue> valueHolders, String entityName, PreferenceVisibility visibility) {
+ Iterator<WikiPreferenceValue> it = valueHolders.iterator();
+ while (it.hasNext()) {
+ WikiPreferenceValue wikiPreferenceValue = it.next();
+ if (!setPropertyReference(wikiPreferenceValue, entityName, visibility)) {
+ it.remove(); // Kick out the value if we couldn't set a reference to the metamodel property
+ }
}
}
- private Session getSession() {
- return (Session)entityManager.getDelegate();
+ private boolean setPropertyReference(WikiPreferenceValue value, String entityName, PreferenceVisibility visibility) {
+ PreferenceEntity entity = preferenceRegistry.getPreferenceEntitiesByName().get(entityName);
+ if (entity == null) {
+ log.warn("orphaned preference value found in database, please clean up: " + value);
+ return false;
}
+ PreferenceEntity.Property property = entity.getPropertiesByName().get(value.getPropertyName());
+ if (property == null) {
+ log.warn("orphaned preference value found in database, please clean up: " + value);
+ return false;
+ }
+ if (!property.getVisibility().contains(visibility)) {
+ log.warn("database visibility " + visibility + " is not allowed by property, please clean up: " + value);
+ return false;
+ }
+ value.setPreferenceProperty(property);
+ return true;
+ }
+
}
1.9 +59 -69 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceValue.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiPreferenceValue.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceValue.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- WikiPreferenceValue.java 19 Dec 2007 04:29:32 -0000 1.8
+++ WikiPreferenceValue.java 30 Dec 2007 02:33:22 -0000 1.9
@@ -9,37 +9,14 @@
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.jboss.seam.wiki.core.model.User;
-import org.jboss.seam.wiki.core.model.WikiDocument;
-import org.jboss.seam.wiki.preferences.PreferenceProperty;
import org.jboss.seam.wiki.preferences.PreferenceValue;
+import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
import javax.persistence.*;
import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
-/**
- * Stores preference values in three tables.
- * <pre>
- * PREF_ID PREF_NAME ATTRIBUTE_NAME *_VALUE
- * 1 fooGroup fooAttribute ...
- * 2 fooGroup fooAttribute ...
- * 3 fooGroup fooAttribute ...
- * 4 barGroup barAttribute ...
- * 5 barGroup barAttribute ...
- *
- * PREF_ID USER_ID
- * 2 1
- * 5 1
- *
- * PREF_ID NODE_ID
- * 3 1
- * </pre>
- * <p>
- * Can handle Long, Double, Date, Boolean, and String values with a Hibernate UserType.
- * Could be rewritten to use one table (one-to-one between this entity and user, node) but
- * we avoid <i>some</i> nullable columns that way.
- *
- * @author Christian Bauer
-*/
@TypeDefs({
@TypeDef(name="preference_value_usertype", typeClass = PreferenceValueUserType.class)
})
@@ -54,10 +31,10 @@
@Version
@Column(name = "OBJ_VERSION", nullable = false)
- private int version;
+ private int version = 0;
- @Column(name = "COMPONENT_NAME", nullable = false)
- private String componentName;
+ @Column(name = "ENTITY_NAME", nullable = false)
+ private String entityName;
@Column(name = "PROPERTY_NAME", nullable = false)
private String propertyName;
@@ -68,12 +45,6 @@
@org.hibernate.annotations.OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
private User user;
- @ManyToOne(fetch = FetchType.EAGER)
- @JoinColumn(name = "WIKI_DOCUMENT_ID", nullable = true, updatable = false)
- @org.hibernate.annotations.ForeignKey(name = "FK_PREFERENCE_WIKI_DOCUMENT_ID")
- @org.hibernate.annotations.OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
- private WikiDocument document;
-
@org.hibernate.annotations.Type(type = "preference_value_usertype")
@org.hibernate.annotations.Columns(
columns = {
@@ -86,12 +57,42 @@
)
private Object value;
+ @Transient
+ private boolean instance = false;
+
public WikiPreferenceValue() {}
- public WikiPreferenceValue(PreferenceProperty forProperty) {
- this.componentName = forProperty.getPreferenceComponent().getName();
- this.propertyName = forProperty.getName();
- this.property = forProperty;
+ public WikiPreferenceValue(PreferenceEntity.Property property) {
+ this.entityName = property.getOwningEntityName();
+ this.propertyName = property.getFieldName();
+ this.property = property;
+ }
+
+ public WikiPreferenceValue(PreferenceEntity.Property property, String value) {
+ this.entityName = property.getOwningEntityName();
+ this.propertyName = property.getFieldName();
+ this.property = property;
+ this.instance = true;
+
+ if (property.getFieldType().equals(String.class)) {
+ this.value = value;
+ } else if (property.getFieldType().equals(Long.class)) {
+ try {
+ this.value = Long.valueOf(value);
+ } catch (Exception ex) {}
+ } else if (property.getFieldType().equals(Double.class)) {
+ try {
+ this.value = Double.valueOf(value);
+ } catch (Exception ex) {}
+ } else if (property.getFieldType().equals(Date.class)) {
+ try {
+ this.value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
+ } catch (Exception ex) {}
+ } else if (property. getFieldType().equals(Boolean.class)) {
+ try {
+ this.value = Boolean.valueOf(value);
+ } catch (Exception ex) {}
+ }
}
public Long getId() {
@@ -102,12 +103,12 @@
return version;
}
- public String getComponentName() {
- return componentName;
+ public String getEntityName() {
+ return entityName;
}
- public void setComponentName(String componentName) {
- this.componentName = componentName;
+ public void setEntityName(String entityName) {
+ this.entityName = entityName;
}
public String getPropertyName() {
@@ -126,14 +127,6 @@
this.user = user;
}
- public WikiDocument getDocument() {
- return document;
- }
-
- public void setDocument(WikiDocument document) {
- this.document = document;
- }
-
public Object getValue() {
return value;
}
@@ -148,29 +141,28 @@
this.value = value;
}
- public boolean isSystemAssigned() {
- return getDocument() == null && getUser() == null;
+ public boolean isSystem() {
+ return user == null && !instance;
}
- public boolean isUserAssigned() {
- return getDocument() == null && getUser() != null;
+ public boolean isUser() {
+ return user != null && !instance;
}
- public boolean isInstanceAssigned() {
- return getDocument() != null && getUser() == null;
+ public boolean isInstance() {
+ return user == null && instance;
}
- // Useful for provider
@Transient
private boolean dirty;
public boolean isDirty() { return dirty; }
public void setDirty(boolean dirty) { this.dirty = dirty; }
- // Reference to meta model
@Transient
- PreferenceProperty property;
- public void setPreferenceProperty(PreferenceProperty property) { this.property = property; }
- public PreferenceProperty getPreferenceProperty() { return property; }
+ PreferenceEntity.Property property;
+
+ public void setPreferenceProperty(PreferenceEntity.Property property) { this.property = property; }
+ public PreferenceEntity.Property getPreferenceProperty() { return property; }
public boolean equals(Object o) {
if (this == o) return true;
@@ -178,7 +170,7 @@
WikiPreferenceValue that = (WikiPreferenceValue) o;
- if (!componentName.equals(that.componentName)) return false;
+ if (!entityName.equals(that.entityName)) return false;
if (!propertyName.equals(that.propertyName)) return false;
return true;
@@ -186,18 +178,16 @@
public int hashCode() {
int result;
- result = componentName.hashCode();
+ result = entityName.hashCode();
result = 31 * result + propertyName.hashCode();
return result;
}
public int compareTo(Object o) {
- return getPreferenceProperty().getDescription().compareTo(
- ((PreferenceValue)o).getPreferenceProperty().getDescription()
- );
+ return getPreferenceProperty().compareTo(((PreferenceValue)o).getPreferenceProperty());
}
public String toString() {
- return "WikiPreferenceValue for '" + getComponentName() + "." + getPropertyName() + "'";
+ return "WikiPreferenceValue for '" + getEntityName() + "." + getPropertyName() + "'";
}
}
1.2 +1 -1 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/PreferenceValueUserType.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: PreferenceValueUserType.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/PreferenceValueUserType.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
More information about the jboss-cvs-commits
mailing list