| 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; |
| } |
| } |
| } |