Example usage for org.apache.wicket.request.http.flow AbortWithHttpErrorCodeException AbortWithHttpErrorCodeException

List of usage examples for org.apache.wicket.request.http.flow AbortWithHttpErrorCodeException AbortWithHttpErrorCodeException

Introduction

In this page you can find the example usage for org.apache.wicket.request.http.flow AbortWithHttpErrorCodeException AbortWithHttpErrorCodeException.

Prototype

public AbortWithHttpErrorCodeException(final int errorCode, final String message) 

Source Link

Document

Constructor

Usage

From source file:com.gitblit.wicket.pages.RawPage.java

License:Apache License

public RawPage(final PageParameters params) {
    super(params);

    if (params.get("r").isEmpty()) {
        error(getString("gb.repositoryNotSpecified"));
        redirectToInterceptPage(new RepositoriesPage());
    }/*from   w  w w  .  j  a  v  a2s  . c  o  m*/

    getRequestCycle().scheduleRequestHandlerAfterCurrent(new IRequestHandler() {

        @Override
        public void respond(IRequestCycle requestCycle) {
            WebResponse response = (WebResponse) requestCycle.getResponse();

            final String repositoryName = WicketUtils.getRepositoryName(params);
            final String objectId = WicketUtils.getObject(params);
            final String blobPath = WicketUtils.getPath(params);

            String[] encodings = getEncodings();
            GitBlitWebSession session = GitBlitWebSession.get();
            UserModel user = session.getUser();

            RepositoryModel model = app().repositories().getRepositoryModel(user, repositoryName);
            if (model == null) {
                // user does not have permission
                error(getString("gb.canNotLoadRepository") + " " + repositoryName);
                redirectToInterceptPage(new RepositoriesPage());
                return;
            }

            Repository r = app().repositories().getRepository(repositoryName);
            if (r == null) {
                error(getString("gb.canNotLoadRepository") + " " + repositoryName);
                redirectToInterceptPage(new RepositoriesPage());
                return;
            }

            if (StringUtils.isEmpty(blobPath)) {
                // objectid referenced raw view
                byte[] binary = JGitUtils.getByteContent(r, objectId);
                if (binary == null) {
                    final String objectNotFound = MessageFormat
                            .format("Raw page failed to find object {0} in {1}", objectId, repositoryName);
                    logger.error(objectNotFound);
                    throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, objectNotFound);
                }
                contentType = "application/octet-stream";
                response.setContentType(contentType);
                response.setContentLength(binary.length);
                try {
                    response.getOutputStream().write(binary);
                } catch (Exception e) {
                    logger.error("Failed to write binary response", e);
                }
            } else {
                // standard raw blob view
                RevCommit commit = JGitUtils.getCommit(r, objectId);
                if (commit == null) {
                    final String commitNotFound = MessageFormat
                            .format("Raw page failed to find commit {0} in {1}", objectId, repositoryName);
                    logger.error(commitNotFound);
                    throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, commitNotFound);
                }

                String filename = blobPath;
                if (blobPath.indexOf('/') > -1) {
                    filename = blobPath.substring(blobPath.lastIndexOf('/') + 1);
                }

                String extension = null;
                if (blobPath.lastIndexOf('.') > -1) {
                    extension = blobPath.substring(blobPath.lastIndexOf('.') + 1);
                }

                // Map the extensions to types
                Map<String, Integer> map = new HashMap<String, Integer>();
                for (String ext : app().settings().getStrings(Keys.web.imageExtensions)) {
                    map.put(ext.toLowerCase(), 2);
                }
                for (String ext : app().settings().getStrings(Keys.web.binaryExtensions)) {
                    map.put(ext.toLowerCase(), 3);
                }

                final String blobNotFound = MessageFormat.format(
                        "Raw page failed to find blob {0} in {1} @ {2}", blobPath, repositoryName, objectId);

                if (extension != null) {
                    int type = 0;
                    if (map.containsKey(extension)) {
                        type = map.get(extension);
                    }
                    switch (type) {
                    case 2:
                        // image blobs
                        byte[] image = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true);
                        if (image == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "image/" + extension.toLowerCase();
                        response.setContentType(contentType);
                        response.setContentLength(image.length);
                        try {
                            response.getOutputStream().write(image);
                        } catch (IOException e) {
                            logger.error("Failed to write image response", e);
                        }
                        break;
                    case 3:
                        // binary blobs (download)
                        byte[] binary = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true);
                        if (binary == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "application/octet-stream";
                        response.setContentLength(binary.length);
                        response.setContentType(contentType);

                        try {
                            String userAgent = GitBlitRequestUtils.getServletRequest().getHeader("User-Agent");

                            if (userAgent != null && userAgent.indexOf("MSIE 5.5") > -1) {
                                response.setHeader("Content-Disposition",
                                        "filename=\"" + URLEncoder.encode(filename, Constants.ENCODING) + "\"");
                            } else if (userAgent != null && userAgent.indexOf("MSIE") > -1) {
                                response.setHeader("Content-Disposition", "attachment; filename=\""
                                        + URLEncoder.encode(filename, Constants.ENCODING) + "\"");
                            } else {
                                response.setHeader("Content-Disposition", "attachment; filename=\""
                                        + new String(filename.getBytes(Constants.ENCODING), "latin1") + "\"");
                            }
                        } catch (UnsupportedEncodingException e) {
                            response.setHeader("Content-Disposition",
                                    "attachment; filename=\"" + filename + "\"");
                        }

                        try {
                            response.getOutputStream().write(binary);
                        } catch (IOException e) {
                            logger.error("Failed to write binary response", e);
                        }
                        break;
                    default:
                        // plain text
                        String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings);
                        if (content == null) {
                            logger.error(blobNotFound);
                            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                    blobNotFound);
                        }
                        contentType = "text/plain; charset=UTF-8";
                        response.setContentType(contentType);
                        try {
                            response.getOutputStream().write(content.getBytes("UTF-8"));
                        } catch (Exception e) {
                            logger.error("Failed to write text response", e);
                        }
                    }

                } else {
                    // plain text
                    String content = JGitUtils.getStringContent(r, commit.getTree(), blobPath, encodings);
                    if (content == null) {
                        logger.error(blobNotFound);
                        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                                blobNotFound);
                    }
                    contentType = "text/plain; charset=UTF-8";
                    response.setContentType(contentType);
                    try {
                        response.getOutputStream().write(content.getBytes("UTF-8"));
                    } catch (Exception e) {
                        logger.error("Failed to write text response", e);
                    }
                }
            }
            r.close();
        }

        @Override
        public void detach(IRequestCycle requestCycle) {
            // TODO Auto-generated method stub

        }

    });

}

