package edu.asu.spring.quadriga.web.transformation;
import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import edu.asu.spring.quadriga.domain.IUser;
import edu.asu.spring.quadriga.domain.network.INetwork;
import edu.asu.spring.quadriga.domain.workbench.IProject;
import edu.asu.spring.quadriga.dto.TransformFilesDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.IEditorManager;
import edu.asu.spring.quadriga.service.IUserManager;
import edu.asu.spring.quadriga.service.network.INetworkManager;
import edu.asu.spring.quadriga.service.transformation.ITransformationManager;
import edu.asu.spring.quadriga.service.workbench.IRetrieveProjectManager;
import edu.asu.spring.quadriga.web.network.INetworkStatus;
/**
* This class will list all the networks approved by the user and display
* approved networks and some dummy transformations for the data
*
* @author: Jaydatta Nagarkar.
*
*/
@Controller
public class TransformProjectsController {
@Autowired
private ITransformationManager transformManager;
@Autowired
private INetworkManager networkManager;
@Autowired
private IRetrieveProjectManager retrieveProjectManager;
@Autowired
private IEditorManager editorManager;
@Autowired
private IUserManager userManager;
@Autowired
private IProject projectManager;
private static final Logger logger = LoggerFactory
.getLogger(TransformProjectsController.class);
/**
* List networks assigned to a User
*
* @param model
* @param principal
* @return
* @throws QuadrigaStorageException
*/
@RequestMapping(value = "auth/transformation", method = RequestMethod.GET )
public String listTransformations(ModelMap model, Principal principal)
throws QuadrigaStorageException {
IUser user = userManager.getUser(principal.getName());
Set<IProject> projects = new HashSet<>();
Map<String, List<INetwork>> networkMap = new HashMap<>();
List<IProject> retrievedProjects=new ArrayList<IProject>();
try {
retrievedProjects=retrieveProjectManager.getProjectList(user.getUserName());
if (retrievedProjects == null) {
retrievedProjects = new ArrayList<IProject>();
}
} catch (QuadrigaStorageException e) {
logger.error("Error fetching list of approved networks", e);
model.addAttribute("show_error_alert", true);
model.addAttribute("error_alert_msg",
"There was an error retrieving the list of approved networks.");
return "auth/transformation";
}
List<INetwork> networks = new ArrayList<INetwork>();
for(IProject retrievedProj: retrievedProjects){
networks.addAll(networkManager.getNetworksInProject(retrievedProj.getProjectId(), INetworkStatus.APPROVED));
}
List<INetwork> allNetworkList = new ArrayList<INetwork>();
for(INetwork individualNetworks: networks){
if(individualNetworks.getStatus().equalsIgnoreCase("APPROVED")){
allNetworkList.add(individualNetworks);
}
}
for (INetwork network : allNetworkList) {
IProject project = network.getNetworkWorkspace().getWorkspace()
.getProjectWorkspace().getProject();
if (networkMap.get(project.getProjectName()) == null) {
networkMap.put(project.getProjectName(),
new ArrayList<INetwork>());
projects.add(project);
}
networkMap.get(project.getProjectName()).add(network);
}
List<TransformFilesDTO> transformationsList = transformManager
.getTransformationsList();
model.addAttribute("projects", projects);
model.addAttribute("networkMap", networkMap);
model.addAttribute("transformationsList", transformationsList);
return "auth/transformation";
}
}