/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. 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.wso2.carbon.governance.gadgets.ui;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONObject;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.governance.api.common.dataobjects.GovernanceArtifact;
import org.wso2.carbon.governance.api.generic.GenericArtifactManager;
import org.wso2.carbon.governance.api.generic.dataobjects.GenericArtifact;
import org.wso2.carbon.governance.api.policies.dataobjects.Policy;
import org.wso2.carbon.governance.api.services.dataobjects.Service;
import org.wso2.carbon.governance.api.util.GovernanceUtils;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.RegistryConstants;
import org.wso2.carbon.registry.core.Resource;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.core.utils.RegistryUtils;
import org.wso2.carbon.registry.ws.client.registry.WSRegistryServiceClient;
import org.wso2.carbon.ui.CarbonUIUtil;
import org.wso2.carbon.user.mgt.stub.types.carbon.FlaggedName;
//import org.wso2.carbon.user.mgt.common.FlaggedName;
import org.wso2.carbon.user.mgt.ui.UserAdminClient;
import org.wso2.carbon.utils.ServerConstants;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
public class ProjectDataProcessor {
private static final Log log = LogFactory.getLog(ProjectDataProcessor.class);
private Registry registry;
private UserAdminClient userManager;
public ProjectDataProcessor(HttpServletRequest request, ServletConfig config) {
HttpSession session = request.getSession();
String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE);
String backendServerURL = CarbonUIUtil.getServerURL(config.getServletContext(), session);
ConfigurationContext configContext = (ConfigurationContext) config.
getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT);
try {
this.registry = GovernanceUtils.getGovernanceUserRegistry(
new WSRegistryServiceClient(backendServerURL, cookie),
(String) session.getAttribute("logged-user"));
} catch (RegistryException e) {
log.error("Unable to obtain an instance of the registry.", e);
}
try {
this.userManager = new UserAdminClient(cookie, backendServerURL,
configContext);
} catch (Exception e) {
log.error("Unable to create connection to User Manager", e);
}
}
public String getJSONTree() throws Exception {
String key = "projects";
GenericArtifactManager manager =
new GenericArtifactManager(registry, key);
GenericArtifact[] projects = manager.getAllGenericArtifacts();
List<Map> projectList = new LinkedList<Map>();
Map projectsMap = Collections.singletonMap("projects",
Collections.singletonMap("project", projectList));
if (projects != null) {
for (GenericArtifact project : projects) {
Map<String, Object> projectMap = new LinkedHashMap<String, Object>();
projectMap.put("name", project.getAttribute("overview_name"));
String projectManager = project.getAttribute("overview_projectManager");
projectMap.put("manager", projectManager);
String timeline_startDate = project.getAttribute("timeline_startDate");
if (timeline_startDate != null) {
projectMap.put("startdate", timeline_startDate);
}
String timeline_endDate = project.getAttribute("timeline_endDate");
if (timeline_endDate != null) {
projectMap.put("enddate", timeline_endDate);
}
String cost_actual = project.getAttribute("cost_actual");
if (cost_actual != null) {
projectMap.put("cost", cost_actual);
}
String plan_issueTracker = project.getAttribute("plan_issueTracker");
if (plan_issueTracker != null) {
projectMap.put("jira", plan_issueTracker);
}
List<Map> roleList = new LinkedList<Map>();
projectMap.put("roles", Collections.singletonMap("role", roleList));
String members_roles = project.getAttribute("members_roles");
if (members_roles != null) {
String[] roles = members_roles.split(",");
for (String role : roles) {
Map<String, Object> roleMap = new LinkedHashMap<String, Object>();
roleMap.put("name", role);
List<Map> memberList = new LinkedList<Map>();
roleMap.put("member", memberList);
FlaggedName[] usersOfRole = userManager.getUsersOfRole(role, "*", -1);
for (FlaggedName flaggedName : usersOfRole) {
if (flaggedName.getSelected()) {
memberList.add(Collections.singletonMap("name",
flaggedName.getItemName()));
}
}
roleList.add(roleMap);
}
}
Map<String, Object> roleMap = new LinkedHashMap<String, Object>();
roleMap.put("name", "manager");
Map<String, Object> memberMap = new LinkedHashMap<String, Object>();
roleMap.put("member", Collections.singletonMap("name", projectManager));
roleList.add(roleMap);
String[] assets = project.getAttributes("assets_entry");
if (assets != null) {
List<String> policies = new LinkedList<String>();
List<String> services = new LinkedList<String>();
for (String asset : assets) {
String[] temp = asset.split(":");
if (temp.length == 2) {
if (temp[0].equals("Service")) {
services.add(temp[1]);
} else if (temp[0].equals("Policy")) {
policies.add(RegistryUtils.getResourceName(temp[1]));
}
}
}
List<Map> policyList = new LinkedList<Map>();
projectMap.put("policies", Collections.singletonMap("policy", policyList));
for (String policy : policies) {
Map<String, Object> policyMap = new LinkedHashMap<String, Object>();
policyMap.put("name", policy);
policyList.add(policyMap);
}
List<Map> serviceList = new LinkedList<Map>();
Map<String, List<Map>> versionMap = new LinkedHashMap<String, List<Map>>();
for (String service : services) {
Service artifact =
(Service) GovernanceUtils.retrieveGovernanceArtifactByPath(
registry, service);
Policy[] attachedPolicies = artifact.getAttachedPolicies();
List<String> enforcedPolicies = new LinkedList<String>();
if (attachedPolicies != null && attachedPolicies.length >= 0 &&
policies.size() > 0) {
for (Policy policy : attachedPolicies) {
String policyName = RegistryUtils.getResourceName(
policy.getPath());
if (policies.contains(policyName)) {
enforcedPolicies.add(policyName);
if (enforcedPolicies.size() == policies.size()) {
break;
}
}
}
}
String name = artifact.getQName().getLocalPart();
String version = artifact.getAttribute("overview_version");
List<String> nonEnforcedPolicies = new LinkedList<String>(policies);
nonEnforcedPolicies.removeAll(enforcedPolicies);
List<Map> servicePolicies = new LinkedList<Map>();
for (String entry : enforcedPolicies) {
Map<String, String> enforcement = new HashMap<String, String>();
enforcement.put("name", entry);
enforcement.put("policyEnforcement", "yes");
servicePolicies.add(enforcement);
}
for (String entry : nonEnforcedPolicies) {
Map<String, String> enforcement = new HashMap<String, String>();
enforcement.put("name", entry);
enforcement.put("policyEnforcement", "no");
servicePolicies.add(enforcement);
}
Map<String, Object> temp = new LinkedHashMap<String, Object>();
temp.put("name", version);
temp.put("policy", servicePolicies);
if (versionMap.containsKey(name)) {
versionMap.get(name).add(temp);
} else {
LinkedList<Map> value = new LinkedList<Map>();
value.add(temp);
versionMap.put(name, value);
}
}
projectMap.put("services", Collections.singletonMap("service", serviceList));
for (Map.Entry<String, List<Map>> e : versionMap.entrySet()) {
Map<String, Object> temp = new HashMap<String, Object>();
temp.put("name", e.getKey());
temp.put("version", e.getValue());
serviceList.add(temp);
}
}
String[] products = project.getAttributes("products_entry");
if (products != null) {
List<String> applications = new LinkedList<String>();
List<String> processes = new LinkedList<String>();
for (String product : products) {
String[] temp = product.split(":");
if (temp.length == 2) {
if (temp[0].equals("Application")) {
applications.add(RegistryUtils.getResourceName(
RegistryUtils.getParentPath(temp[1])));
} else if (temp[0].equals("Process")) {
processes.add(RegistryUtils.getResourceName(
RegistryUtils.getParentPath(temp[1])));
}
}
}
Map<String, Map> productMap = new HashMap<String, Map>();
projectMap.put("production", productMap);
List<Map> applicationList = new LinkedList<Map>();
productMap.put("applications", Collections.singletonMap("application",
applicationList));
for (String application : applications) {
Map<String, Object> applicationMap = new LinkedHashMap<String, Object>();
applicationMap.put("name", application);
applicationList.add(applicationMap);
}
List<Map> processList = new LinkedList<Map>();
productMap.put("processes", Collections.singletonMap("process", processList));
for (String process : processes) {
Map<String, Object> processMap = new LinkedHashMap<String, Object>();
processMap.put("name", process);
processList.add(processMap);
}
}
projectList.add(projectMap);
}
}
JSONObject object = new JSONObject(projectsMap);
return object.toString();
}
}