/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.um.helper;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.core.web.dispaly.tree.ITreeParser;
import com.jinhe.tss.core.web.dispaly.tree.TreeNode;
import com.jinhe.tss.um.UMConstants;
import com.jinhe.tss.um.entity.Application;
import com.jinhe.tss.um.entity.Operation;
import com.jinhe.tss.um.entity.ResourceType;
/**
* 应用系统,资源类型树型结构解析器。
* 注:此处只显示了平台应用及其所属的资源类型和权限操作选项,
* 其他应用不在本视图里显示(在其他用户组根节点下显示)。
*/
public class ApplicationTreeParser implements ITreeParser {
public TreeNode parse(Object data) {
Object[] datas = (Object[]) data;
List<?> apps = (List<?>) datas[0];
List<?> resourceTypes = (List<?>) datas[1];
List<?> operations = (List<?>) datas[2];
TreeNode root = new TreeNode();
if ( EasyUtils.isNullOrEmpty(apps) ) {
return root;
}
Application app = new Application();
app.setId(Long.valueOf(UMConstants.PLATFORM_SYSTEM_APP));
app.setName(UMConstants.PLATFORM_SYSTEM_NAME);
app.setApplicationType(UMConstants.PLATFORM_SYSTEM_APP);
TreeNode platformParent = new TreeNode(app);
Map<ResourceType, TreeNode> rtTreeNodeMap = new LinkedHashMap<ResourceType, TreeNode>();
if (resourceTypes != null && operations != null) {
for (Object resourceTypeObj : resourceTypes) {
ResourceType resourceType = (ResourceType) resourceTypeObj;
TreeNode resourceTypeNode = new TreeNode(resourceType);
rtTreeNodeMap.put(resourceType, resourceTypeNode);
for (Object operationObj : operations) {
Operation operation = (Operation) operationObj;
TreeNode operationNode = new TreeNode(operation);
if (resourceType.getApplicationId().equals(operation.getApplicationId())
&& resourceType.getResourceTypeId().equals(operation.getResourceTypeId())) {
resourceTypeNode.addChild(operationNode);
}
}
}
}
for (Object appObj : apps) {
Application application = (Application) appObj;
TreeNode appNode = new TreeNode(application);
for(ResourceType resourceType : rtTreeNodeMap.keySet()) {
if (application.getApplicationId().equals(resourceType.getApplicationId())) {
appNode.addChild(rtTreeNodeMap.get(resourceType));
}
}
if (UMConstants.PLATFORM_SYSTEM_APP.equals(application.getApplicationType())) {
platformParent.addChild(appNode);
}
}
root.addChild(platformParent);
return root;
}
}