You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by db...@apache.org on 2016/10/07 19:47:10 UTC
ambari git commit: AMBARI-18496. Include an option to download the
saved query in hive view. (Anita Gnanamalar Jebaraj via dipayanb)
Repository: ambari
Updated Branches:
refs/heads/branch-2.5 061693de1 -> 13d3b8b06
AMBARI-18496. Include an option to download the saved query in hive view. (Anita Gnanamalar Jebaraj via dipayanb)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/13d3b8b0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/13d3b8b0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/13d3b8b0
Branch: refs/heads/branch-2.5
Commit: 13d3b8b0616dd7203d25956ca198ea384f646204
Parents: 061693d
Author: Dipayan Bhowmick <di...@gmail.com>
Authored: Sat Oct 8 01:16:16 2016 +0530
Committer: Dipayan Bhowmick <di...@gmail.com>
Committed: Sat Oct 8 01:16:16 2016 +0530
----------------------------------------------------------------------
.../savedQueries/SavedQueryService.java | 47 +++++++++++++++++--
.../ui/hive-web/app/controllers/queries.js | 24 +++++++++-
.../ui/hive-web/app/initializers/i18n.js | 5 ++
.../savedQueries/SavedQueryService.java | 48 +++++++++++++++++---
.../ui/hive-web/app/controllers/queries.js | 22 ++++++++-
.../ui/hive-web/app/initializers/i18n.js | 5 +-
.../savedQueries/SavedQueryServiceTest.java | 16 +++++--
7 files changed, 149 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/resources/savedQueries/SavedQueryService.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/resources/savedQueries/SavedQueryService.java b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/resources/savedQueries/SavedQueryService.java
index ccc4512..9b844d6 100644
--- a/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/resources/savedQueries/SavedQueryService.java
+++ b/contrib/views/hive-next/src/main/java/org/apache/ambari/view/hive2/resources/savedQueries/SavedQueryService.java
@@ -37,7 +37,16 @@ import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.util.List;
/**
@@ -73,12 +82,40 @@ public class SavedQueryService extends BaseService {
@GET
@Path("{queryId}")
@Produces(MediaType.APPLICATION_JSON)
- public Response getOne(@PathParam("queryId") String queryId) {
+ public Response getOne(@PathParam("queryId") String queryId,
+ @QueryParam("op") String operation) {
try {
- SavedQuery savedQuery = getResourceManager().read(queryId);
- JSONObject object = new JSONObject();
- object.put("savedQuery", savedQuery);
- return Response.ok(object).build();
+ final SavedQuery savedQuery = getResourceManager().read(queryId);
+ if(operation.equals("download")) {
+ StreamingOutput stream = new StreamingOutput() {
+ @Override
+ public void write(OutputStream os) throws IOException, WebApplicationException {
+ Writer writer = new BufferedWriter(new OutputStreamWriter(os));
+ try {
+ BufferedReader br=new BufferedReader(new InputStreamReader(getSharedObjectsFactory().getHdfsApi().open(savedQuery.getQueryFile())));
+ String line;
+ line=br.readLine();
+ while (line != null){
+ writer.write(line+"\n");
+ line = br.readLine();
+ }
+ writer.flush();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ writer.close();
+ }
+ }
+ };
+ return Response.ok(stream).
+ type(MediaType.TEXT_PLAIN).
+ build();
+ }
+ else {
+ JSONObject object = new JSONObject();
+ object.put("savedQuery", savedQuery);
+ return Response.ok(object).build();
+ }
} catch (WebApplicationException ex) {
throw ex;
} catch (ItemNotFound itemNotFound) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive-next/src/main/resources/ui/hive-web/app/controllers/queries.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/resources/ui/hive-web/app/controllers/queries.js b/contrib/views/hive-next/src/main/resources/ui/hive-web/app/controllers/queries.js
index cbf6b42..4438c5a 100644
--- a/contrib/views/hive-next/src/main/resources/ui/hive-web/app/controllers/queries.js
+++ b/contrib/views/hive-next/src/main/resources/ui/hive-web/app/controllers/queries.js
@@ -1,4 +1,4 @@
-/**
+/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -60,7 +60,8 @@ export default Ember.ArrayController.extend(FilterableMixin, {
//row buttons
links: [
"buttons.history",
- "buttons.delete"
+ "buttons.delete",
+ "buttons.downloadQuery"
],
model: function () {
@@ -92,6 +93,25 @@ export default Ember.ArrayController.extend(FilterableMixin, {
});
break;
+ case "buttons.downloadQuery":
+ var self = this,
+ defer = Ember.RSVP.defer();
+ this.send('openModal',
+ 'modal-save',
+ {
+ heading: "modals.downloadQuery.heading",
+ text: savedQuery.get('title')+".hql",
+ defer: defer
+ });
+ defer.promise.then(function (text) {
+ var adapter = self.container.lookup('adapter:application').buildURL();
+ var a = document.createElement('a');
+ a.href = adapter + '/savedQueries/' + savedQuery.get('id') + '?op=download';
+ a.download = text;
+ document.body.appendChild(a);
+ a.click();
+ });
+ break;
}
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive-next/src/main/resources/ui/hive-web/app/initializers/i18n.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/src/main/resources/ui/hive-web/app/initializers/i18n.js b/contrib/views/hive-next/src/main/resources/ui/hive-web/app/initializers/i18n.js
index f7f7706..cc789e8 100644
--- a/contrib/views/hive-next/src/main/resources/ui/hive-web/app/initializers/i18n.js
+++ b/contrib/views/hive-next/src/main/resources/ui/hive-web/app/initializers/i18n.js
@@ -96,6 +96,10 @@ TRANSLATIONS = {
hdfs: 'Please enter save path and name'
},
+ downloadQuery: {
+ heading: 'Download Query'
+ },
+
changeTitle: {
heading: 'Rename worksheet'
},
@@ -189,6 +193,7 @@ TRANSLATIONS = {
explain: 'Explain',
saveAs: 'Save as...',
save: 'Save',
+ downloadQuery: 'Download',
newQuery: 'New Worksheet',
newUdf: 'New UDF',
history: 'History',
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryService.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryService.java b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryService.java
index 9ea19c6..4a5872c 100644
--- a/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryService.java
+++ b/contrib/views/hive/src/main/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryService.java
@@ -37,7 +37,15 @@ import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.util.List;
/**
@@ -73,12 +81,40 @@ public class SavedQueryService extends BaseService {
@GET
@Path("{queryId}")
@Produces(MediaType.APPLICATION_JSON)
- public Response getOne(@PathParam("queryId") String queryId) {
- try {
- SavedQuery savedQuery = getResourceManager().read(queryId);
- JSONObject object = new JSONObject();
- object.put("savedQuery", savedQuery);
- return Response.ok(object).build();
+ public Response getOne(@PathParam("queryId") String queryId,
+ @QueryParam("op") String operation) {
+ try {
+ final SavedQuery savedQuery = getResourceManager().read(queryId);
+ if(operation.equals("download")) {
+ StreamingOutput stream = new StreamingOutput() {
+ @Override
+ public void write(OutputStream os) throws IOException, WebApplicationException {
+ Writer writer = new BufferedWriter(new OutputStreamWriter(os));
+ try {
+ BufferedReader br=new BufferedReader(new InputStreamReader(getSharedObjectsFactory().getHdfsApi().open(savedQuery.getQueryFile())));
+ String line;
+ line=br.readLine();
+ while (line != null){
+ writer.write(line+"\n");
+ line = br.readLine();
+ }
+ writer.flush();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ } finally {
+ writer.close();
+ }
+ }
+ };
+ return Response.ok(stream).
+ type(MediaType.TEXT_PLAIN).
+ build();
+ }
+ else {
+ JSONObject object = new JSONObject();
+ object.put("savedQuery", savedQuery);
+ return Response.ok(object).build();
+ }
} catch (WebApplicationException ex) {
throw ex;
} catch (ItemNotFound itemNotFound) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive/src/main/resources/ui/hive-web/app/controllers/queries.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/controllers/queries.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/controllers/queries.js
index cbf6b42..4d82ae0 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/controllers/queries.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/controllers/queries.js
@@ -60,7 +60,8 @@ export default Ember.ArrayController.extend(FilterableMixin, {
//row buttons
links: [
"buttons.history",
- "buttons.delete"
+ "buttons.delete",
+ "buttons.downloadQuery"
],
model: function () {
@@ -92,6 +93,25 @@ export default Ember.ArrayController.extend(FilterableMixin, {
});
break;
+ case "buttons.downloadQuery":
+ var self = this,
+ defer = Ember.RSVP.defer();
+ this.send('openModal',
+ 'modal-save',
+ {
+ heading: "modals.downloadQuery.heading",
+ text: savedQuery.get('title') + ".hql",
+ defer: defer
+ });
+ defer.promise.then(function (text) {
+ var adapter = self.container.lookup('adapter:application').buildURL();
+ var a = document.createElement('a');
+ a.href = adapter + '/savedQueries/' + savedQuery.get('id') + '?op=download';
+ a.download = text;
+ document.body.appendChild(a);
+ a.click();
+ });
+ break;
}
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive/src/main/resources/ui/hive-web/app/initializers/i18n.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/main/resources/ui/hive-web/app/initializers/i18n.js b/contrib/views/hive/src/main/resources/ui/hive-web/app/initializers/i18n.js
index f7f7706..aca366f 100644
--- a/contrib/views/hive/src/main/resources/ui/hive-web/app/initializers/i18n.js
+++ b/contrib/views/hive/src/main/resources/ui/hive-web/app/initializers/i18n.js
@@ -95,7 +95,9 @@ TRANSLATIONS = {
csv: 'Download results as CSV',
hdfs: 'Please enter save path and name'
},
-
+ downloadQuery: {
+ heading: 'Download Query'
+ },
changeTitle: {
heading: 'Rename worksheet'
},
@@ -189,6 +191,7 @@ TRANSLATIONS = {
explain: 'Explain',
saveAs: 'Save as...',
save: 'Save',
+ downloadQuery: 'Download',
newQuery: 'New Worksheet',
newUdf: 'New UDF',
history: 'History',
http://git-wip-us.apache.org/repos/asf/ambari/blob/13d3b8b0/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryServiceTest.java
----------------------------------------------------------------------
diff --git a/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryServiceTest.java b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryServiceTest.java
index d55858f..68cb0c8 100644
--- a/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryServiceTest.java
+++ b/contrib/views/hive/src/test/java/org/apache/ambari/view/hive/resources/savedQueries/SavedQueryServiceTest.java
@@ -122,7 +122,7 @@ public class SavedQueryServiceTest extends HDFSTest {
@Test
public void notFound() {
thrown.expect(NotFoundFormattedException.class);
- savedQueryService.getOne("4242");
+ savedQueryService.getOne("4242", null);
}
@Test
@@ -137,7 +137,7 @@ public class SavedQueryServiceTest extends HDFSTest {
Response response = savedQueryService.update(request, String.valueOf(createdId));
Assert.assertEquals(204, response.getStatus());
- Response response2 = savedQueryService.getOne(String.valueOf(createdId));
+ Response response2 = savedQueryService.getOne(String.valueOf(createdId), "");
Assert.assertEquals(200, response2.getStatus());
JSONObject obj = ((JSONObject) response2.getEntity());
@@ -154,7 +154,7 @@ public class SavedQueryServiceTest extends HDFSTest {
Assert.assertEquals(204, response.getStatus());
thrown.expect(NotFoundFormattedException.class);
- savedQueryService.getOne(String.valueOf(createdId));
+ savedQueryService.getOne(String.valueOf(createdId),null);
}
@Test
@@ -178,4 +178,14 @@ public class SavedQueryServiceTest extends HDFSTest {
containsTitle = containsTitle || item.getTitle().compareTo("Title 2") == 0;
Assert.assertTrue(containsTitle);
}
+ @Test
+ public void downloadQuery() {
+ Response created = doCreateSavedQuery();
+ Object createdId = ((SavedQuery) ((JSONObject) created.getEntity()).get("savedQuery")).getId();
+ SavedQueryService.SavedQueryRequest request = new SavedQueryService.SavedQueryRequest();
+ request.savedQuery = new SavedQuery();
+ request.savedQuery.setTitle("Download Query");
+ Response response = savedQueryService.getOne(String.valueOf(createdId), "download");
+ Assert.assertEquals(200, response.getStatus());
+ }
}