001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.runtime.model;
017
018import org.ametys.runtime.i18n.I18nizableText;
019
020/**
021 * Object containing the definition of an element and informations about its categories / groups
022 * @param <T> Type of the element value
023 */
024public class CategorizedElementDefinitionWrapper<T>
025{
026    /** The element definition */
027    protected ElementDefinition<T> _definition;
028    /** the category in which to display the element */
029    protected I18nizableText _displayCategory;
030    /** the group in which to display the element */
031    protected I18nizableText _displayGroup;
032    /** the position in the group where the element has to be displayed */
033    protected long _position;
034    
035    /**
036     * Default constructor.
037     */
038    public CategorizedElementDefinitionWrapper()
039    {
040        // Do nothing
041    }
042    
043    /**
044     * Constructor by copying an existing {@link CategorizedElementDefinitionWrapper}.
045     * @param wrapperToCopy The {@link CategorizedElementDefinitionWrapper} to copy
046     */
047    public CategorizedElementDefinitionWrapper(CategorizedElementDefinitionWrapper<T> wrapperToCopy)
048    {
049        // ElementDefinition
050        ElementDefinition<T> copiedDefinition = new DefaultElementDefinition<>(wrapperToCopy.getDefinition());
051        setDefinition(copiedDefinition);
052        
053        // Categories
054        setDisplayCategory(wrapperToCopy.getDisplayCategory());
055        setDisplayGroup(wrapperToCopy.getDisplayGroup());
056        setPosition(wrapperToCopy.getPosition());
057    }
058    
059    /**
060     * Retrieves the element definition
061     * @return the element definition
062     */
063    public ElementDefinition<T> getDefinition()
064    {
065        return _definition;
066    }
067    
068    /**
069     * Sets the element definition
070     * @param definition the element definition to set
071     */
072    public void setDefinition(ElementDefinition<T> definition)
073    {
074        _definition = definition;
075    }
076    
077    /**
078     * Retrieves the category in which to display the element
079     * @return the category
080     */
081    public I18nizableText getDisplayCategory()
082    {
083        return _displayCategory;
084    }
085    
086    /**
087     * Sets the category in which to display the element
088     * @param displayCategory the category to set
089     */
090    public void setDisplayCategory(I18nizableText displayCategory)
091    {
092        this._displayCategory = displayCategory;
093    }
094    
095    /**
096     * Retrieves the group in which to display the element
097     * @return the group
098     */
099    public I18nizableText getDisplayGroup()
100    {
101        return _displayGroup;
102    }
103    
104    /**
105     * Sets the group in which to display the element
106     * @param displayGroup the group to set
107     */
108    public void setDisplayGroup(I18nizableText displayGroup)
109    {
110        this._displayGroup = displayGroup;
111    }
112    
113    /**
114     * Retrieves the position in the group where the element has to be displayed 
115     * @return the position in the group
116     */
117    public long getPosition()
118    {
119        return _position;
120    }
121    
122    /**
123     * Sets the position of the element in the group
124     * @param position the position to set
125     */
126    public void setPosition(long position)
127    {
128        this._position = position;
129    }
130
131    @Override
132    public boolean equals(Object obj)
133    {
134        return getDefinition().equals(obj);
135    }
136
137    @Override
138    public int hashCode()
139    {
140        return getDefinition().hashCode();
141    }
142
143    @Override
144    public String toString()
145    {
146        return getDefinition().toString();
147    }
148    
149    
150}