Okay, I've been staring at this for hours, and not making any progress. Maybe that's because it 4:30 in the morning here in Connecticut, USA, and my brain isn't what it should be, but regardless...

I'm attaching a class that's giving me great anguish. If anyone has a few minutes to look at it to see if there is some glaring mistake, I would be forever grateful. This is a view/edit class for a POJO named Guideline, which has the following signature:

    public String getDescription();
    public void setDescription(String newDescription);
    public String getFilename();
    public void setFilename(String newFilename);
    public Set getBusinessUnits();
    public void setBusinessUnits(Set newBusinessUnits);
    [ ... ]

The trouble is that at the end of the constructor for the inner InputForm class, my model object has all its properties set appropriately, but when I hit the onSubmit() method, the filename property is correct but the description is null and the Set of BusinessUnits is empty.

Any thoughts on what I'm doing wrong?

  -- Scott Sauyet
package com.thomson.bc.upload;

import java.io.File;
import java.io.InputStream;
import java.io.IOException;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import wicket.AttributeModifier;
import wicket.Page;
import wicket.Resource;
import wicket.contrib.palette.Palette;
import wicket.markup.html.WebPage;
import wicket.markup.html.basic.Label;
import wicket.markup.html.form.ChoiceRenderer;
import wicket.markup.html.form.Form;
import wicket.markup.html.form.ImageButton;
import wicket.markup.html.form.ListMultipleChoice;
import wicket.markup.html.form.TextField;
import wicket.markup.html.form.upload.FileUpload;
import wicket.markup.html.form.upload.FileUploadField;
import wicket.markup.html.link.BookmarkablePageLink;
import wicket.markup.html.link.IPageLink;
import wicket.markup.html.link.PageLink;
import wicket.markup.html.link.ResourceLink;

import wicket.model.CompoundPropertyModel;
import wicket.model.Model;
import wicket.util.time.Time;
import wicket.util.file.Folder;
import wicket.util.resource.IResourceStream;
import wicket.util.resource.FileResourceStream;
import wicket.util.resource.ResourceStreamNotFoundException;


public class GuidelineEdit extends WebPage {
    public GuidelineEdit() {
        add(new BookmarkablePageLink("admin_main", Main.class));
        add(new InputForm("theForm", new Guideline(), true));
    }

    public GuidelineEdit(Guideline guideline) {
        add(new BookmarkablePageLink("admin_main", Main.class));
        add(new InputForm("theForm", guideline, false));
    }

    public static PageLink link(final String name, final Guideline guideline) {
        return new PageLink(name, new IPageLink() {
            public Page getPage() {
                return new GuidelineEdit(guideline);
            }

            public Class getPageIdentity() {
                return GuidelineEdit.class;
            }
        });
    }

    private static class InputForm extends Form {

//        private Guideline guideline;
        private Folder uploadFolder;
        private FileUploadField fileUploadField;
        private List businessUnits;
        private List selectedBusinessUnits;
        private boolean brandNew;
        private TextField descriptionField;


        public InputForm(String name, Guideline guideline, boolean brandNew) {
            super(name, new CompoundPropertyModel(guideline));
            this.brandNew = brandNew;
//            this.guideline = guideline;
            long time = System.currentTimeMillis();
            uploadFolder = new Folder("C:\\_Temp\\ThomsonUploads\\" + time);
            businessUnits = BusinessUnit.getAllBusinessUnits();
            selectedBusinessUnits = new ArrayList();
            selectedBusinessUnits.addAll(guideline.getBusinessUnits());

            add(new Label("pageAction", (brandNew ? "Upload a Guideline" : 
"Edit Guideline")));

            add(new Palette("businessUnits", new Model((Serializable) 
selectedBusinessUnits), new Model((Serializable) businessUnits), new 
ChoiceRenderer("name", "id"), 10, false));
            add(new ImageButton("saveButton"));
            add(new ImageButton("cancelButton"));
            add(descriptionField = new TextField("description"));

            add(fileUploadField = new FileUploadField("file"));
            fileUploadField.setVisible(brandNew ? true : false);
            final String filename = guideline.getFilename();
            ResourceLink link;

            add(link = new ResourceLink("fileLink", new Resource() {
                public IResourceStream getResourceStream() {
                    return new FileResourceStream(new 
wicket.util.file.File(filename)) {
                        public String getContentType() {
                            if (filename.toLowerCase().endsWith(".doc")) {
                                return "application/msword";
                            }
                            return super.getContentType();
                        }
                    };
                }
            }));
            link.add(new Label("existingFile", guideline.getFilename()));
            link.setVisible(brandNew ? false : true);

        }

        public void onSubmit() {
            Guideline guideline = (Guideline) getModelObject();
            if (brandNew) {
                uploadFolder.mkdirs();
                FileUpload fileUpload = fileUploadField.getFileUpload();
                String filename = fileUpload.getFile().getName();
                File file = new File(uploadFolder, filename);
                try {
                    fileUpload.writeTo(file);
                    guideline.setFilename(file.toString());
                }  catch (IOException ioe) {
                    ioe.printStackTrace();
                }

            }

            guideline.setDescription(descriptionField.getModelObjectAsString());
            guideline.getBusinessUnits().removeAll(businessUnits);
            guideline.getBusinessUnits().addAll(selectedBusinessUnits);
            guideline.save();
            getRequestCycle().setResponsePage(GuidelineViewList.class);
        }
    }

}

Reply via email to