/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package controllers.resources;
import static com.emc.vipr.client.core.util.ResourceUtils.id;
import java.net.URI;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import play.mvc.Controller;
import play.mvc.Util;
import util.AppSupportUtil;
import util.ProjectUtils;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.project.ProjectRestRep;
import controllers.tenant.TenantSelector;
import controllers.util.Models;
public class ResourceController extends Controller {
public static final String ACTIVE_PROJECT_ID = "activeProjectId";
protected static void addReferenceData() {
TenantSelector.addRenderArgs();
String tenantId = Models.currentAdminTenant();
renderArgs.put("projects", getProjects(tenantId));
renderArgs.put("applications", getApplications(tenantId));
getActiveProjectId(); // called here to make sure active project id is init
}
@Util
public static List<ProjectRestRep> getProjects(String tenantId) {
List<ProjectRestRep> projects = ProjectUtils.getProjects(tenantId);
Collections.sort(projects, new Comparator<ProjectRestRep>() {
@Override
public int compare(ProjectRestRep proj1, ProjectRestRep proj2)
{
return proj1.getName().compareTo(proj2.getName());
}
});
return projects;
}
@Util
public static List<NamedRelatedResourceRep> getApplications(String tenantId) {
List<NamedRelatedResourceRep> applications = AppSupportUtil
.getVolumeGroupByTenant(tenantId);
Collections.sort(applications,
new Comparator<NamedRelatedResourceRep>() {
@Override
public int compare(NamedRelatedResourceRep app1,
NamedRelatedResourceRep app2) {
return app1.getName().compareTo(app2.getName());
}
});
return applications;
}
@Util
public static String getActiveProjectId() {
String tenantId = Models.currentAdminTenant();
String activeProjectId = session.get(ACTIVE_PROJECT_ID);
if (validateActiveProjectId(activeProjectId) == false) {
List<ProjectRestRep> projects = getProjects(tenantId);
if (!projects.isEmpty()) {
activeProjectId = id(projects.get(0)).toString();
setActiveProjectId(activeProjectId);
}
}
return activeProjectId;
}
@Util
private static boolean validateActiveProjectId(String activeProjectId) {
if (StringUtils.isNotBlank(activeProjectId)) {
URI activeProjectIdUri = URI.create(activeProjectId);
String tenantId = Models.currentAdminTenant();
List<ProjectRestRep> projects = getProjects(tenantId);
for (ProjectRestRep project : projects) {
if (project.getId().equals(activeProjectIdUri)) {
return true;
}
}
}
return false;
}
@Util
public static void setActiveProjectId(String activeProjectId) {
session.put(ACTIVE_PROJECT_ID, activeProjectId);
}
}