org.jasig.portlet.calendar.mvc.controller.SearchContentController.java Source code

Java tutorial

Introduction

Here is the source code for org.jasig.portlet.calendar.mvc.controller.SearchContentController.java

Source

/**
 * Licensed to Apereo under one or more contributor license
 * agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Apereo 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 the following location:
 *
 *   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.jasig.portlet.calendar.mvc.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.portlet.Event;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import org.apache.commons.lang.StringUtils;
import org.jasig.portal.search.PortletUrl;
import org.jasig.portal.search.PortletUrlParameter;
import org.jasig.portal.search.SearchConstants;
import org.jasig.portal.search.SearchRequest;
import org.jasig.portal.search.SearchResult;
import org.jasig.portal.search.SearchResults;
import org.jasig.portlet.calendar.mvc.CalendarDisplayEvent;
import org.jasig.portlet.calendar.mvc.CalendarHelper;
import org.jasig.portlet.calendar.util.DateUtil;
import org.joda.time.DateMidnight;
import org.joda.time.Interval;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.bind.annotation.EventMapping;

/**
 * @author Chris Waymire (chris@waymire.net)
 */
@Controller
@RequestMapping("VIEW")
public class SearchContentController {
    private static final DateTimeFormatter fmt_date = DateTimeFormat.forPattern("MMMM d, yyyy");
    private static final DateTimeFormatter fmt_time = DateTimeFormat.forPattern("m:h a");

    @Autowired(required = true)
    private CalendarHelper helper;

    @EventMapping(SearchConstants.SEARCH_REQUEST_QNAME_STRING)
    public void searchContent(EventRequest request, EventResponse response) {
        final Event event = request.getEvent();
        final SearchRequest searchQuery = (SearchRequest) event.getValue();
        final String[] searchTerms = searchQuery.getSearchTerms().split(" ");
        List<String> errors = new ArrayList<String>();
        DateMidnight start = new DateMidnight();
        Interval interval = DateUtil.getInterval(start, 180);
        Set<CalendarDisplayEvent> events = helper.getEventList(errors, interval, request);

        final SearchResults searchResults = new SearchResults();
        searchResults.setQueryId(searchQuery.getQueryId());
        searchResults.setWindowId(request.getWindowID());

        for (CalendarDisplayEvent e : events) {
            for (String term : searchTerms) {
                if (eventContainsTerm(e, term)) {
                    final PortletUrl url = createPortletUrl(e);
                    final SearchResult searchResult = new SearchResult();
                    final String summary = createSearchResultSummary(e);
                    searchResult.setTitle(e.getSummary());
                    searchResult.setSummary(summary);
                    searchResult.setPortletUrl(url);
                    searchResult.getType().add("Calendar");
                    searchResults.getSearchResult().add(searchResult);
                }
            }
        }
        if (!searchResults.getSearchResult().isEmpty()) {
            response.setEvent(SearchConstants.SEARCH_RESULTS_QNAME, searchResults);
        }
    }

    private boolean eventContainsTerm(final CalendarDisplayEvent event, final String term) {
        final String summary = StringUtils.isEmpty(event.getSummary()) ? "" : event.getSummary().toUpperCase();
        final String description = StringUtils.isEmpty(event.getDescription()) ? ""
                : event.getDescription().toUpperCase();
        final String check = StringUtils.isEmpty(term) ? "" : term.toUpperCase();
        return (!StringUtils.isEmpty(check) && (summary.contains(check) || description.contains(check)));
    }

    private PortletUrl createPortletUrl(CalendarDisplayEvent event) {
        final DateMidnight midnight = new DateMidnight(event.getDayStart());
        final Interval interval = DateUtil.getInterval(midnight, 1);
        final PortletUrl url = new PortletUrl();
        final PortletUrlParameter param = new PortletUrlParameter();
        param.setName("interval");
        param.getValue().add(interval.toString());
        url.getParam().add(param);
        return url;
    }

    private String createSearchResultSummary(CalendarDisplayEvent event) {
        StringBuilder summary = new StringBuilder(fmt_date.print(event.getDayStart()));
        if (!event.getDateStartTime().equals(event.getDateEndTime())) {
            summary.append(" ").append(event.getDateStartTime()).append(" - ").append(event.getDateEndTime());
        }
        return summary.toString();
    }
}