/**
* 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:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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.apereo.portal.portlets.favorites;
import org.apereo.portal.url.IPortalRequestUtils;
import org.apereo.portal.user.IUserInstanceManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
/**
* The Favorites controllers handling the VIEW and EDIT modes share dependency auto-wiring needs.
* This abstract class implements those dependencies and auto-wiring once so that the concrete
* controller implementations can inherit that functionality.
*
* @since 4.1
*/
public abstract class AbstractFavoritesController {
protected final Logger logger = LoggerFactory.getLogger(getClass());
protected IUserInstanceManager userInstanceManager;
protected IPortalRequestUtils portalRequestUtils;
/**
* Functional name of Marketplace portlet, or null if links to a Marketplace are not desired or
* are not feasible.
*/
protected String marketplaceFName;
@Autowired
public void setUserInstanceManager(IUserInstanceManager userInstanceManager) {
this.userInstanceManager = userInstanceManager;
}
@Autowired
public void setPortalRequestUtils(IPortalRequestUtils portalRequestUtils) {
this.portalRequestUtils = portalRequestUtils;
}
/**
* Configures FavoritesController to include a Marketplace portlet functional name in the Model,
* which ultimately signals and enables the View to include convenient link to Marketplace for
* user to add new favorites.
*
* <p>When set to null, signals Favorites portlet to suppress links to Marketplace. Setting to
* the empty String or to the literal value "null" (ignoring case) is equivalent to setting to
* null.
*
* <p>This is for convenience in expressing no-marketplace-fname-available via injected value
* from properties file. Defaults to the value of the property
* "org.apereo.portal.portlets.favorites.MarketplaceFunctionalName", or null if that property is
* not set.
*
* <p>The functional name can technically be the fname of any portlet. It doesn't have to be The
* Marketplace Portlet. Perhaps you've got your own take on Marketplace.
*
* <p>This allows Favorites to support integration with Marketplace without requiring a
* Marketplace, gracefully degrading when no Marketplace available.
*
* @param marketplaceFunctionalName String fname of a marketplace portlet, or null.
*/
@Value("${org.apereo.portal.portlets.favorites.MarketplaceFunctionalName:null}")
public void setMarketplaceFName(String marketplaceFunctionalName) {
// interpret null, non-text-having, or literal "null" as
// signaling lack of Marketplace functional name.
if (!StringUtils.hasText(marketplaceFunctionalName)
|| "null".equalsIgnoreCase(marketplaceFunctionalName)) {
marketplaceFunctionalName = null;
}
this.marketplaceFName = marketplaceFunctionalName;
}
}