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

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

Introduction

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

Prototype

public ModalWindow(final String id) 

Source Link

Document

Creates a new modal window component.

Usage

From source file:org.obiba.onyx.quartz.editor.openAnswer.autocomplete.SuggestionItemListPanel.java

License:Open Source License

public SuggestionItemListPanel(String id, IModel<OpenAnswerDefinition> model,
        IModel<Questionnaire> questionnaireModel, IModel<LocaleProperties> localePropertiesModel,
        FeedbackPanel feedbackPanel, FeedbackWindow feedbackWindow) {
    super(id, model);

    this.questionnaireModel = questionnaireModel;
    this.localePropertiesModel = localePropertiesModel;
    this.feedbackPanel = feedbackPanel;
    this.feedbackWindow = feedbackWindow;

    openAnswerSuggestion = new OpenAnswerDefinitionSuggestion(model.getObject());

    itemWindow = new ModalWindow("itemWindow");
    itemWindow.setCssClassName("onyx");
    itemWindow.setInitialWidth(ITEM_WINDOW_WIDTH);
    itemWindow.setInitialHeight(ITEM_WINDOW_HEIGHT);
    itemWindow.setResizable(true);/*w  ww  .j  a  v a2 s .c o m*/
    itemWindow.setTitle(new ResourceModel("SuggestionItem"));
    itemWindow.setCloseButtonCallback(new CloseButtonCallback() {
        @Override
        public boolean onCloseButtonClicked(AjaxRequestTarget target) {
            return true; // same as cancel
        }
    });
    add(itemWindow);

    add(deleteConfirm = new ConfirmationDialog("deleteConfirm"));
    deleteConfirm.setTitle(new StringResourceModel("ConfirmDeleteItem", this, null));
    deleteConfirm.setContent(
            new MultiLineLabel(deleteConfirm.getContentId(), new ResourceModel("ConfirmDeleteItemContent")));

    itemList = new EntityListTablePanel<String>("items", new ItemProvider(), new ItemListColumnProvider(),
            new ResourceModel("Items"), ITEMS_PER_PAGE);
    itemList.setAllowColumnSelection(false);
    add(itemList);

    List<ITab> tabs = new ArrayList<ITab>();
    tabs.add(new AbstractTab(new ResourceModel("Add.simple")) {
        @Override
        public Panel getPanel(String panelId) {
            return new SimpleAddPanel(panelId);
        }
    });
    tabs.add(new AbstractTab(new ResourceModel("Add.bulk")) {
        @Override
        public Panel getPanel(String panelId) {
            return new BulkAddPanel(panelId);
        }
    });
    add(new AjaxTabbedPanel("addTabs", tabs));
}

From source file:org.obiba.onyx.quartz.editor.openAnswer.OpenAnswerPanel.java

License:Open Source License

