blob: 6f877560b3eb8322e1f6c532eb8e5ad751f85f00 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.business;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.pojos.CommentSearchCriteria;
import org.apache.roller.weblogger.pojos.StatCount;
import org.apache.roller.weblogger.pojos.TagStat;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.pojos.WeblogCategory;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.WeblogEntryComment;
import org.apache.roller.weblogger.pojos.WeblogEntryComment.ApprovalStatus;
import org.apache.roller.weblogger.pojos.WeblogEntrySearchCriteria;
import org.apache.roller.weblogger.pojos.WeblogHitCount;
/**
* Interface to weblog entry, category and comment management.
*/
public interface WeblogEntryManager {
/**
* Save weblog entry.
*/
void saveWeblogEntry(WeblogEntry entry) throws WebloggerException;
/**
* Remove weblog entry.
*/
void removeWeblogEntry(WeblogEntry entry) throws WebloggerException;
/**
* Get weblog entry by id.
*/
WeblogEntry getWeblogEntry(String id) throws WebloggerException;
/**
* Get weblog entry by anchor.
*/
WeblogEntry getWeblogEntryByAnchor(Weblog website, String anchor)
throws WebloggerException;
/**
* Get WeblogEntries by offset/length as list in reverse chronological order.
* The range offset and list arguments enable paging through query results.
* @param wesc WeblogEntrySearchCriteria object listing desired search parameters
* @return List of WeblogEntry objects in order specified by search criteria
* @throws WebloggerException
*/
List<WeblogEntry> getWeblogEntries(WeblogEntrySearchCriteria wesc)
throws WebloggerException;
/**
* Get Weblog Entries grouped by day.
* @param wesc WeblogEntrySearchCriteria object listing desired search parameters
* @return Map of Lists of WeblogEntries keyed by calendar day
* @throws WebloggerException
*/
Map<Date, List<WeblogEntry>> getWeblogEntryObjectMap(WeblogEntrySearchCriteria wesc)
throws WebloggerException;
/**
* Get Weblog Entry date strings grouped by day. This method returns a Map
* that contains one YYYYMMDD date string object for each calendar day having
* one or more blog entries.
* @param wesc WeblogEntrySearchCriteria object listing desired search parameters
* @return Map of date strings keyed by Date
* @throws WebloggerException
*/
Map<Date, String> getWeblogEntryStringMap(WeblogEntrySearchCriteria wesc)
throws WebloggerException;
/**
* Get weblog entries ordered by descending number of comments.
* @param website Weblog or null to get for all weblogs.
* @param startDate Start date or null for no start date.
* @param endDate End date or null for no end date.
* @param offset Offset into results for paging
* @param length Max comments to return (or -1 for no limit)
* @return List of StatCount objects.
*/
List<StatCount> getMostCommentedWeblogEntries(
Weblog website,
Date startDate,
Date endDate,
int offset,
int length)
throws WebloggerException;
/**
* Get the WeblogEntry following, chronologically, the current entry.
* Restrict by the Category, if named.
* @param current The "current" WeblogEntryData
* @param catName The value of the requested Category Name
*/
WeblogEntry getNextEntry(WeblogEntry current,
String catName, String locale) throws WebloggerException;
/**
* Get the WeblogEntry prior to, chronologically, the current entry.
* Restrict by the Category, if named.
* @param current The "current" WeblogEntryData.
* @param catName The value of the requested Category Name.
*/
WeblogEntry getPreviousEntry(WeblogEntry current,
String catName, String locale) throws WebloggerException;
/**
* Get specified number of most recent pinned and published Weblog Entries.
* @param max Maximum number to return.
* @return Collection of WeblogEntry objects.
*/
List<WeblogEntry> getWeblogEntriesPinnedToMain(Integer max) throws WebloggerException;
/**
* Remove attribute with given name from given WeblogEntryData
* @param name Name of attribute to be removed
*/
void removeWeblogEntryAttribute(String name,WeblogEntry entry)
throws WebloggerException;
/**
* Save weblog category.
*/
void saveWeblogCategory(WeblogCategory cat) throws WebloggerException;
/**
* Remove weblog category.
*/
void removeWeblogCategory(WeblogCategory cat) throws WebloggerException;
/**
* Get category by id.
*/
WeblogCategory getWeblogCategory(String id) throws WebloggerException;
/**
* Recategorize all entries with one category to another.
*/
void moveWeblogCategoryContents(WeblogCategory srcCat, WeblogCategory destCat)
throws WebloggerException;
/**
* Get category specified by website and name.
* @param website Website of WeblogCategory.
* @param categoryName Name of WeblogCategory
*/
WeblogCategory getWeblogCategoryByName(Weblog website,
String categoryName) throws WebloggerException;
/**
* Get WebLogCategory objects for a website.
*/
List<WeblogCategory> getWeblogCategories(Weblog website)
throws WebloggerException;
/**
* Save comment.
*/
void saveComment(WeblogEntryComment comment) throws WebloggerException;
/**
* Remove comment.
*/
void removeComment(WeblogEntryComment comment) throws WebloggerException;
/**
* Get comment by id.
*/
WeblogEntryComment getComment(String id) throws WebloggerException;
/**
* Generic comments query method.
* @param csc CommentSearchCriteria object with fields indicating search criteria
* @return list of comments fitting search criteria
*/
List<WeblogEntryComment> getComments(CommentSearchCriteria csc) throws WebloggerException;
/**
* Deletes comments that match paramters.
* @param website Website or null for all comments on site
* @param entry Entry or null to include all comments
* @param startDate Start date or null for no restriction
* @param endDate End date or null for no restriction
* @param status Status of comment
* @return Number of comments deleted
*/
int removeMatchingComments(
Weblog website,
WeblogEntry entry,
String searchString,
Date startDate,
Date endDate,
ApprovalStatus status
) throws WebloggerException;
/**
* Create unique anchor for weblog entry.
*/
String createAnchor(WeblogEntry data) throws WebloggerException;
/**
* Check for duplicate category name.
*/
boolean isDuplicateWeblogCategoryName(WeblogCategory data)
throws WebloggerException;
/**
* Check if weblog category is in use.
*/
boolean isWeblogCategoryInUse(WeblogCategory data)
throws WebloggerException;
/**
* Apply comment default settings from website to all of website's entries.
*/
void applyCommentDefaultsToEntries(Weblog website)
throws WebloggerException;
/**
* Release all resources held by manager.
*/
void release();
/**
* Get list of TagStat. There's no offset/length params just a limit.
* @param website Weblog or null to get for all weblogs.
* @param startDate Date or null of the most recent time a tag was used.
* @param limit Max TagStats to return (or -1 for no limit)
* @return List of most popular tags.
* @throws WebloggerException
*/
List<TagStat> getPopularTags(Weblog website, Date startDate, int offset, int limit)
throws WebloggerException;
/**
* Get list of TagStat. There's no offset/length params just a limit.
* @param website Weblog or null to get for all weblogs.
* @param sortBy Sort by either 'name' or 'count' (null for name)
* @param startsWith Prefix for tags to be returned (null or a string of length > 0)
* @param limit Max TagStats to return (or -1 for no limit)
* @return List of tags matching the criteria.
* @throws WebloggerException
*/
List<TagStat> getTags(Weblog website, String sortBy, String startsWith, int offset, int limit)
throws WebloggerException;
/**
* Does the specified tag combination exist? Optionally confined to a specific weblog.
*
* This tests if the intersection of the tags listed will yield any results
* and returns a true/false value if so. This means that if the tags list
* is "foo", "bar" and only the tag "foo" has been used then this method
* should return false.
*
* @param tags The List of tags to check for.
* @param weblog The weblog to confine the check to.
* @return True if tags exist, false otherwise.
* @throws WebloggerException If there is any problem doing the operation.
*/
boolean getTagComboExists(List tags, Weblog weblog)
throws WebloggerException;
/**
* Get a HitCountData by id.
*
* @param id The HitCountData id.
* @return The HitCountData object, or null if it wasn't found.
* @throws WebloggerException If there was a problem with the backend.
*/
WeblogHitCount getHitCount(String id) throws WebloggerException;
/**
* Get a HitCountData by weblog.
*
* @param weblog The WebsiteData that you want the hit count for.
* @return The HitCountData object, or null if it wasn't found.
* @throws WebloggerException If there was a problem with the backend.
*/
WeblogHitCount getHitCountByWeblog(Weblog weblog)
throws WebloggerException;
/**
* Get HitCountData objects for the hotest weblogs.
*
* The results may be constrained to a certain number of days back from the
* current time, as well as pagable via the offset and length params.
*
* The results are ordered by highest counts in descending order, and any
* weblogs which are not active or enabled are not included.
*
* @param sinceDays Number of days in the past to consider.
* @param offset What index in the results to begin from.
* @param length The number of results to return.
* @return The list of HitCountData objects ranked by hit count, descending.
* @throws WebloggerException If there was a problem with the backend.
*/
List<WeblogHitCount> getHotWeblogs(int sinceDays, int offset, int length)
throws WebloggerException;
/**
* Save a HitCountData object.
*
* @param hitCount The HitCountData object to save.
* @throws WebloggerException If there was a problem with the backend.
*/
void saveHitCount(WeblogHitCount hitCount) throws WebloggerException;
/**
* Remove a HitCountData object.
*
* @param hitCount The HitCountData object to remove.
* @throws WebloggerException If there was a problem with the backend.
*/
void removeHitCount(WeblogHitCount hitCount) throws WebloggerException;
/**
* Increment the hit count for a weblog by a certain amount.
*
* This is basically a convenience method for doing a lookup, modify, save
* of a HitCountData object.
*
* @param weblog The WebsiteData object to increment the count for.
* @param amount How much to increment by.
* @throws WebloggerException If there was a problem with the backend.
*/
void incrementHitCount(Weblog weblog, int amount)
throws WebloggerException;
/**
* Reset the hit counts for all weblogs. This sets the counts back to 0.
*
* @throws WebloggerException If there was a problem with the backend.
*/
void resetAllHitCounts() throws WebloggerException;
/**
* Reset the hit counts for a single weblog. This sets the count to 0.
*
* @param weblog The WebsiteData object to reset the count for.
* @throws WebloggerException If there was a problem with the backend.
*/
void resetHitCount(Weblog weblog) throws WebloggerException;
/**
* Get site-wide comment count
*/
long getCommentCount() throws WebloggerException;
/**
* Get weblog comment count
*/
long getCommentCount(Weblog websiteData) throws WebloggerException;
/**
* Get site-wide entry count
*/
long getEntryCount() throws WebloggerException;
/**
* Get weblog entry count
*/
long getEntryCount(Weblog websiteData) throws WebloggerException;
}