Example usage for org.apache.wicket.markup.html.form Form setMultiPart

List of usage examples for org.apache.wicket.markup.html.form Form setMultiPart

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.form Form setMultiPart.

Prototype

public void setMultiPart(boolean multiPart) 

Source Link

Document

Set to true to use enctype='multipart/form-data', and to process file uploads by default multiPart = false

Usage

From source file:ca.travelagency.config.CompanyPage.java

License:Apache License

private Form<Void> uploadForm() {
    Form<Void> form = new Form<Void>(UPLOAD_FORM) {
        private static final long serialVersionUID = 1L;

        @Override//w  w w .  j  a  v a2  s  .  c o m
        protected void onSubmit() {
            FileUpload fileUpload = fileUploadField.getFileUpload();
            if (fileUpload == null) {
                return;
            }
            String code = ApplicationProperties.make().getCode();
            File companyLogoFile = UploadUtils.getCompanyLogoFile(code);
            try {
                companyLogoFile.createNewFile();
                fileUpload.writeTo(companyLogoFile);
            } catch (Exception e) {
                throw new RuntimeException("Unable to write logo image", e);
            }
        }
    };
    form.setMultiPart(true);
    form.setMaxSize(Bytes.kilobytes(100));

    form.add(new ComponentFeedbackPanel(FEEDBACK, form));

    fileUploadField = new FileUploadField(UPLOAD_FIELD, new ListModel<FileUpload>());
    form.add(fileUploadField);

    return form;
}

From source file:ch.bd.qv.quiz.panels.AdminPanel.java

License:Apache License

public AdminPanel(String id) {
    super(id);/*  ww  w . ja v a2s .c om*/
    add(new FeedbackPanel("feedback"));
    Form form = new Form("form");
    form.setMultiPart(true);
    form.add(fup = new FileUploadField("fileupload", new Model()));
    fup.setRequired(true);
    form.add(new AjaxSubmitLink("submit") {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            List<FileUpload> uploads = fup.getConvertedInput();
            try {
                uploadBean.purgeAndUpload(uploads.get(0).getBytes());
            } catch (Exception e) {
                AdminPanel.this.get("feedback").error(Throwables.getStackTraceAsString(e));
            }
            target.add(findParent(AdminPanel.class));
        }

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(findParent(AdminPanel.class));
        }
    });
    add(form);
}

From source file:com.evolveum.midpoint.web.component.prism.show.PagePreviewChanges.java

License:Apache License

private void initLayout() {
    Form mainForm = new Form("mainForm");
    mainForm.setMultiPart(true);
    add(mainForm);//w ww.  ja  va  2s.  com

    mainForm.add(new ScenePanel(ID_PRIMARY_DELTAS_SCENE, primaryDeltasModel));
    mainForm.add(new ScenePanel(ID_SECONDARY_DELTAS_SCENE, secondaryDeltasModel));
    initButtons(mainForm);
}

From source file:com.evolveum.midpoint.web.page.admin.resources.content.PageAccount.java

License:Apache License

private void initLayout() {
    Form mainForm = new Form("mainForm");
    mainForm.setMultiPart(true);
    add(mainForm);//from w ww  . j  a va 2  s  . c om

    WebMarkupContainer protectedMessage = new WebMarkupContainer(ID_PROTECTED_MESSAGE);
    protectedMessage.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            ObjectWrapper wrapper = accountModel.getObject();
            return wrapper.isProtectedAccount();
        }
    });
    mainForm.add(protectedMessage);

    PrismObjectPanel userForm = new PrismObjectPanel("account", accountModel,
            new PackageResourceReference(ImgResources.class, ImgResources.HDD_PRISM), mainForm) {

        @Override
        protected IModel<String> createDescription(IModel<ObjectWrapper> model) {
            return createStringResource("pageAccount.description");
        }
    };
    mainForm.add(userForm);

    initButtons(mainForm);
}