public OpenAnswerPanel(String id, IModel<OpenAnswerDefinition> model, IModel<Category> categoryModel,
        final IModel<Question> questionModel, final IModel<Questionnaire> questionnaireModel,
        IModel<LocaleProperties> localePropertiesModel, final FeedbackPanel feedbackPanel,
        final FeedbackWindow feedbackWindow) {
    super(id, model);
    this.questionModel = questionModel;
    this.questionnaireModel = questionnaireModel;
    this.localePropertiesModel = localePropertiesModel;
    this.feedbackPanel = feedbackPanel;
    this.feedbackWindow = feedbackWindow;

    final Question question = questionModel.getObject();
    final Category category = categoryModel.getObject();
    final OpenAnswerDefinition openAnswer = model.getObject();

    validatorWindow = new ModalWindow("validatorWindow");
    validatorWindow.setCssClassName("onyx");
    validatorWindow.setInitialWidth(850);
    validatorWindow.setInitialHeight(300);
    validatorWindow.setResizable(true);//from  w  w w. ja  va  2 s.  c  o  m
    validatorWindow.setTitle(new ResourceModel("Validator"));
    add(validatorWindow);

    initialName = model.getObject().getName();
    final TextField<String> name = new TextField<String>("name", new PropertyModel<String>(model, "name"));
    name.setLabel(new ResourceModel("Name"));
    name.add(new RequiredFormFieldBehavior());
    name.add(new PatternValidator(QuartzEditorPanel.ELEMENT_NAME_PATTERN));
    name.add(new AbstractValidator<String>() {
        @Override
        protected void onValidate(IValidatable<String> validatable) {
            if (!StringUtils.equals(initialName, validatable.getValue())) {
                boolean alreadyContains = false;
                if (category != null) {
                    Map<String, OpenAnswerDefinition> openAnswerDefinitionsByName = category
                            .getOpenAnswerDefinitionsByName();
                    alreadyContains = openAnswerDefinitionsByName.containsKey(validatable.getValue())
                            && openAnswerDefinitionsByName.get(validatable.getValue()) != openAnswer;
                }
                QuestionnaireFinder questionnaireFinder = QuestionnaireFinder
                        .getInstance(questionnaireModel.getObject());
                questionnaireModel.getObject().setQuestionnaireCache(null);
                OpenAnswerDefinition findOpenAnswerDefinition = questionnaireFinder
                        .findOpenAnswerDefinition(validatable.getValue());
                if (alreadyContains
                        || findOpenAnswerDefinition != null && findOpenAnswerDefinition != openAnswer) {
                    error(validatable, "OpenAnswerAlreadyExists");
                }
            }
        }
    });
    add(name).add(new SimpleFormComponentLabel("nameLabel", name));
    add(new HelpTooltipPanel("nameHelp", new ResourceModel("Name.Tooltip")));

    variable = new TextField<String>("variable", new MapModel<String>(
            new PropertyModel<Map<String, String>>(model, "variableNames"), question.getName()));
    variable.setLabel(new ResourceModel("Variable"));
    add(variable).add(new SimpleFormComponentLabel("variableLabel", variable));
    add(new HelpTooltipPanel("variableHelp", new ResourceModel("Variable.Tooltip")));

    if (category == null) {
        variableNameBehavior = new VariableNameBehavior(name, variable, question.getParentQuestion(), question,
                null) {
            @Override
            @SuppressWarnings("hiding")
            protected String generateVariableName(Question parentQuestion, Question question, Category category,
                    String name) {
                if (StringUtils.isBlank(name))
                    return "";
                if (category != null) {
                    return super.generateVariableName(parentQuestion, question, category, name);
                }
                String variableName = parentQuestion == null ? "" : parentQuestion.getName() + ".";
                if (question != null) {
                    variableName += question.getName() + "." + question.getName() + ".";
                }
                return variableName + StringUtils.trimToEmpty(name);
            }
        };
    } else {
        variableNameBehavior = new VariableNameBehavior(name, variable, question.getParentQuestion(), question,
                category);
    }

    add(variableNameBehavior);

    List<DataType> typeChoices = new ArrayList<DataType>(Arrays.asList(DataType.values()));
    typeChoices.remove(DataType.BOOLEAN);
    typeChoices.remove(DataType.DATA);
    dataTypeDropDown = new DropDownChoice<DataType>("dataType", new PropertyModel<DataType>(model, "dataType"),
            typeChoices, new IChoiceRenderer<DataType>() {
                @Override
                public Object getDisplayValue(DataType type) {
                    return new StringResourceModel("DataType." + type, OpenAnswerPanel.this, null).getString();
                }

                @Override
                public String getIdValue(DataType type, int index) {
                    return type.name();
                }
            });

    dataTypeDropDown.setLabel(new ResourceModel("DataType"));
    dataTypeDropDown.add(new RequiredFormFieldBehavior());
    dataTypeDropDown.setNullValid(false);

    add(dataTypeDropDown).add(new SimpleFormComponentLabel("dataTypeLabel", dataTypeDropDown));
    // add(new HelpTooltipPanel("dataTypeHelp", new ResourceModel("DataType.Tooltip")));

    TextField<String> unit = new TextField<String>("unit", new PropertyModel<String>(model, "unit"));
    unit.setLabel(new ResourceModel("Unit"));
    add(unit).add(new SimpleFormComponentLabel("unitLabel", unit));
    add(new HelpTooltipPanel("unitHelp", new ResourceModel("Unit.Tooltip")));

    PatternValidator numericPatternValidator = new PatternValidator("\\d*");
    // ui Arguments
    Integer size = openAnswer.getInputSize();
    sizeField = new TextField<String>("size", new Model<String>(size == null ? null : String.valueOf(size)));
    sizeField.add(numericPatternValidator);
    sizeField.setLabel(new ResourceModel("SizeLabel"));
    add(new SimpleFormComponentLabel("sizeLabel", sizeField));
    add(sizeField);

    Integer rows = openAnswer.getInputNbRows();
    rowsField = new TextField<String>("rows", new Model<String>(rows == null ? null : String.valueOf(rows)));
    rowsField.add(numericPatternValidator);
    rowsField.setLabel(new ResourceModel("RowsLabel"));
    add(new SimpleFormComponentLabel("rowsLabel", rowsField));
    add(rowsField);

    localePropertiesUtils.load(localePropertiesModel.getObject(), questionnaireModel.getObject(), openAnswer);

    Map<String, Boolean> visibleStates = new HashMap<String, Boolean>();
    if (openAnswer.isSuggestionAnswer()) {
        for (String item : new OpenAnswerDefinitionSuggestion(openAnswer).getSuggestionItems()) {
            visibleStates.put(item, false);
        }
    }
    add(labelsPanel = new LabelsPanel("labels", localePropertiesModel, model, feedbackPanel, feedbackWindow,
            null, visibleStates));

    CheckBox requiredCheckBox = new CheckBox("required", new PropertyModel<Boolean>(model, "required"));
    requiredCheckBox.setLabel(new ResourceModel("AnswerRequired"));
    add(requiredCheckBox);
    add(new SimpleFormComponentLabel("requiredLabel", requiredCheckBox));

    // min/max validators
    String maxValue = null, minValue = null, patternValue = null;
    for (IDataValidator<?> dataValidator : openAnswer.getDataValidators()) {
        IValidator<?> validator = dataValidator.getValidator();
        if (validator instanceof RangeValidator<?>) {
            RangeValidator<?> rangeValidator = (RangeValidator<?>) validator;
            Object minimum = rangeValidator.getMinimum();
            Object maximum = rangeValidator.getMaximum();
            if (dataValidator.getDataType() == DataType.DATE) {
                if (minimum != null)
                    minValue = onyxSettings.getDateFormat().format((Date) minimum);
                if (maximum != null)
                    maxValue = onyxSettings.getDateFormat().format((Date) maximum);
            } else {
                if (minimum != null)
                    minValue = String.valueOf(minimum);
                if (maximum != null)
                    maxValue = String.valueOf(maximum);
            }
        } else if (validator instanceof StringValidator.MaximumLengthValidator) {
            int maximum = ((StringValidator.MaximumLengthValidator) validator).getMaximum();
            if (maximum > 0)
                maxValue = String.valueOf(maximum);
        } else if (validator instanceof MaximumValidator<?>) {
            Object maximum = ((MaximumValidator<?>) validator).getMaximum();
            if (dataValidator.getDataType() == DataType.DATE) {
                if (maximum != null)
                    maxValue = onyxSettings.getDateFormat().format((Date) maximum);
            } else {
                if (maximum != null)
                    maxValue = String.valueOf(maximum);
            }
        } else if (validator instanceof StringValidator.MinimumLengthValidator) {
            int minimum = ((StringValidator.MinimumLengthValidator) validator).getMinimum();
            if (minimum > 0)
                minValue = String.valueOf(minimum);
        } else if (validator instanceof MinimumValidator<?>) {
            Object minimum = ((MinimumValidator<?>) validator).getMinimum();
            if (dataValidator.getDataType() == DataType.DATE) {
                if (minimum != null)
                    minValue = onyxSettings.getDateFormat().format((Date) minimum);
            } else {
                if (minimum != null)
                    minValue = String.valueOf(minimum);
            }
        } else if (validator instanceof PatternValidator) {
            patternValue = ((PatternValidator) validator).getPattern().toString();
        }
    }

    patternField = new TextField<String>("patternValidator", new Model<String>(patternValue));
    patternField.setLabel(new ResourceModel("PatternLabel"));
    patternField.setOutputMarkupId(true);
    add(new SimpleFormComponentLabel("patternLabel", patternField));
    add(patternField);

    minMaxContainer = new WebMarkupContainer("minMaxContainer");
    minMaxContainer.setOutputMarkupId(true);
    add(minMaxContainer);

    minLength = new TextField<String>("minLength", new Model<String>(minValue), String.class);
    minLength.setLabel(new ResourceModel("Minimum.length"));
    minMaxContainer.add(minLength);

    maxLength = new TextField<String>("maxLength", new Model<String>(maxValue), String.class);
    maxLength.setLabel(new ResourceModel("Maximum.length"));
    minMaxContainer.add(maxLength);

    minNumeric = new TextField<String>("minNumeric", new Model<String>(minValue), String.class);
    minNumeric.setLabel(new ResourceModel("Minimum"));
    minNumeric.add(numericPatternValidator);
    minMaxContainer.add(minNumeric);

    maxNumeric = new TextField<String>("maxNumeric", new Model<String>(maxValue), String.class);
    maxNumeric.setLabel(new ResourceModel("Maximum"));
    maxNumeric.add(numericPatternValidator);
    minMaxContainer.add(maxNumeric);

    PatternValidator decimalPatternValidator = new PatternValidator("\\d*(\\.\\d+)?");
    minDecimal = new TextField<String>("minDecimal", new Model<String>(minValue), String.class);
    minDecimal.setLabel(new ResourceModel("Minimum"));
    minDecimal.add(decimalPatternValidator);
    minMaxContainer.add(minDecimal);

    maxDecimal = new TextField<String>("maxDecimal", new Model<String>(maxValue), String.class);
    maxDecimal.setLabel(new ResourceModel("Maximum"));
    maxDecimal.add(decimalPatternValidator);
    minMaxContainer.add(maxDecimal);

    String patternStr = onyxSettings.getDateFormat().toPattern();

    beforeDate = new TextField<String>("beforeDate", new Model<String>(maxValue), String.class);
    beforeDate.setLabel(new Model<String>(
            new StringResourceModel("Before", this, null).getObject() + " (" + patternStr + ")"));
    minMaxContainer.add(beforeDate);

    afterDate = new TextField<String>("afterDate", new Model<String>(minValue), String.class);
    afterDate.setLabel(new Model<String>(
            new StringResourceModel("After", this, null).getObject() + " (" + patternStr + ")"));
    minMaxContainer.add(afterDate);

    minMaxContainer.add(minimumLabel = new SimpleFormComponentLabel("minimumLabel", minLength));
    minMaxContainer.add(maximumLabel = new SimpleFormComponentLabel("maximumLabel", maxLength));

    setMinMaxLabels(dataTypeDropDown.getModelObject());

    add(validators = new OnyxEntityList<ComparingDataSource>("validators", new ValidationDataSourcesProvider(),
            new ValidationDataSourcesColumnProvider(), new ResourceModel("Validators")));

    AjaxLink<Void> addValidator = new AjaxLink<Void>("addValidator") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            if (dataTypeDropDown.getModelObject() == null) {
                info(new StringResourceModel("SelectDataTypeFirst", OpenAnswerPanel.this, null).getString());
                feedbackWindow.setContent(feedbackPanel);
                feedbackWindow.show(target);
            } else {
                validatorWindow.setContent(new ValidationDataSourceWindow("content",
                        new Model<ComparingDataSource>(), questionModel, questionnaireModel,
                        dataTypeDropDown.getModelObject(), validatorWindow) {
                    @Override
                    protected void onSave(@SuppressWarnings("hiding") AjaxRequestTarget target,
                            ComparingDataSource comparingDataSource) {
                        openAnswer.addValidationDataSource(comparingDataSource);
                        target.addComponent(validators);
                    }
                });
                validatorWindow.show(target);
            }
        }
    };
    addValidator.setOutputMarkupId(true);
    add(addValidator.add(new Image("img", Images.ADD)));

    dataTypeDropDown.add(new OnChangeAjaxBehavior() {

        @SuppressWarnings("incomplete-switch")
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            setFieldType();
            String value = dataTypeDropDown.getValue(); // use value because model is not set if validation error
            DataType valueOf = DataType.valueOf(value);
            if (value != null) {
                OpenAnswerDefinition openAnswerDefinition = (OpenAnswerDefinition) getDefaultModelObject();
                for (Data data : openAnswerDefinition.getDefaultValues()) {

                    switch (valueOf) {
                    case DATE:
                        try {
                            onyxSettings.getDateFormat().parse(data.getValueAsString());
                        } catch (ParseException nfe) {
                            error(new StringResourceModel("InvalidCastType", OpenAnswerPanel.this, null)
                                    .getObject());
                            showFeedbackErrorAndReset(target);
                            return;
                        }
                        break;
                    case DECIMAL:
                        try {
                            Double.parseDouble(data.getValueAsString());
                        } catch (NumberFormatException nfe) {
                            error(new StringResourceModel("InvalidCastType", OpenAnswerPanel.this, null)
                                    .getObject());
                            showFeedbackErrorAndReset(target);
                            return;
                        }
                        break;
                    case INTEGER:
                        if (data.getType() == DataType.DECIMAL) {
                            Double d = data.getValue();
                            if (d != d.longValue()) {
                                error(new StringResourceModel("InvalidCastType", OpenAnswerPanel.this, null)
                                        .getObject());
                                showFeedbackErrorAndReset(target);
                                return;
                            }
                        } else {
                            try {
                                Long.parseLong(data.getValueAsString());
                            } catch (NumberFormatException nfe) {
                                error(new StringResourceModel("InvalidCastType", OpenAnswerPanel.this, null)
                                        .getObject());
                                showFeedbackErrorAndReset(target);
                                return;
                            }
                        }
                        break;
                    case TEXT:
                        break;
                    }
                }
                for (Data data : openAnswerDefinition.getDefaultValues()) {
                    switch (valueOf) {
                    case DATE:
                        try {
                            data.setTypeAndValue(valueOf,
                                    onyxSettings.getDateFormat().parse(data.getValueAsString()));
                        } catch (ParseException e) {
                            throw new RuntimeException(e);
                        }
                        break;
                    case DECIMAL:
                        data.setTypeAndValue(valueOf, Double.parseDouble(data.getValueAsString()));
                        break;
                    case INTEGER:
                        if (data.getType() == DataType.DECIMAL) {
                            data.setTypeAndValue(valueOf, ((Double) data.getValue()).longValue());
                        } else {
                            data.setTypeAndValue(valueOf, Integer.parseInt(data.getValueAsString()));
                        }
                        break;
                    case TEXT:
                        data.setTypeAndValue(valueOf,
                                data.getType() == DataType.DATE
                                        ? onyxSettings.getDateFormat().format(data.getValue())
                                        : data.getValueAsString());
                        break;
                    }
                }
            }
            setMinMaxLabels(value == null ? null : valueOf);
            target.addComponent(minMaxContainer);
            target.addComponent(patternField);
            defaultValuesList.refreshList(target);
        }

        private void showFeedbackErrorAndReset(AjaxRequestTarget target) {
            dataTypeDropDown.setModelObject(openAnswer.getDefaultValues().get(0).getType());
            target.addComponent(dataTypeDropDown);
            OpenAnswerPanel.this.feedbackWindow.setContent(OpenAnswerPanel.this.feedbackPanel);
            OpenAnswerPanel.this.feedbackWindow.show(target);
        }
    });

    final IModel<String> addDefaultValuesModel = new Model<String>();

    List<ITab> tabs = new ArrayList<ITab>();
    tabs.add(new AbstractTab(new ResourceModel("Add.simple")) {
        @Override
        public Panel getPanel(String panelId) {
            return new SimpleAddPanel(panelId, addDefaultValuesModel);
        }
    });
    tabs.add(new AbstractTab(new ResourceModel("Add.bulk")) {
        @Override
        public Panel getPanel(String panelId) {
            return new BulkAddPanel(panelId, addDefaultValuesModel);
        }
    });
    add(new AjaxTabbedPanel("addTabs", tabs));

    defaultValuesList = new SortableList<Data>("defaultValues", openAnswer.getDefaultValues(), true) {

        @Override
        public Component getItemTitle(@SuppressWarnings("hiding") String id, Data data) {
            return new Label(id,
                    data.getType() == DataType.DATE ? onyxSettings.getDateFormat().format(data.getValue())
                            : data.getValueAsString());
        }

        @Override
        public void editItem(Data t, AjaxRequestTarget target) {

        }

        @SuppressWarnings("unchecked")
        @Override
        public void deleteItem(final Data data, AjaxRequestTarget target) {
            ((OpenAnswerDefinition) OpenAnswerPanel.this.getDefaultModelObject()).removeDefaultData(data);
            for (Locale locale : OpenAnswerPanel.this.localePropertiesModel.getObject().getLocales()) {
                List<KeyValue> list = OpenAnswerPanel.this.localePropertiesModel.getObject()
                        .getElementLabels(openAnswer).get(locale);
                Collection<KeyValue> toDelete = Collections2.filter(list, new Predicate<KeyValue>() {

                    @Override
                    public boolean apply(KeyValue input) {
                        return input.getKey().equals(data.getValue().toString());
                    }

                });
                list.remove(toDelete.iterator().next());
            }
            OpenAnswerPanel.this.addOrReplace(
                    labelsPanel = new LabelsPanel("labels", OpenAnswerPanel.this.localePropertiesModel,
                            (IModel<OpenAnswerDefinition>) OpenAnswerPanel.this.getDefaultModel(),
                            OpenAnswerPanel.this.feedbackPanel, OpenAnswerPanel.this.feedbackWindow));
            target.addComponent(labelsPanel);
            refreshList(target);
        }

        @Override
        public Button[] getButtons() {
            return null;
        }

    };
    add(defaultValuesList);
    add(new HelpTooltipPanel("defaultValuesHelp", new ResourceModel("DefaultValues.Tooltip")));
}

From source file:org.obiba.onyx.quartz.editor.openAnswer.validation.ValidationDataSourceWindow.java

License:Open Source License

public ValidationDataSourceWindow(String id, IModel<ComparingDataSource> model,
        final IModel<Question> questionModel, final IModel<Questionnaire> questionnaireModel,
        final DataType dataType, final ModalWindow modalWindow) {
    super(id, model);
    this.dataType = dataType;

    final ValueType valueType = VariableUtils.convertToValueType(dataType);

    add(CSSPackageResource.getHeaderContribution(ValidationDataSourceWindow.class,
            "ValidationDataSourceWindow.css"));

    variableWindow = new ModalWindow("variableWindow");
    variableWindow.setCssClassName("onyx");
    variableWindow.setInitialWidth(950);
    variableWindow.setInitialHeight(540);
    variableWindow.setResizable(true);/*from   w w  w . j a  v  a  2 s  .c om*/
    variableWindow.setTitle(new ResourceModel("Variable"));
    add(variableWindow);

    final Questionnaire questionnaire = questionnaireModel.getObject();

    final OpenAnswerValidator validator = new OpenAnswerValidator();
    if (model.getObject() != null) {
        ComparingDataSource comparingDataSource = model.getObject();
        validator.setOperator(comparingDataSource.getComparisonOperator());
        IDataSource dataSourceRight = comparingDataSource.getDataSourceRight();
        if (dataSourceRight instanceof VariableDataSource) {
            VariableDataSource variableDataSource = (VariableDataSource) dataSourceRight;
            if (questionnaire.getName().equals(variableDataSource.getTableName())) {
                try {
                    validator.setVariable(questionnaire.getVariable(variableDataSource.getVariableName()));
                    validator.setType(Type.VARIABLE);
                } catch (IllegalArgumentException e) {
                    // not found in this questionnaire
                }
            }
            if (validator.getType() == null) { // not found yet
                Variable variable = variableUtils.findVariable(variableDataSource);
                if (variable != null) {
                    try {
                        validator.setVariable(questionnaire.getVariable(variable.getName()));
                        validator.setType(Type.VARIABLE);
                    } catch (IllegalArgumentException e) {
                        // not found
                        Question question = VariableUtils.findQuestion(variable,
                                QuestionnaireFinder.getInstance(questionnaire));
                        validator.setType(Type.QUESTION_CATEGORY);
                        validator.setQuestion(question);
                        Category category = VariableUtils.findCategory(variable, question);
                        validator.setCategory(category);
                        validator.setOpenAnswer(VariableUtils.findOpenAnswer(variable, category));
                    }
                }
            }
        } else if (dataSourceRight instanceof JavascriptDataSource) {
            JavascriptDataSource javascriptDataSource = (JavascriptDataSource) dataSourceRight;
            validator.setType(JAVASCRIPT);
            validator.setScript(javascriptDataSource.getScript());
        }
    }

    feedbackPanel = new FeedbackPanel("content");
    feedbackWindow = new FeedbackWindow("feedback");
    feedbackWindow.setOutputMarkupId(true);

    add(feedbackWindow);

    add(form = new Form<OpenAnswerValidator>("form", new Model<OpenAnswerValidator>(validator)));
    form.setMultiPart(false);

    IChoiceRenderer<ComparisonOperator> operatorRenderer = new IChoiceRenderer<ComparisonOperator>() {
        @Override
        public String getIdValue(ComparisonOperator operator, int index) {
            return operator.name();
        }

        @Override
        public Object getDisplayValue(ComparisonOperator operator) {
            return new StringResourceModel("Operator." + operator, ValidationDataSourceWindow.this, null)
                    .getString();
        }
    };

    List<ComparisonOperator> comparisonOperatorAsList = null;
    if (dataType == DataType.TEXT) {
        comparisonOperatorAsList = Arrays.asList(ComparisonOperator.eq, ComparisonOperator.ne,
                ComparisonOperator.in);
    } else {
        comparisonOperatorAsList = Arrays.asList(ComparisonOperator.values());
    }
    final DropDownChoice<ComparisonOperator> operator = new DropDownChoice<ComparisonOperator>("operator",
            new PropertyModel<ComparisonOperator>(form.getModel(), "operator"), comparisonOperatorAsList,
            operatorRenderer);
    form.add(operator.setLabel(new ResourceModel("Operator")).setRequired(true))
            .add(new SimpleFormComponentLabel("operatorLabel", operator));

    final RadioGroup<Type> validationType = new RadioGroup<Type>("validationType",
            new PropertyModel<Type>(form.getModel(), "type"));
    form.add(validationType.setLabel(new ResourceModel("Variable")).setRequired(true));

    final Radio<Type> questionType = new Radio<Type>("questionType", new Model<Type>(QUESTION_CATEGORY));
    questionType.setLabel(new ResourceModel("QuestionType"));
    validationType.add(questionType).add(new SimpleFormComponentLabel("questionTypeLabel", questionType));

    final WebMarkupContainer questionTypeContainer = new WebMarkupContainer("questionTypeContainer");
    questionTypeContainer.setOutputMarkupId(true);
    validationType.add(questionTypeContainer);

    final WebMarkupContainer questionConditionContainer = new WebMarkupContainer("questionConditionContainer");
    questionConditionContainer.setVisible(validator.getType() == QUESTION_CATEGORY);
    questionTypeContainer.add(questionConditionContainer);

    if (questionnaire.getQuestionnaireCache() == null) {
        QuestionnaireFinder.getInstance(questionnaire).buildQuestionnaireCache();
    }

    List<Question> questions = new ArrayList<Question>(
            questionnaire.getQuestionnaireCache().getQuestionCache().values());
    Collections.sort(questions, new QuestionnaireElementComparator());
    final Multimap<Question, Category> questionCategories = LinkedHashMultimap.create();
    final Multimap<Category, OpenAnswerDefinition> categoryOpenAnswer = LinkedHashMultimap.create();
    for (Question q : questions) {
        if (!q.equals(questionModel.getObject()) && q.getType() != QuestionType.BOILER_PLATE) {
            final List<Category> findCategories = findCategories(q);
            for (Category category : findCategories) {
                categoryOpenAnswer.putAll(category, category.getOpenAnswerDefinitionsByName().values());
            }
            questionCategories.putAll(q, findCategories);
        }
    }

    final DropDownChoice<Question> questionName = new DropDownChoice<Question>("question",
            new PropertyModel<Question>(form.getModel(), "question"),
            new ArrayList<Question>(questionCategories.keySet()), new QuestionnaireElementNameRenderer()) {
        @Override
        public boolean isRequired() {
            return validationType.getModelObject() == QUESTION_CATEGORY;
        }
    };

    questionName.setLabel(new ResourceModel("Question"));
    questionConditionContainer.add(questionName)
            .add(new SimpleFormComponentLabel("questionLabel", questionName));

    final List<Category> categories = questionName.getModelObject() == null ? new ArrayList<Category>()
            : new ArrayList<Category>(questionCategories.get(questionName.getModelObject()));

    final DropDownChoice<Category> categoryName = new DropDownChoice<Category>("category",
            new PropertyModel<Category>(form.getModel(), "category"), categories,
            new QuestionnaireElementNameRenderer()) {
        @Override
        public boolean isRequired() {
            return validationType.getModelObject() == QUESTION_CATEGORY;
        }
    };
    categoryName.setLabel(new ResourceModel("Category"));
    questionConditionContainer.add(categoryName)
            .add(new SimpleFormComponentLabel("categoryLabel", categoryName));

    final List<OpenAnswerDefinition> openAnswers = categoryName.getModelObject() == null
            ? new ArrayList<OpenAnswerDefinition>()
            : new ArrayList<OpenAnswerDefinition>(categoryOpenAnswer.get(categoryName.getModelObject()));

    final DropDownChoice<OpenAnswerDefinition> openAnswerName = new DropDownChoice<OpenAnswerDefinition>(
            "openAnswer", new PropertyModel<OpenAnswerDefinition>(form.getModel(), "openAnswer"), openAnswers,
            new QuestionnaireElementNameRenderer()) {
        @Override
        public boolean isRequired() {
            return validationType.getModelObject() == QUESTION_CATEGORY;
        }
    };

    questionName.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            categories.clear();
            openAnswers.clear();
            categories.addAll(questionName.getModelObject() == null ? new ArrayList<Category>()
                    : new ArrayList<Category>(questionCategories.get(questionName.getModelObject())));
            openAnswers.addAll(categories.isEmpty() ? new ArrayList<OpenAnswerDefinition>()
                    : new ArrayList<OpenAnswerDefinition>(categoryOpenAnswer.get(categories.get(0))));
            target.addComponent(categoryName);
            target.addComponent(openAnswerName);
        }
    });

    categoryName.add(new OnChangeAjaxBehavior() {

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            openAnswers.clear();
            openAnswers.addAll(categoryName.getModelObject() == null ? new ArrayList<OpenAnswerDefinition>()
                    : new ArrayList<OpenAnswerDefinition>(
                            categoryOpenAnswer.get(categoryName.getModelObject())));
            target.addComponent(openAnswerName);
        }
    });

    openAnswerName.setLabel(new ResourceModel("OpenAnswer"));
    questionConditionContainer.add(openAnswerName)
            .add(new SimpleFormComponentLabel("openAnswerLabel", openAnswerName));

    Radio<Type> variableType = new Radio<Type>("variableType", new Model<Type>(VARIABLE));
    variableType.setLabel(new ResourceModel("Variable"));
    validationType.add(variableType).add(new SimpleFormComponentLabel("variableTypeLabel", variableType));

    final WebMarkupContainer variableTypeContainer = new WebMarkupContainer("variableTypeContainer");
    variableTypeContainer.setOutputMarkupId(true);
    validationType.add(variableTypeContainer);

    final WebMarkupContainer variableContainer = new WebMarkupContainer("variableContainer");
    variableContainer.setVisible(validator.getType() == VARIABLE);
    variableTypeContainer.add(variableContainer);

    final List<Variable> variables = new ArrayList<Variable>(
            Collections2.filter(questionnaire.getVariables(), new Predicate<Variable>() {
                @Override
                public boolean apply(Variable v) {
                    // Filter for text when the operator is 'IN'
                    if (validator.getOperator() != null
                            && validator.getOperator().equals(ComparisonOperator.in)) {
                        return v.getValueType().equals(VariableUtils.convertToValueType(DataType.TEXT));
                    }
                    return v.getValueType().equals(valueType);
                }
            }));

    final DropDownChoice<Variable> variableDropDown = new DropDownChoice<Variable>("variable",
            new PropertyModel<Variable>(form.getModel(), "variable"), variables, new VariableRenderer()) {
        @Override
        public boolean isRequired() {
            return validationType.getModelObject() == VARIABLE;
        }
    };
    variableDropDown.setLabel(new ResourceModel("Variable")).setOutputMarkupId(true);
    variableContainer.add(variableDropDown);

    final WebMarkupContainer previewVariableVisibility = new WebMarkupContainer("previewVariableVisibility");
    variableContainer.add(previewVariableVisibility.setOutputMarkupId(true));

    final Image previewVariable = new Image("previewVariable", Images.ZOOM);
    previewVariable.add(new AttributeModifier("title", true, new ResourceModel("Preview")));
    previewVariable.setVisible(variableDropDown.getModelObject() != null);
    previewVariableVisibility.add(previewVariable);

    final Label previewScript = new Label("previewScript", variableDropDown.getModelObject() == null ? ""
            : variableDropDown.getModelObject().getAttributeStringValue("script"));
    previewScript.add(new SyntaxHighlighterBehavior());
    previewScript.add(new AttributeAppender("style", true, new Model<String>("display: none;"), " "));
    previewVariableVisibility.add(previewScript);

    final Map<String, Object> tooltipCfg = new HashMap<String, Object>();
    tooltipCfg.put("delay", 100);
    tooltipCfg.put("showURL", false);
    tooltipCfg.put("top", -30);
    tooltipCfg.put("bodyHandler",
            "function() { return $(\"#" + previewScript.getMarkupId(true) + "\").html(); }");
    previewVariable.add(new TooltipBehavior(null, tooltipCfg));

    variableContainer.add(new AjaxLink<Void>("newVariable") {
        @Override
        public void onClick(AjaxRequestTarget target) {

            @SuppressWarnings({ "rawtypes", "unchecked" })
            VariablePanel variablePanel = new VariablePanel("content", new Model(null), questionnaireModel,
                    valueType) {
                @Override
                public void onSave(@SuppressWarnings("hiding") AjaxRequestTarget target,
                        Variable createdVariable) {
                    variables.add(createdVariable);
                    questionnaire.addVariable(createdVariable);
                    variableDropDown.setModelObject(createdVariable);
                    previewVariable.setVisible(true);
                    previewScript.setDefaultModelObject(createdVariable.getAttributeStringValue("script"));
                    variableWindow.close(target);
                    target.addComponent(variableDropDown);
                    target.addComponent(previewVariableVisibility);
                }

                @Override
                public void onCancel(@SuppressWarnings("hiding") AjaxRequestTarget target) {
                    variableWindow.close(target);
                }
            };
            variableWindow.setContent(variablePanel);
            variableWindow.show(target);
        }
    }.add(new Image("newVariableImg", Images.ADD))
            .add(new AttributeModifier("title", true, new ResourceModel("NewVariable"))));

    variableDropDown.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Variable variable = variableDropDown.getModelObject();
            previewVariable.setVisible(variable != null);
            previewScript.setDefaultModelObject(
                    variable == null ? null : variable.getAttributeStringValue("script"));
            target.addComponent(previewVariableVisibility);
        }
    });

    Radio<Type> javascriptType = new Radio<Type>("javascriptType", new Model<Type>(JAVASCRIPT));
    javascriptType.setLabel(new ResourceModel("JavascriptType"));
    validationType.add(javascriptType).add(new SimpleFormComponentLabel("javascriptTypeLabel", javascriptType));

    final TextArea<String> javascriptField = new TextArea<String>("javascriptField",
            new PropertyModel<String>(validator, "script"));
    javascriptField.setOutputMarkupPlaceholderTag(true);
    javascriptField.setVisible(validator.getType() == JAVASCRIPT);
    validationType.add(javascriptField);

    javascriptField.add(new IValidator<String>() {

        @Override
        public void validate(final IValidatable<String> validatable) {
            JavascriptUtils.compile(validatable.getValue(), questionModel.getObject().getName(),
                    ValidationDataSourceWindow.this, form);
        }
    });

    validationType.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Type type = validationType.getModelObject();
            switch (type) {
            case QUESTION_CATEGORY:
                variableDropDown.setModelObject(null);
                javascriptField.setModelObject(null);
                break;
            case VARIABLE:
                questionName.setModelObject(null);
                categoryName.setModelObject(null);
                openAnswerName.setModelObject(null);
                javascriptField.setModelObject(null);
                break;
            case JAVASCRIPT:
                variableDropDown.setModelObject(null);
                questionName.setModelObject(null);
                categoryName.setModelObject(null);
                openAnswerName.setModelObject(null);
                break;
            }
            questionConditionContainer.setVisible(type == QUESTION_CATEGORY);
            variableContainer.setVisible(type == VARIABLE);
            javascriptField.setVisible(type == JAVASCRIPT);
            target.addComponent(questionTypeContainer);
            target.addComponent(variableTypeContainer);
            target.addComponent(javascriptField);
        }
    });

    form.add(new SaveCancelPanel("saveCancel", form) {
        @Override
        protected void onSave(AjaxRequestTarget target, Form<?> form1) {

            IDataSource dataSource = null;
            switch (validator.getType()) {
            case QUESTION_CATEGORY:
                Question question = validator.getQuestion();
                OpenAnswerDefinition openAnswer = validator.getOpenAnswer();
                String variableName = openAnswer.getVariableName(question.getName());
                if (StringUtils.isNotBlank(variableName)) {
                    dataSource = new VariableDataSource(questionnaire.getName() + ":" + variableName);
                } else {
                    dataSource = new VariableDataSource(questionnaire.getName() + ":" + question.getName() + "."
                            + validator.getCategory().getName() + "." + openAnswer.getName());
                }
                break;
            case VARIABLE:
                dataSource = new VariableDataSource(
                        questionnaire.getName() + ":" + validator.getVariable().getName());
                break;
            case JAVASCRIPT:
                dataSource = new JavascriptDataSource(validator.getScript(),
                        VariableUtils.convertToValueType(dataType).getName(), questionnaire.getName());
                ((JavascriptDataSource) dataSource)
                        .setSequence(validator.getOperator() == ComparisonOperator.in);
                break;
            }

            ComparingDataSource comparingDataSource = new ComparingDataSource(null, validator.getOperator(),
                    dataSource);
            ValidationDataSourceWindow.this.onSave(target, comparingDataSource);
            modalWindow.close(target);
        }

        @Override
        protected void onCancel(AjaxRequestTarget target, @SuppressWarnings("hiding") Form<?> form) {
            modalWindow.close(target);
        }

        @Override
        protected void onError(AjaxRequestTarget target, @SuppressWarnings("hiding") Form<?> form) {
            feedbackWindow.setContent(feedbackPanel);
            feedbackWindow.show(target);
        }
    });

}

