Results 1 to 2 of 2

Thread: "Polymorphic Views"

  1. #1
    Join Date
    Aug 2005
    Posts
    1

    Default "Polymorphic Views"

    Greetings,

    Does anyone have a favorite pattern or strategy for resolving a subview "polymorphically"? For example if i have a category that can contain items (these items can be any number of subclass instances such as File, Report, Product, etc), how would you display view information based on the actual type of the product contained in the category. A product would show an order button and image, a file would display a download link, etc...

    any input appreciated,

    gfm

  2. #2
    Join Date
    Aug 2004
    Posts
    1,905

    Default

    For trivial things where the concept of the "view" is the same, but the details are different I simply create my own View implementation which takes a collection of delegate views and delegates to the appropriate one.

    Code:
    public final class PagePermissionsView implements View {
        private PageResolver pageResolver;
        private PermissionsResolver permissionsResolver;
        private View readView;
        private View editView;
    
        public void render(
                final Map model,
                final HttpServletRequest request,
                final HttpServletResponse response) throws Exception {
            ServletRequestAttributeAccessor accessor = new ServletRequestAttributeAccessor(request);
            Page page = pageResolver.findPage(accessor);
            SiteDataRequestInfo info = SiteDataRequestInfo.getSiteDataRequestInfo(accessor);
            User user = info.getCurrentUser();
            boolean canEdit = permissionsResolver.canPerform(new Permission[]{Permission.ADMIN}, user, page);
    
            if (canEdit) {
                editView.render(model, request, response);
            } else {
                readView.render(model, request, response);
            }
        }
    
        public void setEditView(final View detailsView) {
            this.editView = detailsView;
        }
    
        public void setReadView(final View simpleView) {
            this.readView = simpleView;
        }
    
        public void setPermissionsResolver(final PermissionsResolver resolver) {
            this.permissionsResolver = resolver;
        }
    
        public void setPageResolver(final PageResolver pageResolver) {
            this.pageResolver = pageResolver;
        }
    }
    Ironically; this functionality should probably *not* be implemented as a view, but you get the idea.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •