List of usage examples for org.apache.wicket.extensions.ajax.markup.html.modal ModalWindow ModalWindow
public ModalWindow(final String id)
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()); }