📄 day.java
字号:
/* * Copyright (c) 2003-2006, Simon Brown * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * - Neither the name of Pebble nor the names of its contributors may * be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */package net.sourceforge.pebble.domain;import net.sourceforge.pebble.comparator.ReverseBlogEntryIdComparator;import java.util.*;/** * Represents a blog at a daily level. This manages a collection of BlogEntry instances. * * @author Simon Brown */public class Day extends TimePeriod implements Permalinkable { /** the parent, Month instance */ private Month month; /** an integer representing the day that this Day is for */ private int day; /** the collection of blog entry keys */ private List<String> blogEntries = new ArrayList<String>(); private List<String> publishedBlogEntries = new ArrayList<String>(); private List<String> unpublishedBlogEntries = new ArrayList<String>(); /** * Creates a new Day for the specified month and day. * * @param month a Month instance representing the month * @param day an int representing the day */ Day(Month month, int day) { super(month.getBlog()); this.month = month; this.day = day; setDate(getCalendar().getTime());// if (getBlog() instanceof Blog) {// try {// Blog blog = getBlog();//// DAOFactory factory = DAOFactory.getConfiguredFactory();// BlogEntryDAO dao = factory.getBlogEntryDAO();// entries = dao.getBlogEntries(this);// Collections.sort(entries, new BlogEntryComparator());//// Iterator it = entries.iterator();// while (it.hasNext()) {// BlogEntry blogEntry = (BlogEntry)it.next();//// if (blogEntry.isApproved()) {// Iterator categories = blogEntry.getCategories().iterator();// while (categories.hasNext()) {// Category category = (Category)categories.next();// category.addBlogEntry(blogEntry);// }// blog.getRootCategory().addBlogEntry(blogEntry);//// // and the blog entry specific tags// Iterator tags = blogEntry.getTagsAsList().iterator();// while (tags.hasNext()) {// Tag tag = (Tag)tags.next();// tag.addBlogEntry(blogEntry);// }// }//// // tell the owning blog that we might have some more recent// // comments and TrackBacks// Iterator comments = blogEntry.getComments().iterator();// while (comments.hasNext()) {// blog.getResponseManager().addRecentComment((Comment)comments.next());// }// Iterator trackBacks = blogEntry.getTrackBacks().iterator();// while (trackBacks.hasNext()) {// blog.getResponseManager().addRecentTrackBack((TrackBack)trackBacks.next());// }//// // now that the entries have been loaded, enable events// // so that listeners get notified when they change// blogEntry.setEventsEnabled(true);// }// } catch (PersistenceException e) {// e.printStackTrace();// }// } } /** * Gets a Calendar object representing today. * * @return a Calendar instance */ private Calendar getCalendar() { // and set the actual date for this day Calendar cal = getBlog().getCalendar(); cal.set(Calendar.YEAR, getMonth().getYear().getYear()); cal.set(Calendar.MONTH, getMonth().getMonth() - 1); cal.set(Calendar.DAY_OF_MONTH, getDay()); cal.set(Calendar.HOUR_OF_DAY, 12); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal; } /** * Gets a reference to the parent Month instance. * * @return a Month instance */ public Month getMonth() { return month; } /** * Gets the day that this Day is for. * * @return an int representing the day in the month */ public int getDay() { return day; } /** * Gets the permalink to display all entries for this Day. * * @return an absolute URL */ public String getPermalink() { String s = getBlog().getPermalinkProvider().getPermalink(this); if (s != null && s.length() > 0) { return getBlog().getUrl() + s.substring(1); } else { return ""; } } /** * Gets a Collection containing all the blog entries for this day. * * @return an ordered List of BlogEntry instances */ public List<String> getBlogEntries() { return new ArrayList<String>(blogEntries); } public int getNumberOfBlogEntries() { return publishedBlogEntries.size(); } public synchronized void addPublishedBlogEntry(String blogEntryId) { if (!publishedBlogEntries.contains(blogEntryId)) { publishedBlogEntries.add(blogEntryId); Collections.sort(publishedBlogEntries, new ReverseBlogEntryIdComparator()); } unpublishedBlogEntries.remove(blogEntryId); if (!blogEntries.contains(blogEntryId)) { // and add to the aggregated view blogEntries.add(blogEntryId); Collections.sort(blogEntries, new ReverseBlogEntryIdComparator()); } } public synchronized void addUnpublishedBlogEntry(String blogEntryId) { if (!unpublishedBlogEntries.contains(blogEntryId)) { unpublishedBlogEntries.add(blogEntryId); Collections.sort(unpublishedBlogEntries, new ReverseBlogEntryIdComparator()); } publishedBlogEntries.remove(blogEntryId); if (!blogEntries.contains(blogEntryId)) { // and add to the aggregated view blogEntries.add(blogEntryId); Collections.sort(blogEntries, new ReverseBlogEntryIdComparator()); } } public synchronized void removeBlogEntry(BlogEntry blogEntry) { publishedBlogEntries.remove(blogEntry.getId()); unpublishedBlogEntries.remove(blogEntry.getId()); blogEntries.remove(blogEntry.getId()); }// /**// * Gets a Collection containing all the blog entries for this day and the// * specified category.// *// * @param category a Category instance, or null// * @return an ordered List of BlogEntry instances// */// public List getEntries(Category category) {// if (category == null) {// return this.getEntries();// } else {// List blogEntries = new ArrayList();// Iterator it = getEntries().iterator();// while (it.hasNext()) {// BlogEntry blogEntry = (BlogEntry)it.next();// if (blogEntry.inCategory(category)) {// blogEntries.add(blogEntry);// }// }// return blogEntries;// }// }// /**// * Gets a Collection containing all the blog entries for this day and the// * specified tag.// *// * @param tag a Strng// * @return an ordered List of BlogEntry instances// */// public List getEntries(String tag) {// if (tag == null) {// return this.getEntries();// } else {// List blogEntries = new ArrayList();// Iterator it = getEntries().iterator();// while (it.hasNext()) {// BlogEntry blogEntry = (BlogEntry)it.next();// if (blogEntry.hasTag(tag)) {// blogEntries.add(blogEntry);// }// }// return blogEntries;// }// }// /**// * Gets a specific blog entry.// *// * @param entryId the blog entry id// * @return the corresponding BlogEntry instance, or null if a BlogEntry// * with the specified id doesn't exist// */// public BlogEntry getEntry(String entryId) {// Iterator it = entries.iterator();// BlogEntry blogEntry;// while (it.hasNext()) {// blogEntry = (BlogEntry)it.next();// if (blogEntry.getId().equals(entryId)) {// return blogEntry;// }// }// return null;// }// /**// * Adds a given blog entry.// *// * @param entry the BlogEntry instance to add// */// public synchronized void addEntry(BlogEntry entry) {// if (entry == null) {// return;// }//// BlogEntry existing = getEntry(entry.getId());// if (existing != null && existing != entry) {// // there is already an entry with the same ID, so increment and try again// entry.setDate(new Date(entry.getDate().getTime() + 1));// addEntry(entry);// } else if (!entries.contains(entry)) {// entries.add(entry);// Collections.sort(entries, new BlogEntryComparator());// entry.setDay(this);// entry.setType(BlogEntry.PUBLISHED);//// // now that the entries have been loaded, enable events// // so that listeners get notified when they change// entry.setEventsEnabled(true);//// // and notify listeners// ((Blog)getBlog()).getEventDispatcher().fireBlogEntryEvent(new BlogEntryEvent(entry, BlogEntryEvent.BLOG_ENTRY_ADDED));// }// }// /**// * Removes a given blog entry.// *// * @param entry the BlogEntry instance to remove// */// public synchronized void removeEntry(BlogEntry entry) {// if (entry != null) {// getBlog().getEventDispatcher().fireBlogEntryEvent(new BlogEntryEvent(entry, BlogEntryEvent.BLOG_ENTRY_REMOVED));// entries.remove(entry);// entry.setDay(null);// }// } /** * Determines whether this day has entries. * * @return true if this blog contains entries, false otherwise */ public boolean hasBlogEntries() { return !publishedBlogEntries.isEmpty(); } /** * Gets the Day instance for the previous day. * * @return a Day instance */ public Day getPreviousDay() { return month.getBlogForPreviousDay(this); } /** * Gets the Day instance for the next day. * * @return a Day instance */ public Day getNextDay() { return month.getBlogForNextDay(this); } /** * Gets the blog entry posted previous (before) to the one specified. * * @param blogEntry a BlogEntry * @return the previous BlogEntry, or null if one doesn't exist */ public String getPreviousBlogEntry(String blogEntry) { int index = publishedBlogEntries.indexOf(blogEntry); if (index >= 0 && index < (publishedBlogEntries.size()-1)) { return publishedBlogEntries.get(index+1); } else { return null; } } /** * Gets the first entry that was posted on this day. * * @return a BlogEntry instance, or null is no entries have been posted */ public String getFirstBlogEntry() { if (!publishedBlogEntries.isEmpty()) { return publishedBlogEntries.get(publishedBlogEntries.size()-1); } else { return null; } } /** * Gets the last entry that was posted on this day. * * @return a BlogEntry instance, or null is no entries have been posted */ public String getLastBlogEntry() { if (!publishedBlogEntries.isEmpty()) { return publishedBlogEntries.get(0); } else { return null; } } /** * Gets the blog entry posted next (afterwards) to the one specified. * * @param blogEntry a BlogEntry * @return the next BlogEntry, or null if one doesn't exist */ public String getNextBlogEntry(String blogEntry) { int index = publishedBlogEntries.lastIndexOf(blogEntry); if (index > 0 && index <= publishedBlogEntries.size()) { return publishedBlogEntries.get(index-1); } else { return null; } } public Date getStartOfDay() { Calendar cal = getCalendar(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 1); return cal.getTime(); } public Date getEndOfDay() { Calendar cal = getCalendar(); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); return cal.getTime(); } /** * Determines if the this Day is before (in the calendar) the * specified Day. * * @return true if this instance represents an earlier month than the * specified Day instance, false otherwise */ public boolean before(Day day) { return getDate().before(day.getDate()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -