ATLAS-1819: V2 API to get entity with classification returns 500
Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/0001-ATLAS-1668-updated-UI-to-exclude-terms-from-tag-UI-e.patch b/0001-ATLAS-1668-updated-UI-to-exclude-terms-from-tag-UI-e.patch
new file mode 100644
index 0000000..7fe4281
--- /dev/null
+++ b/0001-ATLAS-1668-updated-UI-to-exclude-terms-from-tag-UI-e.patch
@@ -0,0 +1,147 @@
+From 46485ba13cf8dce280389ba872d357b23ffcebd6 Mon Sep 17 00:00:00 2001
+From: kevalbhatt <kbhatt@apache.org>
+Date: Fri, 10 Mar 2017 18:14:02 +0530
+Subject: [PATCH] ATLAS-1668: updated UI to exclude terms from tag UI elements
+
+Signed-off-by: Madhan Neethiraj <madhan@apache.org>
+(cherry picked from commit e0145ffd40c08054cea7073239541879447794b4)
+---
+ .../business_catalog/AddTermToEntityLayoutView.js | 6 +++---
+ .../js/views/business_catalog/TreeLayoutView.js | 1 -
+ .../public/js/views/search/SearchLayoutView.js | 8 ++++++--
+ .../public/js/views/search/SearchResultLayoutView.js | 2 +-
+ .../public/js/views/tag/CreateTagLayoutView.js | 6 +++++-
+ dashboardv2/public/js/views/tag/TagLayoutView.js | 19 +++++++++----------
+ dashboardv2/public/js/views/tag/addTagModalView.js | 3 +++
+ 7 files changed, 27 insertions(+), 18 deletions(-)
+
+diff --git a/dashboardv2/public/js/views/business_catalog/AddTermToEntityLayoutView.js b/dashboardv2/public/js/views/business_catalog/AddTermToEntityLayoutView.js
+index dd45e488..0212efe1 100644
+--- a/dashboardv2/public/js/views/business_catalog/AddTermToEntityLayoutView.js
++++ b/dashboardv2/public/js/views/business_catalog/AddTermToEntityLayoutView.js
+@@ -74,9 +74,9 @@ define(['require',
+ }
+ var obj = {
+ termName: termName,
+- guid: that.multiple[i].id.id,
+- deletedEntity: Enums.entityStateReadOnly[that.multiple[i].id.state],
+- entityName: that.multiple[i].model.get('name')
++ guid: that.multiple[i].id,
++ deletedEntity: Enums.entityStateReadOnly[that.multiple[i].model.status],
++ entityName: Utils.getName(that.multiple[i].model)
+ };
+ if (obj.deletedEntity) {
+ Utils.notifyError({
+diff --git a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
+index 0bca0df7..998c8f42 100644
+--- a/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
++++ b/dashboardv2/public/js/views/business_catalog/TreeLayoutView.js
+@@ -377,7 +377,6 @@ define(['require',
+ }
+ var name = Utils.checkTagOrTerm(model.get('name'), true);
+ if (name.name) {
+- // data-name="<space>'<tagName>'" Space is required for DSL search Input
+ if (that.viewBased) {
+ parentLi = '<div class="tools"><i class="fa fa-refresh fa-spin-custom taxanomyloader"></i><i class="fa fa-ellipsis-h termPopover"></i></div><i class="fa fa-angle-right toggleArrow" data-id="expandArrow" data-href="' + hrefUrl + '"></i><a href="javascript:void(0)" data-href="' + hrefUrl + '" data-name="`' + model.get('name') + '`">' + name.name + '</a>';
+ } else {
+diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js b/dashboardv2/public/js/views/search/SearchLayoutView.js
+index d3a90305..e68f8c06 100644
+--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
++++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
+@@ -172,11 +172,15 @@ define(['require',
+ return Utils.getName(model.toJSON(), 'name').toLowerCase();
+ }
+ this.typeHeaders.fullCollection.sort().each(function(model) {
++ var name = Utils.getName(model.toJSON(), 'name');
+ if (model.get('category') == 'ENTITY') {
+- typeStr += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
++ typeStr += '<option>' + (name) + '</option>';
+ }
+ if (model.get('category') == 'CLASSIFICATION') {
+- tagStr += '<option>' + (Utils.getName(model.toJSON(), 'name')) + '</option>';
++ var checkTagOrTerm = Utils.checkTagOrTerm(name);
++ if (checkTagOrTerm.tag) {
++ tagStr += '<option>' + (name) + '</option>';
++ }
+ }
+ });
+ that.ui.typeLov.html(typeStr);
+diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+index d2a3b51d..3446a670 100644
+--- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js
++++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js
+@@ -294,7 +294,7 @@ define(['require',
+ if (Globals.entityCreate && Globals.entityTypeConfList && Utils.getUrlState.isSearchTab()) {
+ createEntityTag = "<p>If you do not find the entity in search result below then you can" + '<a href="javascript:void(0)" data-id="createEntity"> create new entity</a></p>';
+ }
+- that.$('.searchResult').html(resultData + multiAssignDataTag + multiAssignDataTerm + createEntityTag);
++ that.$('.searchResult').html(resultData + multiAssignDataTerm + multiAssignDataTag + createEntityTag);
+ },
+ silent: true,
+ reset: true
+diff --git a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
+index 957a056e..34fa1147 100644
+--- a/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
++++ b/dashboardv2/public/js/views/tag/CreateTagLayoutView.js
+@@ -98,7 +98,11 @@ define(['require',
+ that = this;
+ this.ui.parentTag.empty();
+ this.tagCollection.fullCollection.each(function(val) {
+- str += '<option>' + (Utils.getName(val.toJSON())) + '</option>';
++ var name = Utils.getName(val.toJSON()),
++ checkTagOrTerm = Utils.checkTagOrTerm(name);
++ if (checkTagOrTerm.tag) {
++ str += '<option>' + (name) + '</option>';
++ }
+ });
+ that.ui.parentTag.html(str);
+ // IE9 support
+diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
+index e6b20655..5311ad1b 100644
+--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
++++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
+@@ -144,18 +144,17 @@ define(['require',
+ };
+ that.collection.fullCollection.sort().each(function(model) {
+ var name = Utils.getName(model.toJSON(), 'name');
+- if (name.indexOf(".") > -1) {
+- return;
+- }
+- if (searchString) {
+- if (name.search(new RegExp(searchString, "i")) != -1) {
+- // data-name="<space>'<tagName>'" Space is required for DSL search Input
+- str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '" data-name=" `' + name + '`" >' + name + '</a></li>';
++ var checkTagOrTerm = Utils.checkTagOrTerm(name);
++ if (checkTagOrTerm.tag) {
++ if (searchString) {
++ if (name.search(new RegExp(searchString, "i")) != -1) {
++ str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '" data-name="`' + name + '`" >' + name + '</a></li>';
++ } else {
++ return;
++ }
+ } else {
+- return;
++ str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '" data-name="`' + name + '`">' + name + '</a></li>';
+ }
+- } else {
+- str += '<li class="parent-node" data-id="tags"><div class="tools"><i class="fa fa-ellipsis-h tagPopover"></i></div><a href="#!/tag/tagAttribute/' + name + '" data-name=" `' + name + '`">' + name + '</a></li>';
+ }
+ });
+ this.ui.tagsParent.empty().html(str);
+diff --git a/dashboardv2/public/js/views/tag/addTagModalView.js b/dashboardv2/public/js/views/tag/addTagModalView.js
+index 559b2d57..cda5cf6c 100644
+--- a/dashboardv2/public/js/views/tag/addTagModalView.js
++++ b/dashboardv2/public/js/views/tag/addTagModalView.js
+@@ -193,6 +193,9 @@ define(['require',
+ var str = '<option selected="selected" disabled="disabled">-- Select a tag from the dropdown list --</option>';
+ this.collection.fullCollection.sort().each(function(obj, key) {
+ var name = Utils.getName(obj.toJSON(), 'name');
++ if (name === "TaxonomyTerm") {
++ return;
++ }
+ // using obj.get('name') insted of name variable because if html is presen in name then escaped name will not found in tagList.
+ if (_.indexOf(that.tagList, obj.get('name')) === -1) {
+ str += '<option>' + name + '</option>';
+--
+2.11.0 (Apple Git-81)
+
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
index 075b9b6..da6d636 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java
@@ -275,6 +275,11 @@
}
List<AtlasClassification> classifications = getClassifications(instanceVertex, classificationName);
+
+ if(CollectionUtils.isEmpty(classifications)) {
+ throw new AtlasBaseException(AtlasErrorCode.CLASSIFICATION_NOT_FOUND, classificationName);
+ }
+
return classifications.get(0);
}
@@ -550,4 +555,4 @@
private Object getVertexAttribute(AtlasVertex vertex, AtlasAttribute attribute) throws AtlasBaseException {
return vertex != null && attribute != null ? mapVertexToAttribute(vertex, attribute, null) : null;
}
-}
\ No newline at end of file
+}