Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Media Feed functionality is a simple mechanism to prresent that presents a list of content items to a website visitor. In some XperienCentral projects it is desirable to have a mechanism that overrides and or improves the basic Media Feed mechanism. By adding a customer listener mechanism , you can implement a specific your own interface and take control over the Media Feed output. The listener A custom listenet makes it possible to:

  • Overrule the method that retrieves the content items from XperienCentral.
  • Overrule the MediaItemFilter instance that is used for the default retrieval of items.
  • Overrule the MediaItemSortOptions instance that is used for default sorting of to sort the items.
  • Perform custom filtering on the retrieved items (, given the items, filter options and sort options).
  • Determine which queryString parameters parameter(s) should be passed on to the Media Feed JSP.

The following is an example of a custom plugin that implements a listener that overrides the default Media Feed functionality. The full source of this custom plugin can be downloaded using the link below the code sample.

...

Code Block
themeEclipse
/*
 * Copyright (C) 1998 - 2020 GX Software B.V. All rights reserved. The contents of this
 * work is confidential. It is prohibited to copy, duplicate or alter this work in any
 * manner without the express prior written approval of GX Software B.V.
 */
package com.gxwebmanager.solutions.examplepresentation.service;

import nl.gx.product.wmpmediafeed.api.FeedListenerBase;
import nl.gx.webmanager.cms.mediarepository.*;
import nl.gx.webmanager.foundation.Session;
import nl.gx.webmanager.services.contentapi.MediaRepositoryManagementService;
import nl.gx.webmanager.services.sessionmanager.SessionManager;

import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.logging.Logger;

/**
 * 
 * ExampleFeedListener
 *
 */
public class ExampleFeedListener extends FeedListenerBase {

    private static final Logger LOG = Logger.getLogger(ExampleFeedListener.class.getName());

    private MediaRepositoryManagementService myMediaRepositoryManagementService;
    private SessionManager mySessionManager;

    /**
     * {@inheritDoc}
     */
    public String getIdentifier() {
        return "Example Feed listener";
    }

    /**
     * {@inheritDoc}
     */
    public List<MediaItem> getMediaItems(HttpServletRequest request, MediaItemFilter filter, MediaItemSortOptions sortOptions) {
		LOG.warning("getMediaItems from ExampleFeedListener: return only first 3 items");
        List<MediaItem> items = new ArrayList<>();

        Session session = mySessionManager.getActiveSession();
        boolean sessionCreated = false;
        if (session == null) {
            session = mySessionManager.createSession(request, null);
            sessionCreated = false;
        }

        try {
            //We should ignore the existing items but do a proper query ourselves
            int from = filter.getResultFrom();
            int to = filter.getResultTo();

            // retrieve everything
            filter.setResultRange(0,3);

            MediaSearchResult searchResult = myMediaRepositoryManagementService.getMediaItems(session.getContext().getWebsite(), filter, sortOptions);

			LOG.warning("getMediaItems from ExampleFeedListener: query returned "+searchResult.getCount()+" items, but we only use first 3 items");

            MediaItem[] allitems = searchResult.getResults(0, 3);

            if (allitems != null) {
                for (MediaItem item : allitems) {
					items.add(item);
                }
            }

            return items;
        } finally {
            if (sessionCreated && session != null) {
                session.close();
            }
        }
    }

	public List<MediaItem> filterMediaItems(HttpServletRequest request, List<MediaItem> items, MediaItemFilter filter, MediaItemSortOptions sortOptions) {
		LOG.warning("filterMediaItems from ExampleFeedListener: do nothing, but here you could filter the returned items");
		return null;
	}

	public MediaItemFilter overruleFilter(HttpServletRequest request, MediaItemFilter filter) {
		LOG.warning("overruleFilter from ExampleFeedListener: do nothing, but here you could overrule the filter");
		return null;
	}

	public MediaItemSortOptions overruleSortOptions(HttpServletRequest request, MediaItemSortOptions sortOptions) {
		LOG.warning("overruleSortOptions from ExampleFeedListener: do nothing, but here you could overrule the sort options");
        return null;
    }

    public List<String> getAllowedParameters(HttpServletRequest request) {
		LOG.warning("getAllowedParameters from ExampleFeedListener: do nothing, but here you could overrule the allowed parameters");
        return null;
    }
		
}

...