org.ambraproject.action.taxonomy.BrowseAction.java Source code

Java tutorial

Introduction

Here is the source code for org.ambraproject.action.taxonomy.BrowseAction.java

Source

/*
 * Copyright (c) 2006-2013 by Public Library of Science
 *
 * http://plos.org
 * http://ambraproject.org
 *
 * Licensed 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
 *
 *     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.ambraproject.action.taxonomy;

import org.ambraproject.action.search.BaseSearchAction;
import org.ambraproject.models.UserProfile;
import org.ambraproject.service.taxonomy.TaxonomyService;
import org.ambraproject.service.user.UserService;
import org.ambraproject.util.CategoryUtils;
import org.ambraproject.util.Pair;
import org.ambraproject.views.CategoryView;
import org.ambraproject.views.article.FeaturedArticle;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Required;

/**
 * Handle browse by category requests
 *
 * @author Joe Osowski
 */
public class BrowseAction extends BaseSearchAction {
    private static final Logger log = LoggerFactory.getLogger(BrowseAction.class);

    //The UI is pinned to this page size
    private static final int FIXED_PAGE_SIZE = 13;

    private TaxonomyService taxonomyService;
    private UserService userService;

    private String category;
    private FeaturedArticle featuredArticle;
    private String[] parents;
    private String[] children;
    private boolean subscribed = false;
    private int subjectCount = 0;

    @Override
    public String execute() throws Exception {
        String browseValueKey = "ambra.virtualJournals." + getCurrentJournal() + ".taxonomyBrowser";
        //This journal not configured to use the taxonomy browser, return 404
        if (!configuration.getBoolean(browseValueKey, false)) {
            return INPUT;
        }

        CategoryView categoryView = taxonomyService.parseCategories(super.getCurrentJournal());

        setDefaults();

        if (category != null && category.length() > 0) {
            //Recreate the category name as stored in the DB
            category = category.replace("_", " ");

            CategoryView view = CategoryUtils.findCategory(categoryView, category);

            //If the value is null, we've got a category that doesn't exist any more.  Try to format the name
            //And search for it anyway?
            if (view == null) {
                category = StringUtils.capitalize(category);
                parents = new String[] {};
                children = new String[] {};
            } else {
                category = view.getName();

                if (view.getParents().keySet().size() == 1 && view.getParents().keySet().contains("ROOT")) {
                    parents = new String[] {};
                } else {
                    parents = view.getParents().keySet().toArray(new String[view.getParents().keySet().size()]);
                }

                children = view.getChildren().keySet().toArray(new String[view.getChildren().keySet().size()]);

                //Get the featured article for this category
                if (this.category != null && this.category.length() > 0) {
                    featuredArticle = taxonomyService.getFeaturedArticleForSubjectArea(this.getCurrentJournal(),
                            this.category);
                }
            }

            setFilterSubjects(new String[] { this.category });
        } else {
            category = null;
            parents = new String[] {};
            children = categoryView.getChildren().keySet()
                    .toArray(new String[categoryView.getChildren().keySet().size()]);
        }

        resultsSinglePage = this.searchService.advancedSearch(getSearchParameters());

        if (resultsSinglePage.getHits().size() == 0) {
            return INPUT;
        } else {
            UserProfile user = getCurrentUser();
            if (user != null && category != null && !category.isEmpty()) {
                Pair<Boolean, Integer> result = userService.getJournalAlertAndSubjectCount(user.getID(),
                        this.getCurrentJournal(), category);
                subscribed = result != null ? result.getFirst() : false;
                subjectCount = result != null ? result.getSecond() : 0;
            } else {
                subscribed = false;
                subjectCount = 0;
            }
            return SUCCESS;
        }
    }

    private void setDefaults() {
        setDefaultSearchParams();
        setFilterJournals(new String[] { super.getCurrentJournal() });

        //The UI is pinned to this page size
        setPageSize(FIXED_PAGE_SIZE);

        setUnformattedQuery("*:*");
    }

    public int getSubjectCount() {
        return subjectCount;
    }

    /**
     * Set the category for the search to perform
     */
    public void setCategory(String category) {
        this.category = category;
    }

    /**
     * Get the category
     */
    public String getCategory() {
        return this.category;
    }

    /**
     * Get the featured article
     */
    public FeaturedArticle getFeaturedArticle() {
        return featuredArticle;
    }

    /**
     * Get the category's parents
     */
    public String[] getParents() {
        return parents;
    }

    /**
     * Get the category's children
     */
    public String[] getChildren() {
        return children;
    }

    public boolean isSubscribed() {
        return subscribed;
    }

    @Required
    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    @Required
    public void setTaxonomyService(TaxonomyService taxonomyService) {
        this.taxonomyService = taxonomyService;
    }
}