Hello,

Could anybody guide me on following?

I am using SelectableFolderContent from Wicket Advanced Tabular Tree
structure example (TableTreePage).

Here is what I am trying:

1. Using JCraft - JSch, establish connection to the host, traverse the
folder structure, prepare list of file path-name, file size, file type etc.
- This is working.
2. Display the list on the tabular tree structure - This is working.
3. On click of the link of each folder, expand and collapse the folder
structure - Working.
4. On click of the file, zip the file and create into default temp folder
of the running server- Working.

5. At the same time when clicked, open download file dialog box to download
the zip file from the server to local machine - Not working.

Here is my SelectableFolderContent class. 'downloadFile(...)' method call
in from select(...) is where I am trying to download using IResourceStream.

public class SelectableFolderContent extends Content {

    private static final long serialVersionUID = 1L;

    private ITreeProvider<SomeFileBean> provider;

    private IModel<SomeFileBean> selected;

    public SelectableFolderContent(ITreeProvider<SomeFileBean> provider) {
        this.provider = provider;
    }

    @Override
    public void detach() {
        if (selected != null) {
            selected.detach();
        }
    }

    protected boolean isSelected(SomeFileBean someFile) {
        IModel<SomeFileBean> model = provider.model(someFile);

        try {
            return selected != null && selected.equals(model);
        } finally {
            model.detach();
        }
    }

    protected void select(SomeFileBean someFile, AbstractTree<SomeFileBean>
tree, final AjaxRequestTarget target) {

        if (!someFile.isFolder()) {
//SFTP to host, get file, create zip in temp folder. Once done, download to
local machine.
            downloadFile(tree.getPage(), someFile, target);
        } else {

            if (selected != null) {
                tree.updateNode(selected.getObject(), target);

                selected.detach();
                selected = null;
            }

            selected = provider.model(someFile);

            if (tree.getState(selected.getObject()) ==
AbstractTree.State.COLLAPSED) {
                tree.expand(selected.getObject());
            } else {
                tree.collapse(selected.getObject());
            }
            tree.updateNode(someFile, target);

            tree.getPage().setResponsePage(SomeTableTreePage.class);
        }
    }


    @Override
    public Component newContentComponent(final String id, final
AbstractTree<SomeFileBean> tree, final IModel<SomeFileBean> model) {

        Folder<SomeFileBean> components = new Folder<SomeFileBean>(id,
tree, model) {
            private static final long serialVersionUID = 1L;

            @Override
            protected IModel<?> newLabelModel(IModel<SomeFileBean> model) {
                return new PropertyModel<String>(model, "id");
            }

            /**
             * Always clickable.
             */
            @Override
            protected boolean isClickable() {
                return true;
            }

            @Override
            protected void onClick(AjaxRequestTarget target) {
                SelectableFolderContent.this.select(modelObject, tree,
target);
            }

            @Override
            protected boolean isSelected() {
                return
SelectableFolderContent.this.isSelected(getModelObject());
            }

        };

        return components;
    }
 protected void downloadFile(final Page page, SomeFileBean someFile,
AjaxRequestTarget target) {
        IModel<File> fileModel = getDownloadFileModel(someFile);
        file = fileModel.getObject();
        IResourceStream resourceStream = new FileResourceStream(new
org.apache.wicket.util.file.File(file));
        String fileName = "serverlog.zip";

        ResourceStreamRequestHandler resourceStreamRequestHandler = new
ResourceStreamRequestHandler(
                resourceStream, fileName);

page.getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);


        try {
            resourceStream.close();
        } catch (IOException e) {
            AppLogger.logMessage(AppLogger.LEVEL.ERROR, "File I/O Error:",
e);
        } catch (Exception e) {
            AppLogger.logMessage(AppLogger.LEVEL.ERROR, "Error:", e);
        }
    }
}


There are two issues I am experiencing:
1. Dialog box not opening to save the file on local machine.
2. When debugging, the Ajax Debug window showing 'Wicket.Ajax.Call.failure:
Error while parsing response: Error: Invalid XML' error.

Thanks in advance,
-Mihir.

Reply via email to