001/*
002 * (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Anahide Tchertchian
016 */
017package org.nuxeo.ecm.platform.forms.layout.api.impl;
018
019import java.io.Serializable;
020import java.util.HashMap;
021import java.util.Map;
022
023import org.nuxeo.ecm.platform.forms.layout.api.WidgetSelectOption;
024
025/**
026 * @author Anahide Tchertchian
027 * @since 5.4.2
028 */
029public class WidgetSelectOptionImpl implements WidgetSelectOption {
030
031    private static final long serialVersionUID = 1L;
032
033    protected Serializable value;
034
035    protected String var;
036
037    protected String itemLabel;
038
039    protected Map<String, String> labels;
040
041    protected String itemValue;
042
043    protected Serializable itemDisabled;
044
045    protected Serializable itemRendered;
046
047    // needed by GWT serialization
048    protected WidgetSelectOptionImpl() {
049        super();
050    }
051
052    public WidgetSelectOptionImpl(String itemLabel, String itemValue) {
053        this(null, null, itemLabel, itemValue);
054    }
055
056    public WidgetSelectOptionImpl(Serializable value, String var, String itemLabel, String itemValue) {
057        this(value, var, itemLabel, itemValue, null, null);
058    }
059
060    public WidgetSelectOptionImpl(Serializable value, String var, String itemLabel, String itemValue,
061            Serializable itemDisabled, Serializable itemRendered) {
062        super();
063        this.value = value;
064        this.var = var;
065        this.itemLabel = itemLabel;
066        this.itemValue = itemValue;
067        this.itemDisabled = itemDisabled;
068        this.itemRendered = itemRendered;
069    }
070
071    public Serializable getValue() {
072        return value;
073    }
074
075    public String getVar() {
076        return var;
077    }
078
079    public String getItemLabel() {
080        return itemLabel;
081    }
082
083    @Override
084    public String getItemLabel(String locale) {
085        return labels.get(locale);
086    }
087
088    @Override
089    public Map<String, String> getItemLabels() {
090        return labels;
091    }
092
093    public void setItemLabels(Map<String, String> labels) {
094        this.labels = labels;
095    }
096
097    public String getItemValue() {
098        return itemValue;
099    }
100
101    public Serializable getItemDisabled() {
102        return itemDisabled;
103    }
104
105    public Serializable getItemRendered() {
106        return itemRendered;
107    }
108
109    @Override
110    public String getTagConfigId() {
111        StringBuilder builder = new StringBuilder();
112        builder.append(value).append(";");
113        builder.append(var).append(";");
114        builder.append(itemLabel).append(";");
115        if (labels != null) {
116            builder.append(labels.toString());
117        }
118        builder.append(";");
119        builder.append(itemValue).append(";");
120        if (itemDisabled != null) {
121            builder.append(itemDisabled.toString());
122        }
123        builder.append(";");
124        if (itemRendered != null) {
125            builder.append(itemRendered.toString());
126        }
127        builder.append(";");
128
129        Integer intValue = new Integer(builder.toString().hashCode());
130        return intValue.toString();
131    }
132
133    @Override
134    public WidgetSelectOption clone() {
135        WidgetSelectOptionImpl clone = new WidgetSelectOptionImpl(value, var, itemLabel, itemValue, itemDisabled,
136                itemRendered);
137        if (labels != null) {
138            clone.setItemLabels(new HashMap<String, String>(labels));
139        }
140        return clone;
141    }
142
143    /**
144     * @since 7.2
145     */
146    @Override
147    public boolean equals(Object obj) {
148        if (!(obj instanceof WidgetSelectOptionImpl)) {
149            return false;
150        }
151        if (obj == this) {
152            return true;
153        }
154        WidgetSelectOptionImpl w = (WidgetSelectOptionImpl) obj;
155        return new EqualsBuilder().append(value, w.value).append(var, w.var).append(itemLabel, w.itemLabel).append(
156                labels, w.labels).append(itemValue, w.itemValue).append(itemDisabled, w.itemDisabled).append(
157                itemRendered, w.itemRendered).isEquals();
158    }
159
160}