com.syncnapsis.data.model.MenuItem.java Source code

Java tutorial

Introduction

Here is the source code for com.syncnapsis.data.model.MenuItem.java

Source

/**
 * Syncnapsis Framework - Copyright (c) 2012-2014 ultimate
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms of
 * the GNU General Public License as published by the Free Software Foundation; either version
 * 3 of the License, or any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MECHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Plublic License along with this program;
 * if not, see <http://www.gnu.org/licenses/>.
 */
package com.syncnapsis.data.model;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import com.syncnapsis.data.model.base.BaseObject;
import com.syncnapsis.enums.EnumMenuItemDynamicType;
import com.syncnapsis.enums.EnumMenuItemType;
import com.syncnapsis.utils.graphs.GenericTreeNode;

/**
 * Model-Klasse "Men-Eintrag"
 * Diese Klasse reprsentiert einen Men-Eintrag, der im Hauptmen der Anwendung
 * dargestellt wird. Die Men-Eintrge sind dabei in einer Baumstruktur
 * organisiert und reprsentieren dessen Knoten.
 * ber die Verknpfung durch die Klasse MenuQuickLaunchItem zu einem Benutzer
 * knnen die gleichen Men-Eintrge auch im Schnellstart-Men angezeigt werden.
 * Die Klasse implementiert GenericTreeNode fr die dynamische Erstellung des
 * Mens.
 * 
 * @author ultimate
 */
@Entity
@Table(name = "menuitem")
@Cache(usage = CacheConcurrencyStrategy.NONE)
public class MenuItem extends BaseObject<String> implements GenericTreeNode<MenuItem>, Cloneable {
    /**
     * Schlssel fr die Sprachabhngige Ausgabe des Titels des Men-Eintrags
     */
    private String titleKey;
    /**
     * Spezifizierung des Typs
     */
    private EnumMenuItemType type;
    /**
     * Spezifizierung des dynamischen Typs
     */
    private EnumMenuItemDynamicType dynamicType;
    /**
     * Spezifizierung des dynamischen Subtyps
     */
    private String dynamicSubType;
    /**
     * URL fr die Anzeige eines Bildes
     */
    private String imageURL;
    /**
     * Kann dieser Men-Eintrag im Schnellstart-Men verwendet werden?
     */
    private boolean quickLaunchEnabled;
    /**
     * Ist dieser Men-Eintrag nur bei erweitertem Men sichtbar?
     */
    private boolean advancedItem;
    /**
     * An welcher Stelle steht dieser Men-Eintrag unter allern Kindern des
     * Elternknotens
     */
    private int position;

    /**
     * Die GUIAction, die bei einem Klick ausgefhrt wird
     */
    private GUIAction action;
    /**
     * Name des ggf. notwendigen Parameters zur bergabe an die GUIAction
     */
    private String parameterName;
    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     */
    private String parameterValueString;
    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     */
    private Long parameterValueLong;
    /**
     * Ist der Men-Eintrag inaktiv
     * (temporrer Wert)
     */
    private boolean disabled;

    /**
     * Der bergeordnete Men-Eintrag
     */
    private MenuItem parent;
    /**
     * Liste aller untergeordneten Men-Eintrge
     */
    private List<MenuItem> children;

    /**
     * Leerer Standard Constructor
     */
    public MenuItem() {
    }

    /**
     * Schlssel fr die Sprachabhngige Ausgabe des Titels des Men-Eintrags
     * 
     * @return titleKey - der Schlssel
     */
    @Column(nullable = true, length = LENGTH_LANGUAGE_KEY)
    public String getTitleKey() {
        return titleKey;
    }

    /**
     * Spezifizierung des Typs
     * 
     * @return type
     */
    @Column(nullable = false, length = LENGTH_ENUM)
    @Enumerated(value = EnumType.STRING)
    public EnumMenuItemType getType() {
        return type;
    }

    /**
     * Spezifizierung des dynamischen Typs
     * 
     * @return dynamicType
     */
    @Column(nullable = true, length = LENGTH_ENUM)
    @Enumerated(value = EnumType.STRING)
    public EnumMenuItemDynamicType getDynamicType() {
        return dynamicType;
    }

    /**
     * Spezifizierung des dynamischen Subtyps
     * @return dynamicSubType
     */
    @Column(nullable = true, length = LENGTH_ENUM)
    public String getDynamicSubType() {
        return dynamicSubType;
    }

    /**
     * URL fr die Anzeige eines Bildes
     * 
     * @return imageURL
     */
    @Column(nullable = true, length = LENGTH_URL)
    public String getImageURL() {
        return imageURL;
    }

    /**
     * Kann dieser Men-Eintrag im Schnellstart-Men verwendet werden?
     * 
     * @return quickLaunchEnabled
     */
    @Column(nullable = false)
    public boolean isQuickLaunchEnabled() {
        return quickLaunchEnabled;
    }

