blob: 421f7eab6d4d03b7b87953ae72be504e00462ba9 [file] [log] [blame]
/**
* 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
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import AppDispatcher from '../dispatcher/AppDispatcher';
import AdhocQueryConstants from '../constants/AdhocQueryConstants';
import AdhocQueryAdapter from '../adapters/AdhocQueryAdapter';
import ErrorParser from '../utils/ErrorParser';
import _ from 'lodash';
function _executeQuery (secretToken, query, queryName) {
AdhocQueryAdapter.executeQuery(secretToken, query, queryName)
.then(queryHandle => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE,
payload: { queryHandle: queryHandle.lensAPIResult &&
queryHandle.lensAPIResult.data &&
queryHandle.lensAPIResult.data.handleId }
});
}, (error) => {
// error details contain array of objects {code, message}
var errorDetails = ErrorParser.getMessage(error);
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE_FAILED,
payload: {
type: 'Error',
texts: errorDetails
}
});
});
}
function _saveQuery (secretToken, user, query, options) {
AdhocQueryAdapter.saveQuery(secretToken, user, query, options)
.then(response => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SAVE_QUERY_SUCCESS,
payload: {
type: 'Success',
text: 'Query was successfully saved!',
id: response.resourceModifiedResponse && response.resourceModifiedResponse.id
}
});
}, error => {
error = error.lensAPIResult.error;
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SAVE_QUERY_FAILED,
payload: {type: 'Error', text: error.code + ': ' + error.message}
});
}).catch(e => { console.error(e); });
}
function _getTables (secretToken, database) {
AdhocQueryAdapter.getTables(secretToken, database)
.then(function (tables) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_TABLES,
payload: { tables: tables, database: database }
});
}, function (error) {
// propagating the error message, couldn't fetch cubes
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_TABLES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
}
function _getCubes (secretToken, database) {
AdhocQueryAdapter.getCubes(secretToken)
.then(function (cubes) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_CUBES,
payload: { cubes: cubes, database: database }
});
}, function (error) {
// propagating the error message, couldn't fetch cubes
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_CUBES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
}
let AdhocQueryActions = {
getDatabases (secretToken) {
AdhocQueryAdapter.getDatabases(secretToken)
.then(function (databases) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_DATABASES,
payload: { databases: databases }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_DATABASES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
setDatabase (secretToken, database) {
AdhocQueryAdapter.setDatabase(secretToken, database)
.then(function (success) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SELECT_DATABASE,
payload: { database: database }
});
_getTables(secretToken, database);
_getCubes(secretToken, database);
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SELECT_DATABASE_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getCubes: _getCubes,
getSavedQueries (secretToken, user, options) {
AdhocQueryAdapter.getSavedQueries(secretToken, user, options)
.then(savedQueries => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_SAVED_QUERIES,
payload: savedQueries
});
});
},
getSavedQueryById (secretToken, id) {
AdhocQueryAdapter.getSavedQueryById(secretToken, id)
.then(savedQuery => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_SAVED_QUERY,
payload: savedQuery
});
});
},
updateSavedQuery (secretToken, user, query, options, id) {
AdhocQueryAdapter.getParams(secretToken, query).then(response => {
let serverParams = response.parameterParserResponse.parameters
.map(item => item.name)
.sort();
let clientParams = options && options.parameters && options.parameters
.map(item => item.name)
.sort();
if (!clientParams) clientParams = [];
if (_.isEqual(serverParams, clientParams)) {
AdhocQueryAdapter.updateSavedQuery(secretToken, user, query, options, id)
.then(response => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SAVE_QUERY_SUCCESS,
payload: {
type: 'Success',
text: 'Query was successfully updated!',
id: response.resourceModifiedResponse && response.resourceModifiedResponse.id
}
});
}, error => {
error = error.lensAPIResult.error;
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.SAVE_QUERY_FAILED,
payload: {type: 'Error', text: error.code + ': ' + error.message}
});
}).catch(e => { console.error(e); });
} else {
// get parameters' meta
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_PARAMS_META,
payload: response.parameterParserResponse.parameters
});
}
});
},
saveQuery (secretToken, user, query, options) {
AdhocQueryAdapter.getParams(secretToken, query).then(response => {
let serverParams = response.parameterParserResponse.parameters
.map(item => item.name)
.sort();
let clientParams = options && options.parameters && options.parameters
.map(item => item.name)
.sort();
if (!clientParams) clientParams = [];
if (_.isEqual(serverParams, clientParams)) {
_saveQuery(secretToken, user, query, options);
} else {
// get parameters' meta
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_PARAMS_META,
payload: response.parameterParserResponse.parameters
});
}
}, error => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE_FAILED,
payload: {
type: 'Error',
text: 'Please enable Saved Queries feature in the LENS Server to proceed.'
}
});
});
},
// first calls parameters API and sees if the query has any params,
// as we can't run a query with params, it needs to be saved first.
runQuery (secretToken, query, queryName) {
AdhocQueryAdapter.getParams(secretToken, query).then(response => {
if (!response.parameterParserResponse.parameters) {
_executeQuery(secretToken, query, queryName);
} else {
// ask user to save the query maybe?
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE_FAILED,
payload: {
type: 'Error',
text: 'You can\'t run a query with parameters, save it first.'
}
});
}
}, error => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE_FAILED,
payload: {
type: 'Error',
text: 'Please enable Saved Queries feature in the LENS Server to proceed.'
}
});
});
},
getCubeDetails (secretToken, databaseName, cubeName) {
AdhocQueryAdapter.getCubeDetails(secretToken, cubeName)
.then(function (cubeDetails) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_CUBE_DETAILS,
payload: {database: databaseName, cubeDetails: cubeDetails }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_CUBE_DETAILS_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getQueries (secretToken, email, options) {
AdhocQueryAdapter.getQueries(secretToken, email, options)
.then(function (queries) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERIES,
payload: { queries: queries }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERIES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getQueryHandles (secretToken, email, options) {
AdhocQueryAdapter.getQueryHandles(secretToken, email, options)
.then(function (handles) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLES,
payload: { handles: handles }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getQueriesDetails (secretToken, handles) {
if (handles && handles.length) {
AdhocQueryAdapter.getQueriesDetails(secretToken, handles)
.then(function (queries) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERIES,
payload: {queries: queries}
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERIES_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
}
},
getQuery (secretToken, handle) {
AdhocQueryAdapter.getQuery(secretToken, handle)
.then(function (query) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY,
payload: { query: query.lensQuery }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getQueryResult (secretToken, handle, queryMode) {
AdhocQueryAdapter.getQueryResult(secretToken, handle, queryMode)
.then(function (result) {
let payload;
if (Object.prototype.toString.call(result).match('String')) {
// persistent
payload = { downloadURL: result, type: 'PERSISTENT', handle: handle };
} else if (Object.prototype.toString.call(result).match('Array')) {
payload = {
queryResult: result[0].inMemoryQueryResult,
columns: result[1].queryResultSetMetadata,
handle: handle,
type: 'INMEMORY'
};
}
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_RESULT,
payload: payload
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_RESULT_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
getTables: _getTables,
getTableDetails (secretToken, tableName, database) {
AdhocQueryAdapter.getTableDetails(secretToken, tableName, database)
.then(function (tableDetails) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_TABLE_DETAILS,
payload: { tableDetails: tableDetails, database: database }
});
}, function (error) {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_TABLE_DETAILS_FAILED,
payload: {
responseCode: error.status,
responseMessage: error.statusText
}
});
});
},
cancelQuery (secretToken, handle) {
AdhocQueryAdapter.cancelQuery(secretToken, handle);
// TODO finish this up
},
runSavedQuery (secretToken, id, params) {
AdhocQueryAdapter.runSavedQuery(secretToken, id, params)
.then(handle => {
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE,
payload: { queryHandle: handle }
});
}, (error) => {
error = error.lensAPIResult.error;
AppDispatcher.dispatch({
actionType: AdhocQueryConstants.RECEIVE_QUERY_HANDLE_FAILED,
payload: {
type: 'Error',
text: error.code + ': ' +
error.message
}
});
});
}
};
export default AdhocQueryActions;