From source file:eu.esdihumboldt.hale.server.templates.war.pages.TemplatePage.java

License:Open Source License

@SuppressWarnings("serial")
@Override//from ww w .ja  va 2s  . c  o m
protected void addControls(boolean loggedIn) {
    super.addControls(loggedIn);

    StringValue idParam = getPageParameters().get(0);
    if (!idParam.isNull() && !idParam.isEmpty()) {
        String templateId = idParam.toString();

        OrientGraph graph = DatabaseHelper.getGraph();
        try {
            Template template = null;
            try {
                template = Template.getByTemplateId(graph, templateId);
            } catch (NonUniqueResultException e) {
                log.error("Duplicate template representation: " + templateId, e);
            }
            if (template != null) {
                // name
                Label name = new Label("name", template.getName());
                add(name);

                // download
                String href = TemplateLocations.getTemplateDownloadUrl(templateId);
                ExternalLink download = new ExternalLink("download", href);
                add(download);

                // project location
                WebMarkupContainer project = new WebMarkupContainer("project");
                project.add(AttributeModifier.replace("value",
                        TemplateLocations.getTemplateProjectUrl(scavenger, templateId)));
                add(project);

                // author
                Label author = new Label("author", template.getAuthor());
                add(author);

                // edit-buttons container
                WebMarkupContainer editButtons = new WebMarkupContainer("edit-buttons");
                editButtons.setVisible(false);
                add(editButtons);

                // deleteDialog container
                WebMarkupContainer deleteDialog = new WebMarkupContainer("deleteDialog");
                deleteDialog.setVisible(false);
                add(deleteDialog);

                // user
                String userName;
                Vertex v = template.getV();
                boolean showEditPart = UserUtil.isAdmin();
                Iterator<Vertex> owners = v.getVertices(Direction.OUT, "owner").iterator();
                if (owners.hasNext()) {
                    User user = new User(owners.next(), graph);
                    userName = UserUtil.getDisplayName(user);

                    showEditPart = loggedIn && UserUtil.getLogin().equals(user.getLogin());
                } else {
                    userName = "Unregistered user";
                }

                // edit buttons
                if (showEditPart) {
                    editButtons.setVisible(true);
                    deleteDialog.setVisible(true);

                    // edit
                    editButtons.add(new BookmarkablePageLink<>("edit", EditTemplatePage.class,
                            new PageParameters().set(0, templateId)));

                    // update
                    editButtons.add(new BookmarkablePageLink<>("update", UpdateTemplatePage.class,
                            new PageParameters().set(0, templateId)));

                    // delete
                    deleteDialog.add(new DeleteTemplateLink("delete", templateId));
                }

                Label user = new Label("user", userName);
                add(user);

                // description
                String descr = template.getDescription();
                String htmlDescr = null;
                if (descr == null || descr.isEmpty()) {
                    descr = "No description for the project template available.";
                } else {
                    // convert markdown to
                    htmlDescr = new PegDownProcessor(Extensions.AUTOLINKS | Extensions.SUPPRESS_ALL_HTML
                            | Extensions.HARDWRAPS | Extensions.SMARTYPANTS).markdownToHtml(descr);
                }
                // description in pre
                Label description = new Label("description", descr);
                description.setVisible(htmlDescr == null);
                add(description);
                // description in div
                Label htmlDescription = new Label("html-description", htmlDescr);
                htmlDescription.setVisible(htmlDescr != null);
                htmlDescription.setEscapeModelStrings(false);
                add(htmlDescription);

                // invalid
                WebMarkupContainer statusInvalid = new WebMarkupContainer("invalid");
                statusInvalid.setVisible(!template.isValid());
                add(statusInvalid);

                // resources
                ResourcesPanel resources = new ResourcesPanel("resources", templateId);
                add(resources);

                // project popover
                WebMarkupContainer projectPopover = new WebMarkupContainer("project-popover");
                projectPopover.add(new HTMLPopoverBehavior(Model.of("Load template in HALE"),
                        new PopoverConfig().withPlacement(Placement.bottom)) {

                    @Override
                    public Component newBodyComponent(String markupId) {
                        return new ProjectURLPopover(markupId);
                    }

                });
                add(projectPopover);
            } else {
                throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                        "Template not found.");
            }
        } finally {
            graph.shutdown();
        }
    } else
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST,
                "Template identifier must be specified.");
}

