com.zuunr.forms.FormFields Maven / Gradle / Ivy
/*
* Copyright 2018 Zuunr AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.zuunr.forms;
import com.zuunr.json.JsonArray;
import com.zuunr.json.JsonArraySupport;
import com.zuunr.json.JsonObject;
import com.zuunr.json.JsonValue;
import java.util.Comparator;
import java.util.List;
public class FormFields implements JsonArraySupport {
private JsonArray jsonArray;
private JsonObject formFieldsPerName = null;
public static FormFields EMPTY = new FormFields(JsonArray.EMPTY);
private FormFields(JsonValue jsonValue) {
this(jsonValue.getValue(JsonArray.class));
}
private FormFields(JsonArray jsonArray) {
this.jsonArray = jsonArray;
}
public FormFieldsBuilder builder() {
return new FormFieldsBuilder(jsonArray);
}
public List asList() {
return jsonArray.asList(FormField.class);
}
public JsonObject formFieldsByName() {
if (formFieldsPerName == null) {
JsonObject.JsonObjectBuilder builder = JsonObject.EMPTY.builder();
for (FormField formField : asList()) {
builder.put(formField.name(), formField);
}
formFieldsPerName = builder.build();
}
return formFieldsPerName;
}
public FormField of(String name) {
return formFieldsByName().get(name, JsonValue.NULL).as(FormField.class);
}
@Override
public JsonValue asJsonValue() {
return jsonArray.jsonValue();
}
@Override
public JsonArray asJsonArray() {
return jsonArray;
}
@Override
public String toString() {
return jsonArray.toString();
}
public static class FormFieldsBuilder {
private static ByNameComparator BY_NAME_COMPARATOR = new ByNameComparator();
private JsonArray.JsonArrayBuilder jsonArrayBuilder;
public FormFieldsBuilder(JsonArray jsonArray) {
this.jsonArrayBuilder = jsonArray.builder();
}
public FormFieldsBuilder add(FormField formField) {
jsonArrayBuilder.add(formField.asJsonObject());
return this;
}
public FormFieldsBuilder add(FormField.FormFieldBuilder formFieldBuilder) {
jsonArrayBuilder.add(formFieldBuilder.build().asJsonObject());
return this;
}
public FormFields build() {
return new FormFields(jsonArrayBuilder.build());
}
public FormFields buildSortedByName() {
return new FormFields(jsonArrayBuilder.buildSorted(BY_NAME_COMPARATOR));
}
public FormFields sortAndBuild() {
return new FormFields(jsonArrayBuilder.build());
}
private static class ByNameComparator implements Comparator {
@Override
public int compare(JsonValue o1, JsonValue o2) {
JsonObject formField1 = ((JsonValue) o1).getValue(JsonObject.class);
JsonObject formField2 = ((JsonValue) o2).getValue(JsonObject.class);
int result = formField1.get("name").getValue(String.class).compareTo(formField2.get("name").getValue(String.class));
if (result == 0) {
throw new RuntimeException("There can never be more than one form field per builder");
}
return result;
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy