Example usage for org.apache.wicket.extensions.ajax.markup.html.modal ModalWindow setTitle

List of usage examples for org.apache.wicket.extensions.ajax.markup.html.modal ModalWindow setTitle

Introduction

In this page you can find the example usage for org.apache.wicket.extensions.ajax.markup.html.modal ModalWindow setTitle.

Prototype

public ModalWindow setTitle(IModel<String> title) 

Source Link

Document

Sets the title of window.

Usage

From source file:net.unit8.longadeseo.page.plugin.PluginListPage.java

License:Apache License

public PluginListPage() {
    add(new Label("pageTitle", "?"));
    pluginRegistryList = pluginRegistryService.findAll();

    final ModalWindow window = new ModalWindow("testWindow");
    window.setTitle("test");
    add(window);//from  w w w .j a  va  2s .  c  o  m

    add(new ListView<PluginRegistry>("pluginRegistryList", pluginRegistryList) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(ListItem<PluginRegistry> item) {
            final PluginRegistry pluginRegistry = item.getModelObject();
            Form<PluginRegistry> pluginUpdateForm = new Form<PluginRegistry>("pluginUpdateForm",
                    new CompoundPropertyModel<PluginRegistry>(pluginRegistry));
            item.add(pluginUpdateForm);

            final Model<String> includes = new Model<String>(
                    StringUtils.join(pluginRegistry.getIncludes(), "\n"));
            pluginUpdateForm.add(new Label("name"))
                    .add(new AjaxEditableMultiLineLabel<PluginRegistry>("description") {
                        private static final long serialVersionUID = 1L;

                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
                            pluginRegistryService.update(pluginRegistry);
                            super.onSubmit(target);
                        }
                    }).add(new Label("pluginClass", pluginRegistry.getPluginClass().getName()))
                    .add(new AjaxEditableMultiLineLabel<String>("pluginIncludes", includes) {
                        private static final long serialVersionUID = 1L;

                        @Override
                        protected void onSubmit(AjaxRequestTarget target) {
                            pluginRegistry.setIncludes(includes.getObject().split("\n"));
                            pluginRegistryService.update(pluginRegistry);
                            super.onSubmit(target);
                        }
                    }).add(new Button("deleteButton") {
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onSubmit() {
                            pluginRegistryService.delete(pluginRegistry);
                            pluginRegistryList.remove(pluginRegistry);
                            super.onSubmit();
                        }
                    }).add(new AjaxButton("activeButton",
                            new Model<String>(activeButtonLabel(pluginRegistry.isActive()))) {
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onSubmit(AjaxRequestTarget target, Form<?> form) {
                            pluginRegistry.setActive(!pluginRegistry.isActive());
                            this.setModelObject(activeButtonLabel(pluginRegistry.isActive()));
                            pluginRegistryService.update(pluginRegistry);
                            PluginManager pluginManager = (PluginManager) WebApplication.get()
                                    .getServletContext().getAttribute(WebdavServlet.PLUGIN_MANAGER_KEY);
                            pluginManager.loadPlugins();
                            target.add(this);
                        }
                    }.setOutputMarkupId(true)).add(new AjaxButton("testButton") {
                        private static final long serialVersionUID = 1L;

                        @Override
                        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                            window.setPageCreator(new ModalWindow.PageCreator() {
                                private static final long serialVersionUID = 1L;

                                public Page createPage() {
                                    return new PluginTestPage(pluginRegistry);
                                }
                            });
                            window.show(target);
                        }
                    });
            final WebMarkupContainer optionsContainer = new WebMarkupContainer("optionsContainer");
            final ListView<PluginOptionEntry> options = new ListView<PluginOptionEntry>("options",
                    pluginRegistry.getPlugin().getOptions()) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void populateItem(final ListItem<PluginOptionEntry> item) {
                    final PluginOptionEntry option = item.getModelObject();
                    item.add(new Label("name", option.getLabel()));
                    switch (option.getFormType()) {
                    case TEXTAREA:
                        item.add(new AjaxEditableMultiLineLabel<PluginOptionEntry>("value",
                                new PropertyModel<PluginOptionEntry>(option, "value")) {
                            private static final long serialVersionUID = 1L;

                            @Override
                            public void onEdit(AjaxRequestTarget target) {
                                String selector = ".codemirror:eq(" + (item.getIndex() - 1) + ") textarea";
                                target.appendJavaScript("CodeMirror.fromTextArea($('" + selector
                                        + "')[0], {mode: 'text/x-ruby', lineNumbers: true,indentUnit: 2,tabMode: 'shift',matchBrackets: true})"
                                        + ".on('blur', function(cm) { cm.save(); $('" + selector
                                        + "').trigger('blur') });");
                                super.onEdit(target);
                            }

                            @Override
                            protected void onSubmit(AjaxRequestTarget target) {
                                pluginRegistry.getPlugin().setOption(option.getName(),
                                        ValueFactoryImpl.getInstance().createValue(option.getStringValue()));
                                pluginRegistryService.update(pluginRegistry);
                                super.onSubmit(target);
                            }
                        }.add(new AttributeModifier("class", "codemirror")));
                        break;
                    default:
                        item.add(new AjaxEditableLabel<PluginOptionEntry>("value",
                                new PropertyModel<PluginOptionEntry>(option, "value")) {
                            private static final long serialVersionUID = 1L;

                            @Override
                            protected void onSubmit(AjaxRequestTarget target) {
                                pluginRegistry.getPlugin().setOption(option.getName(),
                                        ValueFactoryImpl.getInstance().createValue(option.getStringValue()));
                                pluginRegistryService.update(pluginRegistry);
                                super.onSubmit(target);
                            }
                        });
                        break;
                    }
                }
            };
            optionsContainer.add(options);
            pluginUpdateForm.add(optionsContainer);

        }

    });

    Form<ValueMap> form = new PluginRegistryForm("pluginRegistryForm");
    add(form);
}

From source file:nl.knaw.dans.common.wicket.components.popup.confirm.ConfirmPanel.java

License:Apache License

protected ModalWindow createConfirmModal(String id, String modalMessageText, String modalTitleText) {
    ModalWindow modalWindow = new ModalWindow("confirmModal");
    modalWindow.setTitle(modalTitleText);
    modalWindow.setUseInitialHeight(false);
    modalWindow.setInitialWidth(400);/*from w w w.  jav  a  2 s. c  o  m*/
    modalWindow.setCookieName(id);

    modalWindow.setContent(new YesNoPanel(modalWindow, modalMessageText, answer));

    modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
        private static final long serialVersionUID = -3911323073933533800L;

        @Override
        public void onClose(AjaxRequestTarget target) {
            if (answer.isAnswer()) {
                onConfirm(target);
            } else {
                onCancel(target);
            }
        }
    });
    return modalWindow;
}

From source file:nl.knaw.dans.dccd.common.web.confirm.ConfirmDialogPanel.java

License:Apache License

private void initModalWindow(final ModalWindow modalWindow) {
    modalWindow.setTitle("Please confirm");
    // use label from property files when available
    try {//w  w  w .j av a  2  s .c  o m
        String title = getString("confirmDialog.title");
        //if (title != null && !title.isEmpty())
        modalWindow.setTitle(title);
    } catch (MissingResourceException e) {
        // do Nothing
    }

    modalWindow.setInitialHeight(150);
    modalWindow.setInitialWidth(250);
}

From source file:nl.mpi.lamus.web.components.ButtonPanel.java

License:Open Source License

private ModalWindow createConfirmationModalWindow(WorkspaceSubmissionType submissionType) {

    String id;//from w w  w . ja  v  a 2 s .com
    String title;
    String cookieName;
    String confirmationInfoText = null;
    String confirmationText;
    if (WorkspaceSubmissionType.SUBMIT_WORKSPACE.equals(submissionType)) {
        id = "modalConfirmSubmit";
        title = "Submit Workspace";
        cookieName = "modal-confirm-submit";
        confirmationInfoText = getLocalizer().getString("submit_workspace_info", this);
        confirmationText = getLocalizer().getString("submit_workspace_confirm", this);
    } else if (WorkspaceSubmissionType.DELETE_WORKSPACE.equals(submissionType)) {
        id = "modalConfirmDelete";
        title = "Delete Workspace";
        cookieName = "modal-confirm-delete";
        confirmationText = getLocalizer().getString("delete_workspace_confirm", this);
    } else {
        throw new UnsupportedOperationException("Submission type not supported");
    }

    final ConfirmationOptions options = new ConfirmationOptions(false, false, submissionType,
            confirmationInfoText, confirmationText);

    ModalWindow modalConfirm = new ModalWindow(id);
    modalConfirm.setContent(new ConfirmPanel(modalConfirm.getContentId(), modalConfirm, options));
    modalConfirm.setTitle(title);
    modalConfirm.setCookieName(cookieName);
    modalConfirm.setWindowClosedCallback((new ModalWindow.WindowClosedCallback() {
        @Override
        public void onClose(AjaxRequestTarget art) {
            if (options.isConfirmed()) {
                if (WorkspaceSubmissionType.SUBMIT_WORKSPACE.equals(options.getWorkspaceSubmissionType())) {
                    onSubmitConfirm(art, options.isKeepUnlinkedFiles());
                } else if (WorkspaceSubmissionType.DELETE_WORKSPACE
                        .equals(options.getWorkspaceSubmissionType())) {
                    onDeleteConfirm(art, options.isKeepUnlinkedFiles());
                } else {
                    throw new UnsupportedOperationException("Confirmation type not supported");
                }
            } else {
                onCancel(art);
            }
        }
    }));

    return modalConfirm;
}

From source file:nl.mpi.lamus.web.components.ConfirmPanel.java

License:Open Source License

public ConfirmPanel(String id, final ModalWindow modalWindow, final ConfirmationOptions options) {
    super(id);//from   w w  w  .  ja  v  a 2 s.  c o m

    Form confirmSubmitForm = new Form("confirmSubmitForm");

    MultiLineLabel infoText = new MultiLineLabel("confirmation_info_text", options.getConfirmationInfoText());

    confirmSubmitForm.add(infoText);

    confirmSubmitForm.add(new Label("confirmation_text", options.getConfirmationText()));

    CheckBox keepUnlinkedFilesCheckbox = new CheckBox("checkbox", Model.of(options.isKeepUnlinkedFiles())) {

        @Override
        protected void onSelectionChanged(Boolean newSelection) {
            options.setKeepUnlinkedFiles(newSelection);
        }

        @Override
        protected void onModelChanged() {
            options.setKeepUnlinkedFiles(getModelObject());
        }
    };

    keepUnlinkedFilesCheckbox.setLabel(Model.of("keep unlinked files"));
    confirmSubmitForm.add(keepUnlinkedFilesCheckbox);

    modalWindow.setTitle("Please confirm");

    if (options.getConfirmationInfoText() != null && !options.getConfirmationInfoText().isEmpty()) {
        modalWindow.setInitialHeight(300);
        modalWindow.setInitialWidth(580);
    } else {
        infoText.setVisible(Boolean.FALSE);
        modalWindow.setInitialHeight(200);
        modalWindow.setInitialWidth(350);
    }

    AjaxButton yesButton = new AjaxButton("yesButton", confirmSubmitForm) {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form form) {
            if (target != null) {
                options.setConfirmed(true);
                modalWindow.close(target);
            }
        }
    };

    AjaxButton noButton = new AjaxButton("noButton", confirmSubmitForm) {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form form) {
            if (target != null) {
                options.setConfirmed(false);
                modalWindow.close(target);
            }
        }
    };

    confirmSubmitForm.add(yesButton);
    confirmSubmitForm.add(noButton);

    add(confirmSubmitForm);
}

From source file:nl.mpi.lamus.web.pages.LamusPage.java

License:Open Source License

private ModalWindow createAboutModalWindow() {

    ModalWindow modalAbout = new ModalWindow("modalAbout");
    modalAbout.setContent(new AboutPanel(modalAbout.getContentId()));
    modalAbout.setTitle("About LAMUS 2");
    modalAbout.setCookieName("modal-about");
    modalAbout.setCloseButtonCallback(new ModalWindow.CloseButtonCallback() {
        @Override/*from  w w  w . j  a  va 2  s.  c  o m*/
        public boolean onCloseButtonClicked(AjaxRequestTarget art) {
            return true;
        }
    });
    modalAbout.setWindowClosedCallback((new ModalWindow.WindowClosedCallback() {
        @Override
        public void onClose(AjaxRequestTarget art) {
        }
    }));

    return modalAbout;
}

From source file:ontopoly.components.DeleteTopicFunctionBoxPanel.java

License:Apache License

public DeleteTopicFunctionBoxPanel(String id) {
    super(id);// ww  w . j  a v a2 s . c o m
    add(new Label("title", new ResourceModel("delete.this.topic")));

    final ModalWindow deleteModal = new ModalWindow("deleteModal");
    ModalConfirmPage modalDeletePanel = new ModalConfirmPage(deleteModal.getContentId()) {
        @Override
        protected void onCloseCancel(AjaxRequestTarget target) {
            // close modal
            deleteModal.close(target);
        }

        @Override
        protected void onCloseOk(AjaxRequestTarget target) {
            // close modal
            deleteModal.close(target);
            // notify listeners
            Topic instance = (Topic) getTopicModel().getObject();
            onDeleteConfirmed(instance);

            // remove dependent objects
            AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
            Collection<Topic> dependentObjects = instance.getDependentObjects();
            Iterator<Topic> diter = dependentObjects.iterator();
            while (diter.hasNext()) {
                Topic dtopic = diter.next();
                dtopic.remove(page);
            }
            // remove topic
            instance.remove(page);
        }

        @Override
        protected Component getTitleComponent(String id) {
            return new Label(id, new ResourceModel("delete.confirm"));
        }

        @Override
        protected Component getMessageComponent(String id) {
            return new Label(id, new ResourceModel("delete.message.topic"));
        }
    };

    deleteModal.setContent(modalDeletePanel);
    deleteModal.setTitle(new ResourceModel("ModalWindow.title.delete.topic").getObject().toString());
    deleteModal.setCookieName("deleteModal");
    add(deleteModal);

    Button createButton = new Button("deleteButton");
    createButton.add(new AjaxFormComponentUpdatingBehavior("onclick") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            WicketHacks.disableWindowUnloadConfirmation(target);
            deleteModal.show(target);
        }
    });
    add(createButton);
}

From source file:ontopoly.components.DeleteTopicMapFunctionBoxPanel.java

License:Apache License

public DeleteTopicMapFunctionBoxPanel(String id) {
    super(id);//w  w  w.  j  a  v  a 2  s. c om
    add(new Label("title", new ResourceModel("delete.this.topic.map")));

    final ModalWindow deleteModal = new ModalWindow("deleteModal");
    ModalConfirmPage modalDeletePanel = new ModalConfirmPage(deleteModal.getContentId()) {
        @Override
        protected void onCloseCancel(AjaxRequestTarget target) {
            // close modal
            deleteModal.close(target);
        }

        @Override
        protected void onCloseOk(AjaxRequestTarget target) {
            // close modal
            deleteModal.close(target);
            // notify listeners
            TopicMap topicMap = getTopicMapModel().getTopicMap();
            onDeleteConfirmed(topicMap);
            // delete topic map
            OntopolyContext.getOntopolyRepository().deleteTopicMap(topicMap.getId());
        }

        @Override
        protected Component getTitleComponent(String id) {
            return new Label(id, new ResourceModel("delete.confirm"));
        }

        @Override
        protected Component getMessageComponent(String id) {
            return new Label(id, new ResourceModel("delete.message.topicmap"));
        }
    };

    deleteModal.setContent(modalDeletePanel);
    deleteModal.setTitle(new ResourceModel("ModalWindow.title.delete.topicmap").getObject().toString());
    deleteModal.setCookieName("deleteModal");
    add(deleteModal);

    Button createButton = new Button("deleteButton");
    createButton.add(new AjaxFormComponentUpdatingBehavior("onclick") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            WicketHacks.disableWindowUnloadConfirmation(target);
            deleteModal.show(target);
        }
    });
    add(createButton);
}

From source file:ontopoly.components.FieldInstanceAssociationBinaryPanel.java

License:Apache License

protected FieldInstanceAssociationBinaryPanel(String id, final FieldInstanceModel fieldInstanceModel,
        final FieldsViewModel fieldsViewModel, final boolean readonlyField, final boolean embedded,
        final boolean traversable) {
    super(id, fieldInstanceModel);

    FieldInstance fieldInstance = fieldInstanceModel.getFieldInstance();
    FieldAssignment fieldAssignment = fieldInstance.getFieldAssignment();
    RoleField roleField = (RoleField) fieldAssignment.getFieldDefinition();
    this.roleFieldModel = new RoleFieldModel(roleField);

    add(new FieldDefinitionLabel("fieldLabel", new FieldDefinitionModel(roleField)));

    // set up container
    this.fieldValuesContainer = new WebMarkupContainer("fieldValuesContainer");
    fieldValuesContainer.setOutputMarkupId(true);
    add(fieldValuesContainer);/*from   w w  w  .ja va 2s  .  c o m*/

    // add feedback panel
    this.feedbackPanel = new FeedbackPanel("feedback", new AbstractFieldInstancePanelFeedbackMessageFilter());
    feedbackPanel.setOutputMarkupId(true);
    fieldValuesContainer.add(feedbackPanel);

    this.confirmDeletePanel = new ConfirmDeletePanel("confirm", fieldValuesContainer) {
        @Override
        protected void onDeleteTopic(AjaxRequestTarget target) {
            super.onDeleteTopic(target);
            FieldInstanceAssociationBinaryPanel.this.onUpdate(target);
        }
    };
    confirmDeletePanel.setOutputMarkupId(true);
    fieldValuesContainer.add(confirmDeletePanel);

    RoleField ofield = (RoleField) roleField.getFieldsForOtherRoles().iterator().next();
    this.ofieldModel = new RoleFieldModel(ofield);
    this.topicModel = new TopicModel<Topic>(fieldInstance.getInstance());

    InterfaceControl interfaceControl = ofield.getInterfaceControl();

    WebMarkupContainer fieldValuesList = new WebMarkupContainer("fieldValuesList");
    fieldValuesContainer.add(fieldValuesList);

    final String fieldDefinitionId = roleField.getId();

    EditMode editMode = roleField.getEditMode();

    final boolean ownedvalues = editMode.isOwnedValues();
    final boolean allowAdd = !(ownedvalues || editMode.isNewValuesOnly() || editMode.isNoEdit());
    final boolean allowCreate = !(editMode.isExistingValuesOnly() || editMode.isNoEdit());
    final boolean allowRemove = !editMode.isNoEdit();
    final boolean sortable = roleField.isSortable();

    // add field values component(s)
    // TODO: consider moving ordering logic into object model
    if (sortable) {
        // HACK: retrieving values ourselves so that we can get them ordered
        this.fieldValuesModel = new FieldValuesModel(fieldInstanceModel) {
            @Override
            protected List<RoleField.ValueIF> getValues(FieldInstance fieldInstance) {
                Topic instance = fieldInstance.getInstance();
                RoleField roleField = (RoleField) fieldInstance.getFieldAssignment().getFieldDefinition();
                return roleField.getOrderedValues(instance, ofieldModel.getRoleField());
            }
        };
    } else {
        Comparator<Object> comparator = new RoleFieldValueComparator(topicModel, ofieldModel);
        this.fieldValuesModel = new FieldValuesModel(fieldInstanceModel, comparator);
    }

    this.listView = new ListView<FieldValueModel>("fieldValues", fieldValuesModel) {
        @Override
        protected void onBeforeRender() {
            validateCardinality();
            super.onBeforeRender();
        }

        public void populateItem(final ListItem<FieldValueModel> item) {
            FieldValueModel fieldValueModel = item.getModelObject();

            // get topic
            Topic oplayer = null;
            if (fieldValueModel.isExistingValue()) {
                RoleField.ValueIF valueIf = (RoleField.ValueIF) fieldValueModel.getObject();
                RoleField ofield = ofieldModel.getRoleField();
                oplayer = valueIf.getPlayer(ofield, fieldInstanceModel.getFieldInstance().getInstance());
            }
            final String topicMapId = (oplayer == null ? null : oplayer.getTopicMap().getId());
            final String topicId = (oplayer == null ? null : oplayer.getId());

            // acquire lock for embedded topic
            final boolean isLockedByOther;
            if (embedded && fieldValueModel.isExistingValue()) {
                OntopolySession session = (OntopolySession) Session.get();
                String lockerId = session.getLockerId(getRequest());
                LockManager.Lock lock = session.lock(oplayer, lockerId);
                isLockedByOther = !lock.ownedBy(lockerId);
            } else {
                isLockedByOther = false;
            }
            final boolean readonly = readonlyField || isLockedByOther;

            boolean itemSortable = !readonly && sortable && fieldValueModel.isExistingValue();
            if (itemSortable) {
                item.add(new DroppableBehavior(fieldDefinitionId) {
                    @Override
                    protected MarkupContainer getDropContainer() {
                        return listView;
                    }

                    @Override
                    protected void onDrop(Component component, AjaxRequestTarget target) {
                        FieldValueModel fvm_dg = (FieldValueModel) component.getDefaultModelObject();
                        FieldValueModel fvm_do = (FieldValueModel) getComponent().getDefaultModelObject();
                        RoleField.ValueIF rfv_dg = (RoleField.ValueIF) fvm_dg.getFieldValue();
                        RoleField.ValueIF rfv_do = (RoleField.ValueIF) fvm_do.getFieldValue();

                        Topic topic = topicModel.getTopic();
                        RoleField rfield = roleFieldModel.getRoleField();
                        RoleField ofield = ofieldModel.getRoleField();
                        rfield.moveAfter(topic, ofield, rfv_dg, rfv_do);
                        getModel().detach(); // FIXME: better if we could just tweak model directly without detaching
                        listView.removeAll();
                        target.addComponent(fieldValuesContainer);
                    }
                });
                item.add(new DraggableBehavior(fieldDefinitionId));
            }

            item.setOutputMarkupId(true);
            WebMarkupContainer fieldIconContainer = new WebMarkupContainer("fieldIconContainer");
            fieldIconContainer
                    .add(new OntopolyImage("fieldIcon", "dnd.gif", new ResourceModel("icon.dnd.reorder")));
            fieldIconContainer.setVisible(itemSortable);
            item.add(fieldIconContainer);

            final WebMarkupContainer fieldValueButtons = new WebMarkupContainer("fieldValueButtons");
            fieldValueButtons.setOutputMarkupId(true);
            item.add(fieldValueButtons);

            FieldInstanceRemoveButton removeButton = new FieldInstanceRemoveButton("remove", "remove-value.gif",
                    fieldValueModel) {
                @Override
                public boolean isVisible() {
                    boolean visible = !readonly && fieldValueModel.isExistingValue() && allowRemove; // && !isValueProtected;
                    if (visible) {
                        // filter by player
                        AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                        RoleField.ValueIF value = (RoleField.ValueIF) fieldValueModel.getObject();
                        Topic[] players = value.getPlayers();
                        for (int i = 0; i < players.length; i++) {
                            if (!page.filterTopic(players[i]))
                                return false;
                        }
                    }
                    return visible;
                }

                @Override
                public void onClick(AjaxRequestTarget target) {
                    // FIXME: could reuse some of these variable from above
                    FieldInstance fieldInstance = fieldValueModel.getFieldInstanceModel().getFieldInstance();
                    Object value = fieldValueModel.getObject();

                    Topic currentTopic = fieldInstance.getInstance();

                    RoleField currentField = (RoleField) fieldInstance.getFieldAssignment()
                            .getFieldDefinition();
                    RoleField selectedField = ofieldModel.getRoleField();

                    RoleField.ValueIF valueIf = (RoleField.ValueIF) value;
                    Topic selectedTopic = valueIf.getPlayer(selectedField, fieldInstance.getInstance());

                    // check with page to see if add is allowed
                    boolean changesMade = false;
                    AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                    if (page.isRemoveAllowed(currentTopic, currentField, selectedTopic, selectedField)) {
                        if (ownedvalues) {

                            // don't remove system topics
                            if (!selectedTopic.isSystemTopic()) {
                                FieldInstanceAssociationBinaryPanel.this.confirmDeletePanel
                                        .setTopic(selectedTopic);
                                changesMade = true;
                            }
                        } else {
                            fieldInstance.removeValue(value, page.getListener());
                            changesMade = true;
                        }
                    }
                    // notify association panel so that it can update itself
                    if (changesMade)
                        FieldInstanceAssociationBinaryPanel.this.onUpdate(target);
                }
            };
            fieldValueButtons.add(removeButton);

            // embedded goto button
            OntopolyImageLink gotoButton = new OntopolyImageLink("goto", "goto.gif",
                    new ResourceModel("icon.goto.topic")) {
                @Override
                public boolean isVisible() {
                    FieldValueModel fieldValueModel = item.getModelObject();
                    return embedded && fieldValueModel.isExistingValue();
                }

                @Override
                public void onClick(AjaxRequestTarget target) {
                    // navigate to topic
                    PageParameters pageParameters = new PageParameters();
                    pageParameters.put("topicMapId", topicMapId);
                    pageParameters.put("topicId", topicId);
                    setResponsePage(getPage().getClass(), pageParameters);
                    setRedirect(true);
                }
            };
            fieldValueButtons.add(gotoButton);

            // embedded lock button
            OntopolyImageLink lockButton = new OntopolyImageLink("lock", "lock.gif",
                    new ResourceModel("icon.topic.locked")) {
                @Override
                public boolean isVisible() {
                    return embedded && isLockedByOther;
                }

                @Override
                public void onClick(AjaxRequestTarget target) {
                }
            };
            fieldValueButtons.add(lockButton);

            // binary
            // ISSUE: should not really pass in readonly-parameter here as it is only relevant if page is readonly
            FieldInstanceAssociationBinaryField binaryField = new FieldInstanceAssociationBinaryField(
                    "fieldValue", ofieldModel, fieldValueModel, fieldsViewModel, readonly, embedded,
                    traversable, allowAdd) {
                @Override
                protected void performNewSelection(FieldValueModel fieldValueModel, RoleField selectedField,
                        Topic selectedTopic) {
                    RoleField.ValueIF value = FieldInstanceAssociationBinaryPanel.this
                            .performNewSelection(selectedField, selectedTopic);
                    fieldValueModel.setExistingValue(value);
                }
            };
            if (binaryField.getUpdateableComponent() != null)
                binaryField.getUpdateableComponent().add(new FieldUpdatingBehaviour(true));
            item.add(binaryField);

            addNewFieldValueCssClass(item, fieldValuesModel, fieldValueModel);
        }
    };
    listView.setReuseItems(true);
    fieldValuesList.add(listView);

    // figure out which buttons to show
    this.fieldInstanceButtons = new WebMarkupContainer("fieldInstanceButtons");
    fieldInstanceButtons.setOutputMarkupId(true);
    add(fieldInstanceButtons);

    if (readonlyField || !allowAdd) {
        // unused components
        fieldInstanceButtons.add(new Label("add", new Model<String>("unused")).setVisible(false));
        fieldInstanceButtons.add(new Label("find", new Model<String>("unused")).setVisible(false));
        fieldInstanceButtons.add(new Label("findModal", new Model<String>("unused")).setVisible(false));

        // add/find button
    } else if (interfaceControl.isDropDownList() || interfaceControl.isAutoComplete()) {
        // "add" button
        OntopolyImageLink addButton = new OntopolyImageLink("add", "add.gif") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                boolean showExtraField = !fieldValuesModel.getShowExtraField();
                fieldValuesModel.setShowExtraField(showExtraField, true);
                listView.removeAll();
                updateDependentComponents(target);
            }

            @Override
            public boolean isVisible() {
                if (readonlyField)
                    return false;
                else
                    return fieldValuesModel.containsExisting();
            }

            @Override
            public String getImage() {
                return fieldValuesModel.getShowExtraField() ? "remove.gif" : "add.gif";
            }

            @Override
            public IModel<String> getTitleModel() {
                return new ResourceModel(
                        fieldValuesModel.getShowExtraField() ? "icon.remove.hide-field" : "icon.add.add-value");
            }
        };
        fieldInstanceButtons.add(addButton);

        // unused components
        fieldInstanceButtons.add(new Label("find", new Model<String>("unused")).setVisible(false));
        fieldInstanceButtons.add(new Label("findModal", new Model<String>("unused")).setVisible(false));

    } else if (interfaceControl.isSearchDialog() || interfaceControl.isBrowseDialog()) {

        // "search"/"browse" button
        final ModalWindow findModal = new ModalWindow("findModal");
        fieldInstanceButtons.add(findModal);

        int activeTab = (interfaceControl.isSearchDialog() ? ModalFindPage.ACTIVE_TAB_SEARCH
                : ModalFindPage.ACTIVE_TAB_BROWSE);

        findModal
                .setContent(new ModalFindPage<String>(findModal.getContentId(), fieldInstanceModel, activeTab) {
                    @Override
                    protected void onSelectionConfirmed(AjaxRequestTarget target, Collection<String> selected) {
                        FieldInstance fieldInstance = fieldInstanceModel.getFieldInstance();
                        RoleField currentField = (RoleField) fieldInstance.getFieldAssignment()
                                .getFieldDefinition();
                        RoleField selectedField = (RoleField) currentField.getFieldsForOtherRoles().iterator()
                                .next();

                        // check with page to see if add is allowed
                        if (ObjectUtils.different(currentField, selectedField) ||
                        // if assoc type is symmetric currentField == selectedField,
                        // but we're still OK to go ahead, so checking for that
                        // (this is issue 457)
                        currentField.getAssociationType().isSymmetric()) {

                            Topic currentTopic = fieldInstance.getInstance();
                            TopicMap topicMap = currentTopic.getTopicMap();

                            boolean changesMade = false;
                            Iterator<String> iter = selected.iterator();
                            while (iter.hasNext()) {
                                String objectId = (String) iter.next();

                                AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                                Topic selectedTopic = topicMap.getTopicById(objectId);

                                if (page.isAddAllowed(currentTopic, currentField, selectedTopic,
                                        selectedField)) {
                                    performNewSelection(selectedField, selectedTopic);
                                    changesMade = true;
                                }
                            }
                            // notify association panel so that it can update itself
                            if (changesMade)
                                FieldInstanceAssociationBinaryPanel.this.onUpdate(target);
                        }
                    }

                    @Override
                    protected void onCloseCancel(AjaxRequestTarget target) {
                        findModal.close(target);
                    }

                    @Override
                    protected void onCloseOk(AjaxRequestTarget target) {
                        findModal.close(target);
                    }
                });
        findModal.setTitle(new ResourceModel("ModalWindow.title.find.topic").getObject().toString());
        findModal.setCookieName("findModal");

        OntopolyImageLink findButton = new OntopolyImageLink("find", "search.gif",
                new ResourceModel("find.topic")) {
            @Override
            public void onClick(AjaxRequestTarget target) {
                findModal.show(target);
            }
        };
        fieldInstanceButtons.add(findButton);
        // unused components
        fieldInstanceButtons.add(new Label("add", new Model<String>("unused")).setVisible(false));
    } else {
        throw new RuntimeException("Unsupported interface control: " + interfaceControl);
    }

    // create button
    if (readonlyField || !allowCreate) {
        fieldInstanceButtons.add(new Label("create").setVisible(false));
    } else {

        CreateAction ca = roleField.getCreateAction();
        int createAction;
        if (embedded || ca.isNone())
            createAction = FieldInstanceCreatePlayerPanel.CREATE_ACTION_NONE;
        else if (ca.isNavigate())
            createAction = FieldInstanceCreatePlayerPanel.CREATE_ACTION_NAVIGATE;
        else
            createAction = FieldInstanceCreatePlayerPanel.CREATE_ACTION_POPUP;

        FieldInstanceCreatePlayerPanel createPanel = new FieldInstanceCreatePlayerPanel("create",
                fieldInstanceModel, fieldsViewModel, new RoleFieldModel(ofield), this, createAction) {
            @Override
            protected void performNewSelection(RoleFieldModel ofieldModel, Topic selectedTopic) {
                FieldInstanceAssociationBinaryPanel.this.performNewSelection(ofieldModel.getRoleField(),
                        selectedTopic);
            }

        };
        createPanel.setOutputMarkupId(true);
        fieldInstanceButtons.add(createPanel);
    }
}

