package com.wooki.services.feeds.impl; import java.lang.reflect.ParameterizedType; import javax.servlet.http.HttpServletRequest; import org.apache.tapestry5.Link; import org.apache.tapestry5.internal.services.LinkSource; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.annotations.UsesMappedConfiguration; import org.apache.tapestry5.services.RequestGlobals; import com.wooki.domain.model.activity.Activity; import com.wooki.services.ServicesMessages; import com.wooki.services.feeds.ActivityFeedWriter; @UsesMappedConfiguration(key = Class.class, value = AbstractActivityFeed.class) public abstract class AbstractActivityFeed<T extends Activity> implements ActivityFeedWriter<T> { private final static String PREFIX = "feedwriter_"; private final static String SUFFIX_TITLE = "_title"; private final static String SUFFIX_SUMMARY = "_summary"; private final String keyPrefixForTitle; private final String keyPrefixForSummary; protected final Class<T> activityType; @Inject protected LinkSource linkSource; @Inject protected ServicesMessages messages; @Inject protected RequestGlobals globals; public AbstractActivityFeed() { this.activityType = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; this.keyPrefixForTitle = PREFIX + this.activityType.getSimpleName() + "_"; this.keyPrefixForSummary = PREFIX + this.activityType.getSimpleName() + "_"; } public String getKeyForTitle(String event) { return keyPrefixForTitle + event + SUFFIX_TITLE; } public String getKeyForSummary(String event) { return keyPrefixForSummary + event + SUFFIX_TITLE; } protected String toUrl(Link link) { HttpServletRequest request = globals.getHTTPServletRequest(); String result = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + link.toURI(); return result; } }