From source file:com.evolveum.midpoint.web.page.admin.users.PageUser.java

License:Apache License

private void initLayout() {
    Form mainForm = new Form(ID_MAIN_FORM);
    mainForm.setMaxSize(MidPointApplication.USER_PHOTO_MAX_FILE_SIZE);
    mainForm.setMultiPart(true);
    add(mainForm);//w w  w .  ja  va  2  s .co m

    initSummaryInfo(mainForm);

    PrismObjectPanel userForm = new PrismObjectPanel(ID_USER_FORM, userModel,
            new PackageResourceReference(ImgResources.class, ImgResources.USER_PRISM), mainForm) {

        @Override
        protected IModel<String> createDescription(IModel<ObjectWrapper> model) {
            return createStringResource("pageUser.description");
        }
    };
    mainForm.add(userForm);

    WebMarkupContainer accounts = new WebMarkupContainer(ID_ACCOUNTS);
    accounts.setOutputMarkupId(true);
    mainForm.add(accounts);
    initAccounts(accounts);

    WebMarkupContainer assignments = new WebMarkupContainer(ID_ASSIGNMENTS);
    assignments.setOutputMarkupId(true);
    mainForm.add(assignments);
    initAssignments(assignments);

    WebMarkupContainer tasks = new WebMarkupContainer(ID_TASKS);
    tasks.setOutputMarkupId(true);
    mainForm.add(tasks);
    initTasks(tasks);

    initButtons(mainForm);

    initResourceModal();
    initAssignableModal();
    initConfirmationDialogs();
}

From source file:com.evolveum.midpoint.web.page.admin.workflow.PageWorkItem.java

License:Apache License

