From ccbfe88d9186246ca6877763a3251804228678c8 Mon Sep 17 00:00:00 2001 From: Seva Ostapenko Date: Thu, 8 Feb 2018 16:27:50 -0500 Subject: [PATCH] KYLIN-3223 - Query for the list of hybrid cubes results in NPE --- .../apache/kylin/rest/service/HybridService.java | 49 +++++++++++++++------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/HybridService.java b/server-base/src/main/java/org/apache/kylin/rest/service/HybridService.java index de20e7c..eebc991 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/HybridService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/HybridService.java @@ -19,7 +19,6 @@ package org.apache.kylin.rest.service; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.apache.commons.lang.StringUtils; @@ -35,6 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.security.access.AccessDeniedException; @Component("hybridService") public class HybridService extends BasicService { @@ -113,32 +113,51 @@ public class HybridService extends BasicService { } public List listHybrids(final String projectName, final String modelName) { - aclEvaluate.checkProjectReadPermission(projectName); - ProjectInstance project = (null != projectName) ? getProjectManager().getProject(projectName) : null; - List hybridsInProject = new ArrayList(); - + List allHybrids = new ArrayList(); if (StringUtils.isEmpty(projectName)) { - hybridsInProject = new ArrayList(getHybridManager().listHybridInstances()); - } else if (project == null) { - return Collections.emptyList(); + List allProjectInstances = getProjectManager().listAllProjects(); + List readableProjects = new ArrayList(); + for (ProjectInstance projectInstance : allProjectInstances) { + if (projectInstance == null) { + continue; + } + boolean hasReadAccess = false; + try { + hasReadAccess = aclEvaluate.hasProjectReadPermission(projectInstance); + } catch (AccessDeniedException e) { + //ignore to continue + } + if (hasReadAccess) { + readableProjects.add(projectInstance); + } + } + for (ProjectInstance projectInstance : readableProjects) { + List realizationEntries = projectInstance.getRealizationEntries(RealizationType.HYBRID); + if (realizationEntries != null) { + for (RealizationEntry entry : realizationEntries) { + HybridInstance instance = getHybridManager().getHybridInstance(entry.getRealization()); + allHybrids.add(instance); + } + } + } } else { - List realizationEntries = project.getRealizationEntries(RealizationType.HYBRID); + aclEvaluate.checkProjectReadPermission(projectName); + ProjectInstance projectInstance = getProjectManager().getProject(projectName); + List realizationEntries = projectInstance.getRealizationEntries(RealizationType.HYBRID); if (realizationEntries != null) { for (RealizationEntry entry : realizationEntries) { HybridInstance instance = getHybridManager().getHybridInstance(entry.getRealization()); - hybridsInProject.add(instance); + allHybrids.add(instance); } } } - DataModelDesc model = (null != modelName) ? getDataModelManager().getDataModelDesc(modelName) : null; if (StringUtils.isEmpty(modelName)) { - return hybridsInProject; - } else if (model == null) { - return Collections.emptyList(); + return allHybrids; } else { + DataModelDesc model = getMetadataManager().getDataModelDesc(modelName); List hybridsInModel = new ArrayList(); - for (HybridInstance hybridInstance : hybridsInProject) { + for (HybridInstance hybridInstance : allHybrids) { boolean hybridInModel = false; for (RealizationEntry entry : hybridInstance.getRealizationEntries()) { CubeDesc cubeDesc = getCubeDescManager().getCubeDesc(entry.getRealization()); -- 1.8.3.1