Example usage for org.apache.wicket.model LoadableDetachableModel setObject

List of usage examples for org.apache.wicket.model LoadableDetachableModel setObject

Introduction

In this page you can find the example usage for org.apache.wicket.model LoadableDetachableModel setObject.

Prototype

@Override
public void setObject(final T object) 

Source Link

Document

Manually loads the model with the specified object.

Usage

From source file:au.org.theark.disease.web.component.affection.form.DetailForm.java

License:Open Source License

@SuppressWarnings("unchecked")
public void initialiseDetailForm() {

    initDiseaseDDC();/*from w w w. j a va 2  s.co m*/
    initAffectionStatusDDC();

    detachableModel = new LoadableDetachableModel<List<Position>>() {

        @Override
        protected List<Position> load() {
            List<Position> positions = iArkDiseaseService
                    .getPositions(containerForm.getModelObject().getAffection());
            return positions;
        }
    };

    positionListEditor = new ListView<Position>("positionListEditor", detachableModel) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<Position> item) {
            final Position position = item.getModelObject();
            if (position != null) {
                position_storage.put(item.getIndex(), position);
            }

            List<Gene> availableGenes = new ArrayList<Gene>();
            if (containerForm.getModelObject().getAffection().getDisease() != null
                    && containerForm.getModelObject().getAffection().getDisease().getGenes() != null) {
                availableGenes = new ArrayList<Gene>(
                        containerForm.getModelObject().getAffection().getDisease().getGenes());
            }
            final DropDownChoice<Gene> geneDDC = new DropDownChoice<Gene>("affection.disease.genes",
                    new Model<Gene>(position.getGene()), availableGenes,
                    new ChoiceRenderer<Gene>("name", "id"));
            geneDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                private static final long serialVersionUID = 1L;

                protected void onUpdate(AjaxRequestTarget target) {
                    Gene selectedGene = iArkDiseaseService.getGeneByID(Long.parseLong(geneDDC.getValue()));
                    positionDDC.setChoices(new ArrayList<Position>(selectedGene.getPositions()));
                    target.add(positionDDC);
                }
            });

            geneDDC.setOutputMarkupId(true);
            item.add(geneDDC);

            List<Position> availablePositions = new ArrayList<Position>();
            if (geneDDC.getModelObject() != null) {
                availablePositions = new ArrayList<Position>(geneDDC.getModelObject().getPositions());
            }
            LoadableDetachableModel<Position> positionModel = new LoadableDetachableModel<Position>(position) {

                @Override
                protected Position load() {
                    return position;
                }
            };
            if (position != null) {
                positionModel.setObject(position);
            }
            positionDDC = new DropDownChoice<Position>("affection.positions", positionModel, availablePositions,
                    new ChoiceRenderer<Position>("name", "id")) {
                @Override
                protected void onBeforeRender() {
                    if (geneDDC.getModelObject() != null && geneDDC.getModelObject().getId() != null
                            && !geneDDC.getModelObject().getPositions().isEmpty()) {
                        this.setChoices(new ArrayList<Position>(geneDDC.getModelObject().getPositions()));
                    }
                    if (this.getModelObject().getName() != null) {
                        position_storage.put(item.getIndex(), this.getModelObject());
                    }
                    super.onBeforeRender();
                }
            };
            positionDDC.setOutputMarkupId(true);
            positionDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                private static final long serialVersionUID = 1L;

                protected void onUpdate(AjaxRequestTarget target) {
                    Position selectedPosition = positionDDC.getModelObject();
                    if (selectedPosition.getName() != null) {
                        position_storage.put(item.getIndex(), selectedPosition);
                    }
                }
            });
            item.add(positionDDC);

            item.add(new AjaxDeleteButton(Constants.DELETE, new Model<String>("Are you sure?"),
                    new Model<String>("Delete")) {

                private static final long serialVersionUID = 1L;

                protected void onDeleteConfirmed(AjaxRequestTarget target, Form<?> form) {
                    try {
                        //need to remove save containerform post position removal
                        position_storage.remove(item.getIndex());
                        positionListEditor.getModelObject().remove(position);
                        containerForm.getModelObject().setAffection(iArkDiseaseService
                                .getAffectionByID(containerForm.getModelObject().getAffection().getId()));

                        save(containerForm, target);
                        target.add(dataViewPanel);
                        deleteCompleted("Row '" + position.getName() + "' deleted successfully.", true);
                    } catch (Exception e) {
                        e.printStackTrace();
                        target.add(form);
                        deleteCompleted("Error deleting row '" + position.getName()
                                + "'. Row has data associated with it.", false);
                    }
                }

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                    onDeleteConfirmed(target, form);
                    target.add(form);
                    target.add(feedBackPanel);
                }
            });

            item.add(new AttributeModifier(Constants.CLASS, new AbstractReadOnlyModel() {
                @Override
                public String getObject() {
                    return (item.getIndex() % 2 == 1) ? Constants.EVEN : Constants.ODD;
                }
            }));
        }
    };

    positionListEditor.setOutputMarkupId(true);

    newPositionBtn = new AjaxEditorButton(Constants.NEW) {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(form);
        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            positionListEditor.getModelObject().add(new Position());
            target.add(form);
        }
    }.setDefaultFormProcessing(false);

    arkCrudContainerVO.getDetailPanelFormContainer().add(newPositionBtn);

    PropertyModel<Date> recordDateModel = new PropertyModel<Date>(containerForm.getModel(),
            "affection.recordDate");
    recordDateTxtFld = new DateTextField("recordDate", recordDateModel) {
        @Override
        protected void onBeforeRender() {
            this.setModel(new PropertyModel<Date>(containerForm.getModel(), "affection.recordDate"));
            super.onBeforeRender();
        }
    };
    ArkDatePicker recordDatePicker = new ArkDatePicker();
    recordDatePicker.bind(recordDateTxtFld);
    recordDateTxtFld.add(recordDatePicker);

    AffectionCustomDataVO affectionCustomDataVO = new AffectionCustomDataVO();
    affectionCustomDataVO.setCustomFieldDataList(new ArrayList<AffectionCustomFieldData>(
            cpModel.getObject().getAffection().getAffectionCustomFieldDataSets()));

    final CompoundPropertyModel<AffectionCustomDataVO> affectionCustomDataModel = new CompoundPropertyModel<AffectionCustomDataVO>(
            affectionCustomDataVO);
    dataViewPanel = new AffectionCustomDataDataViewPanel("dataViewPanel", affectionCustomDataModel)
            .initialisePanel(
                    iArkCommonService.getUserConfig(Constants.CONFIG_CUSTOM_FIELDS_PER_PAGE).getIntValue());
    customFieldForm = new AbstractCustomDataEditorForm<AffectionCustomDataVO>("customFieldForm",
            affectionCustomDataModel, feedBackPanel) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onEditSave(AjaxRequestTarget target, Form<?> form) {
            for (AffectionCustomFieldData acfd : this.cpModel.getObject().getCustomFieldDataList()) {
                iArkDiseaseService.save(acfd);
            }
        }

        @Override
        public void onBeforeRender() {
            if (!isNew()) {
                this.setModelObject(new AffectionCustomDataVO(iArkDiseaseService
                        .getAffectionCustomFieldData(containerForm.getModelObject().getAffection())));
            }
            this.buttonsPanelWMC.setVisible(false);
            super.onBeforeRender();
        }
    }.initialiseForm();

    pageNavigator = new AjaxPagingNavigator("navigator", dataViewPanel.getDataView()) {
        @Override
        protected void onAjaxEvent(AjaxRequestTarget target) {
            target.add(customFieldForm.getDataViewWMC());
            target.add(this);
        }
    };
    pageNavigator.setOutputMarkupId(true);
    customFieldForm.getDataViewWMC().add(dataViewPanel);
    arkCrudContainerVO.getDetailPanelFormContainer().add(pageNavigator);
    attachValidators();
    addDetailFormComponents();

    deleteButton.setVisible(false);
}