
package org.sakaiproject.nakamura.connections.search;

import static org.sakaiproject.nakamura.api.connections.ConnectionConstants.SEARCH_PROP_CONNECTIONSTORE;

import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.sakaiproject.nakamura.api.search.solr.SolrSearchPropertyProvider;
import org.sakaiproject.nakamura.connections.ConnectionUtils;

import java.util.Map;

@Component(label = "ConnectionSearchPropertyProvider", description= "Provides properties to handle connection searches.")
@Service
@Properties({
    @Property(name = "service.vendor", value = "The Sakai Foundation"),
    @Property(name = "sakai.search.provider", value="Connection")
})
public class ConnectionSearchPropertyProvider implements SolrSearchPropertyProvider {

  /**
   * {@inheritDoc}
   *
   * @see org.sakaiproject.nakamura.api.search.SearchPropertyProvider#loadUserProperties(org.apache.sling.api.SlingHttpServletRequest,
   *      java.util.Map)
   */
  public void loadUserProperties(SlingHttpServletRequest request,
      Map<String, String> propertiesMap) {
    // KERN-2350 allow requesters to search contacts that are not their own
    String user = request.getParameter("userid");
    if (!StringUtils.isBlank(user)) {
      // if searching other contacts, user should only see the accepted contacts
      propertiesMap.put("state", "ACCEPTED");
    } else {
      // lookup contacts for the currently logged in user
      user = request.getRemoteUser();
    }
    String connectionPath = ClientUtils.escapeQueryChars(ConnectionUtils
        .getConnectionPathBase(user));
    if ( connectionPath.startsWith("/"))  {
      connectionPath = connectionPath.substring(1);
    }
    propertiesMap.put(SEARCH_PROP_CONNECTIONSTORE, connectionPath);
  }
}
