List of usage examples for org.apache.wicket.markup.html.form FormComponent setLabel
@Override
public FormComponent<T> setLabel(IModel<String> labelModel)
From source file:com.evolveum.midpoint.web.component.assignment.ACAttributeValuePanel.java
License:Apache License
private void initPanel(Form form) { ACValueConstructionDto dto = getModel().getObject(); PrismPropertyDefinition definition = dto.getAttribute().getDefinition(); boolean required = definition.getMinOccurs() > 0; InputPanel input = createTypedInputComponent(ID_INPUT, definition); for (FormComponent comp : input.getFormComponents()) { comp.setLabel(new PropertyModel(dto.getAttribute(), ACAttributeDto.F_NAME)); comp.setRequired(required);//w w w. ja va2 s .c o m comp.add(new AjaxFormComponentUpdatingBehavior("onBlur") { @Override protected void onUpdate(AjaxRequestTarget target) { } }); } add(input); AjaxLink addLink = new AjaxLink(ID_ADD) { @Override public void onClick(AjaxRequestTarget target) { addPerformed(target); } }; add(addLink); addLink.add(new VisibleEnableBehaviour() { @Override public boolean isVisible() { return isAddVisible(); } }); AjaxLink removeLink = new AjaxLink(ID_REMOVE) { @Override public void onClick(AjaxRequestTarget target) { removePerformed(target); } }; add(removeLink); removeLink.add(new VisibleEnableBehaviour() { @Override public boolean isVisible() { return isRemoveVisible(); } }); }
From source file:com.evolveum.midpoint.web.component.prism.PrismValuePanel.java
License:Apache License
private InputPanel createInputComponent(String id, IModel<String> label, Form form) { ValueWrapper valueWrapper = model.getObject(); ObjectWrapper objectWrapper = valueWrapper.getProperty().getContainer().getObject(); PrismProperty property = valueWrapper.getProperty().getItem(); boolean required = property.getDefinition().getMinOccurs() > 0; //enforcing required for user will be enabled later (MID-1048) if (UserType.class.isAssignableFrom(objectWrapper.getObject().getCompileTimeClass())) { required = false;// ww w . jav a2 s . c om } InputPanel component = createTypedInputComponent(id); //adding valid from/to date range validator, if necessary ItemPath activation = new ItemPath(UserType.F_ACTIVATION); if (ActivationType.F_VALID_FROM.equals(property.getElementName())) { DateValidator validator = getActivationRangeValidator(form, activation); validator.setDateFrom((DateTimeField) component.getBaseFormComponent()); } else if (ActivationType.F_VALID_TO.equals(property.getElementName())) { DateValidator validator = getActivationRangeValidator(form, activation); validator.setDateTo((DateTimeField) component.getBaseFormComponent()); } final List<FormComponent> formComponents = component.getFormComponents(); for (FormComponent formComponent : formComponents) { formComponent.setLabel(label); formComponent.setRequired(required); if (formComponent instanceof TextField) { formComponent.add(new AttributeModifier("size", "42")); } formComponent.add(new AjaxFormComponentUpdatingBehavior("onBlur") { @Override protected void onUpdate(AjaxRequestTarget target) { } }); // Validation occurs when submitting the form // if (form != null) { // AjaxFormValidatingBehavior validator = new AjaxFormValidatingBehavior(form, "onBlur"); // // formComponent.add(validator); // } } return component; }
From source file:com.googlecode.wicketwebbeans.model.ComponentRegistry.java
License:Apache License
/** * Associate label with FormComponents that are descendants of component. * * @param propertyMeta//from w ww . j av a 2s. c om * @param component */ private void associateLabelToFormComponents(final ElementMetaData propertyMeta, Component component) { if (component instanceof MarkupContainer) { MarkupContainer container = (MarkupContainer) component; container.visitChildren(FormComponent.class, new IVisitor<Component>() { public Object component(Component component) { FormComponent formComponent = (FormComponent) component; formComponent.setLabel(new Model(propertyMeta.getLabel())); formComponent.add(new ErrorHighlightingBehavior()); return IVisitor.CONTINUE_TRAVERSAL; } }); } }
From source file:cz.zcu.kiv.eegdatabase.wui.components.utils.WicketUtils.java
License:Apache License
/** * Adds labels and feedback panels for input fields to the given form * The label ids are of the form <original id>.label * The feedback ids are of the form <original id>.feedback * * FormComponentPanel instances wont get a label or a feedback unless they * implement ISingleLabelFormComponentPanel interface. * If they do, their children dont get any labels or feedbacks. * * @param form/* ww w . j a va2 s . c o m*/ */ public static void addLabelsAndFeedback(Form<?> form) { final Set<String> ids = new HashSet<String>(); final Map<String, MarkupContainer> parents = new HashMap<String, MarkupContainer>(); final Map<String, ComponentFeedbackPanel> feedbacks = new HashMap<String, ComponentFeedbackPanel>(); final Map<String, FormComponentLabel> labels = new HashMap<String, FormComponentLabel>(); form.visitFormComponents(new IVisitor<FormComponent<?>, Void>() { @Override public void component(FormComponent<?> object, IVisit<Void> visit) { if (object instanceof FormComponent && !(object instanceof Button) && object.findParent(FormComponentPanel.class) == null) { ids.add(object.getId()); parents.put(object.getId(), object.getParent()); //create a feedback panel for the component ComponentFeedbackPanel temp = new ComponentFeedbackPanel(object.getId() + ".feedback", object); temp.setVisible(object.isVisible()); //do not display component if field is not visible feedbacks.put(object.getId(), temp); if (object.isRequired()) { String lab = object.getLabel().getObject(); object.setLabel(new Model<String>(lab.concat("*"))); } FormComponentLabel lab = new MyFormComponentLabel(object.getId() + ".label", object); lab.setVisible(object.isVisible()); labels.put(object.getId(), lab); } } }); for (String id : ids) { parents.get(id).addOrReplace(labels.get(id)); parents.get(id).addOrReplace(feedbacks.get(id)); } }
From source file:cz.zcu.kiv.eegdatabase.wui.ui.administration.components.ResearchGroupManagementForm.java
License:Apache License
/** * Handles adding content components to container (e.g. a form) * @param f container the components will be added to *//*from w ww .jav a 2s . c o m*/ private void addContent(WebMarkupContainer f) { FormComponent cmp = new CheckBox("paidAccount", new PropertyModel<Boolean>(this.groupModel, "paidAccount")); cmp.setLabel(ResourceUtils.getModel("label.paidAccount")); f.add(cmp); final TextField<String> title = new TextField<String>("title", new PropertyModel<String>(this.groupModel, "title")); title.setRequired(true); title.setLabel(ResourceUtils.getModel("label.researchGroupTitle")); title.add(StringValidator.maximumLength(100)); final TextArea<String> description = new TextArea<String>("description", new PropertyModel<String>(this.groupModel, "description")); description.setRequired(true); description.setLabel(ResourceUtils.getModel("label.researchGroupDescription")); description.add(StringValidator.maximumLength(250)); CheckBox lockCheckBox = new CheckBox("lock", new PropertyModel<Boolean>(this.groupModel, "lock")); lockCheckBox.setLabel(ResourceUtils.getModel("label.lock")); f.add(lockCheckBox); f.add(title, description); this.addControls(f); }
From source file:cz.zcu.kiv.eegdatabase.wui.ui.licenses.components.LicenseRequestForm.java
License:Apache License
private void addComponents() { FormComponent c = new RequiredTextField("firstName", new PropertyModel(persLicense, "firstName")); c.setLabel(ResourceUtils.getModel("label.license.request.firstname")); form.add(c);/* w ww . j a v a 2 s . co m*/ c = new RequiredTextField("lastName", new PropertyModel(persLicense, "lastName")); c.setLabel(ResourceUtils.getModel("label.license.request.lastname")); form.add(c); c = new RequiredTextField("organisation", new PropertyModel(persLicense, "organisation")); c.setLabel(ResourceUtils.getModel("label.license.request.organisation")); form.add(c); c = new RequiredTextField("email", new PropertyModel(persLicense, "email")); c.add(EmailAddressValidator.getInstance()); c.setLabel(ResourceUtils.getModel("label.license.request.email")); form.add(c); uploadField = new FileUploadField("attachement"); uploadField.setLabel(ResourceUtils.getModel("label.license.request.attachement")); form.add(uploadField); form.setMaxSize(Bytes.megabytes(15)); WicketUtils.addLabelsAndFeedback(form); }
From source file:cz.zcu.kiv.eegdatabase.wui.ui.licenses.components.PersonalLicenseRejectPanel.java
License:Apache License
private void addComponents() { FormComponent c = new TextArea("resolutionComment", new PropertyModel(applicationModel, "resolutionComment")); c.setLabel(ResourceUtils.getModel("label.license.request.resolution")); form.add(c);/*from w ww . j ava 2 s.co m*/ WicketUtils.addLabelsAndFeedback(form); }
From source file:gr.abiss.calipso.wicket.asset.AssetFormCustomAttributePanel.java
License:Open Source License
@SuppressWarnings("unchecked") private Component renderAttribute(KeyValuePair attributeEntry) { FormComponent formComponent = null; Component fragment = null;/*from w ww . ja v a2 s. c o m*/ if (attributeValueList == null) { attributeValueList = new LinkedList<AttributeValue>(); } AssetTypeCustomAttribute attribute = (AssetTypeCustomAttribute) attributeEntry.getKey(); String sValue = (String) attributeEntry.getValue(); // Drop-Down Field if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_SELECT)) { //logger.info("PROCESSING simple select attribute: "+attribute.getName()); fragment = new Fragment("customAttributes", "dropDownField", this); final List<CustomAttributeLookupValue> lookupValues = getCalipso() .findAllLookupValuesByCustomAttribute(attribute); // TODO: move this into a LookupValueDropDownChoice class if (attribute.getLookupValue() == null) { String defaultStringValue = attribute.getDefaultStringValue(); if (defaultStringValue != null && CollectionUtils.isNotEmpty(lookupValues)) { for (CustomAttributeLookupValue value : lookupValues) { if (value.getValue().equals(defaultStringValue)) { attribute.setLookupValue(value); break; } } } } //logger.info("LOADED simple select attribute options: "+lookupValues); DropDownChoice fieldValueChoice = new DropDownChoice("customAttribute.allowedLookupValues.id", new PropertyModel(attribute, "lookupValue"), lookupValues, new IChoiceRenderer() { public Object getDisplayValue(Object o) { return ((CustomAttributeLookupValue) o).getValue(); } public String getIdValue(Object o, int i) { return i + ""; } }); fieldValueChoice.setNullValid(!attribute.isMandatory() || isSearchMode); attributeValueList.add(new AttributeValue(fieldValueChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = fieldValueChoice; } // hierarchical select else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_OPTIONS_TREE)) { fragment = new Fragment("customAttributes", "treeField", this); logger.info("PROCESSING tree select attribute: " + attribute.getName()); List<CustomAttributeLookupValue> customAttributeLookupValues = getCalipso() .findLookupValuesByCustomAttribute(attribute); TreeChoice treeChoice = new TreeChoice("customAttribute.allowedLookupValues.id", new PropertyModel(attribute, "lookupValue"), customAttributeLookupValues, attribute); treeChoice.setType(CustomAttributeLookupValue.class); attributeValueList.add(new AttributeValue(treeChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = treeChoice; } // User else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_USER)) { fragment = new Fragment("customAttributes", "dropDownFragment", this); if (allVisibleUsers == null) { allVisibleUsers = getCalipso().findAllUsers(); } DropDownChoice userChoice = new DropDownChoice("attributeValue", new PropertyModel(attribute, "userValue"), allVisibleUsers, new UserChoiceRenderer()); userChoice.setEscapeModelStrings(false); attributeValueList.add(new AttributeValue(userChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = userChoice; } // Organization else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_ORGANIZATION)) { fragment = new Fragment("customAttributes", "dropDownFragment", this); if (allVisibleOrganizations == null) { allVisibleOrganizations = getCalipso().findAllOrganizations(); } DropDownChoice organizationChoice = new DropDownChoice("attributeValue", new PropertyModel(attribute, "organizationValue"), allVisibleOrganizations, new IChoiceRenderer() { public Object getDisplayValue(Object object) { Organization organization = (Organization) object; return organization.getName(); } public String getIdValue(Object object, int index) { // TODO Auto-generated method stub return index + ""; } }); attributeValueList.add(new AttributeValue(organizationChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = organizationChoice; } // Country else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_COUNTRY)) { fragment = new Fragment("customAttributes", "dropDownFragment", this); if (allVisibleCountries == null) { allVisibleCountries = getCalipso().findAllCountries(); } DropDownChoice countryChoice = getCountriesDropDown("attributeValue", allVisibleCountries); countryChoice.setModel(new PropertyModel(attribute, "countryValue")); attributeValueList.add(new AttributeValue(countryChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = countryChoice; } // Asset (as custom attribute value) else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_ASSET)) { fragment = new Fragment("customAttributes", "dropDownFragment", this); // TODO: Check allVisibleAssets to get proper assets if (allVisibleAssets == null) { allVisibleAssets = (List<Asset>) getCalipso().getVisibleAssetsForSpace(getCurrentSpace()); } DropDownChoice assetChoice = new DropDownChoice("attributeValue", new PropertyModel(attribute, "assetValue"), allVisibleAssets, new IChoiceRenderer() { public Object getDisplayValue(Object object) { Asset asset = (Asset) object; return new StringBuffer(asset.getInventoryCode()).append("(") .append(asset.getAssetType().getName()).append(", ") .append(asset.getSpace().getName()).append(")"); } public String getIdValue(Object object, int index) { return index + ""; } }); attributeValueList.add(new AttributeValue(assetChoice, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = assetChoice; } // Text Field or Number Field else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_TEXT) || attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_NUMBER)) { fragment = new Fragment("customAttributes", "textField", this); TextField textField = new TextField("attributeValue", new Model(sValue)); if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_NUMBER)) { textField.setType(Double.class); } else {// is type text String regexp = attribute.getValidationExpression().getExpression(); if (!regexp.equals(RegexpValidator.NO_VALIDATION)) { textField.add(new PatternValidator(regexp)); } } attributeValueList.add(new AttributeValue(textField, attribute)); // for all-cases-logic to apply later on, i.e. set mandatory, labels etc. formComponent = textField; } // if // Date field else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_DATE)) { //AssetCustomAttributeDateValue dateValue = new AssetCustomAttributeDateValue( // attributeValue); YuiCalendar calendar = new YuiCalendar("customAttributes", //new PropertyModel(new Model(dateValue), "value"), new Model(), attribute.isMandatory() && !isSearchMode); calendar.add(new ErrorHighlighter()); attributeValueList.add(new AttributeValue(calendar, attribute)); fragment = calendar; } // else nothing else { fragment = new WebMarkupContainer("customAttributes"); } // configure common validation/label etc. if applicable logger.info("Fragment: " + fragment + ", formcomponent: " + formComponent + ", attribute: " + attribute.getName()); if (formComponent != null) { if (fragment instanceof Fragment) { //logger.info("fragment.add attribute: "+attribute.getName()+", form component: "+formComponent); ((Fragment) fragment).add(formComponent); } formComponent.setRequired(attribute.isMandatory() && !isSearchMode); formComponent.add(new ErrorHighlighter()); formComponent.setLabel(new ResourceModel(attribute.getNameTranslationResourceKey())); } return fragment; }
From source file:gr.abiss.calipso.wicket.BasePanel.java
License:Open Source License
protected FormComponent<?> setUpAndAdd(FormComponent<?> field, WebMarkupContainer container) { field.add(new ErrorHighlighter()); container.add(field.setLabel(new ResourceModel(field.getId()))); container.add(new SimpleFormComponentLabel(field.getId() + "Label", field)); return field; }
From source file:gr.abiss.calipso.wicket.CustomFieldsFormPanel.java
License:Open Source License
@SuppressWarnings("serial") private void addComponents(final CompoundPropertyModel model, final Metadata metadata, final List<Field> fields, final Map<String, FileUploadField> fileUploadFields) { //final AbstractItem item = (AbstractItem) model.getObject(); List<FieldGroup> fieldGroupsList = metadata.getFieldGroups(); @SuppressWarnings("unchecked") ListView fieldGroups = new ListView("fieldGroups", fieldGroupsList) { @Override/*from ww w .ja va 2 s.c om*/ protected void populateItem(ListItem listItem) { FieldGroup fieldGroup = (FieldGroup) listItem.getModelObject(); listItem.add(new Label("fieldGroupLabel", fieldGroup.getName())); List<Field> groupFields = fieldGroup.getFields(); List<Field> editableGroupFields = new LinkedList<Field>(); if (CollectionUtils.isNotEmpty(groupFields)) { for (Field field : groupFields) { // is editable? if (fields.contains(field)) { editableGroupFields.add(field); } } } ListView listView = new ListView("fields", editableGroupFields) { @Override @SuppressWarnings("deprecation") protected void populateItem(ListItem listItem) { boolean preloadExistingValue = true; final Field field = (Field) listItem.getModelObject(); // preload custom attribute if (field.getCustomAttribute() == null) { field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(), field.getName().getText())); } // preload value? if (preloadExistingValue) { AbstractItem history = (AbstractItem) model.getObject(); history.setValue(field.getName(), item.getValue(field.getName())); } // return the value for the field (see abstract item getCustomValue method) Object fieldLastCustomValue = null; String i18nedFieldLabelResourceKey = item.getSpace() .getPropertyTranslationResourceKey(field.getName().getText()); if (item != null && !editMode) { if (field.getName().isFile()) { Set<Attachment> tmpAttachments = item.getAttachments(); if (tmpAttachments != null && tmpAttachments.size() > 0) { for (Attachment attachment : tmpAttachments) { if (field.getLabel() .equals(AttachmentUtils.getBaseName(attachment.getFileName()))) { fieldLastCustomValue = attachment.getFileName(); break; } } } } else { fieldLastCustomValue = item.getValue(field.getName()); } } // Decide whether the field is mandatory boolean valueRequired = false; //logger.info("fieldLastCustomValue for field " + field.getLabel() +": "+fieldLastCustomValue); if (field.getMask() == State.MASK_MANDATORY || (field.getMask() == State.MASK_MANDATORY_IF_EMPTY && (fieldLastCustomValue == null || StringUtils.isBlank(fieldLastCustomValue.toString())))) { valueRequired = true; // value required } // go over custom fields WebMarkupContainer labelContainer = new WebMarkupContainer("labelContainer"); listItem.add(labelContainer); SimpleFormComponentLabel label = null; if (field.getName().isDropDownType()) { String autoValue; final Map<String, String> options = field.getOptions(); if (field.getFieldType().equals(Field.FIELD_TYPE_DROPDOWN_HIERARCHICAL)) { Fragment f = new Fragment("field", "treeField", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); ItemFieldCustomAttribute customAttribute = field.getCustomAttribute(); // if(customAttribute == null){ // customAttribute = getCalipso().loadCustomAttribute(getCurrentSpace(), field.getName().getText()); // field.setCustomAttribute(customAttribute); // } // preload existing value if (field.getCustomAttribute() != null && customAttribute.getLookupValue() == null && item.getCustomValue(field) != null) { logger.info("preloading custom attribute for field: " + field.getLabel()); customAttribute.setLookupValue(getCalipso().loadCustomAttributeLookupValue( NumberUtils.createLong(item.getCustomValue(field).toString()))); customAttribute.setAllowedLookupValues( getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute)); } else { logger.info( "SKIPPED preloading custom attribute for field: " + field.getLabel()); customAttribute.setAllowedLookupValues( getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute)); } TreeChoice choice = new TreeChoice("field", new PropertyModel<CustomAttributeLookupValue>(field, "customAttribute.lookupValue"), customAttribute.getAllowedLookupValues(), customAttribute); // TODO: temp, make configurable in space field form for 1520 int attrId = customAttribute.getId().intValue(); choice.setVisibleMenuLinks( attrId == 3 || attrId == 4 || attrId == 16 || attrId == 17); //choice.setType(Long.class); choice.setRequired(valueRequired); // i18n choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); WebMarkupContainer border = new WebMarkupContainer("border"); f.add(border); //border.add(new ErrorHighlighter(choice)); border.add(choice); //choice.setModel(model.bind(field.getName().getText())); //border.add(model.bind(choice, field.getName().getText())); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", choice); } // get the type of component that will render the choices else if (field.getFieldType().equals(Field.FIELD_TYPE_AUTOSUGGEST)) { renderAutoSuggest(model, listItem, field, i18nedFieldLabelResourceKey, valueRequired, options); } else { // normal drop down label = renderDropDown(model, listItem, field, i18nedFieldLabelResourceKey, valueRequired, options); } } else if (field.getName().equals(Field.Name.ASSIGNABLE_SPACES)) { Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); List assignableSpaces = loadAssignableSpaces(field); final Map options = new LinkedHashMap(); // Replace value from space id to space description for // reasons of appearance. for (int i = 0; i < assignableSpaces.size(); i++) { Space space = (Space) assignableSpaces.get(i); if (!space.equals(getCurrentSpace())) { options.put(space.getId(), localize(space.getNameTranslationResourceKey())); } // if } // for final List keys = new ArrayList(options.keySet()); AssignableSpacesDropDownChoice choice = new AssignableSpacesDropDownChoice("field", keys, new IChoiceRenderer() { @Override public Object getDisplayValue(Object o) { return o; }; @Override public String getIdValue(Object o, int i) { return o.toString(); }; }); choice.setNullValid(true); // i18n choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); choice.setRequired(valueRequired); choice.add(new Behavior() { @Override public void renderHead(Component component, IHeaderResponse response) { response.renderJavaScript(new JavaScripts().setAssignableSpacesId.asString(), "setAssignableSpacesId"); } }); choice.add(new AjaxFormComponentUpdatingBehavior("onChange") { @Override protected void onUpdate(AjaxRequestTarget target) { if (statusChoice != null && !statusChoice.getDefaultModelObjectAsString().equals("") && !statusChoice.getDefaultModelObjectAsString().equals("-1")) { // if // (statusChoice.getValue().equals(String.valueOf(State.MOVE_TO_OTHER_SPACE))){ // assignedToChoice.setChoices(getAssignableSpaceUsers()); // assignedToChoice.setNullValid(false); // assignedToChoice.setVisible(true); // }//if } // if target.appendJavaScript("assignableSpacesId=" + "'" + assignableSpacesDropDownChoice.getMarkupId() + "';"); // This can happen at the creation of a new item // where makes no sense to be moved to other space if (assignedToChoice != null) { target.addComponent(assignedToChoice); } }// onUpdate @Override protected void onError(AjaxRequestTarget arg0, RuntimeException arg1) { // Do nothing. // It happens only if the choice be set to NULL by // the user. // The exception occurs because the model binds to // space id that is from (primitive) type // long and its value can not be set to NULL. } }); choice.setOutputMarkupId(true); assignableSpacesDropDownChoice = choice; if (itemViewFormPanel != null) { itemViewFormPanel.getItemViewForm() .setAssignableSpacesDropDownChoice(assignableSpacesDropDownChoice); } // if WebMarkupContainer border = new WebMarkupContainer("border"); f.add(border); border.add(new ErrorHighlighter(choice)); // Set field name explicitly to avoid runtime error //border.add(model.bind(choice, field.getName() + ".id")); choice.setModel(model.bind(field.getName() + ".id")); border.add(choice); listItem.add(f.setRenderBodyOnly(true)); border.setVisible(!CustomFieldsFormPanel.this.editMode); label = new SimpleFormComponentLabel("label", choice); } else if (field.getName().getType() == 6) { // date picker Fragment fragment = new Fragment("field", "dateFragment", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); if (item.getId() == 0 && item.getValue(field.getName()) == null && field.getDefaultValueExpression() != null && field.getDefaultValueExpression().equalsIgnoreCase("now")) { item.setValue(field.getName(), new Date()); } DateField calendar = new DateField("field", preloadExistingValue ? new PropertyModel(model.getObject(), field.getName().getText()) : new PropertyModel(model, field.getName().getText())) { @Override protected String getDateFormat() { // TODO Auto-generated method stub return metadata.getDateFormats().get(Metadata.DATE_FORMAT_SHORT); } }; calendar.setRequired(valueRequired); // i8n calendar.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); fragment.add(calendar); listItem.add(fragment.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", calendar); } // TODO: Creating new space item - users custom field else if (field.getName().isOrganization()) { // is organization // Get users list Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); Organization organization = (Organization) item.getValue(field.getName()); // logger.debug("Item organization field has value: "+organization); final List<Organization> allOrganizationsList = getCalipso().findAllOrganizations(); DropDownChoice organizationChoice = new DropDownChoice("field", allOrganizationsList, new IChoiceRenderer() { // user's choice renderer // display value user's name @Override public Object getDisplayValue(Object object) { return ((Organization) object).getName(); } @Override public String getIdValue(Object object, int index) { // id value user's id return index + ""; } }); organizationChoice.add(new ErrorHighlighter()); organizationChoice.setRequired(valueRequired); // i18n organizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); //f.add(model.bind(organizationChoice, field.getName().getText())); organizationChoice.setModel(model.bind(field.getName().getText())); f.add(organizationChoice); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", organizationChoice); } else if (field.getName().isFile()) { // File addFileInputField(model, fileUploadFields, listItem, field, i18nedFieldLabelResourceKey, valueRequired); } // TODO: Creating new space item - organizations custom field else if (field.getName().isUser()) { // is user Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); // find organization id from field's options String strOrgId = field.getOptions().get("organizationId"); Long orgId = Long.valueOf(strOrgId); // load organization from database Organization selectedOrg = getCalipso().loadOrganization(orgId); // TODO: load all users from organization // add new list of selected organizations List<Organization> selectedOrganization = new ArrayList<Organization>(); // add selected organization selectedOrganization.add(selectedOrg); final List<User> usersFromOrganization = getCalipso() .findUsersInOrganizations(selectedOrganization); // TODO: dropdown of all organization DropDownChoice usersFromOrganizationChoice = new DropDownChoice("field", usersFromOrganization, new UserChoiceRenderer()); usersFromOrganizationChoice.setNullValid(false); usersFromOrganizationChoice.setRequired(valueRequired); // i18n usersFromOrganizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); //f.add(model.bind(usersFromOrganizationChoice, field.getName().getText())); usersFromOrganizationChoice.setModel(model.bind(field.getName().getText())); f.add(usersFromOrganizationChoice); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", usersFromOrganizationChoice); } else if (field.getName().isCountry()) { // organization fragment holds a dropDown of countries final List<Country> allCountriesList = getCalipso().findAllCountries(); Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); listItem.add(f.setRenderBodyOnly(true)); DropDownChoice countryChoice = getCountriesDropDown("field", allCountriesList); countryChoice.add(new ErrorHighlighter()); countryChoice.setRequired(valueRequired); // i18n countryChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); //f.add(model.bind(countryChoice, field.getName().getText())); countryChoice.setModel(model.bind(field.getName().getText())); f.add(countryChoice); label = new SimpleFormComponentLabel("label", countryChoice); } else { if (logger.isDebugEnabled()) logger.debug("model.getObject(): " + model.getObject()); if (logger.isDebugEnabled()) logger.debug( "model.getObject().getClass(): " + model.getObject().getClass().getName()); if (logger.isDebugEnabled()) logger.debug("field.getName().getText(): " + field.getName().getText()); //if(logger.isDebugEnabled()) logger.debug("((Item)model.getObject()).getCusStr01(): "+((Item)model.getObject()).getCusStr01()); FormComponent textField; Fragment f; if (field.isMultivalue()) { f = new Fragment("field", "multipleValuesTextField", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); if (logger.isDebugEnabled()) logger.debug("model.getObject(): " + model.getObject()); if (logger.isDebugEnabled()) logger.debug("field.getName().getText(): " + field.getName().getText()); textField = preloadExistingValue ? new MultipleValuesTextField("field", new PropertyModel(model.getObject(), field.getName().getText()), field.getXmlConfig()) : new MultipleValuesTextField("field", field.getXmlConfig()); } else if (field.getLineCount() == 1) { f = new Fragment("field", "textField", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); textField = preloadExistingValue ? new TextField("field", new PropertyModel(model.getObject(), field.getName().getText())) : new TextField("field"); } else { f = new Fragment("field", "textareaField", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); textField = preloadExistingValue ? new TextArea("field", new PropertyModel(model.getObject(), field.getName().getText())) { @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); tag.put("rows", field.getLineCount().toString()); } } : new TextArea("field") { @Override protected void onComponentTag(ComponentTag tag) { super.onComponentTag(tag); tag.put("rows", field.getLineCount().toString()); } }; } // any validations for this field? ValidationExpression validationExpression = getCalipso() .loadValidationExpression(field.getValidationExpressionId()); if (validationExpression != null) { textField.add(new ValidationExpressionValidator(validationExpression)); } // TODO: do we need these two? if (field.getName().getType() == 4) { textField.setType(Double.class); } else if (field.getName().isDecimalNumber()) { textField.add(new PositiveNumberValidator()); } textField.add(new ErrorHighlighter()); textField.setRequired(valueRequired); // i18n textField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); if (preloadExistingValue) { f.add(textField); } else { //f.add(model.bind(textField, field.getName().getText())); textField.setModel(model.bind(field.getName().getText())); f.add(textField); } // f.add(textField); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", textField); // styles FieldUtils.appendFieldStyles(field.getXmlConfig(), textField); } // add label labelContainer.add(label != null ? label : new Label("label", "")); if (field.getCustomAttribute() != null && StringUtils.isBlank(field.getCustomAttribute().getHtmlDescription())) { labelContainer.add(new SimpleAttributeModifier("class", "labelContainer")); } // mandatory? // mark as mandatory in the UI? labelContainer .add(new Label("star", valueRequired ? "* " : " ").setEscapeModelStrings(false)); } private SimpleFormComponentLabel renderAutoSuggest(final IModel model, ListItem listItem, final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired, final Map<String, String> options) { SimpleFormComponentLabel label = null; Fragment f = new Fragment("field", "autoCompleteFragment", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); final List<String> autoKeys = new ArrayList<String>( options != null ? new ArrayList<String>(options.keySet()) : new ArrayList<String>()); // the autocomplet textField // TODO: fix to render values instead of integer AbstractAutoCompleteRenderer autoRenderer = new AbstractAutoCompleteRenderer() { @Override protected String getTextValue(Object object) { // TODO Auto-generated method stub return object.toString(); } @Override protected void renderChoice(Object object, Response response, String criteria) { response.write(object.toString()); } }; autoTextField = new AutoCompleteTextField("field", new PropertyModel(field, "customAttribute.lookupValue")) { // TODO: the list @Override protected Iterator<String> getChoices(String input) { if (Strings.isEmpty(input)) { List<String> emptyList = Collections.emptyList(); return emptyList.iterator(); } List<String> searchResults = new ArrayList<String>(); for (String s : options.values()) { if (s.startsWith(input)) { searchResults.add(s); } } return searchResults.iterator(); } }; autoTextField.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { // TODO Auto-generated method stub List<String> searchResults = new ArrayList<String>(); for (String s : options.values()) { if (s.startsWith((String) autoTextField.getModelObject())) { searchResults.add(s); } } target.addComponent(autoTextField); } }); // i18n autoTextField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); String componentValue = (String) ((autoTextField != null && autoTextField.getModelObject() != null) ? autoTextField.getModelObject() : null); autoTextField.setRequired(valueRequired); WebMarkupContainer border = new WebMarkupContainer("border"); f.add(border); border.add(new ErrorHighlighter(autoTextField)); autoTextField.setModel(new PropertyModel(model.getObject(), field.getName().getText())); //border.add(model.bind(autoTextField, field.getName().getText())); border.add(autoTextField); if (logger.isDebugEnabled() && autoTextField != null && autoTextField.getDefaultModelObjectAsString() != null) { if (logger.isDebugEnabled()) logger.debug( "Auto complete value is :" + autoTextField.getDefaultModelObjectAsString()); } listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", autoTextField); return label; // ------------------------- } private SimpleFormComponentLabel addFileInputField(final CompoundPropertyModel model, final Map<String, FileUploadField> fileUploadFields, ListItem listItem, final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired) { SimpleFormComponentLabel label = null; Fragment f = new Fragment("field", "fileField", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); FileUploadField fileField = new FileUploadField("field"); fileUploadFields.put(field.getLabel(), fileField); fileField.add(new ErrorHighlighter()); fileField.setRequired(valueRequired); // i18n fileField.setLabel(new ResourceModel( StringUtils.isNotBlank(i18nedFieldLabelResourceKey) ? i18nedFieldLabelResourceKey : Field.FIELD_TYPE_SIMPLE_ATTACHEMENT));//field.getName().getText().equalsIgnoreCase(Field.FIELD_TYPE_SIMPLE_ATTACHEMENT) ? Field.FIELD_TYPE_SIMPLE_ATTACHEMENT : i18nedFieldLabelResourceKey)); //f.add(model.bind(fileField, field.getName().getText())); fileField.setModel(new Model()); // List<FileUpload> fileUploads = new LinkedList<FileUpload>(); f.add(fileField); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", fileField); return label; } /** * @param model * @param listItem * @param field * @param i18nedFieldLabelResourceKey * @param valueRequired * @param options */ private SimpleFormComponentLabel renderDropDown(final IModel model, ListItem listItem, final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired, final Map<String, String> options) { SimpleFormComponentLabel label = null; /* final List<CustomAttributeLookupValue> lookupValues = getCalipso().findLookupValuesByCustomAttribute(field.getCustomAttribute()); TreeChoice choice = new TreeChoice("field", new PropertyModel(field, "customAttribute.lookupValue"), lookupValues); choice.setType(CustomAttributeLookupValue.class); //choice.setType(Long.class); choice.setRequired(valueRequired); // i18n choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); WebMarkupContainer border = new WebMarkupContainer("border"); f.add(border); //border.add(new ErrorHighlighter(choice)); border.add(choice); */ // drop down list final Fragment fragment = new Fragment("field", "dropDown", CustomFieldsFormPanel.this); if (field.getCustomAttribute() == null) { field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(), field.getName().getText())); } // add HTML description through velocity logger.info("field name:" + field.getName() + ", custom atribute: " + field.getCustomAttribute()); addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute() != null ? field.getCustomAttribute().getHtmlDescription() : "", null, true); final List<CustomAttributeLookupValue> lookupValues = getCalipso() .findActiveLookupValuesByCustomAttribute(field.getCustomAttribute()); // preselect previous user choice from DB if available Object preselected = item.getValue(field.getName()); if (preselected != null) { String sPreselectedId = preselected.toString(); if (CollectionUtils.isNotEmpty(lookupValues)) { for (CustomAttributeLookupValue value : lookupValues) { if ((value.getId() + "").equals(sPreselectedId)) { field.getCustomAttribute().setLookupValue(value); break; } } } } // else set using the default string value instead, if any // TODO: move this into a LookupValueDropDownChoice class else { String defaultStringValue = field.getCustomAttribute() != null ? field.getCustomAttribute().getDefaultStringValue() : null; if (defaultStringValue != null && CollectionUtils.isNotEmpty(lookupValues)) { for (CustomAttributeLookupValue value : lookupValues) { if (value.getValue().equals(defaultStringValue)) { field.getCustomAttribute().setLookupValue(value); break; } } } } DropDownChoice choice = new DropDownChoice("field", new PropertyModel(field, "customAttribute.lookupValue"), lookupValues, new IChoiceRenderer<CustomAttributeLookupValue>() { @Override public Object getDisplayValue(CustomAttributeLookupValue o) { return fragment.getString(o.getNameTranslationResourceKey()); } @Override public String getIdValue(CustomAttributeLookupValue o, int index) { return String.valueOf(index); } }); choice.setNullValid(true); // i18n choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); choice.setRequired(valueRequired); WebMarkupContainer border = new WebMarkupContainer("border"); fragment.add(border); border.add(new ErrorHighlighter(choice)); //border.add(model.bind(choice, field.getName().getText())); border.add(choice); listItem.add(fragment.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", choice); return label; } /** * @param model * @param listItem * @param field * @param i18nedFieldLabelResourceKey * @param valueRequired * @param options */ private SimpleFormComponentLabel renderPeriodPartDropDown(final CompoundPropertyModel model, ListItem listItem, final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired, final List<Date> options) { SimpleFormComponentLabel label = null; // drop down list Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this); // add HTML description through velocity addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription", field.getCustomAttribute().getHtmlDescription(), null, true); DropDownChoice choice = new DropDownChoice("field", options, new IChoiceRenderer() { @Override public Object getDisplayValue(Object o) { return DateUtils.format((Date) o); }; @Override public String getIdValue(Object o, int i) { return String.valueOf(i); }; }); choice.setNullValid(true); // i18n choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey)); choice.setRequired(valueRequired); WebMarkupContainer border = new WebMarkupContainer("border"); f.add(border); border.add(new ErrorHighlighter(choice)); //border.add(model.bind(choice, field.getName().getText())); choice.setModel(model.bind(field.getName().getText())); border.add(choice); listItem.add(f.setRenderBodyOnly(true)); label = new SimpleFormComponentLabel("label", choice); return label; } }; if (editableGroupFields.isEmpty()) { listItem.setVisible(false); } listView.setReuseItems(true); listItem.add(listView.setRenderBodyOnly(true)); } }; add(fieldGroups.setReuseItems(true)); // }