From source file:org.obiba.onyx.quartz.editor.question.array.ArrayRowsPanel.java

License:Open Source License

public ArrayRowsPanel(String id, IModel<EditedQuestion> model, final IModel<Questionnaire> questionnaireModel,
        final IModel<LocaleProperties> localePropertiesModel, FeedbackPanel feedbackPanel,
        FeedbackWindow feedbackWindow) {
    super(id, model);
    this.questionnaireModel = questionnaireModel;
    this.localePropertiesModel = localePropertiesModel;
    this.feedbackPanel = feedbackPanel;
    this.feedbackWindow = feedbackWindow;

    final Question questionParent = model.getObject().getElement();

    add(CSSPackageResource.getHeaderContribution(ArrayRowsPanel.class, "ArrayRowsPanel.css"));

    questionWindow = new ModalWindow("questionWindow");
    questionWindow.setCssClassName("onyx");
    questionWindow.setInitialWidth(950);
    questionWindow.setInitialHeight(550);
    questionWindow.setResizable(true);// w w  w  .  j  a v  a  2  s.  c  om
    questionWindow.setTitle(new ResourceModel("Question"));
    add(questionWindow);

    final IModel<String> addQuestionModel = new Model<String>();

    List<ITab> tabs = new ArrayList<ITab>();
    tabs.add(new AbstractTab(new ResourceModel("Add.simple")) {
        @Override
        public Panel getPanel(String panelId) {
            return new SimpleAddPanel(panelId, addQuestionModel);
        }
    });
    tabs.add(new AbstractTab(new ResourceModel("Add.bulk")) {
        @Override
        public Panel getPanel(String panelId) {
            return new BulkAddPanel(panelId, addQuestionModel);
        }
    });
    add(new AjaxTabbedPanel("addTabs", tabs));

    questionList = new SortableList<Question>("questions", questionParent.getQuestions()) {

        @Override
        public void onItemPopulation(Question question) {
            localePropertiesUtils.load(localePropertiesModel.getObject(), questionnaireModel.getObject(),
                    question);
        }

        @Override
        public Component getItemTitle(String id, Question question) {
            return new Label(id, question.getName());
        }

        @Override
        public void editItem(final Question question, AjaxRequestTarget target) {
            final ElementClone<Question> originalQuestion = QuestionnaireElementCloner.clone(question,
                    new CloneSettings(true, false), localePropertiesModel.getObject());
            questionWindow.setContent(
                    new QuestionWindow("content", new Model<EditedQuestion>(new EditedQuestion(question)),
                            questionnaireModel, localePropertiesModel, questionWindow) {
                        @Override
                        protected void onSave(AjaxRequestTarget target, EditedQuestion editedQuestion) {

                        }

                        @Override
                        protected void onCancel(AjaxRequestTarget target, EditedQuestion editedQuestion) {
                            rollback(questionParent, question, originalQuestion);
                        }
                    });
            questionWindow.setCloseButtonCallback(new CloseButtonCallback() {
                @Override
                public boolean onCloseButtonClicked(AjaxRequestTarget target) {
                    rollback(questionParent, question, originalQuestion);
                    return true;
                }
            });
            questionWindow.setWindowClosedCallback(new WindowClosedCallback() {
                @Override
                public void onClose(AjaxRequestTarget target) {
                    refreshList(target);
                }
            });
            questionWindow.show(target);
        }

        @Override
        public void deleteItem(Question question, AjaxRequestTarget target) {
            questionParent.getQuestions().remove(question);
            refreshList(target);
        }

        @Override
        public Button[] getButtons() {
            return null;
        }

    };
    add(questionList);

}

