/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig 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:
*
* 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.schedassist.web.owner.relationships;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.jasig.schedassist.RelationshipDao;
import org.jasig.schedassist.impl.owner.NotRegisteredException;
import org.jasig.schedassist.model.IScheduleOwner;
import org.jasig.schedassist.model.Relationship;
import org.jasig.schedassist.web.security.CalendarAccountUserDetails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Provides JSON data for {@link AdhocRelationshipsController}.
*
* @author Nicholas Blair, nblair@doit.wisc.edu
* @version $Id: AdhocRelationshipsDataController.java 2050 2010-04-30 16:01:31Z npblair $
*/
@Controller
@RequestMapping(value={"/owner/authorized-visitors.json", "/delegate/authorized-visitors.json"})
public class AdhocRelationshipsDataController {
private RelationshipDao relationshipDao;
private String identifyingAttributeName = "uid";
/**
* @param relationshipDao the relationshipDao to set
*/
@Autowired
public void setRelationshipDao(@Qualifier("adhoc") RelationshipDao relationshipDao) {
this.relationshipDao = relationshipDao;
}
/**
* @return the relationshipDao
*/
public RelationshipDao getRelationshipDao() {
return relationshipDao;
}
/**
*
* @param identifyingAttributeName
*/
@Value("${users.visibleIdentifierAttributeName:uid}")
public void setIdentifyingAttributeName(String identifyingAttributeName) {
this.identifyingAttributeName = identifyingAttributeName;
}
/**
*
* @return the attribute used to commonly uniquely identify an account
*/
public String getIdentifyingAttributeName() {
return identifyingAttributeName;
}
/**
*
* @param request
* @return
* @throws NotRegisteredException
*/
@RequestMapping(method=RequestMethod.GET)
public String getRelationshipsData(final ModelMap model) throws NotRegisteredException {
CalendarAccountUserDetails currentUser = (CalendarAccountUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
IScheduleOwner owner = currentUser.getScheduleOwner();
List<Relationship> relationships = relationshipDao.forOwner(owner);
List<AdhocRelationshipVisitorDataBean> beans = new ArrayList<AdhocRelationshipsDataController.AdhocRelationshipVisitorDataBean>();
if(relationships.size() > 0) {
for(Relationship r: relationships) {
beans.add(convert(r));
}
Collections.sort(beans, new Comparator<AdhocRelationshipVisitorDataBean>() {
public int compare(AdhocRelationshipVisitorDataBean o1, AdhocRelationshipVisitorDataBean o2) {
return o1.getFullName().compareTo(o2.getFullName());
}
});
}
model.put("relationships", beans);
return "jsonView";
}
/**
*
* @param relationship
* @return
*/
protected AdhocRelationshipVisitorDataBean convert(Relationship relationship) {
AdhocRelationshipVisitorDataBean result = new AdhocRelationshipVisitorDataBean();
result.setDescription(relationship.getDescription());
result.setFullName(relationship.getVisitor().getCalendarAccount().getDisplayName());
result.setUsername(relationship.getVisitor().getCalendarAccount().getAttributeValue(identifyingAttributeName));
return result;
}
/**
* Java bean to simplify the data in a {@link Relationship} to just
* the fields useful for the enclosing class (JSON controller for adhoc relationships).
*
* @author Nicholas Blair, nblair@doit.wisc.edu
* @version $Id: AdhocRelationshipsDataController.java $
*/
public static class AdhocRelationshipVisitorDataBean {
private String username;
private String fullName;
private String description;
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the fullName
*/
public String getFullName() {
return fullName;
}
/**
* @param fullName the fullName to set
*/
public void setFullName(String fullName) {
this.fullName = fullName;
}
/**
* @return the description
*/
public String getDescription() {
return description;
}
/**
* @param description the description to set
*/
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "AdhocRelationshipVisitorDataBean [username=" + username
+ ", fullName=" + fullName + ", description=" + description
+ "]";
}
}
}