package edu.asu.spring.quadriga.web.conceptcollection;
import java.security.Principal;
import java.util.List;
import org.codehaus.jettison.json.JSONException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import edu.asu.spring.quadriga.aspects.IAuthorization;
import edu.asu.spring.quadriga.domain.conceptcollection.IConceptCollection;
import edu.asu.spring.quadriga.domain.conceptcollection.IConceptCollectionCollaborator;
import edu.asu.spring.quadriga.exceptions.QuadrigaAccessException;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.conceptcollection.IConceptCollectionManager;
import edu.asu.spring.quadriga.web.login.RoleNames;
@Controller
public class ListConceptCollectionsController {
@Autowired
private IConceptCollectionManager conceptControllerManager;
@Autowired @Qualifier("conceptCollectionAuthorization")
private IAuthorization authorization;
/**
* This is used to fetch the details of a concept from database and display
*
* @param collection_id
* @param model
* @param principal
* @return Returns the list of concept collections of user to the view
* @throws QuadrigaStorageException
* @throws QuadrigaAccessException
* @throws JSONException
*/
@RequestMapping(value = "auth/conceptcollections/{collection_id}", method = RequestMethod.GET)
public String conceptDetailsHandler(@PathVariable("collection_id") String collection_id, ModelMap model,
Principal principal) throws QuadrigaStorageException, QuadrigaAccessException, JSONException {
fillModel(collection_id, model, principal.getName());
return "auth/conceptcollections/details";
}
private void fillModel(String collectionId, ModelMap model, String userName) throws QuadrigaStorageException,
QuadrigaAccessException, JSONException {
IConceptCollection collection = conceptControllerManager.getConceptCollection(collectionId);
String[] userRoles = {RoleNames.ROLE_CC_COLLABORATOR_ADMIN};
String readRole[] = { RoleNames.ROLE_CC_COLLABORATOR_READ };
String readWriteRole[] = { RoleNames.ROLE_CC_COLLABORATOR_READ_WRITE };
boolean isAdmin = authorization.chkAuthorization(userName, collectionId, userRoles);
boolean hasRead = authorization.chkAuthorization(userName, collectionId, readRole);
boolean hasReadWrite = authorization.chkAuthorization(userName, collectionId, readWriteRole);
if (isAdmin) {
model.addAttribute("isAdmin", true);
} else {
model.addAttribute("isAdmin", false);
}
if (hasRead) {
model.addAttribute("hasRead", true);
} else {
model.addAttribute("hasRead", false);
}
if (hasReadWrite) {
model.addAttribute("hasReadWrite", true);
} else {
model.addAttribute("hasReadWrite", false);
}
model.addAttribute("concept", collection);
conceptControllerManager.getCollaborators(collection);
model.addAttribute("collectionid", collectionId);
model.addAttribute("owner", collection.getOwner().getUserName().equals(userName));
// TODO: showCollaboratingUsers() should be changed with mapper
List<IConceptCollectionCollaborator> collaboratingUsers = conceptControllerManager
.showCollaboratingUsers(collectionId);
model.addAttribute("collaboratingUsers", collaboratingUsers);
}
}