From source file:org.obiba.onyx.quartz.editor.question.condition.ConditionPanel.java

License:Open Source License

public ConditionPanel(String id, final IModel<Question> questionModel,
        final IModel<Questionnaire> questionnaireModel) {
    super(id);//from  w  w w .ja  v  a 2  s  .  c o  m
    this.questionModel = questionModel;
    this.questionnaireModel = questionnaireModel;

    add(CSSPackageResource.getHeaderContribution(ConditionPanel.class, "ConditionPanel.css"));

    variableWindow = new ModalWindow("variableWindow");
    variableWindow.setCssClassName("onyx");
    variableWindow.setInitialWidth(950);
    variableWindow.setInitialHeight(540);
    variableWindow.setResizable(true);
    variableWindow.setTitle(new ResourceModel("Variable"));
    add(variableWindow);

    add(new MultiLineLabel("explain", new ResourceModel("Explain")));

    Condition condition = new Condition();

    final Question question = questionModel.getObject();

    final Questionnaire questionnaire = questionnaireModel.getObject();
    QuestionnaireFinder questionnaireFinder = QuestionnaireFinder.getInstance(questionnaire);
    questionnaireFinder.buildQuestionnaireCache(); // need a fresh cache

    final IDataSource initialCondition = question.getCondition();
    if (initialCondition != null) {
        if (initialCondition instanceof VariableDataSource) {
            VariableDataSource variableDataSource = (VariableDataSource) initialCondition;
            if (questionnaire.getName().equals(variableDataSource.getTableName())) {
                try {
                    condition.setVariable(questionnaire.getVariable(variableDataSource.getVariableName()));
                    condition.setType(Type.VARIABLE);
                } catch (IllegalArgumentException e) {
                    // not found in this questionnaire
                }
            }
            if (condition.getType() == NONE) { // not found yet
                Variable variable = variableUtils.findVariable(variableDataSource);
                if (variable != null) {
                    try {
                        condition.setVariable(questionnaire.getVariable(variable.getName()));
                        condition.setType(Type.VARIABLE);
                    } catch (IllegalArgumentException e) {
                        // not found
                        Question questionCondition = VariableUtils.findQuestion(variable, questionnaireFinder);
                        condition.setType(Type.QUESTION_CATEGORY);
                        condition.setQuestion(questionCondition);
                        condition.setCategory(VariableUtils.findCategory(variable, questionCondition));
                    }
                }
            }
        } else if (initialCondition instanceof JavascriptDataSource) {
            condition.setType(JAVASCRIPT);
            condition.setScript(((JavascriptDataSource) initialCondition).getScript());
        }
    }

    Model<Condition> model = new Model<Condition>(condition);
    setDefaultModel(model);

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

    final RadioGroup<Type> conditionType = new RadioGroup<Type>("conditionType",
            new PropertyModel<Type>(model, "type"));
    conditionType.setLabel(new ResourceModel("ConditionType")).setRequired(true);
    form.add(conditionType);

    final Radio<Type> noneType = new Radio<Type>("none", new Model<Type>(NONE));
    noneType.setLabel(new ResourceModel("NoCondition"));
    conditionType.add(noneType).add(new SimpleFormComponentLabel("noneLabel", noneType));

    final Radio<Type> questionType = new Radio<Type>("questionType", new Model<Type>(QUESTION_CATEGORY));
    questionType.setLabel(new ResourceModel("QuestionType"));
    conditionType.add(questionType).add(new SimpleFormComponentLabel("questionTypeLabel", questionType));

    final WebMarkupContainer questionTypeContainer = new WebMarkupContainer("questionTypeContainer");
    questionTypeContainer.setOutputMarkupId(true);
    conditionType.add(questionTypeContainer);

    final WebMarkupContainer questionConditionContainer = new WebMarkupContainer("questionConditionContainer");
    questionConditionContainer.setVisible(condition.getType() == QUESTION_CATEGORY);
    questionTypeContainer.add(questionConditionContainer);

    final List<Question> questions = new ArrayList<Question>(Collections2.filter(
            questionnaire.getQuestionnaireCache().getQuestionCache().values(), new Predicate<Question>() {
                @Override
                public boolean apply(Question q) {
                    return !q.equals(question) && q.getType() != QuestionType.BOILER_PLATE;
                }
            }));
    Collections.sort(questions, new QuestionnaireElementComparator());

    questionName = new DropDownChoice<Question>("question", new PropertyModel<Question>(model, "question"),
            questions, new QuestionnaireElementNameRenderer()) {
        @Override
        public boolean isRequired() {
            return conditionType.getModelObject() == QUESTION_CATEGORY;
        }
    };

    questionName.setLabel(new ResourceModel("Question"));
    questionName.setNullValid(false);
    questionConditionContainer.add(questionName)
            .add(new SimpleFormComponentLabel("questionLabel", questionName));

    final List<Category> categories = findCategories();
    final DropDownChoice<Category> categoryName = new DropDownChoice<Category>("category",
            new PropertyModel<Category>(model, "category"), categories,
            new QuestionnaireElementNameRenderer()) {
        @Override
        public boolean isRequired() {
            return conditionType.getModelObject() == QUESTION_CATEGORY;
        }
    };
    categoryName.setLabel(new ResourceModel("Category"));
    categoryName.setNullValid(false);
    questionConditionContainer.add(categoryName)
            .add(new SimpleFormComponentLabel("categoryLabel", categoryName));

    questionName.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            categories.clear();
            categories.addAll(findCategories());
            target.addComponent(categoryName);
        }
    });

    Radio<Type> variableType = new Radio<Type>("variableType", new Model<Type>(VARIABLE));
    variableType.setLabel(new ResourceModel("VariableType"));
    conditionType.add(variableType).add(new SimpleFormComponentLabel("variableTypeLabel", variableType));

    final WebMarkupContainer variableTypeContainer = new WebMarkupContainer("variableTypeContainer");
    variableTypeContainer.setOutputMarkupId(true);
    conditionType.add(variableTypeContainer);

    final WebMarkupContainer variableContainer = new WebMarkupContainer("variableContainer");
    variableContainer.setVisible(condition.getType() == VARIABLE);
    variableTypeContainer.add(variableContainer);

    final List<Variable> variables = new ArrayList<Variable>(
            Collections2.filter(questionnaire.getVariables(), new Predicate<Variable>() {
                @Override
                public boolean apply(Variable v) {
                    return v.getValueType().equals(BooleanType.get());
                }
            }));

    final DropDownChoice<Variable> variableDropDown = new DropDownChoice<Variable>("variable",
            new PropertyModel<Variable>(model, "variable"), variables, new VariableRenderer()) {
        @Override
        public boolean isRequired() {
            return conditionType.getModelObject() == VARIABLE;
        }
    };
    variableDropDown.setLabel(new ResourceModel("Variable")).setOutputMarkupId(true);
    variableContainer.add(variableDropDown);

    final WebMarkupContainer previewVariableVisibility = new WebMarkupContainer("previewVariableVisibility");
    variableContainer.add(previewVariableVisibility.setOutputMarkupId(true));

    final Image previewVariable = new Image("previewVariable", Images.ZOOM);
    previewVariable.add(new AttributeModifier("title", true, new ResourceModel("Preview")));
    previewVariable.setVisible(variableDropDown.getModelObject() != null);
    previewVariableVisibility.add(previewVariable);

    final Label previewScript = new Label("previewScript", variableDropDown.getModelObject() == null ? ""
            : variableDropDown.getModelObject().getAttributeStringValue("script"));
    previewScript.add(new SyntaxHighlighterBehavior());
    previewScript.add(new AttributeAppender("style", true, new Model<String>("display: none;"), " "));
    previewVariableVisibility.add(previewScript);

    final Map<String, Object> tooltipCfg = new HashMap<String, Object>();
    tooltipCfg.put("delay", 100);
    tooltipCfg.put("showURL", false);
    tooltipCfg.put("top", -30);
    tooltipCfg.put("bodyHandler",
            "function() { return $(\"#" + previewScript.getMarkupId(true) + "\").html(); }");
    previewVariable.add(new TooltipBehavior(null, tooltipCfg));

    variableContainer.add(new AjaxLink<Void>("newVariable") {
        @Override
        public void onClick(AjaxRequestTarget target) {

            @SuppressWarnings({ "rawtypes", "unchecked" })
            VariablePanel variablePanel = new VariablePanel("content", new Model(null), questionnaireModel,
                    BooleanType.get()) {
                @Override
                public void onSave(@SuppressWarnings("hiding") AjaxRequestTarget target,
                        Variable createdVariable) {
                    variables.add(createdVariable);
                    questionnaire.addVariable(createdVariable);
                    variableDropDown.setModelObject(createdVariable);
                    previewVariable.setVisible(true);
                    previewScript.setDefaultModelObject(createdVariable.getAttributeStringValue("script"));
                    variableWindow.close(target);
                    target.addComponent(variableDropDown);
                    target.addComponent(previewVariableVisibility);
                }

                @Override
                public void onCancel(@SuppressWarnings("hiding") AjaxRequestTarget target) {
                    variableWindow.close(target);
                }
            };

            variableWindow.setContent(variablePanel);
            variableWindow.show(target);
        }
    }.add(new Image("newVariableImg", Images.ADD))
            .add(new AttributeModifier("title", true, new ResourceModel("NewVariable"))));

    variableDropDown.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Variable variable = variableDropDown.getModelObject();
            previewVariable.setVisible(variable != null);
            previewScript.setDefaultModelObject(
                    variable == null ? null : variable.getAttributeStringValue("script"));
            target.addComponent(previewVariableVisibility);
        }
    });

    Radio<Type> javascriptType = new Radio<Type>("javascriptType", new Model<Type>(JAVASCRIPT));
    javascriptType.setLabel(new ResourceModel("JavascriptType"));
    conditionType.add(javascriptType).add(new SimpleFormComponentLabel("javascriptTypeLabel", javascriptType));

    final TextArea<String> javascriptField = new TextArea<String>("javascriptField",
            new PropertyModel<String>(condition, "script"));
    javascriptField.setOutputMarkupPlaceholderTag(true);
    javascriptField.setVisible(condition.getType() == JAVASCRIPT);
    conditionType.add(javascriptField);

    javascriptField.add(new IValidator<String>() {

        @Override
        public void validate(final IValidatable<String> validatable) {
            JavascriptUtils.compile(validatable.getValue(), question.getName(), ConditionPanel.this, form);
        }
    });

    conditionType.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            Type type = conditionType.getModelObject();
            switch (type) {
            case NONE:
                questionName.setModelObject(null);
                categoryName.setModelObject(null);
                variableDropDown.setModelObject(null);
                javascriptField.setModelObject(null);
                break;
            case QUESTION_CATEGORY:
                variableDropDown.setModelObject(null);
                javascriptField.setModelObject(null);
                break;
            case VARIABLE:
                questionName.setModelObject(null);
                categoryName.setModelObject(null);
                javascriptField.setModelObject(null);
                break;
            case JAVASCRIPT:
                questionName.setModelObject(null);
                categoryName.setModelObject(null);
                variableDropDown.setModelObject(null);
                break;
            }
            questionConditionContainer.setVisible(type == QUESTION_CATEGORY);
            variableContainer.setVisible(type == VARIABLE);
            javascriptField.setVisible(type == JAVASCRIPT);
            target.addComponent(questionTypeContainer);
            target.addComponent(variableTypeContainer);
            target.addComponent(javascriptField);
        }
    });

}

From source file:org.obiba.onyx.quartz.editor.questionnaire.QuestionnaireListPanel.java

License:Open Source License

public QuestionnaireListPanel(String id) {
    super(id);//  ww  w .jav a  2s.c  o m

    add(CSSPackageResource.getHeaderContribution(QuestionnaireListPanel.class, "QuestionnaireListPanel.css"));

    modalWindow = new ModalWindow("modalWindow");
    modalWindow.setCssClassName("onyx");
    modalWindow.setInitialWidth(1100);
    modalWindow.setInitialHeight(801);
    modalWindow.setResizable(true);
    modalWindow.setTitle(new ResourceModel("Questionnaire"));

    uploadWindow = new ModalWindow("uploadWindow");
    uploadWindow.setCssClassName("onyx");
    uploadWindow.setInitialWidth(500);
    uploadWindow.setInitialHeight(150);
    uploadWindow.setResizable(false);

    add(uploadWindow);

    Form<?> form = new Form<Void>("form");
    form.setMultiPart(false);
    form.add(modalWindow);
    add(form);

    add(questionnaireList = new OnyxEntityList<Questionnaire>("questionnaires", new QuestionnaireProvider(),
            new QuestionnaireListColumnProvider(), new ResourceModel("Questionnaires")));

    add(deleteConfirm = new ConfirmationDialog("deleteConfirm"));
    deleteConfirm.setTitle(new StringResourceModel("ConfirmDelete", this, null));
    deleteConfirm.setContent(new MultiLineLabel(deleteConfirm.getContentId(),
            new ResourceModel("DeleteQuestionnaireConfirmInfos")));

    add(new IndicatingAjaxLink<Void>("addQuestionnaire") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {

            Questionnaire newQuestionnaire = new Questionnaire(
                    new StringResourceModel("NewQuestionnaire", QuestionnaireListPanel.this, null).getString(),
                    "1.0");
            newQuestionnaire.setConvertedToMagmaVariables(true);
            Model<Questionnaire> questionnaireModel = new Model<Questionnaire>(newQuestionnaire);
            final EditionPanel editionPanel = new EditionPanel("content", questionnaireModel, true);
            QuestionnairePanel rightPanel = new QuestionnairePanel(EditionPanel.RIGHT_PANEL, questionnaireModel,
                    true) {
                private static final long serialVersionUID = 1L;

                @Override
                public void prepareSave(AjaxRequestTarget target, Questionnaire questionnaire) {

                }

                @Override
                public void onSave(@SuppressWarnings("hiding") AjaxRequestTarget target,
                        Questionnaire questionnaire) {
                    editionPanel.restoreDefaultRightPanel(target);
                    target.addComponent(editionPanel.getTree());
                    editionPanel.setNewQuestionnaire(false);
                }

                @Override
                public void onCancel(@SuppressWarnings("hiding") AjaxRequestTarget target) {
                    modalWindow.close(target);
                }
            };
            editionPanel.setRightPanel(rightPanel, new Model<String>(""), null, null);
            modalWindow.setTitle(newQuestionnaire.getName());
            modalWindow.setContent(editionPanel);
            modalWindow.setCloseButtonCallback(new ModalWindow.CloseButtonCallback() {
                private static final long serialVersionUID = 1L;

                @Override
                public boolean onCloseButtonClicked(@SuppressWarnings("hiding") AjaxRequestTarget target) {
                    target.addComponent(questionnaireList); // reload questionnaire list
                    return true; // same as cancel
                }
            });
            modalWindow.show(target);
        }
    }.add(new Image("addImg", Images.ADD)));

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

        @Override
        public void onClick(AjaxRequestTarget target) {
            uploadWindow.setTitle(new ResourceModel("UploadNewQuestionnaire"));
            uploadWindow.setContent(new UploadQuestionnairePanel("content", uploadWindow) {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onSave(@SuppressWarnings("hiding") AjaxRequestTarget target) {
                    target.addComponent(questionnaireList);
                }
            });
            uploadWindow.show(target);
        }
    };
    uploadLink.add(new Image("uploadImg", Images.UPLOAD));
    add(uploadLink);

}

From source file:org.obiba.onyx.quartz.editor.questionnaire.tree.QuestionnaireTreePanel.java

License:Open Source License

public QuestionnaireTreePanel(String id, IModel<Questionnaire> model, boolean isNewQuestionnaire) {
    super(id, model);
    this.isNewQuestionnaire = isNewQuestionnaire;
    final Questionnaire questionnaire = model.getObject();

    editingConfirmationDialog = new ConfirmationDialog("editingConfirm");
    editingConfirmationDialog.setTitle(new StringResourceModel("ConfirmCancel", this, null));
    editingConfirmationDialog.setContent(
            new MultiLineLabel(editingConfirmationDialog.getContentId(), new ResourceModel("CancelChanges")));
    add(editingConfirmationDialog);//from ww  w  . j  a  v  a  2  s.  co  m

    deleteConfirmationDialog = new ConfirmationDialog("deleteConfirm");
    deleteConfirmationDialog.setTitle(new StringResourceModel("ConfirmDeleteElement", this, null));
    deleteConfirmationDialog.setContent(
            new MultiLineLabel(deleteConfirmationDialog.getContentId(), new ResourceModel("DeleteItem")));
    add(deleteConfirmationDialog);

    copyQuestionWindow = new ModalWindow("copyQuestionWindow");
    copyQuestionWindow.setCssClassName("onyx");
    copyQuestionWindow.setInitialWidth(700);
    copyQuestionWindow.setInitialHeight(200);
    copyQuestionWindow.setResizable(false);
    add(copyQuestionWindow);

    localeProperties = localePropertiesUtils.load(questionnaire);

    feedbackPanel = new FeedbackPanel("content");
    feedbackWindow = new FeedbackWindow("feedback");
    feedbackWindow.setOutputMarkupId(true);
    add(feedbackWindow);

    add(JavascriptPackageResource.getHeaderContribution(QuestionnaireTreePanel.class,
            "QuestionnaireTreePanel.js"));

    tree = new WebMarkupContainer("tree");
    tree.setOutputMarkupId(true);
    add(tree);

    tree.add(new JsTreeBehavior());

    tree.add(new AbstractDefaultAjaxBehavior() {
        @Override
        public void renderHead(IHeaderResponse response) {
            response.renderOnLoadJavascript(
                    "Wicket.QTree.buildTree('" + tree.getMarkupId(true) + "', '" + getCallbackUrl() + "')");
        }

        @Override
        protected void respond(AjaxRequestTarget target) {
            try {
                final RequestCycle requestCycle = RequestCycle.get();
                StringWriter sw = new StringWriter();
                JsonNode rootNode = populateNode(
                        (IQuestionnaireElement) QuestionnaireTreePanel.this.getDefaultModelObject());
                rootNode.setState("open");
                if (variablesNode == null) {
                    createVariablesNode();
                    variablesNode.getAttr().setClazz("jstree-leaf");
                    rootNode.getChildren().add(variablesNode);
                }
                JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
                new ObjectMapper().writeValue(gen, rootNode);
                requestCycle
                        .setRequestTarget(new StringRequestTarget("application/json", "utf-8", sw.toString()));
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    });

    add(moveBehavior = new MoveBehavior());
    moveCallback = new Label("moveCallback", "");
    moveCallback.setOutputMarkupId(true);
    moveCallback.setEscapeModelStrings(false);
    add(moveCallback);

    // add(editBehavior = new EditBehavior());
    // editCallback = new Label("editCallback", "");
    // editCallback.setOutputMarkupId(true);
    // editCallback.setEscapeModelStrings(false);
    // add(editCallback);
    //
    // add(deleteBehavior = new DeleteBehavior());
    // deleteCallback = new Label("deleteCallback", "");
    // deleteCallback.setOutputMarkupId(true);
    // deleteCallback.setEscapeModelStrings(false);
    // add(deleteCallback);

    // add(addChildBehavior = new AddChildBehavior());
    // addChildCallback = new Label("addChildCallback", "");
    // addChildCallback.setOutputMarkupId(true);
    // addChildCallback.setEscapeModelStrings(false);
    // add(addChildCallback);

    add(previewBehavior = new PreviewBehavior());
    previewCallback = new Label("previewCallback", "");
    previewCallback.setOutputMarkupId(true);
    previewCallback.setEscapeModelStrings(false);
    add(previewCallback);

}

From source file:org.obiba.onyx.quartz.editor.widget.attributes.AttributesPanel.java

License:Open Source License

public AttributesPanel(String id, final IModel<? extends Attributable> attributable, final List<Locale> locales,
        final FeedbackPanel feedbackPanel, final FeedbackWindow feedbackWindow) {
    super(id);//from   w  w w . jav a 2  s  . c  o  m
    this.feedbackPanel = feedbackPanel;
    this.feedbackWindow = feedbackWindow;
    this.attributable = attributable;
    this.locales = locales;

    modalWindow = new ModalWindow("modalWindow");
    modalWindow.setTitle(new ResourceModel("Attribute"));
    modalWindow.setCssClassName("onyx");
    modalWindow.setInitialWidth(550);
    modalWindow.setInitialHeight(300);
    modalWindow.setResizable(true);
    modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
        @Override
        public void onClose(AjaxRequestTarget target) {
            target.addComponent(attributes);
        }
    });

    AjaxLink<Serializable> ajaxAddLink = new AjaxLink<Serializable>("addAttribute", new Model<Serializable>()) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            AttributesEditPanel content = new AttributesEditPanel("content", attributable,
                    new Model<FactorizedAttribute>(new FactorizedAttribute(locales)), locales, feedbackPanel,
                    feedbackWindow);
            modalWindow.setContent(content);
            modalWindow.show(target);
        }
    };
    attributes = new OnyxEntityList<FactorizedAttribute>("attributes", new AttributesDataProvider(),
            new AttributeColumnProvider(), new ResourceModel("Attributes"));

    ajaxAddLink.add(new Image("addImage", Images.ADD));
    add(ajaxAddLink);
    add(attributes);
    add(modalWindow);
}

From source file:org.obiba.onyx.webapp.participant.page.InterviewPage.java

License:Open Source License

