/* * #! * Ontopoly Editor * #- * Copyright (C) 2001 - 2013 The Ontopia Project * #- * 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 ontopoly.components; import ontopoly.model.FieldAssignment; import ontopoly.model.FieldInstance; import ontopoly.model.RoleField; import ontopoly.models.FieldDefinitionModel; import ontopoly.models.FieldInstanceModel; import ontopoly.models.FieldValueModel; import ontopoly.models.FieldValuesModel; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.FeedbackPanel; public class FieldInstanceAssociationUnaryPanel extends AbstractFieldInstancePanel { public FieldInstanceAssociationUnaryPanel(String id, final FieldInstanceModel fieldInstanceModel, final boolean readonly) { super(id, fieldInstanceModel); FieldInstance fieldInstance = fieldInstanceModel.getFieldInstance(); FieldAssignment fieldAssignment = fieldInstance.getFieldAssignment(); RoleField fieldDefinition = (RoleField)fieldAssignment.getFieldDefinition(); add(new FieldDefinitionLabel("fieldLabel", new FieldDefinitionModel(fieldDefinition))); // set up container this.fieldValuesContainer = new WebMarkupContainer("fieldValuesContainer"); fieldValuesContainer.setOutputMarkupId(true); add(fieldValuesContainer); // add feedback panel this.feedbackPanel = new FeedbackPanel("feedback", new AbstractFieldInstancePanelFeedbackMessageFilter()); feedbackPanel.setOutputMarkupId(true); fieldValuesContainer.add(feedbackPanel); // add field values component(s) this.fieldValuesModel = new FieldValuesModel(fieldInstanceModel); // NOTE: no need to do any sorting here this.listView = new ListView<FieldValueModel>("fieldValues", fieldValuesModel) { // NOTE: no need to validate cardinality here // @Override // protected void onBeforeRender() { // validateCardinality(FieldInstanceAssociationUnaryPanel.this); // super.onBeforeRender(); // } public void populateItem(final ListItem<FieldValueModel> item) { FieldValueModel fieldValueModel = item.getModelObject(); // TODO: make sure non-existing value field gets focus if last edit happened there // unary FieldInstanceAssociationUnaryField unaryField = new FieldInstanceAssociationUnaryField("fieldValue", fieldValueModel, readonly); unaryField.getCheckBox().add(new FieldUpdatingBehaviour(false)); item.add(unaryField); addNewFieldValueCssClass(item, fieldValuesModel, fieldValueModel); } }; listView.setReuseItems(true); fieldValuesContainer.add(listView); } }