`

Preferences -- PreferenceValue the Implment

阅读更多
/*
 * JBoss, Home of Professional Open Source
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package org.jboss.seam.wiki.core.preferences;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.jboss.seam.wiki.core.model.User;
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;

@TypeDefs({
    @TypeDef(name="preference_value_usertype", typeClass = PreferenceValueUserType.class)
})
@Entity
@Table(name = "PREFERENCE")
/*
TODO: This implementation of Comparable MIGHT not be consistent with equals()!
 */
public class WikiPreferenceValue implements PreferenceValue, Serializable, Comparable {

    @Id
    @GeneratedValue(generator = "wikiSequenceGenerator")
    @Column(name = "PREF_ID")
    private Long id;

    @Version
    @Column(name = "OBJ_VERSION", nullable = false)
    private int version = 0;

    @Column(name = "ENTITY_NAME", nullable = false)
    private String entityName;

    @Column(name = "PROPERTY_NAME", nullable = false)
    private String propertyName;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "USER_ID", nullable = true, updatable = false)
    @org.hibernate.annotations.ForeignKey(name = "FK_PREFERENCE_USER_ID")
    private User user;

    @org.hibernate.annotations.Type(type = "preference_value_usertype")
    @org.hibernate.annotations.Columns(
        columns = {
            @Column( name="LONG_VALUE"),
            @Column( name="DOUBLE_VALUE"),
            @Column( name="TIMESTAMP_VALUE"),
            @Column( name="BOOLEAN_VALUE"),
            @Column( name="STRING_VALUE", length = 1023)
        }
	)
    private Object value;

    @Transient
    private boolean instance = false;

    public WikiPreferenceValue() {}

    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() {
        return id;
    }

    public int getVersion() {
        return version;
    }

    public String getEntityName() {
        return entityName;
    }

    public void setEntityName(String entityName) {
        this.entityName = entityName;
    }

    public String getPropertyName() {
        return propertyName;
    }

    public void setPropertyName(String propertyName) {
        this.propertyName = propertyName;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        if (this.value == null && value != null)
            setDirty(true);
        else if (this.value != null && value == null)
            setDirty(true);
        else if (this.value != null && !(this.value.equals(value)))
            setDirty(true);
        this.value = value;
    }

    public boolean isSystem() {
        return user == null && !instance;
    }

    public boolean isUser() {
        return user != null && !instance;
    }

    public boolean isInstance() {
        return user == null && instance;
    }

    @Transient
    private boolean dirty;
    public boolean isDirty() { return dirty; }
    public void setDirty(boolean dirty) { this.dirty = dirty; }

    @Transient
    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;
        if (o == null || getClass() != o.getClass()) return false;

        WikiPreferenceValue that = (WikiPreferenceValue) o;

        if (!entityName.equals(that.entityName)) return false;
        if (!propertyName.equals(that.propertyName)) return false;

        return true;
    }

    public int hashCode() {
        int result;
        result = entityName.hashCode();
        result = 31 * result + propertyName.hashCode();
        return result;
    }

    public int compareTo(Object o) {
        return getPreferenceProperty().compareTo(((PreferenceValue)o).getPreferenceProperty());
    }

    public String toString() {
        return "WikiPreferenceValue for '" + getEntityName() + "." + getPropertyName() + "'";
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics