Example usage for org.apache.wicket.ajax.markup.html AjaxLink add

List of usage examples for org.apache.wicket.ajax.markup.html AjaxLink add

Introduction

In this page you can find the example usage for org.apache.wicket.ajax.markup.html AjaxLink add.

Prototype

public MarkupContainer add(final Component... children) 

Source Link

Document

Adds the child component(s) to this container.

Usage

From source file:de.tudarmstadt.ukp.clarin.webanno.webapp.page.curation.CurationPage.java

License:Apache License

@SuppressWarnings("deprecation")
public CurationPage() {
    bModel = new BratAnnotatorModel();
    bModel.setMode(Mode.CURATION);//  w w  w .j av  a 2 s  . c o  m
    reMerge = new ReMergeCasModel();

    curationContainer = new CurationContainer();
    curationContainer.setBratAnnotatorModel(bModel);

    curationPanel = new CurationPanel("curationPanel", new Model<CurationContainer>(curationContainer)) {
        private static final long serialVersionUID = 2175915644696513166L;

        @Override
        protected void onChange(AjaxRequestTarget aTarget) {
            JCas mergeJCas = null;
            try {
                mergeJCas = repository.readCurationCas(bModel.getDocument());
            } catch (UIMAException e) {
                error(e.getMessage());
            } catch (ClassNotFoundException e) {
                error(e.getMessage());
            } catch (IOException e) {
                error(e.getMessage());
            }
            aTarget.add(numberOfPages);
            gotoPageTextField
                    .setModelObject(getFirstSentenceNumber(mergeJCas, bModel.getSentenceAddress()) + 1);
            gotoPageAddress = getSentenceAddress(mergeJCas, gotoPageTextField.getModelObject());
            aTarget.add(gotoPageTextField);
            aTarget.add(curationPanel);
        }
    };

    curationPanel.setOutputMarkupId(true);
    add(curationPanel);

    add(documentNamePanel = new DocumentNamePanel("documentNamePanel", new Model<BratAnnotatorModel>(bModel)));
    documentNamePanel.setOutputMarkupId(true);

    add(numberOfPages = (Label) new Label("numberOfPages", new LoadableDetachableModel<String>() {

        private static final long serialVersionUID = 1L;

        @Override
        protected String load() {
            if (bModel.getDocument() != null) {

                JCas mergeJCas = null;
                try {
                    mergeJCas = repository.readCurationCas(bModel.getDocument());

                    totalNumberOfSentence = getNumberOfPages(mergeJCas);

                    // If only one page, start displaying from
                    // sentence 1
                    if (totalNumberOfSentence == 1) {
                        bModel.setSentenceAddress(bModel.getFirstSentenceAddress());
                    }
                    sentenceNumber = getFirstSentenceNumber(mergeJCas, bModel.getSentenceAddress());
                    int firstSentenceNumber = sentenceNumber + 1;
                    int lastSentenceNumber;
                    if (firstSentenceNumber + bModel.getPreferences().getWindowSize()
                            - 1 < totalNumberOfSentence) {
                        lastSentenceNumber = firstSentenceNumber + bModel.getPreferences().getWindowSize() - 1;
                    } else {
                        lastSentenceNumber = totalNumberOfSentence;
                    }

                    return "showing " + firstSentenceNumber + "-" + lastSentenceNumber + " of "
                            + totalNumberOfSentence + " sentences";
                } catch (UIMAException e) {
                    return "";
                } catch (ClassNotFoundException e) {
                    return "";
                } catch (IOException e) {
                    return "";
                }

            } else {
                return "";// no document yet selected
            }

        }
    }).setOutputMarkupId(true));

    final ModalWindow openDocumentsModal;
    add(openDocumentsModal = new ModalWindow("openDocumentsModal"));
    openDocumentsModal.setOutputMarkupId(true);

    openDocumentsModal.setInitialWidth(500);
    openDocumentsModal.setInitialHeight(300);
    openDocumentsModal.setResizable(true);
    openDocumentsModal.setWidthUnit("px");
    openDocumentsModal.setHeightUnit("px");
    openDocumentsModal.setTitle("Open document");

    // Add project and document information at the top
    add(new AjaxLink<Void>("showOpenDocumentModal") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            curationPanel.resetEditor(aTarget);
            openDocumentsModal.setContent(new OpenModalWindowPanel(openDocumentsModal.getContentId(), bModel,
                    openDocumentsModal, Mode.CURATION));
            openDocumentsModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
                private static final long serialVersionUID = -1746088901018629567L;

                @Override
                public void onClose(AjaxRequestTarget target) {
                    String username = SecurityContextHolder.getContext().getAuthentication().getName();
                    /*
                     * Changed for #152, getDocument was returning null even after opening a document
                     * Also, surrounded following code into if block to avoid error.
                     */
                    if (bModel.getProject() == null) {
                        setResponsePage(WelcomePage.class);
                        return;
                    }
                    if (bModel.getDocument() != null) {
                        User user = userRepository.get(username);
                        // Update source document state to
                        // CURRATION_INPROGRESS, if it was not
                        // ANNOTATION_FINISHED
                        if (!bModel.getDocument().getState().equals(SourceDocumentState.CURATION_FINISHED)) {

                            bModel.getDocument().setState(SourceDocumentState.CURATION_IN_PROGRESS);
                        }

                        try {
                            repository.createSourceDocument(bModel.getDocument(), user);
                            repository.upgradeCasAndSave(bModel.getDocument(), Mode.CURATION, username);

                            loadDocumentAction(target);

                        } catch (IOException | UIMAException | ClassNotFoundException
                                | BratAnnotationException e) {
                            target.add(getFeedbackPanel());
                            error(e.getCause().getMessage());
                        }
                    }
                }
            });
            openDocumentsModal.show(aTarget);
        }
    });

    add(new AnnotationLayersModalPanel("annotationLayersModalPanel", new Model<BratAnnotatorModel>(bModel),
            curationPanel.editor) {
        private static final long serialVersionUID = -4657965743173979437L;

        @Override
        protected void onChange(AjaxRequestTarget aTarget) {
            aTarget.add(getFeedbackPanel());
            aTarget.add(numberOfPages);
            JCas mergeJCas = null;
            try {
                aTarget.add(getFeedbackPanel());
                mergeJCas = repository.readCurationCas(bModel.getDocument());
                curationPanel.updatePanel(aTarget, curationContainer);
                updatePanel(curationContainer, aTarget);
                updateSentenceNumber(mergeJCas, bModel.getSentenceAddress());
            } catch (UIMAException e) {
                error(ExceptionUtils.getRootCauseMessage(e));
            } catch (ClassNotFoundException e) {
                error(e.getMessage());
            } catch (IOException e) {
                error(e.getMessage());
            } catch (BratAnnotationException e) {
                error(e.getMessage());
            }

        }
    });

    // Show the previous document, if exist
    add(new AjaxLink<Void>("showPreviousDocument") {
        private static final long serialVersionUID = 7496156015186497496L;

        /**
         * Get the current beginning sentence address and add on it the size of the display
         * window
         */
        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            curationPanel.resetEditor(aTarget);
            // List of all Source Documents in the project
            List<SourceDocument> listOfSourceDocuements = repository.listSourceDocuments(bModel.getProject());

            String username = SecurityContextHolder.getContext().getAuthentication().getName();
            User user = userRepository.get(username);

            List<SourceDocument> sourceDocumentsinIgnorState = new ArrayList<SourceDocument>();
            for (SourceDocument sourceDocument : listOfSourceDocuements) {
                if (!repository.existFinishedDocument(sourceDocument, bModel.getProject())) {
                    sourceDocumentsinIgnorState.add(sourceDocument);
                }
            }

            listOfSourceDocuements.removeAll(sourceDocumentsinIgnorState);

            // Index of the current source document in the list
            int currentDocumentIndex = listOfSourceDocuements.indexOf(bModel.getDocument());

            // If the first the document
            if (currentDocumentIndex == 0) {
                aTarget.appendJavaScript("alert('This is the first document!')");
            } else {
                bModel.setDocumentName(listOfSourceDocuements.get(currentDocumentIndex - 1).getName());
                bModel.setDocument(listOfSourceDocuements.get(currentDocumentIndex - 1));
                try {
                    repository.upgradeCasAndSave(bModel.getDocument(), Mode.CURATION,
                            bModel.getUser().getUsername());

                    loadDocumentAction(aTarget);
                } catch (IOException | UIMAException | ClassNotFoundException | BratAnnotationException e) {
                    aTarget.add(getFeedbackPanel());
                    error(e.getCause().getMessage());
                }
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.Shift, KeyType.Page_up }, EventType.click)));

    // Show the next document if exist
    add(new AjaxLink<Void>("showNextDocument") {
        private static final long serialVersionUID = 7496156015186497496L;

        /**
         * Get the current beginning sentence address and add on it the size of the display
         * window
         */
        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            curationPanel.resetEditor(aTarget);
            // List of all Source Documents in the project
            List<SourceDocument> listOfSourceDocuements = repository.listSourceDocuments(bModel.getProject());

            String username = SecurityContextHolder.getContext().getAuthentication().getName();
            User user = userRepository.get(username);

            List<SourceDocument> sourceDocumentsinIgnorState = new ArrayList<SourceDocument>();
            for (SourceDocument sourceDocument : listOfSourceDocuements) {
                if (!repository.existFinishedDocument(sourceDocument, bModel.getProject())) {
                    sourceDocumentsinIgnorState.add(sourceDocument);
                }
            }

            listOfSourceDocuements.removeAll(sourceDocumentsinIgnorState);

            // Index of the current source document in the list
            int currentDocumentIndex = listOfSourceDocuements.indexOf(bModel.getDocument());

            // If the first document
            if (currentDocumentIndex == listOfSourceDocuements.size() - 1) {
                aTarget.appendJavaScript("alert('This is the last document!')");
            } else {
                bModel.setDocumentName(listOfSourceDocuements.get(currentDocumentIndex + 1).getName());
                bModel.setDocument(listOfSourceDocuements.get(currentDocumentIndex + 1));

                try {
                    aTarget.add(getFeedbackPanel());
                    repository.upgradeCasAndSave(bModel.getDocument(), Mode.CURATION,
                            bModel.getUser().getUsername());

                    loadDocumentAction(aTarget);
                } catch (IOException | UIMAException | ClassNotFoundException | BratAnnotationException e) {
                    aTarget.add(getFeedbackPanel());
                    error(e.getCause().getMessage());
                }
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.Shift, KeyType.Page_down }, EventType.click)));

    add(new ExportModalPanel("exportModalPanel", new Model<BratAnnotatorModel>(bModel)));

    gotoPageTextField = (NumberTextField<Integer>) new NumberTextField<Integer>("gotoPageText",
            new Model<Integer>(0));
    Form<Void> gotoPageTextFieldForm = new Form<Void>("gotoPageTextFieldForm");
    gotoPageTextFieldForm.add(new AjaxFormSubmitBehavior(gotoPageTextFieldForm, "onsubmit") {
        private static final long serialVersionUID = -4549805321484461545L;

        @Override
        protected void onSubmit(AjaxRequestTarget aTarget) {
            if (gotoPageAddress == 0) {
                aTarget.appendJavaScript("alert('The sentence number entered is not valid')");
                return;
            }
            JCas mergeJCas = null;
            try {
                aTarget.add(getFeedbackPanel());
                mergeJCas = repository.readCurationCas(bModel.getDocument());
                if (bModel.getSentenceAddress() != gotoPageAddress) {

                    updateSentenceNumber(mergeJCas, gotoPageAddress);

                    aTarget.add(numberOfPages);
                    updatePanel(curationContainer, aTarget);
                }
            } catch (UIMAException e) {
                error(ExceptionUtils.getRootCauseMessage(e));
            } catch (ClassNotFoundException e) {
                error(e.getMessage());
            } catch (IOException e) {
                error(e.getMessage());
            }
        }
    });

    gotoPageTextField.setType(Integer.class);
    gotoPageTextField.setMinimum(1);
    gotoPageTextField.setDefaultModelObject(1);
    add(gotoPageTextFieldForm.add(gotoPageTextField));
    gotoPageTextField.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        private static final long serialVersionUID = 1244526899787707931L;

        @Override
        protected void onUpdate(AjaxRequestTarget aTarget) {
            JCas mergeJCas = null;
            try {
                aTarget.add(getFeedbackPanel());
                mergeJCas = repository.readCurationCas(bModel.getDocument());
                gotoPageAddress = getSentenceAddress(mergeJCas, gotoPageTextField.getModelObject());

            } catch (UIMAException e) {
                error(ExceptionUtils.getRootCause(e));
            } catch (ClassNotFoundException e) {
                error(e.getMessage());
            } catch (IOException e) {
                error(e.getMessage());
            }

        }
    });

    add(new AjaxLink<Void>("gotoPageLink") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget aTarget) {

            if (gotoPageAddress == 0) {
                aTarget.appendJavaScript("alert('The sentence number entered is not valid')");
                return;
            }
            if (bModel.getDocument() == null) {
                aTarget.appendJavaScript("alert('Please open a document first!')");
                return;
            }

            JCas mergeJCas = null;
            try {
                aTarget.add(getFeedbackPanel());
                mergeJCas = repository.readCurationCas(bModel.getDocument());
                if (bModel.getSentenceAddress() != gotoPageAddress) {

                    updateSentenceNumber(mergeJCas, gotoPageAddress);

                    aTarget.add(numberOfPages);
                    curationPanel.updatePanel(aTarget, curationContainer);
                }
            } catch (UIMAException e) {
                error(ExceptionUtils.getRootCauseMessage(e));
            } catch (ClassNotFoundException e) {
                error(e.getMessage());
            } catch (IOException e) {
                error(e.getMessage());
            } catch (BratAnnotationException e) {
                error(e.getMessage());
            }
        }
    });

    finish = new WebMarkupContainer("finishImage");
    finish.setOutputMarkupId(true);
    finish.add(new AttributeModifier("src", new LoadableDetachableModel<String>() {
        private static final long serialVersionUID = 1562727305401900776L;

        @Override
        protected String load() {

            if (bModel.getProject() != null && bModel.getDocument() != null) {
                if (repository
                        .getSourceDocument(bModel.getDocument().getProject(), bModel.getDocument().getName())
                        .getState().equals(SourceDocumentState.CURATION_FINISHED)) {
                    return "images/accept.png";
                } else {
                    return "images/inprogress.png";
                }
            } else {
                return "images/inprogress.png";
            }

        }
    }));

    final ModalWindow finishCurationModal;
    add(finishCurationModal = new ModalWindow("finishCurationModal"));
    finishCurationModal.setOutputMarkupId(true);

    finishCurationModal.setInitialWidth(700);
    finishCurationModal.setInitialHeight(50);
    finishCurationModal.setResizable(true);
    finishCurationModal.setWidthUnit("px");
    finishCurationModal.setHeightUnit("px");

    AjaxLink<Void> showFinishCurationModal;
    add(showFinishCurationModal = new AjaxLink<Void>("showFinishCurationModal") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            if (bModel.getDocument() != null
                    && bModel.getDocument().getState().equals(SourceDocumentState.CURATION_FINISHED)) {
                finishCurationModal.setTitle(
                        "Curation was finished. Are you sure you want to re-open document for curation?");
            } else {
                finishCurationModal.setTitle("Are you sure you want to finish curating?");
            }
            finishCurationModal.setContent(new YesNoFinishModalPanel(finishCurationModal.getContentId(), bModel,
                    finishCurationModal, Mode.CURATION));
            finishCurationModal.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
                private static final long serialVersionUID = -1746088901018629567L;

                @Override
                public void onClose(AjaxRequestTarget target) {
                    target.add(finish);
                    target.appendJavaScript("Wicket.Window.unloadConfirmation=false;window.location.reload()");
                }
            });
            finishCurationModal.show(target);
        }
    });

    showFinishCurationModal.add(finish);

    add(new GuidelineModalPanel("guidelineModalPanel", new Model<BratAnnotatorModel>(bModel)));

    final ModalWindow reCreateMergeCas;
    add(reCreateMergeCas = new ModalWindow("reCreateMergeCasModal"));
    reCreateMergeCas.setOutputMarkupId(true);

    reCreateMergeCas.setInitialWidth(400);
    reCreateMergeCas.setInitialHeight(50);
    reCreateMergeCas.setResizable(true);
    reCreateMergeCas.setWidthUnit("px");
    reCreateMergeCas.setHeightUnit("px");
    reCreateMergeCas.setTitle("are you sure? all curation annotations for this document will be lost");

    add(showreCreateMergeCasModal = new AjaxLink<Void>("showreCreateMergeCasModal") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        protected void onConfigure() {
            setEnabled(bModel.getDocument() != null
                    && !bModel.getDocument().getState().equals(SourceDocumentState.CURATION_FINISHED));
        }

        @Override
        public void onClick(AjaxRequestTarget target) {
            reCreateMergeCas.setContent(
                    new ReCreateMergeCASModalPanel(reCreateMergeCas.getContentId(), reCreateMergeCas, reMerge));
            reCreateMergeCas.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {

                private static final long serialVersionUID = 4816615910398625993L;

                @Override
                public void onClose(AjaxRequestTarget aTarget) {
                    if (reMerge.isReMerege()) {
                        try {
                            aTarget.add(getFeedbackPanel());
                            repository.removeCurationDocumentContent(bModel.getDocument(),
                                    bModel.getUser().getUsername());
                            loadDocumentAction(aTarget);

                            aTarget.appendJavaScript("alert('remerege finished!')");
                        } catch (IOException | UIMAException | ClassNotFoundException
                                | BratAnnotationException e) {
                            aTarget.add(getFeedbackPanel());
                            error(e.getCause().getMessage());
                        }
                    }
                }
            });
            reCreateMergeCas.show(target);
        }
    });
    // Show the next page of this document
    add(new AjaxLink<Void>("showNext") {
        private static final long serialVersionUID = 7496156015186497496L;

        /**
         * Get the current beginning sentence address and add on it the size of the display
         * window
         */
        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            if (bModel.getDocument() != null) {
                JCas mergeJCas = null;
                try {
                    mergeJCas = repository.readCurationCas(bModel.getDocument());
                    int nextSentenceAddress = getNextPageFirstSentenceAddress(mergeJCas,
                            bModel.getSentenceAddress(), bModel.getPreferences().getWindowSize());
                    if (bModel.getSentenceAddress() != nextSentenceAddress) {
                        aTarget.add(getFeedbackPanel());

                        updateSentenceNumber(mergeJCas, nextSentenceAddress);

                        aTarget.add(numberOfPages);
                        curationPanel.updatePanel(aTarget, curationContainer);
                        updatePanel(curationContainer, aTarget);
                    }

                    else {
                        aTarget.appendJavaScript("alert('This is last page!')");
                    }
                } catch (UIMAException e) {
                    error(ExceptionUtils.getRootCauseMessage(e));
                } catch (ClassNotFoundException e) {
                    error(e.getMessage());
                } catch (IOException e) {
                    error(e.getMessage());
                } catch (BratAnnotationException e) {
                    error(e.getMessage());
                }
            } else {
                aTarget.appendJavaScript("alert('Please open a document first!')");
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.Page_down }, EventType.click)));

    // SHow the previous page of this document
    add(new AjaxLink<Void>("showPrevious") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            if (bModel.getDocument() != null) {

                JCas mergeJCas = null;
                try {
                    aTarget.add(getFeedbackPanel());
                    mergeJCas = repository.readCurationCas(bModel.getDocument());
                    int previousSentenceAddress = BratAjaxCasUtil.getPreviousDisplayWindowSentenceBeginAddress(
                            mergeJCas, bModel.getSentenceAddress(), bModel.getPreferences().getWindowSize());
                    if (bModel.getSentenceAddress() != previousSentenceAddress) {

                        updateSentenceNumber(mergeJCas, previousSentenceAddress);

                        aTarget.add(numberOfPages);
                        curationPanel.updatePanel(aTarget, curationContainer);
                        updatePanel(curationContainer, aTarget);
                    } else {
                        aTarget.appendJavaScript("alert('This is First Page!')");
                    }
                } catch (UIMAException e) {
                    error(ExceptionUtils.getRootCauseMessage(e));
                } catch (ClassNotFoundException e) {
                    error(e.getMessage());
                } catch (IOException e) {
                    error(e.getMessage());
                } catch (BratAnnotationException e) {
                    error(e.getMessage());
                }
            } else {
                aTarget.appendJavaScript("alert('Please open a document first!')");
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.Page_up }, EventType.click)));

    add(new AjaxLink<Void>("showFirst") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            if (bModel.getDocument() != null) {
                JCas mergeJCas = null;
                try {
                    aTarget.add(getFeedbackPanel());
                    mergeJCas = repository.readCurationCas(bModel.getDocument());

                    int address = getAddr(selectSentenceAt(mergeJCas, bModel.getSentenceBeginOffset(),
                            bModel.getSentenceEndOffset()));
                    int firstAddress = getFirstSentenceAddress(mergeJCas);

                    if (firstAddress != address) {

                        updateSentenceNumber(mergeJCas, firstAddress);

                        aTarget.add(numberOfPages);
                        curationPanel.updatePanel(aTarget, curationContainer);
                        updatePanel(curationContainer, aTarget);
                    } else {
                        aTarget.appendJavaScript("alert('This is first page!')");
                    }
                } catch (UIMAException e) {
                    error(ExceptionUtils.getRootCauseMessage(e));
                } catch (ClassNotFoundException e) {
                    error(e.getMessage());
                } catch (IOException e) {
                    error(e.getMessage());
                } catch (BratAnnotationException e) {
                    error(e.getMessage());
                }
            } else {
                aTarget.appendJavaScript("alert('Please open a document first!')");
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.Home }, EventType.click)));

    add(new AjaxLink<Void>("showLast") {
        private static final long serialVersionUID = 7496156015186497496L;

        @Override
        public void onClick(AjaxRequestTarget aTarget) {
            if (bModel.getDocument() != null) {
                JCas mergeJCas = null;
                try {
                    aTarget.add(getFeedbackPanel());
                    mergeJCas = repository.readCurationCas(bModel.getDocument());
                    int lastDisplayWindowBeginingSentenceAddress = BratAjaxCasUtil
                            .getLastDisplayWindowFirstSentenceAddress(mergeJCas,
                                    bModel.getPreferences().getWindowSize());
                    if (lastDisplayWindowBeginingSentenceAddress != bModel.getSentenceAddress()) {

                        updateSentenceNumber(mergeJCas, lastDisplayWindowBeginingSentenceAddress);

                        aTarget.add(numberOfPages);
                        curationPanel.updatePanel(aTarget, curationContainer);
                        updatePanel(curationContainer, aTarget);
                    } else {
                        aTarget.appendJavaScript("alert('This is last Page!')");
                    }
                } catch (UIMAException e) {
                    error(ExceptionUtils.getRootCauseMessage(e));
                } catch (ClassNotFoundException e) {
                    error(e.getMessage());
                } catch (IOException e) {
                    error(e.getMessage());
                } catch (BratAnnotationException e) {
                    error(e.getMessage());
                }
            } else {
                aTarget.appendJavaScript("alert('Please open a document first!')");
            }
        }
    }.add(new InputBehavior(new KeyType[] { KeyType.End }, EventType.click)));
}

From source file:dk.frankbille.scoreboard.components.NavigationPanel.java

License:Open Source License

public NavigationPanel(String id, final PaginationModel<T> paginationModel) {
    super(id);//from   w  ww .  ja va 2 s .c  om

    setOutputMarkupId(true);

    AjaxLink<Void> previousLink = new AjaxLink<Void>("previousLink") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            pageChanged(target, paginationModel.previousPage());
        }

        @Override
        public boolean isEnabled() {
            return paginationModel.isPreviousPossible();
        }
    };
    previousLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override
        public String getObject() {
            if (paginationModel.isPreviousPossible()) {
                return null;
            }

            return "disabled";
        }
    }));
    add(previousLink);

    IModel<List<Integer>> pagesModel = new LoadableDetachableModel<List<Integer>>() {
        private static final long serialVersionUID = 1L;

        @Override
        protected List<Integer> load() {
            List<Integer> pages = new ArrayList<Integer>();
            for (int page = 1; page <= paginationModel.getMaxPage(); page++) {
                pages.add(page);
            }
            return pages;
        }
    };
    add(new ListView<Integer>("pageLinks", pagesModel) {
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<Integer> item) {
            AjaxLink<Void> pageLink = new AjaxLink<Void>("pageLink") {
                private static final long serialVersionUID = 1L;

                @Override
                public void onClick(AjaxRequestTarget target) {
                    paginationModel.setPage(item.getModelObject());
                    pageChanged(target, paginationModel.getPage());
                }

                @Override
                public boolean isEnabled() {
                    return paginationModel.getPage() != item.getModelObject();
                }
            };
            pageLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                public String getObject() {
                    if (paginationModel.getPage() == item.getModelObject()) {
                        return "btn-primary disabled";
                    }

                    return null;
                }
            }));
            item.add(pageLink);

            pageLink.add(new Label("pageLabel", item.getModel()));
        }
    });

    AjaxLink<Void> nextLink = new AjaxLink<Void>("nextLink") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            pageChanged(target, paginationModel.nextPage());
        }

        @Override
        public boolean isEnabled() {
            return paginationModel.isNextPossible();
        }
    };
    nextLink.add(AttributeModifier.append("class", new AbstractReadOnlyModel<String>() {
        private static final long serialVersionUID = 1L;

        @Override
        public String getObject() {
            if (paginationModel.isNextPossible()) {
                return null;
            }

            return "disabled";
        }
    }));
    add(nextLink);
}

From source file:dk.teachus.frontend.components.form.GeneratePasswordElement.java

License:Apache License

public GeneratePasswordElement(String label, final String seed) {
    add(new Label("label", label).setRenderBodyOnly(true)); //$NON-NLS-1$

    AjaxLink<Void> generatePasswordLink = new AjaxLink<Void>("generatePasswordLink") { //$NON-NLS-1$
        private static final long serialVersionUID = 1L;

        @Override//  w w  w  .j av a2  s  . c  o  m
        public void onClick(AjaxRequestTarget target) {
            String password = seed;

            if (password == null) {
                password = ""; //$NON-NLS-1$
            }

            password += new DateTime().getMillisOfSecond();

            passwordGenerated(target, password);
        }
    };
    add(generatePasswordLink);

    generatePasswordLink.add(new Label("generatePasswordLabel", //$NON-NLS-1$
            TeachUsSession.get().getString("GeneratePasswordElement.generate")).setRenderBodyOnly(true)); //$NON-NLS-1$
}

From source file:gr.abiss.calipso.wicket.asset.ItemFormAssetSearchPanel.java

License:Open Source License

public ItemFormAssetSearchPanel(String id, AssetSearch as) {
    super(id);/*from w  w w.  j  a  va  2  s  .  c  o  m*/
    this.setOutputMarkupId(true);
    this.setVisible(true);
    final AssetSearch assetSearch = as;
    this.setDefaultModel(new CompoundPropertyModel(assetSearch));

    final WebMarkupContainer assetSearchForm = new WebMarkupContainer("assetAjaxSearchForm");
    assetSearchForm.setOutputMarkupId(true);
    add(assetSearchForm);
    assetSearchForm.add(new AjaxLink("close") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            closePanel(target);
        }

    });
    // inventory code
    final TextField inventoryCode = new TextField("asset.inventoryCode");
    inventoryCode.setLabel(new ResourceModel("asset.inventoryCode"));
    inventoryCode.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        protected void onUpdate(AjaxRequestTarget target) {
            // Reset the inventoryCode model dropdown when the vendor changes
            assetSearch.getAsset().setInventoryCode(inventoryCode.getDefaultModelObjectAsString());
        }
    });
    assetSearchForm.add(inventoryCode);
    assetSearchForm.add(new SimpleFormComponentLabel("assetInventoryCodeLabel", inventoryCode));

    AssetSearchDataProvider assetSearchDataProvider = new AssetSearchDataProvider(assetSearch);
    // if AssetSearch only addresses one AssetType, do not allow other choices
    List<AssetType> assetTypes = null;
    if (assetSearch.getAsset().getAssetType() != null) {
        assetTypes = new ArrayList<AssetType>(1);
        assetTypes.add(assetSearch.getAsset().getAssetType());
    } else {
        assetTypes = getCalipso().findAllAssetTypes();
    }
    @SuppressWarnings("serial")
    final DropDownChoice assetTypeChoice = new DropDownChoice("asset.assetType", assetTypes,
            new IChoiceRenderer() {
                public Object getDisplayValue(Object o) {
                    return localize(((AssetType) o).getNameTranslationResourceKey());
                }

                public String getIdValue(Object o, int i) {
                    return localize(((AssetType) o).getName());
                }
            });
    if (assetTypes.size() == 1) {
        logger.debug("Only allow one Asset TypeChoice");
        assetTypeChoice.setNullValid(false).setRequired(true);
    } else {
        logger.debug("Only any AssetType Choice");
    }

    // List view headers 
    List<String> columnHeaders = assetSearch.getColumnHeaders();

    ListView headings = new ListView("headings", columnHeaders) {

        private static final long serialVersionUID = 1L;

        protected void populateItem(ListItem listItem) {
            final String header = (String) listItem.getModelObject();
            AjaxLink headingLink = new AjaxLink("heading") {
                @Override
                public void onClick(AjaxRequestTarget target) {
                    assetSearch.doSort(header);
                    target.addComponent(ItemFormAssetSearchPanel.this);
                }
            };

            listItem.add(headingLink);
            String label = localize("asset.assetsList." + header);
            headingLink.add(new Label("heading", label));
            if (header.equals(assetSearch.getSortFieldName())) {
                String order = assetSearch.isSortDescending() ? "order-down" : "order-up";
                listItem.add(new SimpleAttributeModifier("class", order));
            }
        }
    };
    assetSearchForm.add(headings);

    //Header message 
    Label hAction = new Label("hAction");
    hAction.setDefaultModel(new Model(localize("edit")));
    assetSearchForm.add(hAction);

    // the DataView with the results of the search
    final AssetsDataView assetDataView = new AssetsDataView("assetDataView", assetSearchDataProvider,
            getBreadCrumbModel(), getCalipso().getRecordsPerPage()) {

        // when click the add button
        @Override
        public void onAddAssetClick(Asset asset, AjaxRequestTarget target) {
            // re-render
            onAssetSelect(asset, target);
        }
    };
    assetSearchForm.add(assetDataView);

    AjaxPagingNavigator panelNavigator = new AjaxPagingNavigator("navigator", assetDataView) {
        @Override
        protected void onAjaxEvent(AjaxRequestTarget target) {
            target.addComponent(ItemFormAssetSearchPanel.this);
        }
    };
    assetSearchForm.add(panelNavigator);

    // back to our asset type choice....
    assetSearchForm.add(assetTypeChoice);
    assetTypeChoice.setLabel(new ResourceModel("asset.assetType"));
    // Add Ajax Behaviour...
    assetTypeChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        protected void onUpdate(AjaxRequestTarget target) {
            // Reset the phone model dropdown when the vendor changes
            assetDataView.setCurrentPage(0);
            assetSearch.getAsset().setAssetType((AssetType) assetTypeChoice.getModelObject());
        }
    });
    assetSearchForm.add(new SimpleFormComponentLabel("assetTypeLabel", assetTypeChoice));
    AjaxLink submitLink = new AjaxLink("submit") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            //assetSearchForm.replace(getConfiguredAssetListPanel(assetSearch));
            target.addComponent(ItemFormAssetSearchPanel.this);
        }
    };
    assetSearchForm.add(submitLink);
}

From source file:gr.abiss.calipso.wicket.asset.ItemFormAssetSearchPanel.java

License:Open Source License

/**
 * @param assetSearch/* w ww .j a va2s.c  o m*/
 * @return
 */

private AssetsListPanel getConfiguredAssetListPanel(final AssetSearch assetSearch) {
    // override AssetsListPanel's getAssetActionLink to add the asset
    AssetsListPanel assetListPanel = new AssetsListPanel("assetsListPanel", getBreadCrumbModel(), assetSearch) {
        public AbstractLink getAssetActionLink(String markupId, final Asset asset) {
            AjaxLink link = new AjaxLink(markupId) {
                @Override
                public void onClick(AjaxRequestTarget target) {
                    onAssetSelect(asset, target);
                }
            };
            link.add(new StaticImage("actionLinkImg", new Model("../resources/add.gif")));
            return link;
        }
    };
    assetListPanel.setOutputMarkupId(true);
    return assetListPanel;
}

From source file:gr.abiss.calipso.wicket.ItemRelatePanel.java

License:Open Source License

public ItemRelatePanel(String id, boolean isItemViewPage) {
    super(id);//  w ww  .  j av a 2 s.co  m
    ItemSearch itemSearch = getCurrentItemSearch();
    refId = itemSearch == null ? null : itemSearch.getRelatingItemRefId();
    if (refId != null) {
        final YuiDialog dialog = new YuiDialog("itemWindow");
        add(dialog);
        AjaxLink link = new AjaxLink("link") {
            public void onClick(AjaxRequestTarget target) {
                Item item = getCalipso().loadItemByRefId(refId);
                dialog.show(target, refId,
                        new ItemView(YuiDialog.CONTENT_ID, getCalipso().getItemRenderingTemplateForUser(
                                getPrincipal(), item.getStatus(), item.getSpace().getId()), item));
            }
        };
        link.add(new Label("refId", refId));
        if (isItemViewPage) {
            add(new WebMarkupContainer("link").setVisible(false));
            add(new WebMarkupContainer("message").setVisible(false));
            add(new RelateForm("form").add(link));
        } else {
            add(new Label("message", localize("item_list.searchingForRelated")));
            add(link);
            add(new WebMarkupContainer("form").setVisible(false));
        }
        add(new Link("cancel") {
            public void onClick() {
                Item item = getCalipso().loadItemByRefId(refId);
                setCurrentItemSearch(null);
                setResponsePage(ItemViewPage.class, new PageParameters("0=" + item.getUniqueRefId()));
            }
        });
    } else {
        setVisible(false);
    }
}

From source file:gr.abiss.calipso.wicket.ItemRelateRemovePage.java

License:Open Source License

public ItemRelateRemovePage(long itemId, final ItemItem itemItem) {
    this.itemId = itemId;
    this.itemItem = itemItem;
    add(new ConfirmForm("form"));
    final String relatingRefId = itemItem.getItem().getUniqueRefId();
    final String relatedRefId = itemItem.getRelatedItem().getUniqueRefId();
    final YuiDialog relatingDialog = new YuiDialog("relatingDialog");
    final YuiDialog relatedDialog = new YuiDialog("relatedDialog");
    add(relatingDialog);/*from w  w w  .j ava 2 s .c om*/
    add(relatedDialog);
    AjaxLink relating = new AjaxLink("relating") {
        public void onClick(AjaxRequestTarget target) {
            Item relating = getCalipso().loadItem(itemItem.getItem().getId());
            relatingDialog.show(target, relatingRefId,
                    new ItemView(YuiDialog.CONTENT_ID, getCalipso().getItemRenderingTemplateForUser(
                            getPrincipal(), relating.getStatus(), relating.getSpace().getId()), relating));
        }
    };
    relating.add(new Label("refId", relatingRefId));
    add(relating);

    // TODO refactor, duplicate code in ItemView
    String message = null;
    if (itemItem.getType() == DUPLICATE_OF) {
        message = localize("item_view.duplicateOf");
    } else if (itemItem.getType() == DEPENDS_ON) {
        message = localize("item_view.dependsOn");
    } else if (itemItem.getType() == RELATED) {
        message = localize("item_view.relatedTo");
    }
    add(new Label("message", message));

    AjaxLink related = new AjaxLink("related") {
        public void onClick(AjaxRequestTarget target) {
            Item related = getCalipso().loadItem(itemItem.getRelatedItem().getId());
            relatedDialog.show(target, relatedRefId,
                    new ItemView(YuiDialog.CONTENT_ID, getCalipso().getItemRenderingTemplateForUser(
                            getPrincipal(), related.getStatus(), related.getSpace().getId()), related));
        }
    };
    related.add(new Label("refId", itemItem.getRelatedItem().getUniqueRefId()));
    add(related);

}

From source file:guru.mmp.application.web.template.components.FormDialog.java

License:Apache License

/**
 * Constructs a new <code>FormDialog</code>.
 *
 * @param id         the non-null id of this component
 * @param title      the title for the form dialog
 * @param submitText the text to display on the "submit" button
 * @param cancelText the text to display on the "cancel" button
 *//*w  w  w.ja  va  2  s .  c  om*/
public FormDialog(String id, String title, String submitText, String cancelText) {
    super(id);

    this.title = title;
    this.submitText = submitText;
    this.cancelText = cancelText;

    Label titleLabel = new Label("title", new PropertyModel<String>(this, "title"));
    titleLabel.setRenderBodyOnly(true);
    add(titleLabel);

    alerts = new Alerts("alerts", id);
    add(alerts);

    form = new Form<>("form");
    add(form);

    AjaxButton submitButton = new AjaxButton("submitButton", form) {
        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            super.onError(target, form);

            if (target != null) {
                // Visit each form component and if it is visible re-render it.
                // NOTE: We have to re-render every component to remove stale validation error messages.
                form.visitFormComponents((formComponent, iVisit) -> {
                    if ((formComponent.getParent() != null) && formComponent.getParent().isVisible()
                            && formComponent.isVisible()) {
                        target.add(formComponent);
                    }
                });
            }

            FormDialog.this.onError(target, FormDialog.this.getForm());
        }

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            if (target != null) {
                resetFeedbackMessages(target);
            }

            if (FormDialog.this.onSubmit(target, FormDialog.this.getForm())) {
                hide(target);
            } else {
                target.add(getAlerts());
            }
        }
    };
    submitButton.setDefaultFormProcessing(true);
    add(submitButton);

    Label submitTextLabel = new Label("submitText", new PropertyModel<String>(this, "submitText"));
    submitTextLabel.setRenderBodyOnly(true);
    submitButton.add(submitTextLabel);

    AjaxLink cancelLink = new AjaxLink("cancelLink") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            FormDialog.this.onCancel(target, getForm());

            hide(target);
        }
    };
    add(cancelLink);

    Label cancelTextLabel = new Label("cancelText", new PropertyModel<String>(this, "cancelText"));
    cancelTextLabel.setRenderBodyOnly(true);
    cancelLink.add(cancelTextLabel);
}

From source file:hsa.awp.usergui.PriorityListSelector.java

License:Open Source License

/**
 * Constructor for PriorityListSelector.
 *
 * @param id       Wicket id//from  www .  j av a 2s.  co m
 * @param drawProc DrawProcedure to be edited
 */
public PriorityListSelector(String id, final DrawProcedure drawProc) {

    super(id);

    singleUser = controller.getUserById(SecurityContextHolder.getContext().getAuthentication().getName());

    box = new WebMarkupContainer("prioListSelector.box");
    box.setOutputMarkupId(true);
    form = new Form<String>("prioListSelector.form");
    this.setOutputMarkupId(true);
    form.setOutputMarkupId(true);
    feedbackPanel.setOutputMarkupId(true);

    drawProcedureModel = new LoadableDetachedModel<DrawProcedure>() {
        /**
         *
         */
        private static final long serialVersionUID = 1L;

        @Override
        protected DrawProcedure load() {

            return controller.getDrawProcedureById(drawProc.getId());
        }
    };

    final IModel<List<Event>> eventlistModel = new LoadableDetachableModel<List<Event>>() {
        /**
         *
         */
        private static final long serialVersionUID = 1509181846335682010L;

        @Override
        protected List<Event> load() {

            List<Event> eventList = controller.convertToEventList(
                    new ArrayList<Long>(drawProcedureModel.getObject().getCampaign().getEventIds()));

            Collections.sort(eventList, new Comparator<Event>() {
                @Override
                public int compare(Event o1, Event o2) {

                    if (o1.getEventId() > o2.getEventId()) {
                        return 1;
                    } else if (o1.getEventId() < o2.getEventId()) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });

            return filterEventListForSourcebox(eventList);
        }
    };

    categoryListModel = new LoadableDetachableModel<List<Category>>() {
        /**
         *
         */
        private static final long serialVersionUID = -6326470345409063111L;

        @Override
        protected List<Category> load() {

            Set<Category> categories = new TreeSet<Category>(new Comparator<Category>() {
                @Override
                public int compare(Category o1, Category o2) {

                    return o1.getName().compareTo(o2.getName());
                }
            });

            eventlistModel.detach();
            for (Event e : eventlistModel.getObject()) {
                categories.add(e.getSubject().getCategory());
            }

            return new ArrayList<Category>(categories);
        }
    };

    IModel<Integer> categoryIterations = new LoadableDetachableModel<Integer>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override
        protected Integer load() {

            return categoryListModel.getObject().size();
        }
    };

    Loop categoryList = new Loop("prioListSelector.categories", categoryIterations) {
        /**
         * generated uid.
         */
        private static final long serialVersionUID = -6820774021151549325L;

        @Override
        protected void populateItem(LoopItem item) {

            Category category = categoryListModel.getObject().get(item.getIteration());
            AjaxLink<Category> link = new AjaxLink<Category>("prioListSelector.categoriesLink",
                    new Model<Category>(category)) {
                /**
                 * generated uid.
                 */
                private static final long serialVersionUID = -3667864064733586820L;

                @Override
                public void onClick(AjaxRequestTarget target) {

                    sourceBox.removeAllElements();
                    this.addEventsToSourcebox();
                    target.addComponent(sourceBox);
                }

                private void addEventsToSourcebox() {

                    eventlistModel.detach();
                    for (Event e : eventlistModel.getObject()) {
                        if (e.getSubject().getCategory().equals(this.getModel().getObject())) {
                            sourceBox.addElement(
                                    new DragableElement(DragAndDropableBox.DRAG_AND_DROPABLE_BOX_ITEM, e));
                        }
                    }
                }
            };
            link.add(new Label("prioListSelector.categoryName", category.getName()));
            item.add(link);
        }
    };

    categoryList.setOutputMarkupId(true);

    sourceBox = new DragAndDropableBox("prioListSelector.selectableObjects");
    form.add(sourceBox);

    dropBoxList = new ArrayList<DropAndSortableBox>(drawProcedureModel.getObject().getMaximumPriorityLists());

    submitButton = new Button("prioListSelector.submit") {
        /**
         * generated UID.
         */
        private static final long serialVersionUID = -1440808750941977688L;

        @Override
        public void onSubmit() {

            Set<List<Event>> lists = new HashSet<List<Event>>();

            for (DropAndSortableBox box : dropBoxList) {
                if (box.getEventList().size() > 0) {
                    lists.add(box.getEventList());
                }
            }

            if (lists.size() != 0) {
                drawProcedureModel.detach();
                try {
                    DrawProcedure drawProcedure = drawProcedureModel.getObject();
                    controller.createPrioList(SecurityContextHolder.getContext().getAuthentication().getName(),
                            SecurityContextHolder.getContext().getAuthentication().getName(), lists,
                            drawProcedure.getCampaign());
                    setResponsePage(new OnePanelPage(
                            new PriorityListSelector(OnePanelPage.getPanelIdOne(), drawProcedure)));
                } catch (IllegalArgumentException e) {
                    moveElementsBackToSource();
                    feedbackPanel.error("Bitte Eingaben \u00dcberpr\u00fcfen.");
                } catch (IllegalStateException e) {
                    feedbackPanel.error("Leider zu spt, die Verlosung hat schon stattgefunden.");
                }
            } else {
                feedbackPanel.error("Bitte Eingaben \u00dcberpr\u00fcfen.");
            }
        }
    };

    IModel<Integer> prioListIterations = new LoadableDetachableModel<Integer>() {
        /**
         *
         */
        private static final long serialVersionUID = -2446977182797089682L;

        @Override
        protected Integer load() {

            DrawProcedure drawProcedure = drawProcedureModel.getObject();
            int i = drawProcedure.getMaximumPriorityLists()
                    - controller.findPriorityListsByUserAndProcedure(singleUser.getId(), drawProcedure).size();

            PriorityListSelector.submitButton.setVisible(i > 0);
            PriorityListSelector.messageEmpty.setVisible(!(i > 0));
            PriorityListSelector.messageTitle.setVisible((i > 0));
            PriorityListSelector.messageSubtitle.setVisible((i > 0));

            return i;
        }
    };

    /*
    * render priolists dynamically dependent on the attribute in drawProcedure.
    */
    final Loop priolists = new Loop("prioListSelector.listsList", prioListIterations) {
        /**
         *
         */
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(LoopItem item) {

            DrawProcedure drawProcedure = drawProcedureModel.getObject();
            DropAndSortableBox list = new DropAndSortableBox("prioListSelector.prioList",
                    drawProcedure.getMaximumPriorityListItems());
            list.setOutputMarkupId(true);
            item.add(
                    new Label("prioListSelector.listName",
                            "Wunschliste Kurs " + (item.getIteration() + 1 + controller
                                    .findPriorityListsByUserAndProcedure(singleUser.getId(), drawProcedure)
                                    .size())));
            dropBoxList.add(list);
            item.add(list);
        }
    };

    priolists.setOutputMarkupId(true);

    form.add(categoryList);
    form.add(messageEmpty);
    form.add(messageTitle);
    form.add(messageSubtitle);
    form.add(priolists);
    form.add(submitButton);

    /*
    * Priolist management
    */

    IModel<List<PriorityList>> prioListsModel = new LoadableDetachableModel<List<PriorityList>>() {
        /**
         * generated UID.
         */
        private static final long serialVersionUID = 8833064897441919997L;

        @Override
        protected List<PriorityList> load() {

            List<PriorityList> list = controller.findPriorityListsByUserAndProcedure(singleUser.getId(),
                    drawProcedureModel.getObject());

            return list;
        }
    };

    DrawRegistrationManagementPanel drawRegistrationManagementPanel = new DrawRegistrationManagementPanel(
            "prioListSelector.managementPanel", prioListsModel);

    form.add(drawRegistrationManagementPanel);

    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm");
    box.add(new Label("prioListSelector.heading",
            drawProcedureModel.getObject().getCampaign().getName() + ": Phase: "
                    + drawProcedureModel.getObject().getName() + " vom "
                    + df.format(drawProcedureModel.getObject().getStartDate().getTime()) + " bis "
                    + (drawProcedureModel.getObject() instanceof DrawProcedure
                            ? df.format(drawProcedureModel.getObject().getDrawDate().getTime())
                            : df.format((drawProcedureModel.getObject().getEndDate().getTime())))));

    box.add(feedbackPanel);
    box.add(form);
    add(box);
}

From source file:hsa.awp.usergui.prioritylistselectors.PriorityListSelector.java

License:Open Source License

/**
 * Constructor for PriorityListSelector.
 * /*from   w ww .j a  v a2s.  c  o m*/
 * @param id
 *            Wicket id
 * @param drawProc
 *            DrawProcedure to be edited
 */
public PriorityListSelector(String id, final DrawProcedure drawProc) {

    super(id);
    messageEmpty.setEscapeModelStrings(false);
    singleUser = controller.getUserById(SecurityContextHolder.getContext().getAuthentication().getName());

    box = new WebMarkupContainer("prioListSelector.box");
    box.setOutputMarkupId(true);
    form = new Form<String>("prioListSelector.form");
    this.setOutputMarkupId(true);
    form.setOutputMarkupId(true);
    feedbackPanel.setOutputMarkupId(true);

    drawProcedureModel = new LoadableDetachedModel<DrawProcedure>() {
        /**
        *
        */
        private static final long serialVersionUID = 1L;

        @Override
        protected DrawProcedure load() {

            return controller.getDrawProcedureById(drawProc.getId());
        }
    };

    final IModel<List<Event>> eventlistModel = new LoadableDetachableModel<List<Event>>() {
        /**
        *
        */
        private static final long serialVersionUID = 1509181846335682010L;

        @Override
        protected List<Event> load() {

            List<Event> eventList = controller.convertToEventList(
                    new ArrayList<Long>(drawProcedureModel.getObject().getCampaign().getEventIds()));

            Collections.sort(eventList, new Comparator<Event>() {
                @Override
                public int compare(Event o1, Event o2) {

                    if (o1.getEventId() > o2.getEventId()) {
                        return 1;
                    } else if (o1.getEventId() < o2.getEventId()) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });

            return filterEventListForSourcebox(eventList);
        }
    };

    categoryListModel = new LoadableDetachableModel<List<Category>>() {
        /**
        *
        */
        private static final long serialVersionUID = -6326470345409063111L;

        @Override
        protected List<Category> load() {

            Set<Category> categories = new TreeSet<Category>(new Comparator<Category>() {
                @Override
                public int compare(Category o1, Category o2) {

                    return o1.getName().compareTo(o2.getName());
                }
            });

            eventlistModel.detach();
            for (Event e : eventlistModel.getObject()) {
                categories.add(e.getSubject().getCategory());
            }

            return new ArrayList<Category>(categories);
        }
    };

    IModel<Integer> categoryIterations = new LoadableDetachableModel<Integer>() {
        /**
        * 
        */
        private static final long serialVersionUID = -1513427284596362424L;

        @Override
        protected Integer load() {

            return categoryListModel.getObject().size();
        }
    };

    Loop categoryList = new Loop("prioListSelector.categories", categoryIterations) {
        /**
         * generated uid.
         */
        private static final long serialVersionUID = -6820774021151549325L;

        @Override
        protected void populateItem(LoopItem item) {

            final Category category = categoryListModel.getObject().get(item.getIteration());
            AjaxLink<Category> link = new AjaxLink<Category>("prioListSelector.categoriesLink",
                    new Model<Category>(category)) {
                /**
                 * generated uid.
                 */
                private static final long serialVersionUID = -3667864064733586820L;

                @Override
                public void onClick(AjaxRequestTarget target) {

                    sourceBox.removeAllElements();
                    sourceBox.setComponentId(category.getId());
                    this.addEventsToSourcebox();
                    target.addComponent(sourceBox);
                }

                private void addEventsToSourcebox() {

                    eventlistModel.detach();
                    for (Event e : eventlistModel.getObject()) {
                        if (e.getSubject().getCategory().equals(this.getModel().getObject())) {
                            sourceBox.addElement(
                                    new DragableElement(DragAndDropableBox.DRAG_AND_DROPABLE_BOX_ITEM, e));
                        }
                    }
                }
            };
            link.add(new Label("prioListSelector.categoryName", category.getName()));
            item.add(link);
        }
    };

    categoryList.setOutputMarkupId(true);

    sourceBox = new DragAndDropableBox("prioListSelector.selectableObjects");
    form.add(sourceBox);

    dropBoxList = new ArrayList<DropAndSortableBox>(drawProcedureModel.getObject().getMaximumPriorityLists());

    submitButton = new Button("prioListSelector.submit") {
        /**
         * generated UID.
         */
        private static final long serialVersionUID = -1440808750941977688L;

        @Override
        public void onSubmit() {

            Set<List<Event>> lists = new HashSet<List<Event>>();

            for (DropAndSortableBox box : dropBoxList) {
                if (box.getEventList().size() > 0) {
                    lists.add(box.getEventList());
                }
            }

            if (lists.size() != 0) {
                drawProcedureModel.detach();
                try {
                    DrawProcedure drawProcedure = drawProcedureModel.getObject();
                    controller.createPrioList(SecurityContextHolder.getContext().getAuthentication().getName(),
                            SecurityContextHolder.getContext().getAuthentication().getName(), lists,
                            drawProcedure.getCampaign());
                    setResponsePage(new OnePanelPage(
                            new PriorityListSelector(OnePanelPage.getPanelIdOne(), drawProcedure)));
                } catch (IllegalArgumentException e) {
                    moveElementsBackToSource();
                    feedbackPanel.error("Bitte Eingaben \u00dcberpr\u00fcfen.");
                } catch (IllegalStateException e) {
                    feedbackPanel.error("Leider zu spt, die Verlosung hat schon stattgefunden.");
                }
            } else {
                feedbackPanel.error("Wunschlisten d\u00dcrfen nicht leer sein!");
            }
        }
    };

    IModel<Integer> prioListIterations = new LoadableDetachableModel<Integer>() {
        /**
        *
        */
        private static final long serialVersionUID = -2446977182797089682L;

        @Override
        protected Integer load() {

            DrawProcedure drawProcedure = drawProcedureModel.getObject();
            int i = drawProcedure.getMaximumPriorityLists()
                    - controller.findPriorityListsByUserAndProcedure(singleUser.getId(), drawProcedure).size();

            PriorityListSelector.submitButton.setVisible(i > 0);
            PriorityListSelector.messageEmpty.setVisible(!(i > 0));
            PriorityListSelector.messageTitle.setVisible((i > 0));
            PriorityListSelector.messageSubtitle.setVisible((i > 0));

            return i;
        }
    };

    /*
     * render priolists dynamically dependent on the attribute in
     * drawProcedure.
     */
    final Loop priolists = new Loop("prioListSelector.listsList", prioListIterations) {
        /**
        *
        */
        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(LoopItem item) {

            DrawProcedure drawProcedure = drawProcedureModel.getObject();
            DropAndSortableBox list = new DropAndSortableBox("prioListSelector.prioList",
                    drawProcedure.getMaximumPriorityListItems());
            list.setOutputMarkupId(true);
            //            item.add(new Label("prioListSelector.listName",
            //                  "Wunschliste Kurs "
            //                        + (item.getIteration() + 1 + controller
            //                              .findPriorityListsByUserAndProcedure(
            //                                    singleUser.getId(),
            //                                    drawProcedure).size())));
            dropBoxList.add(list);
            item.add(list);
        }
    };

    priolists.setOutputMarkupId(true);

    form.add(categoryList);
    form.add(messageEmpty);
    form.add(messageTitle);
    form.add(messageSubtitle);
    form.add(priolists);
    form.add(submitButton);

    /*
     * Priolist management
     */

    IModel<List<PriorityList>> prioListsModel = new LoadableDetachableModel<List<PriorityList>>() {
        /**
         * generated UID.
         */
        private static final long serialVersionUID = 8833064897441919997L;

        @Override
        protected List<PriorityList> load() {

            List<PriorityList> list = controller.findPriorityListsByUserAndProcedure(singleUser.getId(),
                    drawProcedureModel.getObject());

            return list;
        }
    };

    DrawRegistrationManagementPanel drawRegistrationManagementPanel = new DrawRegistrationManagementPanel(
            "prioListSelector.managementPanel", prioListsModel);

    form.add(drawRegistrationManagementPanel);

    DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm");
    box.add(new Label("prioListSelector.heading",
            drawProcedureModel.getObject().getCampaign().getName() + ": Phase: "
                    + drawProcedureModel.getObject().getName() + " vom "
                    + df.format(drawProcedureModel.getObject().getStartDate().getTime()) + " bis "
                    + (drawProcedureModel.getObject() instanceof DrawProcedure
                            ? df.format(drawProcedureModel.getObject().getDrawDate().getTime())
                            : df.format((drawProcedureModel.getObject().getEndDate().getTime())))));

    box.add(feedbackPanel);
    box.add(form);
    add(box);
}