    /**
     * Ist dieser Men-Eintrag nur bei erweitertem Men sichtbar?
     * 
     * @return advancedItem
     */
    @Column(nullable = false)
    public boolean isAdvancedItem() {
        return advancedItem;
    }

    /**
     * Die GUIAction, die bei einem Klick ausgefhrt wird
     * 
     * @return position
     */
    @Column(nullable = false)
    public int getPosition() {
        return position;
    }

    /**
     * Die GUIAction, die bei einem Klick ausgefhrt wird
     * 
     * @return action
     */
    @ManyToOne
    @JoinColumn(name = "fkGUIAction", nullable = true)
    public GUIAction getAction() {
        return action;
    }

    /**
     * Name des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @return parameterName
     */
    @Column(nullable = true, length = LENGTH_PARAMETER)
    public String getParameterName() {
        if (parameterName == null)
            return "";
        return parameterName;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @return parameterValueString
     */
    @Column(nullable = true, length = LENGTH_PARAMETERVALUE)
    public String getParameterValueString() {
        return parameterValueString;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @return parameterValueLong
     */
    @Column(nullable = true)
    public Long getParameterValueLong() {
        return parameterValueLong;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * Gibt den gesetzten ParameterValue zurck. Entweder String oder Long
     * 
     * @return parameterValue
     */
    @Transient
    public Object getParameterValue() {
        if (parameterValueString != null)
            return parameterValueString;
        if (parameterValueLong != null)
            return parameterValueLong;
        return null;
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.ui.components.trees.GenericTreeNode#isDisabled()
     */
    @Override
    @Transient
    public boolean isDisabled() {
        return disabled;
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.ui.components.trees.GenericTreeNode#getParent()
     */
    @Override
    @ManyToOne
    @JoinTable(name = "menuparent", joinColumns = { @JoinColumn(name = "fkMenuItem") }, inverseJoinColumns = {
            @JoinColumn(name = "fkParentMenuItem") })
    public MenuItem getParent() {
        return parent;
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.ui.components.trees.GenericTreeNode#getChildren()
     */
    @Override
    @Transient
    public List<MenuItem> getChildren() {
        return children;
    }

    /**
     * Schlssel fr die Sprachabhngige Ausgabe des Titels des Men-Eintrags
     * 
     * @param titleKey
     */
    public void setTitleKey(String titleKey) {
        this.titleKey = titleKey;
    }

    /**
     * Spezifizierung des Typs
     * 
     * @param type - der Typ
     */
    public void setType(EnumMenuItemType type) {
        this.type = type;
    }

    /**
     * Spezifizierung des dynamischen Typs
     * 
     * @param dynamicType - der dynamische Typ
     */
    public void setDynamicType(EnumMenuItemDynamicType dynamicType) {
        this.dynamicType = dynamicType;
    }

    /**
     * Spezifizierung des dynamischen Subtyps
     * 
     * @param dynamicSubType
     */
    public void setDynamicSubType(String dynamicSubType) {
        this.dynamicSubType = dynamicSubType;
    }

    /**
     * URL fr die Anzeige eines Bildes
     * 
     * @param imageURL - die URL
     */
    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }

    /**
     * Kann dieser Men-Eintrag im Schnellstart-Men verwendet werden?
     * 
     * @param quickLaunchEnabled - true oder false
     */
    public void setQuickLaunchEnabled(boolean quickLaunchEnabled) {
        this.quickLaunchEnabled = quickLaunchEnabled;
    }

    /**
     * Ist dieser Men-Eintrag nur bei erweitertem Men sichtbar?
     * 
     * @param advancedItem - true oder false
     */
    public void setAdvancedItem(boolean advancedItem) {
        this.advancedItem = advancedItem;
    }

    /**
     * Die GUIAction, die bei einem Klick ausgefhrt wird
     * 
     * @param position - die Position
     */
    public void setPosition(int position) {
        this.position = position;
    }

    /**
     * Die GUIAction, die bei einem Klick ausgefhrt wird
     * 
     * @param action - die GUIAction
     */
    public void setAction(GUIAction action) {
        this.action = action;
    }

    /**
     * Name des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @param parameterName - der Name
     */
    public void setParameterName(String parameterName) {
        this.parameterName = parameterName;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @param parameterValueString - der Wert
     */
    public void setParameterValueString(String parameterValueString) {
        this.parameterValueString = parameterValueString;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction als Long
     * 
     * @param parameterValueLong - der Wert
     */
    public void setParameterValueLong(Long parameterValueLong) {
        this.parameterValueLong = parameterValueLong;
    }

    /**
     * Wert des ggf. notwendigen Parameters zur bergabe an die GUIAction
     * 
     * @param parameterValue - der Wert
     */
    public void setParameterValue(Object parameterValue) {
        if (parameterValue == null) {
            this.setParameterValueString(null);
            this.setParameterValueLong(null);
        } else if (parameterValue instanceof String) {
            this.setParameterValueString((String) parameterValue);
            this.setParameterValueLong(null);
        } else if (parameterValue instanceof Long) {
            this.setParameterValueString(null);
            this.setParameterValueLong((Long) parameterValue);
        }
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.ui.components.trees.GenericTreeNode#setDisabled(boolean)
     */
    @Override
    public void setDisabled(boolean disabled) {
        this.disabled = disabled;
    }

    /*
     * (non-Javadoc)
     * @see
     * com.syncnapsis.ui.components.trees.GenericTreeNode#setParent(java.lang.Object
     * )
     */
    @Override
    public void setParent(MenuItem parent) {
        this.parent = parent;
    }

    /*
     * (non-Javadoc)
     * @see
     * com.syncnapsis.ui.components.trees.GenericTreeNode#setChildren(java.util
     * .List)
     */
    @Override
    public void setChildren(List<MenuItem> children) {
        this.children = children;
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.model.base.BaseObject#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!super.equals(obj))
            return false;
        if (!(obj instanceof MenuItem))
            return false;
        MenuItem other = (MenuItem) obj;
        if (action == null) {
            if (other.action != null)
                return false;
        } else if (!action.equals(other.action))
            return false;
        if (advancedItem != other.advancedItem)
            return false;
        if (disabled != other.disabled)
            return false;
        if (dynamicType == null) {
            if (other.dynamicType != null)
                return false;
        } else if (!dynamicType.equals(other.dynamicType))
            return false;
        if (imageURL == null) {
            if (other.imageURL != null)
                return false;
        } else if (!imageURL.equals(other.imageURL))
            return false;
        if (parameterName == null) {
            if (other.parameterName != null)
                return false;
        } else if (!parameterName.equals(other.parameterName))
            return false;
        if (parent == null) {
            if (other.parent != null)
                return false;
        } else if (!parent.getId().equals(other.parent.getId()))
            return false;
        if (position != other.position)
            return false;
        if (quickLaunchEnabled != other.quickLaunchEnabled)
            return false;
        if (titleKey == null) {
            if (other.titleKey != null)
                return false;
        } else if (!titleKey.equals(other.titleKey))
            return false;
        if (type == null) {
            if (other.type != null)
                return false;
        } else if (!type.equals(other.type))
            return false;
        return true;
    }

    /*
     * (non-Javadoc)
     * @see com.syncnapsis.model.base.BaseObject#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((action == null) ? 0 : action.hashCode());
        result = prime * result + (advancedItem ? 1231 : 1237);
        result = prime * result + (disabled ? 1231 : 1237);
        result = prime * result + ((dynamicType == null) ? 0 : dynamicType.hashCode());
        result = prime * result + ((imageURL == null) ? 0 : imageURL.hashCode());
        result = prime * result + ((parameterName == null) ? 0 : parameterName.hashCode());
        result = prime * result + ((parent == null) ? 0 : parent.getId().hashCode());
        result = prime * result + position;
        result = prime * result + (quickLaunchEnabled ? 1231 : 1237);
        result = prime * result + ((titleKey == null) ? 0 : titleKey.hashCode());
        result = prime * result + ((type == null) ? 0 : type.hashCode());
        return result;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        ToStringBuilder builder = new ToStringBuilder(this);
        builder.append("id", id).append("version", version)
                .append("action", (action == null ? null : action.getAction())).append("advancedItem", advancedItem)
                .append("disabled", disabled).append("dynamicType", dynamicType)
                .append("dynamicSubType", dynamicSubType).append("imageURL", imageURL)
                .append("parameterName", parameterName).append("parameterValueString", parameterValueString)
                .append("parameterValueLong", parameterValueLong)
                .append("parent", (parent == null ? null : parent.getId())).append("position", position)
                .append("quickLaunchEnabled", quickLaunchEnabled).append("titleKey", titleKey).append("type", type);
        return builder.toString();
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#clone()
     */
    @Override
    public MenuItem clone() {
        MenuItem tmpItem = null;
        try {
            tmpItem = (MenuItem) super.clone();
        } catch (CloneNotSupportedException e) {
        }
        tmpItem.action = action;
        tmpItem.advancedItem = advancedItem;
        tmpItem.children = children;
        tmpItem.dynamicType = dynamicType;
        tmpItem.dynamicSubType = dynamicSubType;
        tmpItem.id = id;
        tmpItem.imageURL = imageURL;
        tmpItem.parameterName = parameterName;
        tmpItem.parameterValueString = parameterValueString;
        tmpItem.parameterValueLong = parameterValueLong;
        tmpItem.parent = parent;
        tmpItem.position = position;
        tmpItem.quickLaunchEnabled = quickLaunchEnabled;
        tmpItem.titleKey = titleKey;
        tmpItem.type = type;
        tmpItem.version = version;
        return tmpItem;
    }
}