Upgrading Older Blog components to AEM 6.2
Hi Guys,
I am working on a old small site built on CQ 5.5 In this older implementation they have copied the Out of the Box Blog components into the apps folder. It looks like they copied the out of the box Blog page component into the apps folder and customized it. This components uses the a lot of older API's. I have listed some of them below. Most of these are not present any more in AEM 6.2. As a sample i have also given the feed.jsp which is a part of blog page. The feed uses Atom feed renderer for blog and blog entry nodes.
There is also a lot of content they built using these blog templates. Can anyone please advice how can i upgrade these components and how i can migrate this content. Is there a one on one replacement for these API's? Also any ideas how i can migrate the blog content.
com.day.cq.rewriter.linkchecker.LinkCheckerSettings,
com.day.cq.wcm.api.WCMMode"
com.day.cq.collab.blog.Blog,
com.day.cq.collab.blog.BlogManager,
com.day.cq.collab.blog.BlogEntry,
com.day.cq.collab.blog.BlogEntryFilter,
com.day.cq.collab.blog.TagEntryFilter,
com.day.cq.collab.blog.AuthorEntryFilter,
com.day.cq.collab.commons.Comment,
com.day.cq.commons.ProductInfoService,
com.day.cq.commons.ProductInfo,
com.day.cq.wcm.api.WCMMode,
org.apache.sling.api.resource.Resource,
org.apache.sling.api.resource.ResourceResolver,
------------------------------------------------------------------------------------------------------------------------------------------
Feed.jsp
------------------------------------------------------------------------------------------------------------------------------------------
<%--
Copyright 1997-2009 Day Management AG
Barfuesserplatz 6, 4001 Basel, Switzerland
All Rights Reserved.
This software is the confidential and proprietary information of
Day Management AG, ("Confidential Information"). You shall not
disclose such Confidential Information and shall use it only in
accordance with the terms of the license agreement you entered into
with Day.
==============================================================================
Atom feed renderer for blog and blog entry nodes
- Draws the current blog as a feed, listing its blog entries as feed entries
- Draws the current blog entry as a feed, listing its comments as feed entries
--%>
<%@ page session="false" %><%
%><%@ page import="java.util.List,
java.util.ArrayList,
java.util.Collections,
com.day.cq.collab.blog.Blog,
com.day.cq.collab.blog.BlogManager,
com.day.cq.collab.blog.BlogEntry,
com.day.cq.collab.blog.BlogEntryFilter,
com.day.cq.collab.blog.TagEntryFilter,
com.day.cq.collab.blog.AuthorEntryFilter,
com.day.cq.collab.commons.Comment,
com.day.cq.commons.ProductInfoService,
com.day.cq.commons.ProductInfo,
com.day.cq.wcm.api.WCMMode,
org.apache.sling.api.resource.Resource,
org.apache.sling.api.resource.ResourceResolver,
java.util.Iterator,
org.apache.sling.api.resource.ValueMap,
com.day.cq.wcm.api.components.ComponentContext" %><%
%><%@ taglib prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0" %><%
%><%@ taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %><%
%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%
%><%@ taglib prefix="atom" uri="http://sling.apache.org/taglibs/atom/1.0" %><%
%><cq:defineObjects /><%!
/**
* Descends the resource hierarchy until a blog entry list component is found,
* then the value of the limit property is returned.
* @param res The resource
* @return The limit
*/
protected static int findLimit(Resource res) {
int limit = -1;
ResourceResolver rr = res.getResourceResolver();
try {
Iterator<Resource> children = rr.listChildren(res);
while (children.hasNext()) {
Resource child = children.next();
if (child.getResourceType().equals("collab/blog/components/entrylist") || child.getResourceType().equals("csr/blog/components/entrylist")) {
limit = child.adaptTo(ValueMap.class).get("limit", -1);
break;
}
limit = findLimit(child);
}
} catch (Exception e) {}
return limit;
}
%><%
try {
ProductInfo pi = sling.getService(ProductInfoService.class).getInfo();
WCMMode.DISABLED.toRequest(request);
String tag = request.getParameter(Blog.PARAM_TAG);
String author = request.getParameter(Blog.PARAM_AUTHOR);
BlogManager blogMgr = resource.getResourceResolver().adaptTo(BlogManager.class);
Blog blog = blogMgr.getBlog(slingRequest, resource.getPath());
BlogEntry entry = blog.getEntry();
String url = blog.getFullUrl();
String feedUrl = blog.isEntry() ? entry.getFeedUrl(true) : blog.getFeedUrl(true);
String link = blog.isEntry() ? entry.getFullUrl() : blog.getFullUrl();
String title = blog.isEntry() ? entry.getTitle() : blog.getTitle();
String subTitle = blog.isEntry() ? entry.getAuthor() : blog.getDescription();
String genUri = pi.getUrl();
String genName = pi.getName();
String genVersion = pi.getShortVersion();
int limit = findLimit(resource);
//6-5-2014 adjust entry limit function to search blog children under extra blog child node, enables author to specify limit for feed in entries component
String resourcePath = resource.getPath();
if(resourcePath.equals("/content/csr/home/blog/jcr:content")) {
limit = findLimit(resource.getChild("blog"));
}
//Adobe recommended fix for server 500 error
request.setAttribute(ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE, true);
// NOTE WELL: atom: is a taglib, not generated output. Don't be tempted to encode attribute
// values. (We may not even need to filter the HTML element content, but we currently do.)
%><atom:feed id="<%= url %>"><%
%><atom:title><%= xssAPI.filterHTML(title) %></atom:title><%
if (!"".equals(subTitle)) {
%><atom:subtitle><%= xssAPI.filterHTML(subTitle) %></atom:subtitle><%
}
%><atom:link href="<%= feedUrl %>" rel="self"/><%
%><atom:link href="<%= link %>"/><%
%><atom:generator uri="<%= genUri %>" version="<%= genVersion %>"><%= xssAPI.filterHTML(genName) %></atom:generator><%
if (blog.isEntry()) {
// blog entry: list comments
if (entry.hasComments()) {
List<Comment> comments = entry.getComments();
Collections.reverse(comments);
for (Comment comment : comments) {
String path = comment.getPath() + ".feedentry";
%><sling:include path="<%= path %>"/><%
}
}
} else {
int count = 1;
// blog: list blog entries
List<BlogEntry> entries;
if (tag != null || author != null) {
List<BlogEntryFilter> filters = new ArrayList<BlogEntryFilter>();
if (tag != null) {
filters.add(new TagEntryFilter(tag));
}
if (author != null) {
filters.add(new AuthorEntryFilter(author));
}
entries = blog.getEntries(filters);
} else {
entries = blog.getEntries();
}
for (BlogEntry child : entries) {
String path = child.getPage().getContentResource().getPath() + ".feedentry";
%><sling:include path="<%= path %>"/><%
if (limit > 0 && count == limit) {
break;
}
count++;
}
}
%></atom:feed><%
} catch (Exception e) {
log.error("error rendering feed for blog", e);
}
%>