private void initLayout() {
    Form mainForm = new Form("mainForm");
    mainForm.setMultiPart(true);
    add(mainForm);//from   ww w. j a v  a 2  s .  c o m

    Label requestedBy = new Label("requestedBy", new PropertyModel(requesterModel, "object.asObjectable.name"));
    mainForm.add(requestedBy);

    Label requestedByFullName = new Label("requestedByFullName",
            new PropertyModel(requesterModel, "object.asObjectable.fullName"));
    mainForm.add(requestedByFullName);

    Label requestedOn = new Label("requestedOn", new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            ProcessInstanceDto dto = processInstanceDtoModel.getObject();
            if (dto.getProcessInstance().getStartTimestamp() == null) {
                return "";
            }
            return WebMiscUtil
                    .formatDate(XmlTypeConverter.toDate(dto.getProcessInstance().getStartTimestamp()));
        }

    });
    mainForm.add(requestedOn);

    Label workItemCreatedOn = new Label("workItemCreatedOn", new AbstractReadOnlyModel<String>() {

        @Override
        public String getObject() {
            WorkItemDetailedDto dto = workItemDtoModel.getObject();
            if (dto.getWorkItem().getMetadata() == null
                    || dto.getWorkItem().getMetadata().getCreateTimestamp() == null) {
                return "";
            }
            return WebMiscUtil
                    .formatDate(XmlTypeConverter.toDate(dto.getWorkItem().getMetadata().getCreateTimestamp()));
        }

    });
    mainForm.add(workItemCreatedOn);

    Label assignee = new Label("assignee", new PropertyModel(workItemDtoModel, WorkItemDto.F_ASSIGNEE));
    mainForm.add(assignee);

    Label candidates = new Label("candidates", new PropertyModel(workItemDtoModel, WorkItemDto.F_CANDIDATES));
    mainForm.add(candidates);

    PrismObjectPanel requestSpecificForm = new PrismObjectPanel("requestSpecificForm", requestSpecificModel,
            new PackageResourceReference(ImgResources.class, ImgResources.DECISION_PRISM), mainForm) {

        @Override
        protected IModel<String> createDisplayName(IModel<ObjectWrapper> model) {
            return createStringResource("pageWorkItem.requestSpecific.description");
        }

        @Override
        protected IModel<String> createDescription(IModel<ObjectWrapper> model) {
            return new Model<>("");
        }
    };
    mainForm.add(requestSpecificForm);

    additionalInfoAccordion = new Accordion(ID_ACCORDION);
    additionalInfoAccordion.setOutputMarkupId(true);
    additionalInfoAccordion.setMultipleSelect(true);
    additionalInfoAccordion.setExpanded(false);
    mainForm.add(additionalInfoAccordion);

    PrismObjectPanel requesterForm = new PrismObjectPanel("requesterForm", requesterModel,
            new PackageResourceReference(ImgResources.class, ImgResources.USER_PRISM), mainForm);
    requesterForm.add(new VisibleEnableBehaviour() {
        @Override
        public boolean isVisible() {
            return requesterModel != null && !requesterModel.getObject().getObject().isEmpty();
        }
    });
    mainForm.add(requesterForm);

    PrismObjectPanel objectOldForm = new PrismObjectPanel("objectOldForm", objectOldModel,
            new PackageResourceReference(ImgResources.class, ImgResources.USER_PRISM), mainForm);
    objectOldForm.add(new VisibleEnableBehaviour() {
        @Override
        public boolean isVisible() {
            return getGeneralChangeApprovalWorkItemContents() != null
                    && getGeneralChangeApprovalWorkItemContents().getObjectOld() != null;
        }
    });
    mainForm.add(objectOldForm);

    PrismObjectPanel objectNewForm = new PrismObjectPanel("objectNewForm", objectNewModel,
            new PackageResourceReference(ImgResources.class, ImgResources.USER_PRISM), mainForm);
    objectNewForm.add(new VisibleEnableBehaviour() {
        @Override
        public boolean isVisible() {
            return getGeneralChangeApprovalWorkItemContents() != null
                    && getGeneralChangeApprovalWorkItemContents().getObjectNew() != null;
        }
    });
    mainForm.add(objectNewForm);

    PrismObjectPanel additionalDataForm = new PrismObjectPanel("additionalDataForm", additionalDataModel,
            new PackageResourceReference(ImgResources.class, ImgResources.ROLE_PRISM), mainForm);
    mainForm.add(additionalDataForm);

    PrismObjectPanel trackingDataForm = new PrismObjectPanel("trackingDataForm", trackingDataModel,
            new PackageResourceReference(ImgResources.class, ImgResources.TRACKING_PRISM), mainForm) {

        @Override
        protected IModel<String> createDisplayName(IModel<ObjectWrapper> model) {
            return createStringResource("pageWorkItem.trackingData.description");
        }

        @Override
        protected IModel<String> createDescription(IModel<ObjectWrapper> model) {
            return new Model("");
        }
    };
    mainForm.add(trackingDataForm);

    AccordionItem deltaInfo = new AccordionItem(ID_DELTA_INFO, new ResourceModel("pageWorkItem.delta"));
    deltaInfo.setOutputMarkupId(true);
    additionalInfoAccordion.getBodyContainer().add(deltaInfo);

    DeltaPanel deltaPanel = new DeltaPanel(ID_DELTA_PANEL, deltaModel);
    deltaInfo.getBodyContainer().add(deltaPanel);

    additionalInfoAccordion.getBodyContainer()
            .add(createObjectAccordionItem(ID_REQUESTER_ACCORDION_INFO, ID_REQUESTER_PANEL,
                    "pageWorkItem.accordionLabel.requester",
                    new PropertyModel(workItemDtoModel, WorkItemDetailedDto.F_REQUESTER), true));
    additionalInfoAccordion.getBodyContainer()
            .add(createObjectAccordionItem(ID_OBJECT_OLD_ACCORDION_INFO, ID_OBJECT_OLD_PANEL,
                    "pageWorkItem.accordionLabel.objectOld",
                    new PropertyModel(workItemDtoModel, WorkItemDetailedDto.F_OBJECT_OLD), true));
    additionalInfoAccordion.getBodyContainer()
            .add(createObjectAccordionItem(ID_OBJECT_NEW_ACCORDION_INFO, ID_OBJECT_NEW_PANEL,
                    "pageWorkItem.accordionLabel.objectNew",
                    new PropertyModel(workItemDtoModel, WorkItemDetailedDto.F_OBJECT_NEW), true));
    additionalInfoAccordion.getBodyContainer()
            .add(createObjectAccordionItem(ID_ADDITIONAL_DATA_ACCORDION_INFO, ID_ADDITIONAL_DATA_PANEL,
                    "pageWorkItem.accordionLabel.additionalData",
                    new PropertyModel(workItemDtoModel, WorkItemDetailedDto.F_RELATED_OBJECT), true));

    LOGGER.trace("processInstanceDtoModel = {}, loaded = {}", processInstanceDtoModel,
            processInstanceDtoModel.isLoaded());
    ProcessInstanceDto processInstanceDto = processInstanceDtoModel.getObject();
    WfProcessInstanceType processInstance = processInstanceDto.getProcessInstance();
    additionalInfoAccordion.getBodyContainer()
            .add(createAccordionItem(ID_PROCESS_INSTANCE_ACCORDION_INFO,
                    "pageWorkItem.accordionLabel.processInstance",
                    new ProcessInstancePanel(ID_PROCESS_INSTANCE_PANEL, processInstanceDtoModel), true));
    initButtons(mainForm);
}

From source file:com.servoy.j2db.server.headlessclient.MediaUploadPage.java

License:Open Source License

/**
 * @param pageMap//from   ww  w . j  a  va2s  . c  o  m
 * @param model
 * @param dataProviderID
 */
@SuppressWarnings("nls")
public MediaUploadPage(IPageMap pageMap, final RecordItemModel model, final WebDataImgMediaField field,
        final IApplication application) {
    super(pageMap);
    add(new PageContributor(application, "contribution"));
    mfuf = null;
    fuf = new SingleFileUpload("panel", application);
    Form form = new Form("form") {
        private static final long serialVersionUID = 1L;
        private boolean close = false;

        @Override
        protected void onSubmit() {
            FileUpload fu = fuf.getFileUpload();
            if (fu != null) {
                // use the wrap model so that form variables also work.
                IWrapModel wrappedModel = model.wrapOnInheritance(field);
                wrappedModel.setObject(fu.getBytes());
                field.getStylePropertyChanges().setChanged();

                model.setValue(field, field.getDataProviderID() + IMediaFieldConstants.FILENAME,
                        fu.getClientFileName());
                String contentType = fu.getContentType();
                model.setValue(field, field.getDataProviderID() + IMediaFieldConstants.MIMETYPE, contentType);
            }
            close = true;
        }

        /**
         * @see org.apache.wicket.Component#renderHead(org.apache.wicket.markup.html.internal.HtmlHeaderContainer)
         */
        @Override
        public void renderHead(HtmlHeaderContainer container) {
            super.renderHead(container);
            if (close) {
                container.getHeaderResponse().renderOnLoadJavascript("window.opener.triggerAjaxUpdate();");
            }
        }
    };

    form.add(fuf);
    form.setMultiPart(true);
    add(form);
    FeedbackPanel panel = new FeedbackPanel("feedback"); //$NON-NLS-1$
    add(panel);

    add(CSSPackageResource.getHeaderContribution(
            "/servoy-webclient/templates/" + application.getClientProperty(WEBCONSTANTS.WEBCLIENT_TEMPLATES_DIR)
                    + "/servoy_web_client_default.css"));
}

From source file:com.servoy.j2db.server.headlessclient.MediaUploadPage.java

License:Open Source License

@SuppressWarnings({ "nls", "unchecked" })
public MediaUploadPage(IPageMap pageMap, final IMediaUploadCallback callback, boolean multiSelect,
        final IApplication application) {
    super(pageMap);

    add(new PageContributor(application, "contribution"));

    Form form = new Form("form") {
        private static final long serialVersionUID = 1L;
        private boolean close = false;

        @Override/*  w  ww  .j a  v a  2  s .co m*/
        protected void onSubmit() {
            close = true;
            if (fuf != null) {
                final FileUpload fu = fuf.getFileUpload();
                if (fu != null) {
                    IUploadData ud = new FileUploadData(fu);
                    callback.uploadComplete(new IUploadData[] { ud });
                } else {
                    callback.uploadComplete(new IUploadData[0]);
                }
            } else if (mfuf != null) {
                Collection<FileUpload> uploads = mfuf.getModelObject();
                if (uploads != null) {
                    IUploadData[] data = new IUploadData[uploads.size()];
                    int counter = 0;
                    for (FileUpload fileUpload : uploads) {
                        data[counter++] = new FileUploadData(fileUpload);
                    }
                    callback.uploadComplete(data);
                } else {
                    callback.uploadComplete(new IUploadData[0]);
                }
            }
            callback.onSubmit();
            if (fuf != null) {
                remove(fuf);
            } else if (mfuf != null) {
                remove(mfuf);
            }
            add(new Label("panel",
                    new Model<String>(application.getI18NMessage("servoy.filechooser.upload.finished"))));
        }

        @Override
        public void renderHead(HtmlHeaderContainer container) {
            super.renderHead(container);
            if (close) {
                container.getHeaderResponse().renderOnLoadJavascript("window.parent.triggerAjaxUpdate();");
            }
        }

        @Override
        protected boolean handleMultiPart() {
            // Change the request to a multipart web request that is able to work with multiple file uploads for the same field nmae
            // so parameters are parsed out correctly as well
            try {
                final WebRequest req = ((WebRequest) getRequest());
                MultipartServletWebRequest multipart;
                try {
                    Settings settings = Settings.getInstance();
                    File fileUploadDir = null;
                    String uploadDir = settings.getProperty("servoy.ng_web_client.temp.uploadir");
                    if (uploadDir != null) {
                        fileUploadDir = new File(uploadDir);
                        if (!fileUploadDir.exists() && !fileUploadDir.mkdirs()) {
                            fileUploadDir = null;
                            Debug.error(
                                    "Couldn't use the property 'servoy.ng_web_client.temp.uploadir' value: '"
                                            + uploadDir
                                            + "', directory could not be created or doesn't exists");
                        }
                    }
                    int tempFileThreshold = Utils.getAsInteger(
                            settings.getProperty("servoy.ng_web_client.tempfile.threshold", "50"), false)
                            * 1000;

                    multipart = new MultipartServletWebRequest(req.getHttpServletRequest(), getMaxSize(),
                            new DiskFileItemFactory(tempFileThreshold, fileUploadDir) {
                                private final HashSet<String> fieldNames = new HashSet<String>();

                                @Override
                                public FileItem createItem(String fieldName, String contentType,
                                        boolean isFormField, String fileName) {
                                    String adjustedFieldName = fieldName;
                                    int i = 1;
                                    while (fieldNames.contains(adjustedFieldName)) {
                                        adjustedFieldName = fieldName + "_additionalFile_" + (i++);
                                    }
                                    String timestampStr = req
                                            .getParameter("last_modified_" + fieldName + "_" + fileName);
                                    long timestamp = System.currentTimeMillis();
                                    if (timestampStr != null) {
                                        try {
                                            timestamp = Long.parseLong(timestampStr);
                                        } catch (NumberFormatException ex) {
                                            timestamp = System.currentTimeMillis();
                                        }
                                    }

                                    fieldNames.add(adjustedFieldName);
                                    return new ServoyDiskFileItem(adjustedFieldName, contentType, isFormField,
                                            fileName, getSizeThreshold(), getRepository(), timestamp);
                                }

                            });
                } catch (FileUploadException e) {
                    throw new WicketRuntimeException(e);
                }
                multipart.setRequestParameters(req.getRequestParameters());

                getRequestCycle().setRequest(multipart);
                return true;
            } catch (WicketRuntimeException wre) {
                if (wre.getCause() == null || !(wre.getCause() instanceof FileUploadException)) {
                    throw wre;
                }

                FileUploadException e = (FileUploadException) wre.getCause();

                // Create model with exception and maximum size values
                final Map<String, Object> model = new HashMap<String, Object>();
                model.put("exception", e);
                model.put("maxSize", getMaxSize());

                onFileUploadException((FileUploadException) wre.getCause(), model);

                // don't process the form if there is a FileUploadException
                return false;
            }
        }

    };
    if (multiSelect) {
        fuf = null;
        IModel<Collection<FileUpload>> model = new Model(new ArrayList());
        mfuf = new MultiFileUpload("panel", model, application);
        form.add(mfuf);
    } else {
        mfuf = null;
        fuf = new SingleFileUpload("panel", application);
        form.add(fuf);
    }
    form.add(new Label("uploadtitle",
            new Model<String>(application.getI18NMessage("servoy.filechooser.upload.title"))));
    form.setMultiPart(true);
    add(form);
    FeedbackPanel panel = new FeedbackPanel("feedback");
    add(panel);

    add(CSSPackageResource.getHeaderContribution(
            "/servoy-webclient/templates/" + application.getClientProperty(WEBCONSTANTS.WEBCLIENT_TEMPLATES_DIR)
                    + "/servoy_web_client_default.css"));
}

