CS213 Fall 2020: Photos
Your application must implement the following features:
Date of photo
Since we won’t examine the contents of a photo file to get the date the photo was taken, we will instead
use the last modification date of the photo file (as provided via the Java API to the filesystem) as a proxy.
(The user interface will still refer to this as the date the photo was taken.)
To store and manipulate dates and times, you have two options:
You can use a java.util.Calendar instance.
In which case, when you set a date and time on an instance, also make sure you set milliseconds to
zero, as in cal.set(Calendar.MILLISECOND,0), otherwise your equality checks won’t work correctly.
Alternatively, you may use the classes in the java.time package.
Photos can be tagged with pretty much any attribute you think is useful to search on, or group by.
Examples are location where photo was taken, and names of people in a photo, so you can search for
photos by location and/or names.
From the implementation point of view, it may be useful to think of a tag as a combination of tag name
and tag value, e.g. (“location”,”New Brunswick”), or (“person”,”susan”). A photo may have multiple tags
(name+value pairs), but no two tags for the same photo will have the same name and value
You can set up some tag types beforehand for the user to pick from (e.g. location)
Depending on the tag type, a user can either have a single value for it, or multiple values (e.g. for
any photo, location can only have one value, but if there’s a person tag, that can have multiple
values, one per person that appears in the photo)
A user can define their own tag type and add it to the list (so from that point on, that tag type will
show up in the preset list of types the user can choose from)
Location of Photos – Stock photos and User photos
There are two sets of photos, stock photos that come pre-loaded with the application, and user photos
that are loaded/imported by a user when they run the application.
Stock photos are photos that you will keep in the application’s workspace. You must have no
fewer than 5 stock photos, and no more than 10.
Create a special username called “stock” (no password, or password=”stock”) and store the stock
photos under this user, in an album named “stock”.
Leave the photos in the application’s workspace so the graders can test your application starting
with your stock photos, then load other photos from their computer, see “User photos” below.
Try to work with low/medium resolution pictures for the stock photos because they will be on
Bitbucket and downloaded by the graders, and you don’t want to bloat your project size.
User photos are photos that your application can allow a user to load from their computer, so they
can be housed anywhere on the user’s machine. The actual photos must NOT be in your
application’s workspace. Instead, your application should only store the location of the photo on
the user’s machine. User photo information must NOT be in the released project in Bitbucket since
each installation of your application on a machine will have its own set of users.
When the application starts, a user logs in with username. Password implementation is optional. It
makes for a “real” scenario, but is irrelevant to the essence of the project. (There is no credit for
the password feature, if you choose to implement it.)
There must be a special username admin that will put the application in an administration subsystem. The admin user can then do any of the following:
Create a new user
Delete an existing user
Note: If you elect to implement passwords for users, make “admin” the password for the admin
user, so it’s easier to grade. Otherwise we will need to ask you, or look in some README file, etc,
which just turns out to be a needless hassle.
Non-admin User Subsystem
Once the user logs in successfully, all albums and photo information for this user from a previous
session (if any) are loaded from disk.
Initially, all the albums belonging to the user should be displayed. For each album, its name, the
number of photos in it, and the range of dates (earliest and latest date) on which photos were
taken must be displayed. Use your discretion on how to show this additional information.
The user can then do the following:
Open an album. Opening an album displays all photos, with their thumbnail images and
captions, inside that album. Once an album is open the user can do the following:
Add a photo
Remove a photo
Caption/recaption a photo
Display a photo in a separate display area. The photo display should also show its
caption, its date-time of capture (see Date of photo below), and all its tags (see Tags
Add a tag to a photo
Delete a tag from a photo
Copy a photo from one album to another (multiple albums may have copies of the
Move a photo from one album (source) to another (the photo will be removed from
the source album)
Go through photos in an album in sequence forward or backward, one at a time, with
user interaction (manual slideshow)
Search for photos (Photos that match the search criteria should be displayed in a similar way
to how photos in an album are displayed). Under this, you should provide the following
1. Search for photos by a date range.
2. Search for photos by tag type-value pairs. The following types of tag-based searches
should be implemented:
A single tag-value pair, e.g person=sesh
Conjunctive combination of two tag-value pairs, e.g. person=sesh AND
Disjunctive combination of two tag-value pairs, e.g. person=sesh OR
For conjunctions and disjunctions, if a tag can have multiple values for a photo,
it can appear on both arms of the conjunction/disjunction, e.g. person=andre
OR person=maya, person=andre AND person=maya
You are NOT required to do conjunctions/disjunctions on more than two tag-values
In other words, you are not required to do stuff like t1=v1 and t2=v3 and t3=v3
There should be functionality to create an album containing the search results.
As mentioned earlier (under Copy a photo from one album to another), a photo can be in
multiple albums. Creating an album out of search results means copying these photos to a
new album, without deleting them from the current album(s) to which they belong.
Note: A single user may not have duplicate album names, but an album name may be
(coincidentally) duplicated across users.
本网站支持淘宝 支付宝 微信支付 paypal等等交易。如果不放心可以用淘宝交易！
E-mail: [email protected] 微信:itcsdx