/** * Copyright (c) 2009 - 2012 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package org.candlepin.audit; import org.candlepin.auth.PrincipalData; import org.candlepin.common.config.Configuration; import org.candlepin.config.ConfigProperties; import com.google.inject.Inject; import org.jboss.resteasy.plugins.providers.atom.Content; import org.jboss.resteasy.plugins.providers.atom.Entry; import org.jboss.resteasy.plugins.providers.atom.Feed; import org.jboss.resteasy.plugins.providers.atom.Link; import org.jboss.resteasy.plugins.providers.atom.Person; import org.xnap.commons.i18n.I18n; import java.net.URI; import java.util.Date; import java.util.HashMap; import java.util.List; import javax.ws.rs.core.MediaType; /** * EventAdapterImpl */ public class EventAdapterImpl implements EventAdapter { private static final HashMap<String, String> MESSAGES; private I18n i18n; private Configuration config; @Inject public EventAdapterImpl(Configuration config, I18n i18n) { this.config = config; this.i18n = i18n; } @Override public Feed toFeed(List<Event> events, String path) { String url = config.getString(ConfigProperties.CANDLEPIN_URL) + path + "/"; Feed feed = new Feed(); feed.setUpdated(new Date()); feed.getAuthors().add(new Person("Red Hat, Inc.")); try { feed.setId(new URI(url)); } catch (Exception e) { // ignore, shouldn't happen } if (events == null) { return feed; } // Add the friendly message text this.addMessageText(events); for (Event e : events) { Entry entry = new Entry(); entry.setTitle(e.getTarget().toString() + " " + e.getType().toString()); entry.setPublished(e.getTimestamp()); entry.setUpdated(e.getTimestamp()); entry.getAuthors().add(new Person("Red Hat, Inc.")); URI eventURI = null; try { eventURI = new URI(url + e.getId()); } catch (Exception error) { // ignore, shouldn't happen } entry.setId(eventURI); entry.getLinks().add(new Link("alternate", eventURI, MediaType.APPLICATION_JSON_TYPE)); Content content = new Content(); content.setType(MediaType.APPLICATION_XML_TYPE); content.setJAXBObject(e); entry.setContent(content); entry.setSummary(e.getMessageText()); feed.getEntries().add(entry); } // Use the most recent event as the feed's published time. Assumes events do not // get modified, if they do then the feed published date could be inaccurate. if (events.size() > 0) { feed.setUpdated(events.get(0).getTimestamp()); } return feed; } public void addMessageText(List<Event> events) { for (Event event : events) { String eventType = (event.getTarget().name() + event.getType().name()); String message = MESSAGES.get(eventType); if (message == null) { message = i18n.marktr("Unknown event for user {0} and target {1}"); } PrincipalData pd = event.getPrincipal(); event.setMessageText(i18n.tr(message, pd.getName(), event.getTargetName())); } } //TODO: Make them nicer strings if the system did it static { MESSAGES = new HashMap<String, String>(); MESSAGES.put("CONSUMERCREATED", I18n.marktr("{0} created new unit {1}")); MESSAGES.put("CONSUMERMODIFIED", I18n.marktr("{0} modified the unit {1}")); MESSAGES.put("CONSUMERDELETED", I18n.marktr("{0} deleted the unit {1}")); MESSAGES.put("OWNERCREATED", I18n.marktr("{0} created new owner {1}")); MESSAGES.put("OWNERMODIFIED", I18n.marktr("{0} modified the owner {1}")); MESSAGES.put("OWNERDELETED", I18n.marktr("{0} deleted the owner {1}")); MESSAGES.put("ENTITLEMENTCREATED", I18n.marktr("{0} attached a subscription for product {1}")); MESSAGES.put("ENTITLEMENTMODIFIED", I18n.marktr("{0} modified a subscription for product {1}")); MESSAGES.put("ENTITLEMENTDELETED", I18n.marktr("{0} returned the subscription for {1}")); MESSAGES.put("ENTITLEMENTEXPIRED", I18n.marktr("{0} returned the subscription for {1}")); MESSAGES.put("POOLCREATED", I18n.marktr("{0} created a pool for product {1}")); MESSAGES.put("POOLMODIFIED", I18n.marktr("{0} modified a pool for product {1}")); MESSAGES.put("POOLDELETED", I18n.marktr("{0} deleted a pool for product {1}")); MESSAGES.put("EXPORTCREATED", I18n.marktr("{0} created an export for unit {1}")); MESSAGES.put("IMPORTCREATED", I18n.marktr("{0} imported a manifest for owner {1}")); MESSAGES.put("USERCREATED", I18n.marktr("{0} created new user {1}")); MESSAGES.put("USERMODIFIED", I18n.marktr("{0} modified the user {1}")); MESSAGES.put("USERDELETED", I18n.marktr("{0} deleted the user {1}")); MESSAGES.put("ROLECREATED", I18n.marktr("{0} created new role {1}")); MESSAGES.put("ROLEMODIFIED", I18n.marktr("{0} modified the role {1}")); MESSAGES.put("ROLEDELETED", I18n.marktr("{0} deleted the role {1}")); MESSAGES.put("SUBSCRIPTIONCREATED", I18n.marktr("{0} created new subscription for product {1}")); MESSAGES.put("SUBSCRIPTIONMODIFIED", I18n.marktr("{0} modified a subscription for product {1}")); MESSAGES.put("SUBSCRIPTIONDELETED", I18n.marktr("{0} deleted a subscription for product {1}")); MESSAGES.put("ACTIVATIONKEYCREATED", I18n.marktr("{0} created the activation key {1}")); MESSAGES.put("ACTIVATIONKEYDELETED", I18n.marktr("{0} deleted the activation key {1}")); MESSAGES.put("GUESTIDCREATED", I18n.marktr("{0} created the guest id {1}")); MESSAGES.put("GUESTIDDELETED", I18n.marktr("{0} deleted the guest id {1}")); MESSAGES.put("RULESMODIFIED", I18n.marktr("{0} updated the rules in the database to version {1}")); MESSAGES.put("RULESDELETED", I18n.marktr("{0} removed the rules from the database")); MESSAGES.put("COMPLIANCECREATED", I18n.marktr("Compliance recalculated for consumer {1}")); } }