From source file:com.tysanclan.site.projectewok.pages.member.CreateGamePetitionPage.java

License:Open Source License

public CreateGamePetitionPage() {
    super("Create Game Petition");

    add(new Label("count", new Model<Integer>(gameService.getRequiredPetitionSignatures())));

    Form<GamePetition> form = new Form<GamePetition>("petitionForm") {
        private static final long serialVersionUID = 1L;

        /**//  www.j a  v  a  2 s  . c  o m
         * @see org.apache.wicket.markup.html.form.Form#onSubmit()
         */
        @SuppressWarnings("unchecked")
        @Override
        protected void onSubmit() {
            FileUploadField iconField = (FileUploadField) get("icon");
            FileUpload upload = iconField.getFileUpload();

            TextField<String> nameField = (TextField<String>) get("name");
            DropDownChoice<Realm> realmChoice = (DropDownChoice<Realm>) get("realm");
            TextField<String> realmField = (TextField<String>) get("newRealm");

            String name = nameField.getModelObject();
            Realm realm = realmChoice.getModelObject();
            String realmName = realmField.getModelObject();

            GamePetition p = null;

            if (realm == null) {
                p = gameService.createPetition(getUser(), name, realmName, upload.getBytes());
            } else {
                p = gameService.createPetition(getUser(), name, realm, upload.getBytes());
            }

            if (p != null) {

                setResponsePage(new SignGamePetitionsPage());
            } else {
                error("Invalid image size, did you upload a valid GIF, JPEG or PNG with dimensions at least 48x48 and at most 64x64?");
            }
        }

    };

    form.setMultiPart(true);

    add(form);

    form.add(new TextField<String>("name", new Model<String>("")).setRequired(true));
    form.add(new FileUploadField("icon").setRequired(true));

    List<Realm> realms = realmService.getRealms();

    DropDownChoice<Realm> realmChoice = new DropDownChoice<Realm>("realm", ModelMaker.wrap((Realm) null),
            ModelMaker.wrapChoices(realms));
    realmChoice.setNullValid(true);
    realmChoice.setVisible(realms.size() > 0);
    realmChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        private static final long serialVersionUID = 1L;

        @SuppressWarnings("unchecked")
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            DropDownChoice<Realm> rc = (DropDownChoice<Realm>) getComponent();
            Component newRealmField = rc.getParent().get("newRealm");
            newRealmField.setVisible(rc.getModelObject() == null);
            if (target != null) {
                target.add(newRealmField);
            }

        }
    });
    realmChoice.setChoiceRenderer(new IChoiceRenderer<Realm>() {
        private static final long serialVersionUID = 1L;

        @Override
        public Object getDisplayValue(Realm object) {
            return object.getName();
        }

        @Override
        public String getIdValue(Realm object, int index) {
            return object == null ? "null" : object.getId().toString();
        }

    });

    form.add(new TextField<String>("newRealm", new Model<String>("")).setOutputMarkupId(true)
            .setOutputMarkupPlaceholderTag(true));

    form.add(realmChoice);

}

