/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo Framework
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) 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 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.view.internal.components.select;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.util.StringUtils;
import com.qcadoo.view.internal.components.FieldComponentState;
public final class SelectComponentState extends FieldComponentState {
private final SelectComponentPattern selectComponentPattern;
public SelectComponentState(final SelectComponentPattern selectComponentPattern, final List<String> values) {
super(selectComponentPattern);
this.selectComponentPattern = selectComponentPattern;
if (!values.isEmpty()){
requestRender();
}
}
@Override
protected JSONObject renderContent() throws JSONException {
JSONObject json = super.renderContent();
JSONArray valuesJson = selectComponentPattern.getValuesJson(getLocale());
includeDeactivatedValue(valuesJson, getFieldValue());
json.put("values", valuesJson);
return json;
}
private void includeDeactivatedValue(final JSONArray valuesJson, final Object fieldValue) throws JSONException {
if(StringUtils.isEmpty(fieldValue)){
return;
}
int targetIndex = -1;
String value = (String) fieldValue;
for(int i = 0 ; i < valuesJson.length(); ++i){
int result = value.compareTo(valuesJson.getJSONObject(i).getString("key"));
if(result == 0){
return;
} else if(result > 0) {
targetIndex = i;
}
}
for(int i = valuesJson.length() -1; i > targetIndex; --i ){
valuesJson.put(i+1, valuesJson.get(i));
}
JSONObject obj = new JSONObject();
obj.put("key", fieldValue);
obj.put("value", fieldValue);
valuesJson.put(targetIndex + 1, obj);
}
}