/**
* Licensed to the Austrian Association for Software Tool Integration (AASTI)
* under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. The AASTI licenses this file to you 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 org.openengsb.ui.common.editor.fields;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.validation.IValidator;
import org.openengsb.core.api.descriptor.AttributeDefinition;
import org.openengsb.core.api.descriptor.AttributeDefinition.Option;
import org.openengsb.ui.common.editor.ModelFacade;
import org.openengsb.ui.common.model.LocalizableStringModel;
@SuppressWarnings("serial")
public class DropdownField extends AbstractField<String> {
public DropdownField(String id, IModel<String> model, AttributeDefinition attribute, IValidator<String> validator) {
super(id, model, attribute, validator);
}
@Override
protected ModelFacade<String> createFormComponent(AttributeDefinition attribute, IModel<String> model) {
final Map<String, LocalizableStringModel> labels = new HashMap<String, LocalizableStringModel>();
final List<String> values = new ArrayList<String>();
for (Option o : attribute.getOptions()) {
labels.put(o.getValue(), new LocalizableStringModel(this, o.getLabel()));
values.add(o.getValue());
}
DropDownChoice<String> choice = new DropDownChoice<String>("field", model, values,
new IChoiceRenderer<String>() {
@Override
public String getDisplayValue(String object) {
return labels.get(object).getObject();
}
@Override
public String getIdValue(String object, int index) {
return "" + index;
}
});
choice.setNullValid(!attribute.isRequired());
ModelFacade<String> retVal = new ModelFacade<String>();
retVal.setMainComponent(choice);
return retVal;
}
}