From source file:com.tysanclan.site.projectewok.pages.member.ProposeAchievementPage.java

License:Open Source License

public ProposeAchievementPage(int tabIndex) {
    super("Propose Achievement");

    this.tabIndex = tabIndex;

    add(new ListView<AchievementProposal>("proposals", ModelMaker.wrap(achievementProposalDAO.findAll())) {

        private static final long serialVersionUID = 1L;

        @Override/*w ww . j  a v  a2  s  .  com*/
        protected void populateItem(final ListItem<AchievementProposal> item) {
            AchievementProposal proposal = item.getModelObject();

            item.add(new Image("icon", new StoredImageResource(proposal.getIcon().getImage())));

            item.add(new Label("name", proposal.getName()));
            item.add(new Label("description", proposal.getDescription()).setEscapeModelStrings(false));
            item.add(new Label("game", proposal.getGame() != null ? proposal.getGame().getName() : "-"));
            item.add(new Label("group", proposal.getGroup() != null ? proposal.getGroup().getName() : "-"));
        }

    });

    List<AchievementIcon> icons = achievementService.getAvailableIcons(getUser());

    add(getIconListview("icons", icons, new IconClickResponder() {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AchievementIcon icon) {
            setResponsePage(new ProposeAchievementPage2(icon));
        }
    }));

    add(new WebMarkupContainer("noIcons").setVisible(icons.isEmpty()));

    add(getIconListview("approved", getApprovedIcons(getUser()), null));
    add(getIconListview("pending", getPendingIcons(getUser()), null));

    add(getIconListview("rejected", getRejectedIcons(getUser()), new IconClickResponder() {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AchievementIcon icon) {
            achievementService.deleteIcon(getUser(), icon);

            setResponsePage(new ProposeAchievementPage(2));
        }
    }));

    final FileUploadField uploadField = new FileUploadField("file", new ListModel<FileUpload>());
    uploadField.setRequired(true);

    final TextField<String> purposeField = new TextField<String>("purpose", new Model<String>(""));
    purposeField.setRequired(true);

    final CheckBox privateIconBox = new CheckBox("private", new Model<Boolean>(true));

    Form<AchievementIcon> uploadForm = new Form<AchievementIcon>("uploadIcon") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit() {
            List<FileUpload> uploads = uploadField.getModelObject();
            String purpose = purposeField.getModelObject();
            Boolean privateIcon = privateIconBox.getModelObject();

            if (uploads != null && !uploads.isEmpty()) {
                FileUpload upload = uploads.get(0);

                AchievementIcon icon = achievementService.uploadAchievementIcon(getUser(), upload.getBytes(),
                        purpose, privateIcon);

                if (icon != null) {
                    setResponsePage(new ProposeAchievementPage(2));
                } else {
                    error("Invalid image type, or not a 48x48 pixel image");
                }
            } else {
                error("No valid file uploaded");
            }

        }

    };

    uploadForm.setMultiPart(true);

    uploadForm.add(uploadField);
    uploadForm.add(purposeField);
    uploadForm.add(privateIconBox);

    add(uploadForm);

}