You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by bi...@apache.org on 2018/02/09 02:51:27 UTC
kylin git commit: KYLIN-3223 - Query for the list of hybrid cubes
results in NPE
Repository: kylin
Updated Branches:
refs/heads/master 50435e114 -> 0655dbc38
KYLIN-3223 - Query for the list of hybrid cubes results in NPE
Signed-off-by: Billy Liu <bi...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0655dbc3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0655dbc3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0655dbc3
Branch: refs/heads/master
Commit: 0655dbc383790f61ef9b04cd23b6b6ebf5f2ff6e
Parents: 50435e1
Author: Seva Ostapenko <se...@anovadata.com>
Authored: Thu Feb 8 16:27:50 2018 -0500
Committer: Billy Liu <bi...@apache.org>
Committed: Fri Feb 9 10:51:17 2018 +0800
----------------------------------------------------------------------
.../kylin/rest/service/HybridService.java | 49 ++++++++++++++------
1 file changed, 34 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/0655dbc3/server-base/src/main/java/org/apache/kylin/rest/service/HybridService.java
----------------------------------------------------------------------
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<HybridInstance> listHybrids(final String projectName, final String modelName) {
- aclEvaluate.checkProjectReadPermission(projectName);
- ProjectInstance project = (null != projectName) ? getProjectManager().getProject(projectName) : null;
- List<HybridInstance> hybridsInProject = new ArrayList<HybridInstance>();
-
+ List<HybridInstance> allHybrids = new ArrayList<HybridInstance>();
if (StringUtils.isEmpty(projectName)) {
- hybridsInProject = new ArrayList(getHybridManager().listHybridInstances());
- } else if (project == null) {
- return Collections.emptyList();
+ List<ProjectInstance> allProjectInstances = getProjectManager().listAllProjects();
+ List<ProjectInstance> readableProjects = new ArrayList<ProjectInstance>();
+ 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<RealizationEntry> realizationEntries = projectInstance.getRealizationEntries(RealizationType.HYBRID);
+ if (realizationEntries != null) {
+ for (RealizationEntry entry : realizationEntries) {
+ HybridInstance instance = getHybridManager().getHybridInstance(entry.getRealization());
+ allHybrids.add(instance);
+ }
+ }
+ }
} else {
- List<RealizationEntry> realizationEntries = project.getRealizationEntries(RealizationType.HYBRID);
+ aclEvaluate.checkProjectReadPermission(projectName);
+ ProjectInstance projectInstance = getProjectManager().getProject(projectName);
+ List<RealizationEntry> 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<HybridInstance> hybridsInModel = new ArrayList<HybridInstance>();
- for (HybridInstance hybridInstance : hybridsInProject) {
+ for (HybridInstance hybridInstance : allHybrids) {
boolean hybridInModel = false;
for (RealizationEntry entry : hybridInstance.getRealizationEntries()) {
CubeDesc cubeDesc = getCubeDescManager().getCubeDesc(entry.getRealization());