public InterviewPage() {
    super();/*from   w w  w. j  a va 2 s  . c  om*/

    if (activeInterviewService.getParticipant() == null || activeInterviewService.getInterview() == null) {
        setResponsePage(WebApplication.get().getHomePage());
    } else {

        addOrReplace(new EmptyPanel("header"));
        //
        // Modify menu bar.
        //
        remove("menuBar");
        add(new InterviewMenuBar("menuBar"));

        final InterviewLogPanel interviewLogPanel;
        final Dialog interviewLogsDialog;
        interviewLogPanel = new InterviewLogPanel("content", 338, new LoadableInterviewLogModel());
        interviewLogsDialog = DialogBuilder
                .buildDialog("interviewLogsDialog", new StringResourceModel("Log", this, null),
                        interviewLogPanel)
                .setOptions(Option.CLOSE_OPTION).setFormCssClass("interview-log-dialog-form").getDialog();
        interviewLogsDialog.setHeightUnit("em");
        interviewLogsDialog.setWidthUnit("em");
        interviewLogsDialog.setInitialHeight(34);
        interviewLogsDialog.setInitialWidth(59);
        interviewLogsDialog.setCloseButtonCallback(new CloseButtonCallback() {
            private static final long serialVersionUID = 1L;

            public boolean onCloseButtonClicked(AjaxRequestTarget target, Status status) {
                // Update comment count on interview page once the modal window closes. User may have added comments.
                updateCommentCount(target);
                return true;
            }
        });
        interviewLogPanel.setup(interviewLogsDialog);
        interviewLogPanel.add(new AttributeModifier("class", true, new Model("interview-log-panel-content")));
        interviewLogPanel.setMarkupId("interviewLogPanel");
        interviewLogPanel.setOutputMarkupId(true);

        add(interviewLogsDialog);

        Participant participant = activeInterviewService.getParticipant();

        add(new ParticipantPanel("participant", new DetachableEntityModel(queryService, participant), true));

        // Create modal comments window
        final ModalWindow commentsWindow;
        add(commentsWindow = new ModalWindow("addCommentsModal"));
        commentsWindow.setCssClassName("onyx");
        commentsWindow.setTitle(new StringResourceModel("CommentsWindow", this, null));
        commentsWindow.setHeightUnit("em");
        commentsWindow.setWidthUnit("em");
        commentsWindow.setInitialHeight(34);
        commentsWindow.setInitialWidth(50);

        commentsWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {

            private static final long serialVersionUID = 1L;

            public void onClose(AjaxRequestTarget target) {

            }
        });

        ViewInterviewLogsLink viewCommentsIconLink = createIconLink("viewCommentsIconLink", interviewLogsDialog,
                interviewLogPanel, true);
        add(viewCommentsIconLink);
        ContextImage commentIcon = createContextImage("commentIcon", "icons/note.png");
        viewCommentsIconLink.add(commentIcon);

        ViewInterviewLogsLink viewLogIconLink = createIconLink("viewLogIconLink", interviewLogsDialog,
                interviewLogPanel, false);
        add(viewLogIconLink);
        ContextImage logIcon = createContextImage("logIcon", "icons/loupe_button.png");
        viewLogIconLink.add(logIcon);

        // Add view interview comments action
        add(viewComments = new ViewInterviewLogsLink("viewComments", interviewLogsDialog, interviewLogPanel,
                true) {

            private static final long serialVersionUID = -5561038138085317724L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                interviewLogPanel.setCommentsOnly(true);

                // Disable Show All Button
                target.appendJavascript(
                        "$('[name=showAll]').attr('disabled','true');$('[name=showAll]').css('color','rgba(0, 0, 0, 0.2)');$('[name=showAll]').css('border-color','rgba(0, 0, 0, 0.2)');");
                super.onClick(target);
            }

        });
        add(new ViewInterviewLogsLink("viewLog", interviewLogsDialog, interviewLogPanel, false) {

            private static final long serialVersionUID = -5561038138085317724L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                interviewLogPanel.setCommentsOnly(false);

                // Disable Show All Button
                target.appendJavascript(
                        "$('[name=showAll]').attr('disabled','true');$('[name=showAll]').css('color','rgba(0, 0, 0, 0.2)');$('[name=showAll]').css('border-color','rgba(0, 0, 0, 0.2)');");
                super.onClick(target);
            }

        });

        // Add create interview comments action
        add(addCommentDialog = createAddCommentDialog());
        add(new AjaxLink("addComment") {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                addCommentDialog.show(target);
            }
        });

        // Initialize comments counter
        updateCommentsCount();

        ActiveInterviewModel interviewModel = new ActiveInterviewModel();

        kvPanel = new KeyValueDataPanel("interview");
        kvPanel.addRow(new StringResourceModel("StartDate", this, null),
                new PropertyModel(interviewModel, "startDate"));
        kvPanel.addRow(new StringResourceModel("EndDate", this, null),
                new PropertyModel(interviewModel, "endDate"));
        kvPanel.addRow(new StringResourceModel("Status", this, null),
                new PropertyModel(interviewModel, "status"));
        add(kvPanel);

        // Interview cancellation
        final ActionDefinition cancelInterviewDef = actionDefinitionConfiguration
                .getActionDefinition(ActionType.STOP, "Interview", null, null);
        final ActionWindow interviewActionWindow = new ActionWindow("modal") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
                activeInterviewService.setStatus(InterviewStatus.CANCELLED);
                setResponsePage(InterviewPage.class);
            }

        };
        add(interviewActionWindow);

        AjaxLink link = new AjaxLink("cancelInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                Label label = new Label("content",
                        new StringResourceModel("ConfirmCancellationOfInterview", InterviewPage.this, null));
                label.add(new AttributeModifier("class", true, new Model("confirmation-dialog-content")));
                ConfirmationDialog confirmationDialog = getConfirmationDialog();

                confirmationDialog.setContent(label);
                confirmationDialog
                        .setTitle(new StringResourceModel("ConfirmCancellationOfInterviewTitle", this, null));
                confirmationDialog.setYesButtonCallback(new OnYesCallback() {

                    private static final long serialVersionUID = -6691702933562884991L;

                    public void onYesButtonClicked(AjaxRequestTarget target) {
                        interviewActionWindow.show(target, null, cancelInterviewDef);
                    }

                });
                confirmationDialog.show(target);
            }

            @Override
            public boolean isVisible() {
                InterviewStatus status = activeInterviewService.getInterview().getStatus();
                return (status == InterviewStatus.IN_PROGRESS || status == InterviewStatus.COMPLETED);
            }
        };
        MetaDataRoleAuthorizationStrategy.authorize(link, RENDER, "PARTICIPANT_MANAGER");
        add(link);

        // Interview closing
        final ActionDefinition closeInterviewDef = actionDefinitionConfiguration
                .getActionDefinition(ActionType.STOP, "Closed.Interview", null, null);
        final ActionWindow closeInterviewActionWindow = new ActionWindow("closeModal") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
                activeInterviewService.setStatus(InterviewStatus.CLOSED);
                setResponsePage(InterviewPage.class);
            }

        };
        add(closeInterviewActionWindow);

        AjaxLink closeLink = new AjaxLink("closeInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                Label label = new Label("content",
                        new StringResourceModel("ConfirmClosingOfInterview", InterviewPage.this, null));
                label.add(new AttributeModifier("class", true, new Model("confirmation-dialog-content")));
                ConfirmationDialog confirmationDialog = getConfirmationDialog();

                confirmationDialog.setContent(label);
                confirmationDialog
                        .setTitle(new StringResourceModel("ConfirmClosingOfInterviewTitle", this, null));
                confirmationDialog.setYesButtonCallback(new OnYesCallback() {

                    private static final long serialVersionUID = -6691702933562884991L;

                    public void onYesButtonClicked(AjaxRequestTarget target) {
                        closeInterviewActionWindow.show(target, null, closeInterviewDef);
                    }

                });
                confirmationDialog.show(target);
            }

            @Override
            public boolean isVisible() {
                InterviewStatus status = activeInterviewService.getInterview().getStatus();
                return (status == InterviewStatus.IN_PROGRESS);
            }
        };
        MetaDataRoleAuthorizationStrategy.authorize(link, RENDER, "PARTICIPANT_MANAGER");
        add(closeLink);

        // Reinstate interview link
        add(createReinstateInterviewLink());

        // Print report link
        class ReportLink extends AjaxLink {

            private static final long serialVersionUID = 1L;

            public ReportLink(String id) {
                super(id);
            }

            @Override
            public void onClick(AjaxRequestTarget target) {
                getPrintableReportsDialog().show(target);
            }
        }

        ReportLink printReportLink = new ReportLink("printReport");
        printReportLink.add(new Label("reportLabel", new ResourceModel("PrintReport")));
        add(printReportLink);

        add(new StageSelectionPanel("stage-list", getFeedbackWindow()) {

            private static final long serialVersionUID = 1L;

            @Override
            public void onViewComments(AjaxRequestTarget target, String stage) {

                commentsWindow.setContent(new CommentsModalPanel("content", commentsWindow, stage) {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public void onAddComments(AjaxRequestTarget target) {
                        InterviewPage.this.updateCommentsCount();
                        target.addComponent(InterviewPage.this.commentsCount);
                    }

                });
                commentsWindow.show(target);
            }

            @Override
            public void onViewLogs(AjaxRequestTarget target, String stage, boolean commentsOnly) {
                interviewLogPanel.setStageName(stage);
                interviewLogPanel.setCommentsOnly(commentsOnly);
                interviewLogPanel.setReadOnly(true);
                interviewLogPanel.addInterviewLogComponent();

                interviewLogsDialog.show(target);
            }

            @Override
            public void onActionPerformed(AjaxRequestTarget target, Stage stage, Action action) {
                if (activeInterviewService.getStageExecution(action.getStage()).isFinal()) {
                    setResponsePage(InterviewPage.class);
                } else {
                    InterviewPage.this.updateCommentsCount();
                    target.addComponent(InterviewPage.this.commentsCount);
                }

            }

        });

        AjaxLink exitLink = new AjaxLink("exitInterview") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick(AjaxRequestTarget target) {
                interviewManager.releaseInterview();
                setResponsePage(HomePage.class);
            }
        };
        add(exitLink);

    }
}

From source file:org.obiba.onyx.webapp.participant.panel.CommentsModalPanelTest.java

License:Open Source License

/**
 * Tests that all types of comments -- general and stage -- are displayed in the Previous Comments section, ordered by
 * date (most recent first)./*from ww w  . ja v  a  2  s. com*/
 */
@SuppressWarnings("serial")
@Test
public void testCommentsDisplayedMostRecentFirst() {
    User user = createUser();
    Interview interview = createInterview(1l);

    Stage stage = createStage("marble", "CON");

    Participant participant = createParticipant(1l, "Suzan", "Tremblay");
    String generalComment = "general comment";
    String stageComment = "stage execute comment";
    Date now = new Date();
    Date oneHourAgo = new Date(now.getTime() - 1000 * 60 * 60);

    //
    // Create a list of two comments for this test, ordered by date (most recent first).
    //
    // NOTE: The order corresponds to the expected order of comments returned by
    // ActiveInterviewService.getInterviewComments().
    //
    List<Action> commentActions = new ArrayList<Action>();
    commentActions.add(createStageComment(user, interview, stage, ActionType.EXECUTE, now, stageComment));
    commentActions.add(createGeneralComment(user, interview, oneHourAgo, generalComment));

    // Expect that UserSessionService.getLocale() is called, and return locale "en".
    expect(userSessionServiceMock.getLocale()).andReturn(new Locale("en"));
    expectLastCall().anyTimes();

    // We can't mock ModuleRegistry, so we'll create a mock Module instance and register that in the ModuleRegistry...
    // This allows us to expect that ModuleRegistry.getStage() is called, and return the proper Stage instance
    Module mockModule = createMock(Module.class);
    expect(mockModule.getStages()).andReturn(Collections.singletonList(stage));
    expectLastCall().anyTimes();
    expect(mockModule.getName()).andReturn("MockModule");
    expectLastCall().anyTimes();

    // Expect that CommentsModalPanel calls ActiveInterviewService.getInterviewComments()
    // to retrieve all comments related to the current interview, and return the test comments.
    expect(activeInterviewServiceMock.getInterviewComments()).andReturn(commentActions);

    // Expect that CommentsModalPanel calls ActiveInterviewService.getParticipant() to
    // retrieve the participant currently being interviewed, and return the test participant.
    expect(activeInterviewServiceMock.getParticipant()).andReturn(participant);

    replay(userSessionServiceMock);
    replay(mockModule);
    replay(activeInterviewServiceMock);

    moduleRegistry.registerModule(mockModule);

    tester.startPanel(new TestPanelSource() {
        public Panel getTestPanel(String panelId) {
            return commentsModalPanel = new CommentsModalPanel(panelId, new ModalWindow("bogus"), null) {
                @Override
                public void onAddComments(AjaxRequestTarget target) {
                    // do nothing
                }
            };
        }
    });

    verify(userSessionServiceMock);
    verify(mockModule);
    verify(activeInterviewServiceMock);

    //
    // Get a reference to the FIRST comment panel and verify that it contains the most
    // recent comment -- i.e., the stage comment.
    //
    // NOTE: In the current user interface, the comment string is contained in the FOURTH row
    // of the comment panel.
    //
    KeyValueDataPanel commentPanel = (KeyValueDataPanel) commentsModalPanel
            .get("previousComments:comment-list:1:comment-panel");
    Assert.assertNotNull(commentPanel);

    MultiLineLabel commentLabel = (MultiLineLabel) commentPanel
            .get("repeating:5:" + KeyValueDataPanel.getRowValueId());
    Assert.assertNotNull(commentLabel);
    Assert.assertEquals(stageComment, commentLabel.getDefaultModelObjectAsString());

    //
    // Now get a reference to the SECOND comment panel and verify that it contains the
    // earlier comment -- i.e., the general comment.
    //
    commentPanel = (KeyValueDataPanel) commentsModalPanel.get("previousComments:comment-list:2:comment-panel");
    Assert.assertNotNull(commentPanel);

    commentLabel = (MultiLineLabel) commentPanel.get("repeating:5:" + KeyValueDataPanel.getRowValueId());
    Assert.assertNotNull(commentLabel);
    Assert.assertEquals(generalComment, commentLabel.getDefaultModelObjectAsString());
}