From source file:eu.esdihumboldt.hale.server.webtransform.war.pages.StatusPage.java

License:Open Source License

@Override
protected void addControls(boolean loggedIn) {
    super.addControls(loggedIn);

    final String workspaceId = getPageParameters().get(PARAMETER_WORKSPACE).toOptionalString();
    if (workspaceId == null || workspaceId.isEmpty()) {
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                "Workspace ID not specified.");
    }/*from   w  w w. j a v  a2  s .  co m*/

    try {
        workspaces.getWorkspaceFolder(workspaceId);
    } catch (FileNotFoundException e) {
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                "Workspace does not exist.");
    }

    final IModel<TransformationWorkspace> workspace = new LoadableDetachableModel<TransformationWorkspace>() {

        private static final long serialVersionUID = 2600444242247550094L;

        @Override
        protected TransformationWorkspace load() {
            return new TransformationWorkspace(workspaceId);
        }
    };

    // job panel
    final Serializable family = AbstractTransformationJob.createFamily(workspaceId);
    final JobPanel jobs = new JobPanel("jobs", family, true);
    add(jobs);

    // status
    final Label status = new Label("status", new LoadableDetachableModel<String>() {

        private static final long serialVersionUID = -4351763182104835300L;

        @Override
        protected String load() {
            if (workspace.getObject().isTransformationFinished()) {
                if (workspace.getObject().isTransformationSuccessful()) {
                    return "Transformation completed.";
                } else {
                    return "Transformation failed.";
                }
            } else {
                if (Job.getJobManager().find(family).length > 0) {
                    return "Transformation is running:";
                } else {
                    return "No transformation running.";
                }
            }
        }
    });
    status.setOutputMarkupId(true);
    add(status);

    // result
    final WebMarkupContainer result = new WebMarkupContainer("result");
    result.setOutputMarkupId(true);
    add(result);

    final WebMarkupContainer update = new WebMarkupContainer("update") {

        private static final long serialVersionUID = -2591480922683644827L;

        @Override
        public boolean isVisible() {
            return workspace.getObject().isTransformationFinished();
        }

    };
    result.add(update);

    // result : report
    File reportFile = workspace.getObject().getReportFile();
    DownloadLink report = new DownloadLink("log", reportFile, reportFile.getName());
    update.add(report);

    // result : file list
    IModel<? extends List<File>> resultFilesModel = new LoadableDetachableModel<List<File>>() {

        private static final long serialVersionUID = -7971872898614031331L;

        @Override
        protected List<File> load() {
            return Arrays.asList(workspace.getObject().getTargetFolder().listFiles());
        }

    };
    final ListView<File> fileList = new ListView<File>("file", resultFilesModel) {

        private static final long serialVersionUID = -8045643864251639540L;

        @Override
        protected void populateItem(ListItem<File> item) {
            // download link
            DownloadLink download = new DownloadLink("download", item.getModelObject(),
                    item.getModelObject().getName());
            item.add(download);

            // file name
            download.add(new Label("name", item.getModelObject().getName()));
        }

    };
    update.add(fileList);

    // leaseEnd
    String leaseEnd;
    try {
        leaseEnd = workspaces.getLeaseEnd(workspaceId).toString(DateTimeFormat.mediumDateTime());
    } catch (IOException e) {
        leaseEnd = "unknown";
    }
    add(new Label("leaseEnd", leaseEnd));

    boolean transformationFinished = workspace.getObject().isTransformationFinished();
    if (transformationFinished) {
        // disable job timer
        jobs.getTimer().stopOnNextUpdate();
    } else {
        // timer
        add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1500)) {

            private static final long serialVersionUID = -3726349470723024150L;

            @Override
            protected void onTimer(AjaxRequestTarget target) {
                if (workspace.getObject().isTransformationFinished()) {
                    // update status and result
                    target.add(status);
                    target.add(result);

                    // stop timers
                    stop(target);
                    jobs.getTimer().stopOnNextUpdate();
                }
            }
        });
    }
}

