blob: fbb724ccf2d1f44077de1a4764a67da5a80c8e51 [file] [log] [blame]
package net.eyde.personalblog.service;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import net.eyde.personalblog.beans.BlogProperty;
import net.eyde.personalblog.beans.Comment;
import net.eyde.personalblog.beans.Post;
import net.eyde.personalblog.beans.Referrer;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.checkerframework.checker.tainting.qual.Untainted;
/**
* @author NEyde
* <p>When the user selects a date, they will get the previous 25 posts from the date selected.
* <p>When a user selects a specific post, they will see that post only.
* <p>When a user selects a month, they will get all the posts for the month.
*/
public class PersonalBlogService {
// Installation State
public static final String INSTALLATION_STATE = "installation_state";
public static final String STATE_UNDEFINED = "undefined";
public static final String STATE_NO_HIBERNATE_FILE = "no_hibernate_file";
public static final String STATE_DATABASE_OFF = "database_off";
public static final String STATE_HIBERNATE_FILE_INVALID = "hibernate_file_invalid";
public static final String STATE_TABLES_NOT_CREATED = "tables_not_created_yet";
public static final String STATE_MISSING_PROPERTIES = "missing_properties";
public static final String STATE_OK = "ok";
private static Log log = LogFactory.getLog(PersonalBlogService.class);
private static PersonalBlogService service = null;
// Property Name Constants
public static final String WEBLOG_TITLE = "weblog.title";
public static final String WEBLOG_DESCRIPTION = "weblog.description";
public static final String WEBLOG_PICTURE = "weblog.ownerpicture";
public static final String WEBLOG_OWNER_NICK_NAME = "weblog.ownernickname";
public static final String WEBLOG_URL = "weblog.url";
public static final String WEBLOG_OWNER = "weblog.owner";
public static final String WEBLOG_EMAIL = "weblog.email";
public static final String LINK_POST = "links.post";
public static final String EMOTICON_VALUES = "emoticon.values";
public static final String EMOTICON_IMAGES = "emoticon.images";
public static final String LOGON_ID = "logon.id";
public static final String LOGON_PASSWORD = "logon.password";
public static final String EDITOR = "weblog.editor";
public static final String EMAIL_HOST = "mail.smtp.host";
public static final String EMAIL_TRANSPORT = "mail.transport";
public static final String EMAIL_USERNAME = "mail.username";
public static final String EMAIL_PASSWORD = "mail.password";
public static final String CATEGORY_TITLES = "category.titles";
public static final String CATEGORY_VALUES = "category.values";
public static final String CATEGORY_IMAGES = "category.images";
Configuration cfg;
SessionFactory sf;
int adjustHours;
PropertyManager pm;
CacheManager cache;
// is really necessary when you are going to format it?
Locale myLocale = Locale.US;
String dburl;
String dbuser;
String dbpassword;
SimpleDateFormat qf = new SimpleDateFormat("yyyy-MM-dd", myLocale);
SimpleDateFormat monthNav = new SimpleDateFormat("yyyyMM", myLocale);
/** Constructor for PersonalBlogService. */
protected PersonalBlogService(Properties conn) throws InitializationException {
log.debug("initialization - constructor");
try {
cfg =
new Configuration()
.addClass(Post.class)
.addClass(Comment.class)
.addClass(Referrer.class)
.addClass(BlogProperty.class);
if (conn != null) {
cfg.setProperties(conn);
pm = new PropertyManager(conn);
} else {
pm = new PropertyManager();
}
// I want to take it out of here, for these
sf = cfg.buildSessionFactory();
} catch (Exception e) {
log.error("Error initializing PersonalBlog Service", e);
throw new InitializationException(e);
}
}
/** Singleton getInstance method */
public static PersonalBlogService getInstance() throws ServiceException {
if (service == null) {
try {
log.debug("Initializing PersonalBlog Service (WITHOUT CONNECTION PARMS)");
service = new PersonalBlogService(null);
} catch (ServiceException e) {
log.error("Error getting instance of PersonalBlog Service", e);
throw e;
}
}
return service;
}
public static PersonalBlogService getInstance(Properties conn) throws ServiceException {
if (service == null) {
try {
log.debug("Initializing PersonalBlog Service (WITH CONNECTION PARMS)");
service = new PersonalBlogService(conn);
} catch (Exception e) {
log.error("Error getting instance of PersonalBlog Service", e);
}
}
return service;
}
/*
* This method will return the most recent posts for today's date. This method
* will return a maximum of 25 total posts or three days worth of posts.
*
*/
public List<?> getPosts() throws ServiceException {
List<?> posts = null;
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
@SuppressWarnings("tainting")
String startdate = (@Untainted String) qf.format(cal.getTime());
posts =
executeQuery(
"from post in class net.eyde.personalblog.beans.Post "
+ "where post.created > '"
+ startdate
+ "' order by post.created desc");
return posts;
}
public List<?> getPostsByCategory(String category) throws ServiceException {
List<?> posts = null;
posts =
executeQuery(
"from post in class net.eyde.personalblog.beans.Post "
+ "where post.category like '%"
+ category
+ "%' order by post.created desc");
return posts;
}
private <T> List<T> executeQuery(@Untainted String query) {
try {
Session session = sf.openSession();
@SuppressWarnings({"unchecked"})
List<T> lst = (List<T>) session.find(query);
session.close();
return lst;
} catch (Exception e) {
log.error("Error while importing data", e);
return null;
}
}
}