/* | |
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. | |
*/ | |
solrAdminApp.controller('AnalysisController', | |
function($scope, $location, $routeParams, Luke, Analysis, Constants) { | |
$scope.resetMenu("analysis", Constants.IS_COLLECTION_PAGE); | |
$scope.refresh = function() { | |
Luke.schema({core: $routeParams.core}, function(data) { | |
$scope.fieldsAndTypes = []; | |
for (var field in data.schema.fields) { | |
$scope.fieldsAndTypes.push({ | |
group: "Fields", | |
value: "fieldname=" + field, | |
label: field}); | |
} | |
for (var type in data.schema.types) { | |
$scope.fieldsAndTypes.push({ | |
group: "Types", | |
value: "fieldtype=" + type, | |
label: type}); | |
} | |
$scope.core = $routeParams.core; | |
}); | |
$scope.parseQueryString(); | |
// @todo - set defaultSearchField either to context["analysis.fieldname"] or context["analysis.fieldtype"] | |
}; | |
$scope.verbose = true; | |
var getShortComponentName = function(longname) { | |
var short = -1 !== longname.indexOf( '$' ) | |
? longname.split( '$' )[1] | |
: longname.split( '.' ).pop(); | |
return short.match( /[A-Z]/g ).join( '' ); | |
}; | |
var getCaptionsForComponent = function(data) { | |
var captions = []; | |
for (var key in data[0]) { | |
key = key.replace(/.*#/,''); | |
if (key != "match" && key!="positionHistory") { | |
captions.push(key.replace(/.*#/,'')); | |
} | |
} | |
return captions; | |
}; | |
var getTokensForComponent = function(data) { | |
var tokens = []; | |
var previousPosition = 0; | |
var index=0; | |
for (var i in data) { | |
var tokenhash = data[i]; | |
var positionDifference = tokenhash.position - previousPosition; | |
for (var j=positionDifference; j>1; j--) { | |
tokens.push({position: tokenhash.position - j+1, blank:true, index:index++}); | |
} | |
var token = {position: tokenhash.position, keys:[], index:index++}; | |
for (key in tokenhash) { | |
if (key == "match" || key=="positionHistory") { | |
//@ todo do something | |
} else { | |
token.keys.push({name:key, value:tokenhash[key]}); | |
} | |
} | |
tokens.push(token); | |
previousPosition = tokenhash.position; | |
} | |
return tokens; | |
}; | |
var extractComponents = function(data, result, name) { | |
if (data) { | |
result[name] = []; | |
for (var i = 0; i < data.length; i += 2) { | |
var component = { | |
name: data[i], | |
short: getShortComponentName(data[i]), | |
captions: getCaptionsForComponent(data[i + 1]), | |
tokens: getTokensForComponent(data[i + 1]) | |
}; | |
result[name].push(component); | |
} | |
} | |
}; | |
var processAnalysisData = function(analysis, fieldOrType) { | |
var fieldname; | |
for (fieldname in analysis[fieldOrType]) {console.log(fieldname);break;} | |
var response = {}; | |
extractComponents(analysis[fieldOrType][fieldname].index, response, "index"); | |
extractComponents(analysis[fieldOrType][fieldname].query, response, "query"); | |
return response; | |
}; | |
$scope.updateQueryString = function() { | |
var parts = $scope.fieldOrType.split("="); | |
var fieldOrType = parts[0]; | |
var name = parts[1]; | |
if ($scope.indexText) { | |
$location.search("analysis.fieldvalue", $scope.indexText); | |
} else if ($location.search()["analysis.fieldvalue"]) { | |
$location.search("analysis.fieldvalue", null); | |
} | |
if ($scope.queryText) { | |
$location.search("analysis.query", $scope.queryText); | |
} else if ($location.search()["analysis.query"]) { | |
$location.search("analysis.query", null); | |
} | |
if (fieldOrType == "fieldname") { | |
$location.search("analysis.fieldname", name); | |
$location.search("analysis.fieldtype", null); | |
} else { | |
$location.search("analysis.fieldtype", name); | |
$location.search("analysis.fieldname", null); | |
} | |
$location.search("verbose_output", $scope.verbose ? "1" : "0"); | |
}; | |
$scope.parseQueryString = function () { | |
var params = {}; | |
var search = $location.search(); | |
if (Object.keys(search).length == 0) { | |
return; | |
} | |
for (var key in search) { | |
params[key]=search[key]; | |
} | |
$scope.indexText = search["analysis.fieldvalue"]; | |
$scope.queryText = search["analysis.query"]; | |
if (search["analysis.fieldname"]) { | |
$scope.fieldOrType = "fieldname=" + search["analysis.fieldname"]; | |
$scope.schemaBrowserUrl = "field=" + search["analysis.fieldname"]; | |
} else { | |
$scope.fieldOrType = "fieldtype=" + search["analysis.fieldtype"]; | |
$scope.schemaBrowserUrl = "type=" + search["analysis.fieldtype"]; | |
} | |
if (search["verbose_output"] == undefined) { | |
$scope.verbose = true; | |
} else { | |
$scope.verbose = search["verbose_output"] == "1"; | |
} | |
if ($scope.fieldOrType || $scope.indexText || $scope.queryText) { | |
params.core = $routeParams.core; | |
var parts = $scope.fieldOrType.split("="); | |
var fieldOrType = parts[0] == "fieldname" ? "field_names" : "field_types"; | |
Analysis.field(params, function(data) { | |
$scope.result = processAnalysisData(data.analysis, fieldOrType); | |
}); | |
} | |
}; | |
$scope.changeFieldOrType = function() { | |
var parts = $scope.fieldOrType.split("="); | |
if (parts[0]=='fieldname') { | |
$scope.schemaBrowserUrl = "field=" + parts[1]; | |
} else { | |
$scope.schemaBrowserUrl = "type=" + parts[1]; | |
} | |
}; | |
$scope.toggleVerbose = function() { | |
$scope.verbose = !$scope.verbose; | |
$scope.updateQueryString(); | |
}; | |
$scope.refresh(); | |
} | |
); | |
/*************** | |
function(error) { | |
if (error.status == 404) { | |
$scope.isHandlerMissing = true; | |
} else { | |
$scope.analysisError = error.error.msg; | |
} | |
****/ |