From source file:eu.esdihumboldt.hale.server.webtransform.war.pages.UploadPage.java

License:Open Source License

/**
 * @see BasePage#addControls(boolean)//from   w w  w . ja v a2s  .com
 */
@Override
protected void addControls(boolean loggedIn) {
    super.addControls(loggedIn);

    String projectId = getPageParameters().get(PARAMETER_PROJECT).toOptionalString();
    if (projectId != null) {
        if (environmentService.getEnvironment(projectId) == null) {
            throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                    "Transformation project not found.");
        }

        add(new UploadAndTransForm("action", projectId));
    } else {
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                "No transformation project specified.");
    }
}

From source file:fiftyfive.wicket.util.ParameterSpec.java

License:Apache License

/**
 * Use this method in your page constructor to parse the
 * PageParameters. The specified bean will be populated by calling the
 * appropriate setters as defined by this ParameterSpec. For example, if
 * the ParameterSpec has been created parameters that map "id" and "slug"
 * properties, the <code>setId()</code> and <code>setSlug()</code>
 * methods of the bean will be called with values taken from the
 * PageParameters.//from  w  w  w . j a  va  2  s .c om
 *
 * @param params Values will be taken from these PageParameters
 * @param beanToPopulate Values will be set using appropriate setters on
 *                       this bean
 * 
 * @throws AbortWithHttpErrorCodeException with a 404 status code if
 * {@code throw404OnParseError} is {@code true} and a parsing exception
 * occurs. For example, this could happen if the bean property for "id" is
 * of type Long, but the parameter value being parsed is not numeric.
 * If {@code throw404OnParseError} is {@code false}, skip past properties
 * with parsing errors.
 */
