001/*
002 * (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and others.
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 *
016 * Contributors:
017 *     Anahide Tchertchian
018 */
019package org.nuxeo.ecm.platform.forms.layout.api.impl;
020
021import java.io.Serializable;
022import java.util.HashMap;
023import java.util.Map;
024
025import org.nuxeo.ecm.platform.forms.layout.api.WidgetSelectOption;
026
027/**
028 * @author Anahide Tchertchian
029 * @since 5.4.2
030 */
031public class WidgetSelectOptionImpl implements WidgetSelectOption {
032
033    private static final long serialVersionUID = 1L;
034
035    protected Serializable value;
036
037    protected String var;
038
039    protected String itemLabel;
040
041    protected Map<String, String> labels;
042
043    protected String itemValue;
044
045    protected Serializable itemDisabled;
046
047    protected Serializable itemRendered;
048
049    // needed by GWT serialization
050    protected WidgetSelectOptionImpl() {
051        super();
052    }
053
054    public WidgetSelectOptionImpl(String itemLabel, String itemValue) {
055        this(null, null, itemLabel, itemValue);
056    }
057
058    public WidgetSelectOptionImpl(Serializable value, String var, String itemLabel, String itemValue) {
059        this(value, var, itemLabel, itemValue, null, null);
060    }
061
062    public WidgetSelectOptionImpl(Serializable value, String var, String itemLabel, String itemValue,
063            Serializable itemDisabled, Serializable itemRendered) {
064        super();
065        this.value = value;
066        this.var = var;
067        this.itemLabel = itemLabel;
068        this.itemValue = itemValue;
069        this.itemDisabled = itemDisabled;
070        this.itemRendered = itemRendered;
071    }
072
073    @Override
074    public Serializable getValue() {
075        return value;
076    }
077
078    @Override
079    public String getVar() {
080        return var;
081    }
082
083    @Override
084    public String getItemLabel() {
085        return itemLabel;
086    }
087
088    @Override
089    public String getItemLabel(String locale) {
090        return labels.get(locale);
091    }
092
093    @Override
094    public Map<String, String> getItemLabels() {
095        return labels;
096    }
097
098    public void setItemLabels(Map<String, String> labels) {
099        this.labels = labels;
100    }
101
102    @Override
103    public String getItemValue() {
104        return itemValue;
105    }
106
107    @Override
108    public Serializable getItemDisabled() {
109        return itemDisabled;
110    }
111
112    @Override
113    public Serializable getItemRendered() {
114        return itemRendered;
115    }
116
117    @Override
118    public String getTagConfigId() {
119        StringBuilder builder = new StringBuilder();
120        builder.append(value).append(";");
121        builder.append(var).append(";");
122        builder.append(itemLabel).append(";");
123        if (labels != null) {
124            builder.append(labels.toString());
125        }
126        builder.append(";");
127        builder.append(itemValue).append(";");
128        if (itemDisabled != null) {
129            builder.append(itemDisabled.toString());
130        }
131        builder.append(";");
132        if (itemRendered != null) {
133            builder.append(itemRendered.toString());
134        }
135        builder.append(";");
136
137        Integer intValue = Integer.valueOf(builder.toString().hashCode());
138        return intValue.toString();
139    }
140
141    @Override
142    public WidgetSelectOption clone() {
143        WidgetSelectOptionImpl clone = new WidgetSelectOptionImpl(value, var, itemLabel, itemValue, itemDisabled,
144                itemRendered);
145        if (labels != null) {
146            clone.setItemLabels(new HashMap<>(labels));
147        }
148        return clone;
149    }
150
151    /**
152     * @since 7.2
153     */
154    @Override
155    public boolean equals(Object obj) {
156        if (!(obj instanceof WidgetSelectOptionImpl)) {
157            return false;
158        }
159        if (obj == this) {
160            return true;
161        }
162        WidgetSelectOptionImpl w = (WidgetSelectOptionImpl) obj;
163        return new EqualsBuilder().append(value, w.value).append(var, w.var).append(itemLabel, w.itemLabel).append(
164                labels, w.labels).append(itemValue, w.itemValue).append(itemDisabled, w.itemDisabled).append(
165                itemRendered, w.itemRendered).isEquals();
166    }
167
168}