/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. 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.
*/
package org.apache.aries.samples.blog.biz;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.aries.samples.blog.api.BlogAuthor;
import org.apache.aries.samples.blog.api.BlogEntry;
import org.apache.aries.samples.blog.api.BlogEntryManager;
import org.apache.aries.samples.blog.api.persistence.BlogPersistenceService;
import org.apache.aries.samples.blog.api.persistence.Entry;
public class BlogEntryManagerImpl implements BlogEntryManager
{
private BlogPersistenceService persistenceService;
// Injected via blueprint
public void setPersistenceService(BlogPersistenceService persistenceService)
{
this.persistenceService = persistenceService;
}
public void createBlogPost(String email, String title, String blogText, List<String> tags)
{
persistenceService.createBlogPost(email, title, blogText, tags);
}
public Entry findBlogEntryByTitle(String title)
{
return persistenceService.findBlogEntryByTitle(title);
}
public List<? extends BlogEntry> getAllBlogEntries()
{
List<? extends Entry> entries = persistenceService.getAllBlogEntries();
return adaptEntries(entries);
}
public List<? extends BlogEntry> getBlogEntries(int firstPostIndex, int noOfPosts)
{
List<? extends Entry> entries = persistenceService.getBlogEntries(firstPostIndex, noOfPosts);
return adaptEntries(entries);
}
public List<? extends BlogEntry> getBlogsForAuthor(String emailAddress)
{
List <?extends Entry> entries= persistenceService.getBlogsForAuthor(emailAddress);
return adaptEntries(entries);
}
public List<? extends BlogEntry> getBlogEntriesModifiedBetween(String startDate, String endDate) throws ParseException
{
if(startDate == null || "".equals(startDate)) throw new IllegalArgumentException("A valid start date must be supplied");
if(endDate == null || "".equals(endDate)) throw new IllegalArgumentException("A valid end date must be supplied");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date start = sdf.parse(startDate);
Date end = sdf.parse(endDate);
List <? extends Entry> entries = persistenceService.getBlogEntriesModifiedBetween(start, end);
return adaptEntries(entries);
}
public int getNoOfPosts()
{
return persistenceService.getNoOfBlogEntries();
}
public void removeBlogEntry(BlogAuthor a, String title, String publishDate) throws ParseException
{
if(a == null) throw new IllegalArgumentException("An author must be specified");
if(title == null) title = "";
if(publishDate == null) throw new IllegalArgumentException("The article must have a publication date");
Date pubDate = parseDate(publishDate);
long found = -920234218060948564L;
for(BlogEntry b : a.getEntries()) {
if(title.equals(b.getTitle()) && pubDate.equals(b.getPublishDate())){
found = b.getId();
break;
}
}
persistenceService.removeBlogEntry(found);
}
public void updateBlogEntry(BlogEntry originalEntry, BlogAuthor a, String title, String publishDate, String blogText, List<String> tags) throws ParseException
{
if (originalEntry.getAuthor() == null
|| originalEntry.getAuthorEmail() == null)
throw new IllegalArgumentException("An author must be specified");
if (title == null)
title = "";
if (publishDate == null)
throw new IllegalArgumentException(
"The article must have a publication date");
long found = -920234218060948564L;
Date pubDate = parseDate(publishDate);
for (BlogEntry b : getBlogsForAuthor(originalEntry.getAuthorEmail()
)) {
if (title.equals(b.getTitle())
&& pubDate.equals(b.getPublishDate())) {
found = b.getId();
break;
}
}
if (found == -920234218060948564L)
throw new IllegalArgumentException("No blog entry could be found");
String email = a.getEmailAddress();
if (tags == null) {
tags = new ArrayList<String>();
}
Date updatedDate = new Date(System.currentTimeMillis());
persistenceService.updateBlogEntry(found, email, title, blogText, tags,
updatedDate);
}
private Date parseDate(String dateString) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
return sdf.parse(dateString);
}
public BlogEntry getBlogPost(long id)
{
return new BlogEntryImpl(persistenceService.getBlogEntryById(id));
}
private List <? extends BlogEntry> adaptEntries(List<? extends Entry> entries) {
return new BlogListAdapter<BlogEntry, Entry>(entries, BlogEntryImpl.class, Entry.class);
}
}