public void parseParameters(PageParameters params, T beanToPopulate, boolean throw404OnParseError) {
    for (PageParameters.NamedPair pair : params.getAllNamed()) {
        String key = pair.getKey();
        String expr = this.mapping.get(key);
        String val = pair.getValue();
        if (val != null) {
            try {
                PropertyResolver.setValue(expr, beanToPopulate, val, null);
            } catch (ConversionException ce) {
                if (throw404OnParseError) {
                    throw new AbortWithHttpErrorCodeException(404, "Not found");
                }
            }
        }
    }
}

From source file:org.artifactory.webapp.wicket.page.browse.listing.ArtifactListPage.java

License:Open Source License

/**
 * sort retrieved browsable item from repository
 * @param repoPath - repository path//  w  ww  .j  av  a2 s.co  m
 * @param requestProps - request properties
 * @param rootNodesFilterResult - object hold the List node acceptance status flag,if flagged to false meaning
 *                                    at least one node has read permission issue by user
 * @return list of sorted browsable item
 */
private List<? extends BaseBrowsableItem> getItems(RepoPath repoPath, Properties requestProps,
        RootNodesFilterResult rootNodesFilterResult) {
    boolean updateRootNodesFilterFlag = authorizationService.isAnonymous();
    List<? extends BaseBrowsableItem> items;
    try {
        items = getBrowsableItemsList(repoPath, requestProps, rootNodesFilterResult, updateRootNodesFilterFlag);
    } catch (Exception e) {
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
    }
    Collections.sort(items, new ItemInfoComparator());
    return items;
}

From source file:org.artifactory.webapp.wicket.page.browse.simplebrowser.LocalRepoBrowserPanel.java

License:Open Source License

public LocalRepoBrowserPanel(String id, final RepoPath repoPath, Properties requestProps) {
    super(id);//from  w w w . ja  v a  2  s .  c  o m

    add(new BreadCrumbsPanel("breadCrumbs", repoPath.getId()));

    List<BaseBrowsableItem> dirItems;
    try {
        BrowsableItemCriteria.Builder builder = new BrowsableItemCriteria.Builder(repoPath)
                .requestProperties(requestProps);
        boolean includeChecksums = !ConstantValues.uiHideChecksums.getBoolean();
        builder.includeChecksums(includeChecksums);
        BrowsableItemCriteria criteria = builder.build();
        dirItems = repoBrowseService.getLocalRepoBrowsableChildren(criteria);
    } catch (Exception e) {
        log.debug("Exception occurred while trying to get browsable children for repo path " + repoPath, e);
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
    }
    dirItems.add(0, getPseudoUpLink(repoPath));

    final String hrefPrefix = RequestUtils.getWicketServletContextUrl();
    add(new ListView<BaseBrowsableItem>("items", dirItems) {

        @Override
        protected void populateItem(ListItem<BaseBrowsableItem> listItem) {
            BaseBrowsableItem browsableItem = listItem.getModelObject();
            AbstractLink link;
            if (isEmpty(browsableItem.getRepoKey())) {
                link = createRootLink();
            } else {
                String itemRelativePath = browsableItem.getRelativePath();
                String name = browsableItem.getName();
                if (browsableItem.isFolder() && StringUtils.isNotBlank(itemRelativePath)) {
                    itemRelativePath += "/";
                    name += name.equals(BrowsableItem.UP) ? "" : "/";
                }
                String href = hrefPrefix + "/" + ArtifactoryRequest.SIMPLE_BROWSING_PATH + "/"
                        + repoPath.getRepoKey() + "/" + itemRelativePath;
                link = new ExternalLink("link", href, name);
            }
            link.add(new CssClass(getCssClass(browsableItem)));
            listItem.add(link);
        }
    });
}

From source file:org.artifactory.webapp.wicket.page.browse.simplebrowser.RemoteRepoBrowserPanel.java

License:Open Source License

public RemoteRepoBrowserPanel(String id, final RepoPath repoPath, Properties requestProps) {
    super(id);//from w  w w . ja v  a2s.  c  om

    add(new BreadCrumbsPanel("breadCrumbs", repoPath.getId()));
    List<BaseBrowsableItem> remoteChildren;
    try {
        BrowsableItemCriteria.Builder builder = new BrowsableItemCriteria.Builder(repoPath)
                .requestProperties(requestProps);
        boolean includeChecksums = !ConstantValues.uiHideChecksums.getBoolean();
        builder.includeChecksums(includeChecksums);
        BrowsableItemCriteria criteria = builder.build();
        remoteChildren = repoBrowseService.getRemoteRepoBrowsableChildren(criteria);
        if (!includeChecksums) {
            remoteChildren = BrowseUtils.filterChecksums(remoteChildren);
        }
    } catch (Exception e) {
        log.debug("Exception occurred while trying to get browsable children for repo path " + repoPath, e);
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND, e.getMessage());
    }
    remoteChildren.add(0, getPseudoUpLink(repoPath));
    final String hrefPrefix = RequestUtils.getWicketServletContextUrl();
    add(new ListView<BaseBrowsableItem>("items", remoteChildren) {

        @Override
        protected void populateItem(ListItem<BaseBrowsableItem> listItem) {
            BaseBrowsableItem browsableItem = listItem.getModelObject();
            AbstractLink link;
            if (isEmpty(browsableItem.getRepoKey())) {
                link = createRootLink();
            } else if (browsableItem.isRemote()
                    && ((RemoteBrowsableItem) browsableItem).getEffectiveUrl() != null) {
                String href = ((RemoteBrowsableItem) browsableItem).getEffectiveUrl();
                link = new ExternalLink("link", href, browsableItem.getName());
            } else {
                String itemRelativePath = browsableItem.getRelativePath();
                String name = browsableItem.getName();
                if (browsableItem.isFolder() && StringUtils.isNotBlank(itemRelativePath)) {
                    itemRelativePath += "/";
                    name += name.equals(BrowsableItem.UP) ? "" : "/";
                }
                String href = hrefPrefix + "/" + ArtifactoryRequest.SIMPLE_BROWSING_PATH + "/"
                        + repoPath.getRepoKey() + "/" + itemRelativePath;
                link = new ExternalLink("link", href, name);
            }
            link.add(new CssClass(getCssClass(browsableItem)));
            addGlobeIcon(listItem, browsableItem.isRemote());
            listItem.add(link);
        }
    });
}

From source file:org.artifactory.webapp.wicket.page.build.page.BuildBrowserRootPage.java

License:Open Source License

/**
 * Throws an AbortWithHttpErrorCodeException with the given status and message
 *
 * @param status       Status to set for error
 * @param errorMessage Message to display in the error
 *///from w  w  w  . ja v a2 s.c  o  m
private void throwError(int status, String errorMessage) {
    logError(errorMessage);
    throw new AbortWithHttpErrorCodeException(status, errorMessage);
}

From source file:org.cast.cwm.data.resource.BinaryFileDataResource.java

License:Open Source License

/**
 * @see org.apache.wicket.request.resource.AbstractResource#newResourceResponse(org.apache.wicket.request.resource.IResource.Attributes)
 *///from w ww  . ja v a2  s .  c  o  m
@Override
protected ResourceResponse newResourceResponse(final Attributes attributes) {
    final ResourceResponse response = new ResourceResponse();

    bfd = cwmService.getById(BinaryFileData.class, id).getObject();
    if (bfd == null)
        throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
                "Data not found [id=" + id + "]");

    String contentType = bfd.getMimeType();
    response.setContentType(contentType);

    response.setLastModified(Time.valueOf(bfd.getLastModified()));

    response.setContentLength(bfd.getData().length);

    if (response.dataNeedsToBeWritten(attributes)) {
        // Should we set file name like ByteArrayResource does?

        response.setWriteCallback(new WriteCallback() {
            @Override
            public void writeData(final Attributes attributes) {
                attributes.getResponse().write(bfd.getData());
            }
        });
    }

    return response;
}