From source file:ontopoly.components.FieldInstanceAssociationNaryField.java

License:Apache License

public FieldInstanceAssociationNaryField(String id, FieldInstanceAssociationNaryPanel _parentPanel,
        RoleFieldModel roleFieldModel, List<RoleFieldModel> otherRoleFieldModels,
        FieldValueModel _fieldValueModel, FieldsViewModel fieldsViewModel, final boolean readonly,
        boolean traversable, final int arity) {
    super(id);/*w w w  .j  a v a 2s  .c o  m*/
    this.fieldValueModel = _fieldValueModel;
    this.parentPanel = _parentPanel;
    this.arity = arity;
    FieldInstanceModel fieldInstanceModel = fieldValueModel.getFieldInstanceModel();

    // register current player
    this.currentFieldModel = roleFieldModel;
    this.currentTopicModel = new TopicModel<Topic>(fieldInstanceModel.getFieldInstance().getInstance());
    selectedPlayers.put(roleFieldModel, currentTopicModel);

    RoleField.ValueIF fieldValue = (RoleField.ValueIF) fieldValueModel.getFieldValue();

    RepeatingView rv = new RepeatingView("roles");
    rv.setVisible(!readonly || fieldValueModel.isExistingValue());
    add(rv);

    Iterator<RoleFieldModel> oiter = otherRoleFieldModels.iterator();
    while (oiter.hasNext()) {
        final RoleFieldModel ofieldModel = oiter.next();
        RoleField ofield = ofieldModel.getRoleField();

        final WebMarkupContainer parent = new WebMarkupContainer(rv.newChildId()) {
            @Override
            public boolean isVisible() {
                // hide if read-only and not complete
                if (readonly && selectedPlayers.size() != arity)
                    return false;
                else
                    return true;
            }
        };
        parent.setOutputMarkupId(true);
        rv.add(parent);
        parent.add(new Label("label", new Model<String>(ofield.getRoleType().getName())));
        //! parent.add(new Label("label", new Model(ofield.getFieldName())));

        // register other player
        Topic topic = (fieldValue == null ? null
                : fieldValue.getPlayer(ofield, fieldInstanceModel.getFieldInstance().getInstance()));
        final TopicModel<Topic> topicModel = new TopicModel<Topic>(topic);
        // NOTE: should not use same model as selected model as the model would then be updated immediately
        selectedPlayers.put(ofieldModel, new TopicModel<Topic>(topic));

        TopicLink<Topic> playerLink = new TopicLink<Topic>("player", topicModel);
        playerLink.setEnabled(traversable);
        playerLink.setVisible(topic != null);
        parent.add(playerLink);

        EditMode editMode = ofield.getEditMode();
        final boolean allowAdd = !editMode.isNewValuesOnly();
        final boolean allowCreate = !editMode.isExistingValuesOnly();

        if (readonly || fieldValueModel.isExistingValue() || !allowAdd) {
            // unused components
            parent.add(new Label("select").setVisible(false));
            parent.add(new Label("find").setVisible(false));
            parent.add(new Label("findModal").setVisible(false));

        } else {

            InterfaceControl interfaceControl = ofield.getInterfaceControl();
            if (interfaceControl.isAutoComplete()) {
                final AssociationFieldAutoCompleteTextField autoCompleteField = new AssociationFieldAutoCompleteTextField(
                        "select", new TopicModel<Topic>(null), ofieldModel) {
                    @Override
                    protected void filterPlayers(List<Topic> players) {
                        AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                        page.filterTopics(players);
                    }

                    @Override
                    protected void onTopicSelected(Topic topic) {
                        topicModel.setObject(topic);
                        boolean changesMade = onNewSelection(ofieldModel, topic);
                        // replace ourselves with a topic link
                        if (changesMade)
                            parent.replace(new TopicLink<Topic>("select", new TopicModel<Topic>(topic)));
                    }
                };
                autoCompleteField.getTextField().add(new AjaxFormComponentUpdatingBehavior("onchange") {
                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        if (needsUpdate)
                            FieldInstanceAssociationNaryField.this.onUpdate(target);
                        else
                            target.addComponent(parent);
                    }
                });

                autoCompleteField.setOutputMarkupId(true);
                parent.add(autoCompleteField);

                // unused components
                parent.add(new Label("find").setVisible(false));
                parent.add(new Label("findModal").setVisible(false));

            } else if (interfaceControl.isDropDownList()) {
                PossiblePlayersModel choicesModel = new PossiblePlayersModel(fieldInstanceModel, ofieldModel) {
                    @Override
                    protected void filterPlayers(Collection<Topic> players) {
                        AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                        page.filterTopics(players);
                    }
                };

                TopicDropDownChoice<Topic> choice = new TopicDropDownChoice<Topic>("select", topicModel,
                        choicesModel) {
                    @Override
                    protected void onModelChanged() {
                        super.onModelChanged();
                        onNewSelection(ofieldModel, getModel().getObject());
                    }
                };
                choice.setOutputMarkupId(true);
                choice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        FieldInstanceAssociationNaryField.this.onUpdate(target);
                    }

                    @Override
                    protected void onError(AjaxRequestTarget target, RuntimeException e) {
                        FieldInstanceAssociationNaryField.this.onError(target, e);
                    }
                });
                parent.add(choice);

                // unused components
                parent.add(new Label("find").setVisible(false));
                parent.add(new Label("findModal").setVisible(false));

            } else if (interfaceControl.isSearchDialog() || interfaceControl.isBrowseDialog()) {

                // unused components
                parent.add(new TopicLink<Topic>("select", topicModel));

                // "search"/"browse" button
                final ModalWindow findModal = new ModalWindow("findModal");
                parent.add(findModal);

                int activeTab = (interfaceControl.isSearchDialog() ? ModalFindPage.ACTIVE_TAB_SEARCH
                        : ModalFindPage.ACTIVE_TAB_BROWSE);

                findModal.setContent(
                        new ModalFindPage<String>(findModal.getContentId(), fieldInstanceModel, activeTab) {
                            @Override
                            protected boolean isMaxOneCardinality() {
                                return true;
                            }

                            @Override
                            protected void onSelectionConfirmed(AjaxRequestTarget target,
                                    Collection<String> selected) {
                                if (!selected.isEmpty()) {
                                    String topicId = selected.iterator().next();
                                    TopicMap topicMap = fieldValueModel.getFieldInstanceModel()
                                            .getFieldInstance().getInstance().getTopicMap();
                                    Topic topic = topicMap.getTopicById(topicId);
                                    topicModel.setObject(topic);
                                    onNewSelection(ofieldModel, topic);
                                    if (needsUpdate)
                                        FieldInstanceAssociationNaryField.this.onUpdate(target);
                                    else
                                        target.addComponent(parent);
                                }
                            }

                            @Override
                            protected void onCloseCancel(AjaxRequestTarget target) {
                                findModal.close(target);
                            }

                            @Override
                            protected void onCloseOk(AjaxRequestTarget target) {
                                findModal.close(target);
                            }
                        });
                findModal.setTitle(new ResourceModel("ModalWindow.title.find.topic").getObject().toString());
                findModal.setCookieName("findModal");

                OntopolyImageLink findButton = new OntopolyImageLink("find", "search.gif",
                        new ResourceModel("icon.search.find-topic")) {
                    @Override
                    public boolean isVisible() {
                        return !readonly;
                    }

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        findModal.show(target);
                    }
                };
                parent.add(findButton);

            } else {
                throw new RuntimeException("Unsupported interface control: " + interfaceControl);
            }
        }

        // create button
        if (readonly || fieldValueModel.isExistingValue() || !allowCreate) {
            parent.add(new Label("create").setVisible(false));
        } else {
            // always use popup window
            int createAction = FieldInstanceCreatePlayerPanel.CREATE_ACTION_POPUP;
            FieldInstanceCreatePlayerPanel createPanel = new FieldInstanceCreatePlayerPanel("create",
                    fieldInstanceModel, fieldsViewModel, ofieldModel, parentPanel, createAction) {
                @Override
                protected Topic createInstance(TopicType topicType) {
                    Topic currentTopic = currentTopicModel.getTopic();
                    RoleField currentField = currentFieldModel.getRoleField();
                    RoleField createField = ofieldModel.getRoleField();
                    Topic createdTopic = null;

                    // check with page to see if add is allowed
                    AbstractOntopolyPage page = (AbstractOntopolyPage) getPage();
                    if (page.isCreateAllowed(currentTopic, currentField, topicType, createField)) {
                        // create a new topic instance
                        createdTopic = topicType.createInstance(null);
                        topicModel.setObject(createdTopic);
                        performNewSelection(ofieldModel, createdTopic);
                    }
                    return createdTopic;
                }

                @Override
                protected void performNewSelection(RoleFieldModel ofieldModel, Topic selectedTopic) {
                    FieldInstanceAssociationNaryField.this.performNewSelection(ofieldModel, selectedTopic);
                }

                @Override
                protected void hideInstancePage(AjaxRequestTarget target) {
                    if (needsUpdate)
                        FieldInstanceAssociationNaryField.this.onUpdate(target);
                    else
                        target.addComponent(parent);
                }
            };
            createPanel.setOutputMarkupId(true);
            parent.add(createPanel);
        }
    }
}