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.WidgetSelectOptions;
026
027/**
028 * @author Anahide Tchertchian
029 * @since 5.4.2
030 */
031public class WidgetSelectOptionsImpl implements WidgetSelectOptions {
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    protected String ordering;
050
051    protected Boolean caseSensitive;
052
053    // needed by GWT serialization
054    protected WidgetSelectOptionsImpl() {
055        super();
056    }
057
058    public WidgetSelectOptionsImpl(Serializable value, String var, String itemLabel, String itemValue) {
059        this(value, var, itemLabel, itemValue, null, null);
060    }
061
062    public WidgetSelectOptionsImpl(Serializable value, String var, String itemLabel, String itemValue,
063            Serializable itemDisabled, Serializable itemRendered) {
064        this(value, var, itemLabel, itemValue, itemDisabled, itemRendered, null, null);
065    }
066
067    public WidgetSelectOptionsImpl(Serializable value, String var, String itemLabel, String itemValue,
068            Serializable itemDisabled, Serializable itemRendered, String ordering, Boolean caseSensitive) {
069        super();
070        this.value = value;
071        this.var = var;
072        this.itemLabel = itemLabel;
073        this.itemValue = itemValue;
074        this.itemDisabled = itemDisabled;
075        this.itemRendered = itemRendered;
076        this.ordering = ordering;
077        this.caseSensitive = caseSensitive;
078    }
079
080    @Override
081    public Serializable getValue() {
082        return value;
083    }
084
085    @Override
086    public String getVar() {
087        return var;
088    }
089
090    @Override
091    public String getItemLabel() {
092        return itemLabel;
093    }
094
095    @Override
096    public String getItemLabel(String locale) {
097        return labels.get(locale);
098    }
099
100    @Override
101    public Map<String, String> getItemLabels() {
102        return labels;
103    }
104
105    public void setItemLabels(Map<String, String> labels) {
106        this.labels = labels;
107    }
108
109    @Override
110    public String getItemValue() {
111        return itemValue;
112    }
113
114    @Override
115    public Serializable getItemDisabled() {
116        return itemDisabled;
117    }
118
119    @Override
120    public Serializable getItemRendered() {
121        return itemRendered;
122    }
123
124    @Override
125    public String getOrdering() {
126        return ordering;
127    }
128
129    @Override
130    public Boolean getCaseSensitive() {
131        return caseSensitive;
132    }
133
134    @Override
135    public String getTagConfigId() {
136        StringBuilder builder = new StringBuilder();
137        builder.append(value).append(";");
138        builder.append(var).append(";");
139        builder.append(itemLabel).append(";");
140        if (labels != null) {
141            builder.append(labels.toString());
142        }
143        builder.append(";");
144        builder.append(itemValue).append(";");
145        if (itemDisabled != null) {
146            builder.append(itemDisabled.toString());
147        }
148        builder.append(";");
149        if (itemRendered != null) {
150            builder.append(itemRendered.toString());
151        }
152        builder.append(";");
153        builder.append(ordering).append(";");
154        builder.append(caseSensitive).append(";");
155
156        Integer intValue = Integer.valueOf(builder.toString().hashCode());
157        return intValue.toString();
158    }
159
160    @Override
161    public WidgetSelectOptions clone() {
162        WidgetSelectOptionsImpl clone = new WidgetSelectOptionsImpl(value, var, itemLabel, itemValue, itemDisabled,
163                itemRendered, ordering, caseSensitive);
164        if (labels != null) {
165            clone.setItemLabels(new HashMap<>(labels));
166        }
167        return clone;
168    }
169
170    /**
171     * @since 7.2
172     */
173    @Override
174    public boolean equals(Object obj) {
175        if (!(obj instanceof WidgetSelectOptionsImpl)) {
176            return false;
177        }
178        if (obj == this) {
179            return true;
180        }
181        WidgetSelectOptionsImpl w = (WidgetSelectOptionsImpl) obj;
182        return new EqualsBuilder().append(value, w.value).append(var, w.var).append(itemLabel, w.itemLabel).append(
183                labels, w.labels).append(itemValue, w.itemValue).append(itemDisabled, w.itemDisabled).append(
184                itemRendered, w.itemRendered).append(ordering, w.ordering).isEquals();
185    }
186}