Custom Gallery/Forum Design
Ok, I have written a gallery that allows gallery owners to create/maintain albums, provide images along with their initial comments for the image and allow other users that has been authorized by the owner to add images/comments. In addition to this, other permitted gallery users may browse albums within the gallery as well as forum style comments on either an individual image or on an album. Both image lists and comments lists for images and albums are paginated. <<1 2 3 4 5 6 7 8 9 10>>. Comments are listed in a separate IFRAME both on the album page and on an Image page.
My design problem here is that I have created an additional module that allows users to "watch" a particular image or album (or perhaps gallery). When the user chooses this option, they are presented a watch list link following successful login. This link will lead them to a page that lists their items of interest as follows:
1. [Album - Crazy Bob's fishing trips](4 updates)(7 additions)
2. [Album - Jill's Wedding pics][Image - You may kiss the bride!](56 additions)
3. [Album - Jill's Wedding pics][Image - Just Married](2 additions)
to increase the complexity, a watch may specify updates (If watching a gallery, then any changes to album titles or any changes to the descriptions of any images within any album of that gallery. If watching an album, then any changes to the initial image's description or the pixel data itself within that album.)
AND/OR
new additions (If watching a gallery, then any new albums created under that gallery or any new images created under any album of that gallery or any new comments placed under any album of that gallery or any new comments placed under any image of any album of that gallery. If watching an album, then any new images or comments placed on that album or any new comments placed on any existing image under that album. If watching an image, then any new comments for that image).
Now the problem is:
When they click on the watches link, I need to display the list of watched items as in the previous example. This list is to be paginated and each list item is a hyperlink to the given item (an image page if it points to an image, or comment page if it points to a comment.). What do I do from here? I mean if they've just logged on and only want to see what's new or updated, then they would likely just want to simply click through the paginated watch items, but what if they're looking at an image watch item in the list and would like to know what previous comment the latest comment item is in response to? I guess what I'm getting at, is can anyone think of a better design than the following?:
e.g., Watch X = [Album - Jill's Wedding pics][Image - You may kiss the bride!](56 additions)
- image page --
You may kiss the bride!
<< prev img | next img >>
image
image comment
-- comments section (IFRAME) --
comment 1
comment 2
comment 3
<< prev 1 2 3 4 5 next >>
-- /comments section --
<< prev watch X | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | next watch X>>
- /image page --
To add even more complexity, these watches are only based on items not yet viewed by the watch owner. This is determined by using the last logged in date of the watch owner and date the watch item was added/updated.
I've been racking my brain over this for weeks and continuously running myself in circles. This post is my last resort as I take way too much pride in using my own ideas to achieve an efficient and intuitive design. This time however, I've decided to give up on it as it may prevent me from ever completing this personal project of mine. Even so much as a "Why are you trying to do it that way? Why not just ...." is greatly appreciated. My own sounding board is waterlogged, I think and just some fresh point of view could be of great help. Perhaps somebody knows of a good pattern that might fit this.
By the way, this is all web app, (Not Swing, or perhaps it wouldn't be so difficult to think out) so intuitive design is of great importance here since many things web-enabled cannot be so easily intuitively presented as might be achieved in Swing.
Oh and I don't expect anybody to kill themselves trying to answer this question, much less even consider answering it except for those rare individuals that can't bare to watch a challenging problem go unsolved (yeah I mean you guys - the Rubik's cube guys/gals).
thanks in advance.
[4613 byte] By [
javiousa] at [2007-11-27 5:16:51]

# 1
Do you have UML diagrams for this gallery application, i.e. class, sequence, package, etc?
# 2
I haven't had much UML experience to do up a good comprehensive diagram, but I have done up a bit of a model representation in Dia accompanied with some hen-scratching of a documentation in OpenOffice.org. I've been having to re-work a number of areas of it in order to simplify what I wanted and re-use as much functionality as I preferred. The model diagram is pretty much the class diagram as well in that it is written using JPA and POJOs with JEE passing them back and forth to the servlet layer which is forwarding to formatting JSPs using JSTL. I suppose there are tools out there that can translate much of this straight into diagrams, but for myself there has only been me to really understand what is going on up until now, and until now the Dia - diagram and document has sufficed. When I started hearing about FaceBook, I began to consider plopping it up onto sourceforge for the sake of valuable input contributing to its completion and beyond to enhancements. So far it appears to be running quite nicely on my Ubuntu Server LTS using Postgres 8.1 and SunAppServer 9.x. It's just these missing blank spots that I'm having difficulty figuring out the best solution for.
# 3
UML is a great language for designing software. I would suggest that you become familiar with the various types of software diagrams that can be created. The process of creating the diagrams will help you think out the more difficult parts of a design. Once the code is written, the diagrams become an artificat that will help you come up to speed on the design once you are away from it for a period of time. They also can be a great resource for reference when working on a different application. It is helpful to maintain looseleaf binders with all types of stuff from the applications that have you written, e.g. UML diagrams, printouts of source code for complex classes, screenshots of the application.
In regards to your original post, can you explain exactly what the problem is in three sentences?
# 4
I have actually purchased the revised book on UML and Java Patterns (or something like that) almost a couple of years ago, but have not managed to find some good quiet time to really get into it much.
To summarize in three sentences:
1. I want to be able to watch album pages and image pages for new comments.
2. I want to be able to watch album pages for new images and comments.
3. I want to be able to page through the new entries for which the item is being watched and view each entry (be it an image page or a comment entry) by the simple click of a hyper link.
I think I'm beginning to see some logic that I can apply, actually as I sound it back to myself on this forum. I'm thinking I can simply use my regular album and image pages, but append a <<prev and next>> navigator at the very bottom for traversing through watch item entries. If there has been say 3 new comments posted to [Album: Jill's Wedding pics][You may kiss the Bride!] and 1 new comment posted to [Album: Jill's Wedding pics][Just married!], then clicking on the watch item [Album: Jill's Wedding pics][You may kiss the Bride!] will display that image page with the first un-viewed comment in the comment's section and <<prev & next>> at the very bottom for watch item(s) entries. Clicking next will display unviewed comment# 2 of 3, and again would display #3 of 3 and then a third time would display un-viewed comment# 1 of 1for the next logical watch item [Album: Jill's Wedding pics][Just married!].
I think I'll either go with something like this or perhaps simply cut out this whole thing and just have my notification/watch display the number of new entries for each watch item since last visited and let the user find their own way around to view whatever particular pages/entries they are interested in, thus potentially never actually viewing an item they flagged to watch. Then returning to the site in a future session will regard these potentially un-viewed images as "viewed" or "no-longer-of-interest".
thanks for your assistence.
# 5
> 1. I want to be able to watch album pages and image
> pages for new comments.
What do you mean by "watch"?
> 2. I want to be able to watch album pages for new
> images and comments.
How is this different from number 1?
> 3. I want to be able to page through the new entries
> for which the item is being watched and view each
> entry (be it an image page or a comment entry) by the
> simple click of a hyper link.
Is this a problem?
# 6
> > 1. I want to be able to watch album pages and
> image
> > pages for new comments.
>
> What do you mean by "watch"?
By watch I mean in the same deal as watching a topic in this forum.
>
>
> > 2. I want to be able to watch album pages for new
> > images and comments.
>
> How is this different from number 1?
This one is only watching for new image entries and/or comments on the particular album, whereas the first one covers this as well as comment entries on images.
>
>
> > 3. I want to be able to page through the new
> entries
> > for which the item is being watched and view each
> > entry (be it an image page or a comment entry) by
> the
> > simple click of a hyper link.
>
> Is this a problem?
Well, herein lies the dilemma I've been struggling with myself to find a solution to. In an album page there are lists of images grouped by months and then by years, with the current view expanded on a particular month wherein that expanded list is also paginated (that is prev 10 images for that month and next 10 images for that month). Oh and that particular month is also displayed in a particular year that is also expanded.
The thing that I argue with myself is a problem is that this page is already quite busy, and to add another pagination navigator for a watch on that album page which would reference new image entries and/or comment entries just seems to be unintuitive and cumbersome. This is why I have posted to the Patterns & OO Design forum, because I cannot seem to find a way to think outside of this little box of mine.
For now, I'm thinking of simply noting the number of new entries for each particular watch in a display table and then let the user go on to find these entries for themselves.
I think the most important part here is to simply let the user know that since they have last visited, there have been:
6 new images with a combined total of 8 new comments as well as 3 comments on the album in [Album - Bob's Fishing Pics],
5 new comments in [Album - Jill's Wedding Pics][You may Kiss the Bride!] and
3 new comments in [Album - Jill's Wedding Pics][Just Married!]
I think perhaps I've attempted to make it a bit too complex by trying to hyperlink those items to a paginated view in which they could navigate only the new entries in order to get a quick review before returning to whatever they were doing prior to logging in to this site.
I think a quick re-design based on this post is the simplicity I've been looking for. The more I think about it, the more it fits because the entries wether image entries or comment entries are sorted by date from newest to oldest anyhow and so if I simply hyperlinked [Album - Bob's Fishing Pics] to image page [Album - Bob's Fishing Pics][First Image entry since last logged in], they could use the already existing image page navigator to go forward or backward to review the others. In addition to this I can add an indicator to indicate that it is new since they last visited and until they log out.
