Commit a05f752d by Suma Shivaprasad

ATLAS-731 Remove dashboard module in Atlas, replaced by dashboardv2 (kevalbhatt18 via sumasai)

parent b15aa400
{
"directory": "dist/lib/",
"storage": {
"packages": ".bower-cache",
"registry": ".bower-registry"
},
"tmp": ".bower-tmp"
}
# 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.
.DS_Store
.bower-*/
.idea/
node_modules/
lib/
public/lib
public/dist
*.log
*.tgz
node/
dist/
**/app.min.js
\ No newline at end of file
/*
* 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.
*/
test/coverage/**
\ No newline at end of file
/*
* 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.
*/
{
"browser": true, // Standard browser globals e.g. `window`, `document`.
"bitwise": false, // Prohibit bitwise operators (&, |, ^, etc.).
"camelcase": false, // Permit only camelcase for `var` and `object indexes`.
"curly": false, // Require {} for every new block or scope.
"devel": true, // Allow development statements e.g. `console.log();`.
"esnext": true, // Allow ES.next specific features such as `const` and `let`.
"eqeqeq": true, // Require triple equals i.e. `===`.
"immed": true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );`
"indent": false, // Specify indentation spacing
"latedef": true, // Prohibit variable use before definition.
"node": true, // Enable globals available when code is running inside of the NodeJS runtime environment.
"newcap": false, // Require capitalization of all constructor functions e.g. `new F()`.
"noarg": true, // Prohibit use of `arguments.caller` and `arguments.callee`.
"noempty": true, // Prohibit use of empty blocks.
"quotmark": false, // Define quotes to string values.
"regexp": true, // Prohibit `.` and `[^...]` in regular expressions.
"strict": true, // Require `use strict` pragma in every file.
"smarttabs": false, // Suppresses warnings about mixed tabs and spaces
"trailing": true, // Prohibit trailing whitespaces.
"undef": true, // Require all non-global variables be declared before they are used.
"unused": true, // Warn unused variables.
"globals": { // Globals variables.
"angular": true,
"$": false,
"baseUrl":true
},
"predef": [ // Extra globals.
"define",
"require",
"exports",
"module",
"spyOn",
"describe",
"xdescribe",
"before",
"beforeEach",
"after",
"afterEach",
"jasmine",
"it",
"xit",
"inject",
"expect",
"ngGridFlexibleHeightPlugin"
]
}
/*
* 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.
*/
# Apache Atlas
## Instructions
### Prerequisite
1. Nodejs (http://nodejs.org/download/)
2. ```npm install -g grunt-cli```
### Setup:
```
git clone $git-repo-url
git checkout master
cd dashboard/v2
npm install
grunt server
```
Server will start at:
<http://localhost:3010/>
{
"name": "atlas-metadata",
"description": "Apache Atlas",
"version": "1.0.0-SNAPSHOT",
"devDependencies": {
"angular": "~1.2.15",
"angular-resource": "~1.2.15",
"angular-cookies": "~1.2.15",
"angular-route": "~1.2.15",
"angular-sanitize": "~1.2.15",
"bootstrap": "~3.1.1",
"angular-bootstrap": "~0.12.0",
"angular-ui-router": "~0.2.13",
"d3": "~3.5.3",
"d3-tip": "~0.6.6",
"lodash": "~3.0.0",
"angular-ui-utils": "~0.1.1",
"font-awesome": "~4.2.0",
"closure-compiler": "https://dl.google.com/closure-compiler/compiler-20140814.zip",
"ng-closure-runner": "https://raw.github.com/angular/ng-closure-runner/v0.2.3/assets/ng-closure-runner.zip",
"jquery-ui": "1.10.4"
},
"resolutions": {
"d3": "~3.5.3"
}
}
/*
* 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.
*/
'use strict';
var git = require('git-rev');
module.exports = function(grunt) {
var classPathSep = (process.platform === "win32") ? ';' : ':',
gitHash = '',
pkg = grunt.file.readJSON('package.json'),
distPath = 'dist',
isDashboardDirectory = grunt.file.isDir('public'),
modulesPath = 'public/';
if (!isDashboardDirectory)
modulesPath = '../public/'
grunt.initConfig({
watch: {
options: {
livereload: 35729
},
js: {
files: ['public/**/*.js', '!public/lib/**', '!public/dist/**', '!public/js/app.min.js'],
tasks: ['shell']
},
html: {
files: ['public/**/*.html'],
tasks: ['copy:dist']
},
css: {
files: ['public/**/*.css'],
tasks: ['copy:dist']
},
image: {
files: ['public/**/*.{ico,gif,png}'],
tasks: ['copy:dist']
}
},
jshint: {
all: {
src: ['gruntfile.js', 'package.json', 'server.js', 'server/**/*.js', 'public/**/*.js', '!public/lib/**', '!public/dist/**', '!public/**/app.min.js'],
options: {
jshintrc: true
}
}
},
concurrent: {
tasks: ['watch', 'proxitserver'],
options: {
logConcurrentOutput: true
}
},
jsbeautifier: {
'default': {
src: ['<%= jshint.all.src %>', 'bower.json'],
options: {
js: {
preserveNewlines: true,
maxPreserveNewlines: 2
}
}
},
'build': {
src: '<%= jsbeautifier.default.src %>',
options: {
mode: 'VERIFY_ONLY',
js: '<%= jsbeautifier.default.options.js%>'
}
}
},
bower: {
install: {
options: {
verbose: true,
targetDir: '.bower-components'
}
}
},
dist: distPath + '/js/app.min.js',
modules: grunt.file.expand(
modulesPath + 'js/app.js',
modulesPath + 'js/config.js',
modulesPath + 'js/routes.js',
modulesPath + 'modules/**/*Module.js',
modulesPath + 'modules/**/*.js',
modulesPath + 'js/init.js'
).join(' '),
shell: {
min: {
command: 'java ' +
'-cp ' + distPath + '/lib/closure-compiler/compiler.jar' + classPathSep +
'' + distPath + '/lib/ng-closure-runner/ngcompiler.jar ' +
'org.angularjs.closurerunner.NgClosureRunner ' +
'--compilation_level SIMPLE_OPTIMIZATIONS ' +
//'--formatting PRETTY_PRINT ' +
'--language_in ECMASCRIPT5_STRICT ' +
'--angular_pass ' +
'--manage_closure_dependencies ' +
'--js <%= modules %> ' +
'--js_output_file <%= dist %>'
}
},
devUpdate: {
main: {
options: {
updateType: 'force'
}
}
},
compress: {
release: {
options: {
archive: function() {
return [pkg.name, pkg.version, gitHash].join('_') + '.tgz';
}
},
src: ['node_modules/**', 'package.json', 'server.js', 'server/**', 'public/**', '!public/js/**', '!public/modules/**/*.js']
}
},
copy: {
dist: {
expand: true,
cwd: modulesPath,
src: ['**', '!js/**/*.js', '!modules/**/*.js'],
dest: distPath
}
},
clean: {
build: [distPath],
options: {
force: true
}
},
proxit: {
dev: {
options: {
'port': 3010,
'verbose': true,
'hosts': [{
'hostnames': ['*'],
'routes': {
'/': distPath
}
}]
}
}
}
});
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', ['devUpdate', 'bower', 'jshint', 'jsbeautifier:default']);
grunt.registerTask('server', ['jshint', 'clean', 'bower', 'copy:dist', 'minify', 'concurrent']);
grunt.registerTask('build', ['copy:dist', 'minify']);
grunt.registerTask('minify', 'Minify the all js', function() {
var done = this.async();
grunt.task.run(['shell:min']);
done();
});
grunt.loadNpmTasks('proxit');
grunt.registerTask('proxitserver', 'Proxit', function() {
var done = this.async();
grunt.task.run(['proxit:dev']);
done();
});
grunt.registerTask('release', 'Create release package', function() {
var done = this.async();
git.short(function(str) {
gitHash = str;
grunt.task.run(['minify', 'compress:release']);
done();
});
});
};
{
"name": "atlas-metadata",
"description": "Apache Atlas",
"version": "0.5.0-incubating",
"private": true,
"repository": {
"type": "git",
"url": "https://git-wip-us.apache.org/repos/asf/incubator-atlas.git"
},
"engines": {
"node": "0.10.x",
"npm": "1.3.x"
},
"keywords": [
"Apache",
"Atlas",
"HortonWorks"
],
"dependencies": {
"body-parser": "^1.2.0",
"bower": "~1.3.1",
"compression": "^1.0.2",
"consolidate": "~0.10.0",
"cookie-parser": "^1.0.1",
"cookies": "~0.4.0",
"express": "~4.2.0",
"express-load": "^1.1.14",
"forever": "~0.11.1",
"lodash": "~2.4.1",
"method-override": "^1.0.0",
"morgan": "^1.0.1",
"path-extra": "~0.1.1",
"proxit": "^0.6.0",
"q": "~1.0.1",
"rc": "~0.3.4",
"serve-favicon": "^2.0.0",
"static-favicon": "^2.0.0-alpha",
"superagent": "^0.20.0",
"swig": "~1.3.2",
"view-helpers": "~0.1.4",
"grunt-contrib-clean": "~0.6.0"
},
"devDependencies": {
"git-rev": "^0.2.1",
"grunt": "~0.4.2",
"grunt-bower-task": "~0.4.0",
"grunt-cli": "~0.1.11",
"grunt-concurrent": "^1.0.0",
"grunt-contrib-compress": "^0.13.0",
"grunt-contrib-jshint": "^0.11.0",
"grunt-contrib-watch": "^0.6.0",
"grunt-dev-update": "^1.0.2",
"grunt-jsbeautifier": "^0.2.6",
"grunt-nodemon": "^0.4.0",
"grunt-shell": "^1.1.1",
"load-grunt-tasks": "^3.1.0",
"grunt-nginx": "~0.2.2",
"grunt-contrib-copy": "~0.8.0",
"grunt-contrib-clean": "~0.6.0",
"proxit": "~0.6.4"
}
}
<?xml version="1.0"?>
<!--
~ 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.
-->
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.atlas</groupId>
<artifactId>apache-atlas</artifactId>
<version>0.7-incubating-SNAPSHOT</version>
</parent>
<artifactId>atlas-dashboard</artifactId>
<description>Apache Atlas UI Application</description>
<name>Apache Atlas UI</name>
<packaging>war</packaging>
<url>http://atlas.incubator.apache.org</url>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<configuration>
<phase>validate</phase>
<workingDirectory>${project.build.directory}</workingDirectory>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<webResources>
<resource>
<directory>${project.build.directory}/dist</directory>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>validate</phase>
<configuration>
<outputDirectory>${basedir}/target/</outputDirectory>
<resources>
<resource>
<directory>${basedir}</directory>
<includes>
<include>package.json</include>
<include>.bowerrc</include>
<include>bower.json</include>
<include>gruntfile.js</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>${node.version}</nodeVersion>
<npmVersion>1.4.3</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>install bower</id>
<goals>
<goal>grunt</goal>
</goals>
<configuration>
<arguments>bower</arguments>
</configuration>
</execution>
<execution>
<id>npm remaining</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install --ignore-scripts</arguments>
</configuration>
</execution>
<execution>
<id>grunt dist</id>
<goals>
<goal>grunt</goal>
</goals>
<configuration>
<arguments>build</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
/*
* 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.
*/
div.separator {
position: relative;
font-size: 18px;
color: #aaa;
margin-top: 10px;
margin-bottom: 10px;
padding-top: 10px;
padding-bottom: 10px;
}
.breadcrumb{
padding: 8px !important;
margin-bottom: 10px !important;
border-radius: 0 !important;
background-color: #f5f5f5 !important;
border: 1px solid #e3e3e3;
}
.pointer{
cursor: pointer;
}
.alert{
border-radius: 0 !important;
}
span.separator {
display: block;
position: absolute;
left: 50%;
top: -2px;
margin-left: -25px;
background-color: #fff;
width: 50px;
text-align: center;
}
hr.separator {
background-color: #cdcdcd;
height: 1px;
margin-top: 0px !important;
margin-bottom: 0px !important;
}
.popover{
max-width: none !important;
}
.pointer {
cursor: pointer;
}
.form-control {
border-color: #5cbb5a;
border-width: 2px;
}
.small-txt {
color: #999999;
padding-left: 14px;
}
.mB20{
margin-bottom: 20px;
}
.padding0{
padding: 0 !important;
}
.paddingR0{
padding-right: 0 !important;
}
/* Header background */
header.navbar-top {
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333));
background-image: -webkit-linear-gradient(top, #555555, #333333);
background-image: -o-linear-gradient(top, #555555, #333333);
background-image: linear-gradient(to bottom, #555555, #333333);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#555555, endColorstr=#333333);
-webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
-moz-box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
box-shadow: inset 0 0 0 rgba(0, 0, 0, 0.1), 0 1px 10px rgba(0, 0, 0, 0.1);
max-height: 40px;
min-height: 40px;
}
header a.main-logo{
color: #ffffff;
font-size: 16px;
line-height: 40px;
padding: 2px 5px 0 15px;
text-shadow: 0 1px 0 #555555;
}
header a.main-logo:hover,header a.main-logo:focus{
text-decoration: none;
}
header ul.menu-bar li a{
line-height: 10px;
color: #c3c3c3;
}
header ul.menu-bar li a>i {
margin-right: 3px;
font-size: 12px;
}
header ul.menu-bar li a:hover{
color: #fff;
background: transparent;
}
header ul.menu-bar li a:focus{
background: transparent;
}
header ul.menu-bar li.active a{
color: #333333;
background-color: #ffffff;
-webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
}
/* Footer */
footer.navbar-bottom {
background-color: #fafafa;
border-top: solid 4px #444;
}
footer.navbar-bottom p {
color: #333333;
margin: 23px 10px 10px;
}
footer.navbar-bottom img {
padding-left: 5px;
margin-top: -21px;
}
/*=======================================================================================
Search Bar design
=======================================================================================*/
.main-search input{
height: 50px;
border-radius: 0px;
border: 1px solid #e3e3e3;
color: #414141;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
box-shadow: none;
}
.main-search .input-group-btn button{
border-radius: 0;
border-radius: 0;
padding: 14px 20px;
}
.main-search .search-type-large {
width: 95px!important;
}
.main-search select {
height: 50px!important;
padding-right: 0px;
margin-right: 0px;
width: 83px;
font-weight:bold;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor:pointer;
background: url('../img/select_arrow_img.png') no-repeat;
background-size: 22px 22px;
background-position: 54px 13px!important;
}
.search-type-large .form-control:focus {
border-color: #ccc;
box-shadow: none;
outline: 0 none;
}
/*=======================================================================================
Tags on Home Page design
=======================================================================================*/
.main-tags{
min-height: 20px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
.main-tags a{
background: transparent;
border: none;
padding:5px 10px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
color: #0088cc !important;
border-radius: 0 !important;
}
.main-tags a:hover{
color: #005580 !important;
background: #eeeeee !important;
}
.main-tags h4{
padding:0 10px;
}
.main-tags i{
font-size: 12px;
margin-right: 3px;
}
.main-tags .list-group-item.limit-size{
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;y
}
/*=======================================================================================
Search Bar design
=======================================================================================*/
.main-search input{
height: 50px;
border-radius: 2px;
border: 1px solid #e3e3e3;
color: #414141;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
box-shadow: none;
}
.main-search .input-group-btn button{
border-top-left-radius: 0;
border-bottom-left-radius: 0;
padding: 14px 20px;
}
/*=======================================================================================
Tags on Home Page design
=======================================================================================*/
.main-tags{
min-height: 20px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
.main-tags a{
background: transparent;
border: none;
padding:5px 10px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
color: #0088cc !important;
border-radius: 0 !important;
}
.main-tags a:hover{
color: #005580 !important;
background: #eeeeee !important;
}
.main-tags h4{
padding:0 10px;
}
.main-tags i{
font-size: 12px;
margin-right: 3px;
}
.pdLft15px
{
padding-left: 15px;
}
.mt10px {
margin-top: 10px;
}
.mt20px {
margin-top: 20px;
}
.search-spinner {
text-align: center;
}
.menu-link{
padding-left: 10px;
padding-right: 10px;
}
.btn-toggle
{
border: 1px solid #CCCCCC;
padding: 5px;
}
.word-break {
word-break: break-word;
}
.tab-search-tags {
max-width: 100px;
display: list-item;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;
float: left;
background: lightblue !important;
color: black !important;
margin: 4px !important;
padding-left: 7px !important;
padding-right: 7px !important;
}
.tabsearch-result {
max-width: 93%;
display: list-item;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;
}
.search-resultcount {
max-width: 500px;
display: list-item;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
text-transform: capitalize;
}
.maxwidth125px {
max-width: 125px !important;
}
.anchor-absolute {
position: absolute;
right: 4px;
}
.add-tag{
margin-top: -35px;
}
.tag-align{
text-align: center;
}
.h160 {
height: 160px !important;
}
.tag-attr{
font-weight:bold;
}
.zoom-buttons{
width:63px !important;
}
.graph{
overflow: hidden!important;
}
.notifier{
margin-right: 15px;
margin-left: -15px;
}
.main-tags .list-tag{
height: 640px;
overflow-y: scroll;
}
.filter-tag{
width: 95%;
padding: 3px;
margin-left: 6px;
margin-top: 3px;
margin-bottom: 3px;
}
.see-more {
font-weight: bold;
font-size: 16px;
}
\ No newline at end of file
/*
* 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.
*/
.d3-tip {
line-height: 1;
font-weight: bold;
padding: 12px;
background: rgba(0, 0, 0, 0.8);
color: #fff;
border-radius: 2px;
}
/* Creates a small triangle extender for the tooltip */
.d3-tip:after {
box-sizing: border-box;
display: inline;
font-size: 10px;
width: 100%;
line-height: 1;
color: rgba(0, 0, 0, 0.8);
content: "\25BC";
position: absolute;
text-align: center;
}
/* Style northward tooltips differently */
.d3-tip.n:after {
margin: -1px 0 0 0;
top: 100%;
left: 0;
}
\ No newline at end of file
/*
* 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.
*/
.tab-content .table-bordered {
border-top: none;
}
.details-page .nav-tabs>li.active>a,
.details-page .nav-tabs>li.active>a:focus,
.details-page .nav-tabs>li.active>a:hover,
.details-page .nav-tabs>li>a:hover {
border-radius: 0;
}
.details-page .nav-tabs>li.active>a,
.details-page .nav-tabs>li.active>a:focus{
border-radius: 0;
background: #F8F8F8;
}
.details-page .nav-tabs>li>a {
margin-right: 0px;
}
.details-page .table>thead:first-child>tr:first-child>th {
border-bottom-width: 1px;
}
.details-page .table td{
padding-left: 15px;
}
.details-page .table tr:nth-child(even) td{
padding-left: 15px;
background: #f9f9f9;
}
.details-page .table tr td:first-child{
font-weight: bold;
}
.details-page .table th{
padding-left: 15px;
background: #f8f8f8;
}
.details-page .lineage{
position: absolute;
width: 100%;
margin-top: 10px;
text-align: center;
z-index: -1;
}
.details-page .black{
color: #555;
}
\ No newline at end of file
/*
* 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.
*/
.link {
fill: none;
stroke: green;
stroke-width: 2px;
}
g text {
pointer-events: none;
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, 0 -1px 0 #fff, -1px 0 0 #fff;
text-align: center;
}
.d3-tip pre {
max-width: 400px;
}
div.lineage {
border-bottom: 2px solid #006600;
}
.edge-path path {
stroke: #333;
fill: #333;
stroke-width: 1.5px;
}
.lineage-viz {
margin: 0 auto;
overflow: hidden;
}
.lineage-viz button{
margin: 5px;
border-radius: 2px
}
.title-font{
font-size:12px!important;
}
.align-lineage{
text-align: center;
margin-top: 100px;
font-size: 24px;
}
/*
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.
*/
/* Generic */
body {
font-family: 'Raleway', sans-serif;
background-color: #f6f7fb;
color: #686868;
}
a {
color: #359f89;
}
header {
background-color: #fff;
border-bottom: 1px #e7e8ed solid;
}
textarea:focus, button:focus {
outline: none !important;
}
textarea {
resize: none;
}
/* Bootstrap Extended */
.form-control:focus {
box-shadow: none;
}
.breadcrumb {
padding: 8px 25px;
background-color: transparent;
margin-bottom: 0px;
font-weight: 600;
line-height: 44px;
}
.breadcrumb>li+li:before {
padding: 0 10px;
font-family: FontAwesome;
color: #686868;
content: "\f105";
}
.well {
background-color: #f6f7fa;
border: 1px solid #e8e9ef;
}
/* Header */
.main-search .form-control {
border: none;
border-left: 1px #e7e8ed solid;
border-radius: 0px;
box-shadow: none;
height: 60px;
font-size: 18px;
font-style: italic;
-webkit-font-smoothing: antialiased;
}
.main-search .input-group-addon {
font-size: 20px;
color: #b5b9bc;
background: none;
border: none;
}
.page-title {
background-color: #fff;
padding: 50px;
}
.page-title h1 {
margin-top: 0px;
margin-bottom: 20px;
font-weight: 600;
-webkit-font-smoothing: antialiased;
}
.page-title h1 small {
position: relative;
bottom: 5px;
margin-left: 15px;
padding-left: 15px;
border-left: 1px #e8e9ef solid;
color: #b4b7bc;
font-size: 40%;
font-weight: 600;
text-transform: uppercase;
}
.page-title .sub-title {
margin-bottom: 40px;
}
/* Atlas Specific */
.atlast-tabbable {
margin: 50px 0px;
}
.atlast-tabbable .nav-tabs {
border-bottom: 1px solid #e8e9ee;
}
.atlast-tabbable .nav-tabs>li>a {
padding: 15px 30px;
text-transform: uppercase;
letter-spacing: 1px;
border-radius: 2px 2px 0 0;
}
.atlast-tabbable .nav-tabs>li.active>a, .atlast-tabbable .nav-tabs>li.active>a:focus,
.atlast-tabbable .nav-tabs>li.active>a:hover {
border: 1px solid #e8e9ee;
border-bottom-color: transparent;
}
.atlast-tabbable .tab-content {
background-color: #fff;
padding: 35px;
border: 1px solid #e8e9ee;
border-top: none;
}
.btn-atlas {
padding: 10px 20px;
background-color: #fff;
color: #37bb9b;
border: 1px #37bb9b solid;
border-radius: 4px;
-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
transition: all .3s ease;
}
.btn-atlas:hover {
background-color: #37bb9b;
color: #fff;
}
.atlas-tag {
padding: 6px 12px;
background-color: #4a90e2;
color: #fff;
font-size: 12px;
text-transform: uppercase;
border-radius: 4px;
}
.atlas-tag i.fa {
position: relative;
right: -5px;
cursor: pointer;
}
.btn-tag {
color: #4a90e2;
border: 1px #4a90e2 solid;
background-color: #fff;
border-radius: 4px;
-webkit-transition: all .3s ease;
-moz-transition: all .3s ease;
transition: all .3s ease;
}
/* Login Page */
.login-pane {
margin-top: 50px;
background: #323544;
color: #eee;
padding: 15px;
border-radius: 5px;
}
.login-pane h2 {
margin-bottom: 40px;
}
.login-pane .input-group {
margin: 20px 0px;
}
.login-pane .form-control, .login-pane .input-group-addon {
background-color: transparent;
border-radius: 0px;
}
.login-pane .form-control {
border-left: none;
color: #eee;
}
.login-pane .form-control:focus {
border-color: #CCC;
}
.login-pane .input-group-addon {
border-right: none;
color: #ccc;
}
.login-pane .form-control:focus+.input-group-addon {
border-color: #66afe9;
}
.login-pane .btn-atlas {
background-color: #37bb9b;
color: #fff;
}
.btn-tag:hover {
color: #fff;
background-color: #4a90e2;
}
/* Login Page */
.login-pane {
margin-top: 35%;
background: #323544;
color: #eee;
padding: 15px;
border-radius: 5px;
}
.login-pane h2 {
margin-bottom: 40px;
}
.login-pane .input-group {
margin: 20px 0px;
}
.login-pane .form-control, .login-pane .input-group-addon {
background-color: transparent;
border-radius: 0px;
}
.login-pane .form-control {
border-left: none;
color: #eee;
}
.login-pane .form-control:focus {
border-color: #CCC;
}
.login-pane .input-group-addon {
border-right: none;
color: #ccc;
}
.login-pane .form-control:focus+.input-group-addon {
border-color: #66afe9;
}
.login-pane .btn-atlas {
background-color: #37bb9b;
color: #fff;
}
.errorBox {
position: absolute;
right: 36px;
display: none;
top: 26px;
width: 251px;
}
.errorBox .alert {
box-shadow: 4px 3px 8px -2px gray;
}
.close {
padding: 6px;
font-size: 15px;
}
\ No newline at end of file
/*
* 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.
*/
html {
position: relative;
min-height: 100%;
}
body {
margin-bottom: 60px;
}
.content {
padding-bottom: 90px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
height: 60px;
background-color: #f5f5f5;
}
\ No newline at end of file
/*
* 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.
*/
.add-tag {
margin-top: -50px;
}
.inputs input {
height: 50px;
border-radius: 0px;
border: 1px solid #e3e3e3;
color: #414141;
box-shadow: none;
}
.inputs .control-label {
padding: 15px;
padding-top: 15px !important;
}
.inputs button.addAttr,
.inputs button.saveAttr {
height: 40px;
border-radius: 4px;
border: 1px solid #FFFFFF;
color: #fff;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
font-weight: bold;
}
.inputs button.addAttr {
background-color: #ff8e00;
}
.inputs pre {
border: 0;
border-top: 1px solid #ddd;
border-radius: 0;
margin-bottom: 0;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.inputs button.remove {
position: absolute;
right: 28px;
bottom: 12px;
color: #FFFFFF;
border: 0;
border-radius: 4px;
background-color: #a94442;
}
.app-form .panel {
border-radius: 0 !important;
}
.app-form .panel-footer {
margin-bottom: 0;
}
.app-form .panel-body {
padding-bottom: 0;
}
.input-spacing {
padding-bottom: 10px!important;
}
.create-tag-entity .modal-footer {
border-top: 0;
}
.tag-list {
border: 1px solid #ddd;
padding: 10px;
background-color: #F5F5F5;
}
.tag-list ul {
padding-left: 0px;
}
.error {
color: red;
}
.tag-list ul li {
display: inline;
line-height: 30px;
border: none;
padding: 2px;
background-color: inherit;
padding-right: 20px !important;
}
.add-tag {
text-align: center;
}
.add-tag img {
cursor: pointer;
}
.search-results td {
border: 0;
}
.tag-align {
margin-top: 14px;
}
.tags-added {
display: inline;
}
.no-tags {
font-size: 24px;
font-weight: bold;
text-align: center;
}
.mtop3 {
margin-top: 3px;
}
.mrt-8 {
margin-right: -8px;
}
\ No newline at end of file
<!doctype html>
<!--
~ 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.
-->
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" itemscope="itemscope" itemtype="http://schema.org/Product">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Apache Atlas</title>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<link href="/img/favicon.ico" rel="shortcut icon" type="image/x-icon">
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/sticky-footer-navbar.css">
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/details.css">
<link rel="stylesheet" href="/css/lineage.css">
<link rel="stylesheet" href="/css/tags.css">
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.css">
<link rel="stylesheet" href="/lib/jquery-ui/themes/ui-lightness/jquery-ui.css">
</head>
<link href="img/favicon.ico" rel="shortcut icon" type="image/x-icon">
<body>
<header class="navbar navbar-static-top navbar-top" data-role="navigation">
<div class="container" data-ng-include="'/modules/home/views/header.html'"></div>
</header>
<div class="content container">
<div data-ng-include="'/modules/notification/views/notifications.html'"></div>
<div class="col-lg-2 padding0" data-ng-include="'/modules/navigation/views/navigation.html'" ng-class="leftNav ? 'hide' : ''" ></div>
<div data-ui-view class="ngView"></div>
</div>
<footer class="footer navbar-bottom">
<div class="container">
<p align="right">Powered by<img src="../img/logo-green.png"></p>
</div>
</footer>
<script src="/lib/jquery/dist/jquery.js"></script>
<script src="/lib/angular/angular.js"></script>
<script src="/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="/lib/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script src="/lib/angular-cookies/angular-cookies.js"></script>
<script src="/lib/angular-resource/angular-resource.js"></script>
<script src="/lib/angular-route/angular-route.js"></script>
<script src="/lib/angular-sanitize/angular-sanitize.js"></script>
<script src="/lib/angular-ui-router/release/angular-ui-router.js"></script>
<script src="/lib/angular-ui-utils/ui-utils.js"></script>
<script src="/lib/lodash/lodash.js"></script>
<script src="/lib/d3/d3.js"></script>
<script src="/lib/d3-tip/index.js"></script>
<script src="/lib/jquery-ui/ui/jquery-ui.js"></script>
<script src="/js/app.min.js"></script>
</body>
</html>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc', ['ngCookies',
'ngResource',
'ui.bootstrap',
'ui.router',
'dgc.system',
'dgc.home',
'dgc.about',
'dgc.search',
'dgc.navigation',
'dgc.tags',
'dgc.tags.instance',
'dgc.tags.definition'
]);
angular.module('dgc.system', ['dgc.system.notification']);
angular.module('dgc').factory('lodash', ['$window',
function($window) {
return $window._;
}
]).factory('d3', ['$window',
function($window) {
return $window.d3;
}
]).factory('global', ['$window', '$location',
function($window, $location) {
return {
user: $location.search()['user.name'],
authenticated: !!$window.user,
renderErrors: $window.renderErrors
};
}
]).factory('httpInterceptor', ['global', function(global) {
return {
'request': function(config) {
if (config.url && (config.url.indexOf(baseUrl) === 0 || config.url.indexOf(baseUrl) === 0)) {
config.params = config.params || {};
config.params['user.name'] = global.user;
}
return config;
}
};
}]).config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
}]).run(['$rootScope', 'global', 'notificationService', 'lodash', 'd3', function($rootScope, global, notificationService, lodash, d3) {
var errors = global.renderErrors;
if (angular.isArray(errors) || angular.isObject(errors)) {
lodash.forEach(errors, function(err) {
err = angular.isObject(err) ? err : {
message: err
};
err.timeout = false;
notificationService.error(err);
});
} else {
if (errors) {
errors.timeout = false;
notificationService.error(errors);
}
}
$rootScope.$on('$stateChangeStart', function() {
d3.selectAll('.d3-tip').remove();
});
$rootScope.updateTags = function(added, obj) {
if (added) {
$rootScope.$broadcast('add_Tag', obj);
}
};
$rootScope.loadTraits = function() {
$rootScope.$broadcast('load_Traits');
};
$rootScope.$on('$stateChangeSuccess', function(evt, to, toParams, from) {
if (from.name !== '' && to.name === 'search' && to.name !== from.name && typeof to.parent === 'undefined' && typeof from.parent === 'undefined') {
$rootScope.loadTraits();
} else if (from.name === '' && to.name === 'search') {
$rootScope.loadTraits();
}
if (typeof to.parent === 'undefined') {
if (to.name !== 'search') {
$rootScope.leftNav = true;
} else {
$rootScope.leftNav = false;
}
}
});
}]);
/*
* 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.
*/
'use strict';
var host = '',
port = '',
baseUrl = '/api/atlas/',
apiHost = (host !== '') ? host + ':' + port + baseUrl : baseUrl;
angular.module('dgc').constant('atlasConfig', {
API_ENDPOINTS: {
ABOUT: apiHost + 'admin/version',
GET_ENTITY: apiHost + 'entities',
ATTACH_DETACH_TRAITS: 'traits',
SCHEMA_LINEAGE_PREPEND: apiHost + 'lineage/hive/table',
SCHEMA_APPEND: 'schema',
GRAPH: 'graph',
TRAITS_LIST: apiHost + 'types?type=TRAIT',
SEARCH: apiHost + 'discovery/search/',
CREATE_TRAIT: apiHost + 'types'
},
SEARCH_TYPE: {
dsl: {
value: 'dsl',
displayText: 'DSL',
placeholder: 'Search using a DSL query: e.g. DataSet where name="sales_fact"'
},
fulltext: {
value: 'fulltext',
displayText: 'Text',
placeholder: 'Search using a query string: e.g. sales_fact'
}
}
});
/*
* 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.
*/
'use strict';
angular.element(document).ready(function() {
/* Fixing facebook bug with redirect */
if (window.location.hash === '#_=_') window.location.hash = '#!';
//Then init the app
angular.bootstrap(document, ['dgc'], {
strictDi: true
});
});
/*
* 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.
*/
'use strict';
//Setting up route
angular.module('dgc').config(['$locationProvider', '$urlRouterProvider',
function($locationProvider, $urlRouterProvider) {
$locationProvider.hashPrefix('!');
// For unmatched routes:
$urlRouterProvider.otherwise('/search');
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.about').controller('aboutController', ['$scope', 'aboutResource', function($scope, aboutResource) {
aboutResource.get(function(data) {
$scope.versionInfo = data;
});
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.about', []);
/*
* 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.
*/
'use strict';
angular.module('dgc.about').factory('aboutResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.ABOUT, {});
}]);
<!--
~ 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.
-->
<div class="modal-header">
<h3 class="modal-title title-bold">About</h3>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-4">
<img src="../img/ApacheAtlasLogo.png" class="img-responsive">
</div>
<div class="col-md-8">
<h2 class="title-bold">Apache Atlas</h2>
<p><b>Version : </b> {{versionInfo.Version}}</p>
</br>
<p class="text-info">Get involved!</p>
<p class="text-info"><a href="http://apache.org/licenses/LICENSE-2.0" target="_blank">Licensed under the Apache License Version 2.0</a></p>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-success" ng-click="$dismiss()">OK</button>
</div>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.details').controller('detailsController', ['$window', '$scope', '$state', '$stateParams', 'detailsResource', 'schemaResource',
function($window, $scope, $state, $stateParams, detailsResource, schemaResource) {
$scope.tableName = false;
$scope.isTable = false;
$scope.isLineage = false;
detailsResource.get({
id: $stateParams.id
}, function(data) {
$scope.tableName = data.values.name;
$scope.onActivate('io');
$scope.isTags = (typeof data.traits !== 'undefined' && typeof data.traits === 'object') ? true : false;
if (data && data.values) {
var getName = function(aaa, attr) {
detailsResource.get({
id: attr.id
}, function(data1) {
if (data1.values && data1.values.name) {
attr.name = data1.values.name;
}
});
};
for (var aaa in data.values) {
if (typeof data.values[aaa] === 'object' && data.values[aaa] !== null && data.values[aaa].id && typeof data.values[aaa].id === 'string') {
data.values[aaa].name = data.values[aaa].id;
getName(aaa, data.values[aaa]);
}
if (typeof data.values[aaa] === 'object' && data.values[aaa] !== null && data.values[aaa].id && typeof data.values[aaa].id === 'object') {
data.values[aaa].id.name = data.values[aaa].id.id;
getName(aaa, data.values[aaa].id);
}
if (typeof data.values[aaa] === 'object' && angular.isArray(data.values[aaa]) === true) {
var arrObj = data.values[aaa];
for (var a = 0; a < arrObj.length; a++) {
if (typeof arrObj[a].id === 'string') {
arrObj[a].name = arrObj[a].id;
getName(arrObj[a], arrObj[a]);
}
}
}
}
}
$scope.details = data;
if (data && data.values && data.values.name && data.values.name !== "") {
schemaResource.get({
tableName: data.values.name
}, function(data1) {
if (data1.results) {
$scope.schema = data1.results.rows;
$scope.isSchema = (data1.results.rows && data1.results.rows.length > 0) ? true : false;
for (var t = 0; t < data1.results.rows.length; t++) {
if (data1.results.rows[t].$id$) {
$scope.isTraitId = true;
}
if (data1.results.rows[t].type) {
$scope.isHiveSchema = true;
}
if ($scope.isTraitId && $scope.isHiveSchema) {
break;
}
}
}
});
}
});
$scope.$on('show_lineage', function() {
$scope.isLineage = true;
});
$scope.isNumber = angular.isNumber;
$scope.isObject = angular.isObject;
$scope.isString = angular.isString;
$scope.isArray = angular.isArray;
$scope.onActivate = function tabActivate(tabname) {
$scope.$broadcast('render-lineage', {
type: tabname,
tableName: $scope.tableName,
guid: $stateParams.id
});
};
$scope.openAddTagHome = function(traitId) {
$state.go('addTagDetails', {
tId: traitId
});
};
$scope.goDetails = function(id) {
$state.go("details", {
id: id
});
};
$scope.goBack = function() {
$window.history.back();
};
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.details', ['dgc.lineage']);
/*
* 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.
*/
'use strict';
angular.module('dgc.details').factory('detailsResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.GET_ENTITY + '/:id', {}, {
get: {
method: 'GET',
transformResponse: function(data) {
if (data) {
return angular.fromJson(data.definition);
}
},
responseType: 'json'
},
saveTag: {
method: 'POST',
url: atlasConfig.API_ENDPOINTS.GET_ENTITY + '/:id/' + atlasConfig.API_ENDPOINTS.ATTACH_DETACH_TRAITS
},
detachTag: {
method: 'DELETE',
url: atlasConfig.API_ENDPOINTS.GET_ENTITY + '/:id/' + atlasConfig.API_ENDPOINTS.ATTACH_DETACH_TRAITS + '/:tagName'
}
});
}]).factory('schemaResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.SCHEMA_LINEAGE_PREPEND + '/:tableName/' + atlasConfig.API_ENDPOINTS.SCHEMA_APPEND, {}, {
get: {
method: 'GET',
transformResponse: function(data) {
if (data) {
return angular.fromJson(data);
}
},
responseType: 'json'
}
});
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.details').config(['$stateProvider',
function($stateProvider) {
// states for my app
$stateProvider.state('details', {
url: '/details/:id',
templateUrl: '/modules/details/views/details.html'
});
$stateProvider.state('addTagDetails', {
parent: 'details',
params: {
tId: null,
frm: 'details'
},
onEnter: ['$stateParams', '$state', '$modal', 'navigationResource', function($stateParams, $state, $modal, navigationResource) {
$modal.open({
templateUrl: '/modules/tags/instance/views/createTag.html',
controller: 'createTagController',
windowClass: 'create-tag-entity',
resolve: {
typesList: function() {
return navigationResource.get().$promise;
}
}
}).result.finally(function() {
$state.go('^');
});
}]
});
}
]);
<!--
~ 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.
-->
<div class="row" data-ng-repeat="(key1, value1) in value" ng-if="value1">
<div class="col-md-6" data-ng-if="!isString(value1)" data-ng-repeat="(key2, value2) in value1 track by $index"></div>
<div data-ng-if="isString(value2)" data-ng-repeat="(key3, value3) in value2"> {{key3}}: {{value3}}</div>
<div class="col-md-6" data-ng-if="isString(value1)"> {{key1}} : {{value1 | date:'medium'}}</div>
</div>
\ No newline at end of file
<!--
~ 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.
-->
<div class="row details-page" data-ng-controller="detailsController">
<div class="col-lg-12 padding0">
<ul class="breadcrumb">
<li><button class="btn btn-link" data-ng-click="goBack()"><i class="fa fa-arrow-left"></i> Back To Result</button> </li>
</ul>
</div>
<div role="tabpanel" class="col-lg-12 padding0">
<div class="mB20">
<h4 ng-if="details.values && details.values.name && details.values.name != ''">
<b>Name:</b> <span class="black">{{details.values.name}}</span></h2>
<h4 ng-if="details.values && details.values.description && details.values.description != ''"><b>Description:</b> <span class="black">{{details.values.description}}</span></h4>
<h4 data-disable="!tableName" data-select="onActivate('io')" id="lineageGraph" class="hide">
<span class="lineage">Lineage</span>
<ng-include data-table-type="io" src="'/modules/lineage/views/lineage_io.html'"/>
</h4>
</div>
<tabset>
<tab heading="Details">
<table class="table table-bordered">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="(key,value) in details.values" ng-if="value && !(key==='columns') && !(key==='name') && !(key==='description')">
<td>{{key}}</td>
<td data-ng-if="isObject(value) && isString(value.id)" class="pointer">
<a data-ui-sref="details({id:value.id})">{{ value.name }}</a>
</td>
<td data-ng-if="isObject(value) && isObject(value.id) && isString(value.id.id)" class="pointer"> <a data-ui-sref="details({id:value.id.id})">{{ value.id.name }}</a>
</td>
<td data-ng-if="isObject(value) && !isArray(value) && !isString(value.id) && !isObject(value.id)">
<span data-ng-repeat="(key2, value2) in value"> {{ key2 }} : {{ value2 }}<span ng-if="!$last">,</span></span>
</td>
<td data-ng-if="isArray(value) && !isString(value.id) && !isObject(value.id)">
<div data-ng-repeat="(key2, value2) in value">
<a class=" pointer" data-ng-if="isObject(value2) && isString(value2.id)" data-ui-sref="details({id:value2.id})">{{ value2.name }}<span ng-if="!$last">,</span></a>
<div class="row pdLft15px" data-ng-repeat="(key1, value1) in value2">
<span ng-if="isObject(value1)">
<a class=" pointer" data-ng-if="isString(value1.id)" data-ui-sref="details({id:value1.id})">{{ value1.id }}</a>
</span>
</div>
</div>
</td>
<td data-ng-if="isArray(value) && !isObject(value)" >
<div class="row" data-ng-repeat="(key1, value1) in value" ng-if="value1">
<div data-ng-if="isObject(value1)" data-ng-repeat="(key2, value2) in value1" >
<a data-ng-if="isString(value2) && key2 == 'id'" class="pointer pdLft15px" data-ui-sref="details({id:value2})">{{ value2 }}</a>
</div>
</div>
</td>
<td data-ng-if="!isArray(value) && isObject(value[0]) && isString(value[0].id) && key=='inputTables'" data-ng-click="goDetails(value[0].id)" class="pointer">
<div class="row" data-ng-repeat="(key1, value1) in value[0]" ng-if="value1">
<div class="col-md-6" data-ng-if="!isString(value1)" data-ng-repeat="(key2, value2) in value1 track by $index"></div>
<div data-ng-if="isString(value2)" data-ng-repeat="(key3, value3) in value2"> {{key3}}: {{value3}}</div>
<div class="col-md-6" data-ng-if="isString(value1)"> {{key1}} : {{value1 | date:'medium'}} UTC</div>
</div>
</td>
<td data-ng-if="isNumber(value)">{{value | date:'yyyy-MM-dd HH:mm:ss'}} UTC</td>
<td data-ng-if="isString(value)">{{value}}</td>
</tr>
</tbody>
</table>
</tab>
<tab data-heading="Schema" data-ng-if="isSchema">
<ng-include src="'/modules/details/views/schema.html'"/>
</tab>
<tab data-heading="Tags" data-ng-if="isTags">
<ng-include src="'/modules/tags/instance/views/tags.html'"/>
</tab>
</tabset>
</div>
</div>
<!--
~ 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.
-->
<table class="table table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Comment</th>
<th ng-if="!isHiveSchema">DataType</th>
<th ng-if="isHiveSchema">Type</th>
<th ng-if="isTraitId">Tags </th>
<th ng-if="isTraitId">Tools</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="colm in schema">
<td>
<a ng-if="colm['$id$']" data-ui-sref="details({id:colm['$id$'].id})">{{colm.name}}</a>
<span ng-if="!colm['$id$']"> {{colm.name}} </span>
</td>
<td>{{colm.comment}}</td>
<td ng-if="!isHiveSchema"> {{colm.dataType}}</td>
<td ng-if="isHiveSchema"> {{colm.type}}</td>
<td ng-if="colm['$id$']">
<div id="{{colm['$id$'].id}}_schema" class="word-break"><a class="tab-search-tags" ng-repeat="(key, value) in colm['$traits$']" data-ui-sref="search({query: key})" title="{{key}}">{{key}}<span> </span></a></div>
</td>
<td ng-if="colm['$id$']" class="add-tag">
<img ng-src="img/addTag.png" tooltip="Add Tag" ng-click="openAddTagHome(colm['$id$'].id )">
</td>
</tr>
</tbody>
</table>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.home').controller('headerController', ['$scope', '$modal', function($scope, $modal) {
$scope.menu = [{
title: "Tags",
state: "tags"
}];
$scope.isCollapsed = true;
$scope.isLoggedIn = function() {
return true;
};
$scope.showAbout = function() {
$modal.open({
animation: true,
templateUrl: '/modules/about/views/about.html',
controller: 'aboutController',
size: 'lg'
});
};
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.home', []);
<!--
~ 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.
-->
<div data-ng-controller="headerController" class="row">
<div class="navbar-header">
<button class="navbar-toggle" type="button" data-ng-click="isCollapsed = !isCollapsed">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a data-ui-sref="search()" data-ui-sref-active="active" class="main-logo">
Apache <b>Atlas</b>
</a>
</div>
<nav class="collapse navbar-collapse" data-collapse="isCollapsed" data-role="navigation">
<ul class="navbar-nav nav pull-right menu-bar" data-ng-if="isLoggedIn()">
<li data-ui-sref-active="active">
<a data-ui-sref="search()" class="menu-link">Search</a>
</li>
<li data-ng-repeat="item in menu" data-ui-sref-active="active">
<a data-ui-sref="{{item.state}}">{{item.title}}</a>
</li>
<li data-ui-sref-active="active">
<a ng-if="!username" class="menu-link" href="https://cwiki.apache.org/confluence/display/ATLAS/Atlas+Home" target="_blank">Help</a>
</li>
<li data-ui-sref-active="active">
<a ng-if="!username" class="menu-link" href="javascript:void(0)" ng-click="showAbout()">About</a>
</li>
<li data-ui-sref-active="active">
<a ng-if="!username" class="menu-link" href="/logout.html">Logout</a>
</li>
</ul>
</nav>
</div>
<!--
~ 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.
-->
<section class="text-center">
<img data-ui-sref="search" class="pointer" src="modules/home/img/splash.png"/>
</section>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.lineage', []);
/*
* 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.
*/
'use strict';
angular.module('dgc.lineage').factory('lineageResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.SCHEMA_LINEAGE_PREPEND + '/:tableName/:type/' + atlasConfig.API_ENDPOINTS.GRAPH, {});
}]);
<!--
~ 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.
-->
<div class="lineage-viz" data-ng-controller="LineageController">
<button type="button" class="btn btn-primary pull-right" ng-click="onReset()">
Reset
</button>
<div class="graph">
<h4 data-ng-if="!requested && !lineageData">No lineage data found</h4>
<i data-ng-if="requested" class="fa fa-spinner fa-spin fa-5x"></i>
<svg >
<g/>
</svg>
</div>
</div>
<!--
~ 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.
-->
<div class="lineage-viz table-bordered" data-ng-controller="lineage_ioController">
<button type="button" class="btn btn-primary pull-right" ng-click="onReset()">
Reset
</button>
<button type="button" class="btn btn-primary zoom-buttons pull-right" id="zoom_out"><i class="fa fa-minus"></i></button>
<button type="button" class="btn btn-primary zoom-buttons pull-right" id="zoom_in"><i class="fa fa-plus"></i> </button>
<div class="graph">
<h4 data-ng-if="!requested && !lineageData" class="align-lineage">No lineage data found</h4>
<i data-ng-if="requested" class="fa fa-spinner fa-spin fa-5x"></i>
<svg >
<g/>
</svg>
</div>
</div>
/*
* 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.
*/
'use strict';
angular.module('dgc.navigation').controller('navigationController', ['$scope', 'navigationResource', '$cacheFactory', 'atlasConfig',
function($scope, navigationResource, $cacheFactory, atlasConfig) {
var limitIntialCount = 18;
$scope.intialCount = limitIntialCount;
$scope.updateVar = function(event) {
$scope.$$prevSibling.query = angular.element(event.target).text();
};
$scope.dslQueryVal = atlasConfig.SEARCH_TYPE.dsl.value;
$scope.$on('load_Traits', function() {
$scope.leftnav = navigationResource.get();
});
setTimeout(function() {
var httpDefaultCache = $cacheFactory.get('$http');
httpDefaultCache.remove(atlasConfig.API_ENDPOINTS.TRAITS_LIST);
}, 3600000);
$scope.refreshTags = function() {
var httpDefaultCache = $cacheFactory.get('$http');
httpDefaultCache.remove(atlasConfig.API_ENDPOINTS.TRAITS_LIST);
$scope.leftnav = navigationResource.get();
$scope.intialCount = limitIntialCount;
};
$scope.showMore = function() {
$scope.intialCount += limitIntialCount;
};
$scope.filterTags = function() {
$scope.intialCount = limitIntialCount;
};
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.navigation', []);
/*
* 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.
*/
'use strict';
angular.module('dgc.navigation').factory('navigationResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.TRAITS_LIST, {}, {
get: {
'method': 'GET',
'responseType': 'json',
'isArray': true,
'cache': true,
'transformResponse': function(data) {
var results = [];
angular.forEach(data && data.results, function(val) {
results.push(val);
});
return results;
}
}
});
}]);
<!--
~ 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.
-->
<div data-ng-controller="navigationController" class="main-tags leftNavigation">
<div>
<h4 class="pull-left">Tags</h4>
<a href ng-click="refreshTags()" class="pull-right">
<img src="../img/refresh.png" style="margin: 5px;" title="Refresh Tags" >
</a>
<form ng-submit="filterTags()">
<input type="text" class="filter-tag" placeholder="Search for Tags…" ng-model="tagFilter" ng-keydown="filterTags()"> </input>
<input type="submit" id="submit" value="Submit" class="hide" />
</form>
</div>
</br>
<div class="list-group">
<a ng-repeat="nav in filtered = (leftnav | filter:tagFilter | limitTo:intialCount + 1)" ui-sref="search({ query: nav , searchType: dslQueryVal})" class="list-group-item limitSize" title="{{nav}}"><i class="fa fa-tag"></i> {{nav}} </a>
<a ng-click="showMore()" class="see-more" ng-class="filtered.length > intialCount ? 'show' : 'hide'"> Load more ... </a>
</div>
</div>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.system.notification').controller('notificationController', ['$scope', 'notificationService',
function($scope, notificationService) {
$scope.getNotifications = notificationService.getAll;
$scope.close = function(notification) {
notificationService.close(notification);
};
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.system.notification', ['ui.router']).constant('colorCoding', {
info: 'success',
error: 'danger'
}).run(['$rootScope', 'notificationService', function($rootScope, notificationService) {
$rootScope.$on('$locationChangeSuccess', function(evt, from, to) {
if (from !== to) {
notificationService.reset();
}
});
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.system.notification').service('notificationService', ['$timeout', 'lodash', 'colorCoding', function($timeout, _, colorCoding) {
var notifications = [],
service = {
timeout: 2000,
getAll: function() {
return notifications;
},
reset: function() {
notifications = [];
},
close: function(notification) {
_.remove(notifications, notification);
}
};
_.each(colorCoding, function(value, key) {
service[key] = function(message, timeout) {
var notification = message;
if (_.isString(message)) {
notification = {
message: message
};
}
notification.message = notification.msg || notification.message;
delete notification.msg;
notification.type = value;
notification.timeout = _.isUndefined(timeout) ? (_.isUndefined(notification.timeout) ? true : notification.timeout) : timeout;
notifications.push(notification);
if (notification.timeout) {
$timeout(function() {
service.close(notification);
}, angular.isNumber(notification.timeout) ? notification.timeout : service.timeout);
}
};
});
return service;
}]);
<!--
~ 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.
-->
<div class="container" data-ng-controller="notificationController">
<alert data-ng-repeat="notification in getNotifications()" data-type="{{notification.type}}" data-close="close(notification)" class="notifier">
{{notification.message}}
</alert>
</div>
/*
* 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.
*/
'use strict';
angular.module('dgc.search').directive(
"myDirective",
function() {
return {
restrict: 'EA',
template: '<a href="javascript: void(0);" button-toggle toggle="isCollapsed" class="show-more" ng-click="isCollapsed = !isCollapsed">..show more</a>',
link: function($scope) {
$scope.isCollapsed = true;
console.log($scope.isCollapsed);
},
transclude: true,
scope: {}
};
});
/*
* 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.
*/
'use strict';
angular.module('dgc.search', ['dgc.details']);
/*
* 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.
*/
'use strict';
angular.module('dgc.search').factory('searchResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.SEARCH+':searchType', {}, {
search: {
'method': 'GET',
'responseType': 'json',
'transformResponse': function(data) {
return data;
}
}
});
}]);
/*
* 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.
*/
'use strict';
//Setting up route
angular.module('dgc.search').config(['$stateProvider',
function($stateProvider) {
$stateProvider.state('search', {
url: '/search?query&searchType',
params: {searchType: 'fulltext'},
templateUrl: '/modules/search/views/search.html',
controller: 'searchController'
});
$stateProvider.state('addTagHome', {
parent: 'search',
params: {
tId: null,
frm: 'search'
},
onEnter: ['$stateParams', '$state', '$modal', 'navigationResource', function($stateParams, $state, $modal, navigationResource) {
$modal.open({
templateUrl: '/modules/tags/instance/views/createTag.html',
controller: 'createTagController',
windowClass: 'create-tag-entity',
resolve: {
typesList: function() {
return navigationResource.get().$promise;
}
}
}).result.finally(function() {
$state.go('^');
});
}]
});
}
]);
<!--
~ 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.
-->
<div class="col-lg-10 paddingR0" xmlns="http://www.w3.org/1999/html">
<div class="">
<div class="row main-search">
<form class="col-lg-12" name="form" novalidate>
<div class="col-lg-2 search-type-large">
<select class="form-control" ng-model="searchTypeModel" ng-change="searchTypeChanged()">
<option ng-selected = "{{searchTypeModel === searchTypes.dsl.value}}" value={{searchTypes.dsl.value}}>{{ searchTypes.dsl.displayText }}</option>
<option ng-selected = "{{searchTypeModel === searchTypes.fulltext.value}}" value={{searchTypes.fulltext.value}}>{{ searchTypes.fulltext.displayText }}</option>
</select>
</div>
<div class="input-group col-lg-10">
<input type="text" class="form-control" placeholder={{searchTypes[searchTypeModel].placeholder}} data-ng-model="query" required>
</input>
<span class="input-group-btn">
<button class="btn btn-success" type="submit" data-ng-disabled="form.$invalid" ui-sref="search({ query: query, searchType: searchTypeModel })">
<i class="glyphicon glyphicon-search white "></i>
</button>
</span>
</div>
</form>
</div>
<div class="col-lg-12 padding0 search-results">
<div ng-switch on="searchMessage">
<div ng-switch-when="load-gif" class="search-spinner"><img src="../img/spinner.gif" align="middle" /></div>
<div ng-switch-default>
<h5 ng-show="searchMessage" title="{{searchMessage}}" class="tabsearch-result">{{searchMessage}}</h5>
<h5 ng-show="searchMessageDsl" title="{{searchMessage}}" class="tabsearch-result">Invalid DSL Syntax, Click<a ui-sref="search({ query: query, searchType: searchTypes.fulltext.value })"> here</a> to execute as a Text search.</h5>
</div>
</div>
<div class="panel panel-default" ng-show='resultCount > 0'>
<table class="table table-bordered datatable" >
<thead>
<tr ng-if="!isTag(resultType)">
<th>Name</th>
<th>Description</th>
<th>Owner</th>
<th>Tags</th>
<th>Tools</th>
</tr>
<tr ng-if="isTag(resultType) && transformedProperties != undefined" >
<th ng-repeat="prop in transformedProperties" ng-if="prop !== 'id' && prop !== 'guid'">
{{(prop != '$traits$') ? prop : 'Tags'}}
</th>
</tr>
</thead>
<tbody>
<tr ng-if="!isTag(resultType) && isObject(result)" ng-repeat="result in filteredResults track by $index">
<td>
<a data-ui-sref="details({id:result['$id$'].id || result.guid})">{{result.name || result.guid}}</a>
</td>
<td>
{{result.description}}
</td>
<td>
<span ng-repeat="(key, value) in filterSearchResults(result)">
<span ng-if="key =='owner'">{{value}}</span>
</span>
</td>
<td>
<div id="{{result['$id$'].id || result.guid}}" ng-show="!dataTransitioned" class="word-break"><a class="tab-search-tags" ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search({query: key})" title="{{key}}">{{key}}<span> </span></a></div>
</td>
<td class="add-tag"><img ng-src="img/addTag.png" tooltip="Add Tag" ng-click="openAddTagHome(result['$id$'].id || result.guid)"></td>
</tr>
<tr ng-if="isTag(resultType)" ng-repeat="result in filteredResults track by $index">
<td data-ng-if="isObject(result) && !isString(result) && res != 'id' && res != 'guid'" data-ng-repeat="res in transformedProperties track by $index">
<a data-ng-if="res == 'guid' && !result['name']" data-ui-sref="details({id:result[res]})">{{result[res]}}</a>
<span data-ng-if="res != '$traits$' && res != 'Tools' && res != 'guid' && res.toLowerCase().indexOf('name') == -1 && res.toLowerCase().indexOf('time') == -1">{{result[res]}}</span>
<span data-ng-if="res.toLowerCase().indexOf('time') != -1 && isNumber(result[res])">{{result[res] * 1000 | date:'yyyy-MM-dd HH:mm:ss'}} UTC</span>
<a data-ng-if="res.toLowerCase().indexOf('name') != -1 && (result['id'] || result['guid']) " data-ui-sref="details({id:result['id']|| result['guid']})">{{result[res]}}</a>
<span data-ng-if="res.toLowerCase().indexOf('name') != -1 && !result['id'] && !result['guid']">{{result[res]}}</span>
<div data-ng-if="res == '$traits$'" class="word-break tags" id="{{result['id']|| result['guid']}}">
<a class="tab-search-tags" ng-repeat="(key, value) in result[res]" data-ui-sref="search({query: key})" title="{{key}}">{{key}}<span> </span></a>
</div>
<span data-ng-if="res == 'Tools'" class="add-tag"> <img ng-src="img/addTag.png" tooltip="Add Tag" ng-click="openAddTagHome(result['id']|| result['guid'])"> </span>
</td>
<td data-ng-if="isString(result) || result == false || result == true">
<a data-ng-if="result.toLowerCase() == 'guid'" data-ui-sref="details({id:result})">{{result}}</a>
<span data-ng-if="result.toLowerCase() != 'guid'">{{result}}</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pull-right" ng-show='resultCount > 0'>
<pagination total-items="totalItems" items-per-page="itemsPerPage" ng-model="currentPage" ng-change="pageChanged()"></pagination>
<p>
</div>
</div>
</div>
</div>
<!--
~ 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.
-->
<h4 ng-show="searchMessage">{{searchMessage}}</h4>
<ul class="list-unstyled">
<li ng-repeat="result in filteredResults" class="search-results">
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p>{{result.description}}</p>
<span ng-repeat="(key, value) in filterSearchResults(result)" >
<span ng-show="$index < 4"><b>{{key}}: </b>{{value}}{{$index+1 === limit ? '' : ', '}}</span>
</span>
<div collapse="isCollapsed">
<span ng-repeat="(key, value) in filterSearchResults(result)" >
<span ng-show="$index > 4"><b>{{key}}: </b>{{value}}{{$last ? '' : ', '}}</span>
</span>
</div>
<a href ng-show="isCollapsed && (keyLength > 4)" ng-click="doToggle($event,isCollapsed)">..show more</a>
<a href ng-show="!isCollapsed" ng-click="doToggle($event,isCollapsed)">..show less</a>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
<div data-ng-if="!searchTypesAvailable" data-ng-include="'/modules/search/views/types/guid.html'"></div>
</li>
</ul>
<div class="resultsPagination" ng-show='filteredResults.length > 0'>
<pagination total-items="totalItems" items-per-page="itemsPerPage" ng-model="currentPage" ng-change="pageChanged()"></pagination>
<p>
</div>
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p><b>Comment:</b> {{result.comment}}, <b>DataType:</b> {{result.dataType}},<b>Table:</b> {{result.table}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p>{{result.description}}</p>
<p><b>locationUri:</b> {{result.locationUri}}, <b>Owner: </b>{{result.owner}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result.instanceInfo.guid})">{{result.instanceInfo.guid}}</a></h4>
<p><b>TypeName: </b>{{result.instanceInfo.typeName}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<a data-ui-sref="details({id:result.guid})">{{result.guid}}</a>
\ No newline at end of file
<!--
~ 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.
-->
<a data-ui-sref="details({id:result.guid})">{{result["hive_table.name"]}}</a>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p>{{result.description}}</p>
<p><b>inputTables: </b>{{result.inputTables['id']}},<b>queryText: </b>{{result.queryText}},<b>startTime: </b>{{result.startTime | date:'medium'}},<b>endTime: </b> {{result.endTime | date:'medium'}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p><b>compressed: </b>{{result.compressed}},<b>outputFormat: </b>{{result.outputFormat}},<b>location: </b>{{result.location}}, <b>inputFormat: </b>{{result.inputFormat}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p>{{result.description}}</p>
<p><b>owner: </b>{{result.owner}}, <b>createTime: </b>{{result.createTime}}</p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
\ No newline at end of file
<!--
~ 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.
-->
<h4><a data-ui-sref="details({id:result['$id$'].id})">{{result.name}}</a></h4>
<p><b>inputTables: </b><a ng-repeat="inputs in result.inputTables" data-ui-sref="details({id: inputs.id})">{{ inputs.id}}</a></p>
<h5>Tags : <a ng-repeat="(key, value) in result['$traits$']" data-ui-sref="search.results({query: key})">{{key}}</a> </h5>
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.definition').controller('definitionTagsController', ['$scope', '$resource', '$state', '$stateParams', 'lodash', 'attributeDefinition', 'tagClasses', 'tagsResource', 'notificationService', 'navigationResource', '$cacheFactory', 'atlasConfig',
function($scope, $resource, $state, $stateParams, _, attributeDefinition, categories, tagsResource, notificationService, navigationResource, $cacheFactory, atlasConfig) {
$scope.categoryList = categories;
$scope.category = 'TRAIT';
$scope.tagModel = {
typeName: null,
typeDescription: null,
superTypes: [],
attributeDefinitions: []
};
$scope.typesList = navigationResource.get();
$scope.newtagModel = angular.copy($scope.tagModel);
$scope.addAttribute = function addAttribute() {
$scope.tagModel.attributeDefinitions.push(attributeDefinition.getModel());
};
$scope.removeAttribute = function(index) {
$scope.tagModel.attributeDefinitions.splice(index, 1);
};
$scope.categoryChange = function categorySwitched() {
$scope.categoryInst = categories[$scope.category].clearTags();
};
$scope.reset = function() {
$scope.tagModel = angular.copy($scope.newtagModel);
$scope.selectedParent = undefined;
};
$scope.refreshTags = function() {
var httpDefaultCache = $cacheFactory.get('$http');
httpDefaultCache.remove(atlasConfig.API_ENDPOINTS.TRAITS_LIST);
$scope.typesList = navigationResource.get();
};
$scope.save = function saveTag(form) {
$scope.savedTag = null;
if (form.$valid) {
$scope.tagModel.superTypes = $scope.selectedParent;
$scope.categoryInst = categories[$scope.category];
$scope.categoryInst.clearTags().addTag($scope.tagModel);
notificationService.reset();
$scope.saving = true;
tagsResource.save($scope.categoryInst.toJson()).$promise
.then(function tagCreateSuccess() {
notificationService.info('"' + $scope.tagModel.typeName + '" has been created', false);
var httpDefaultCache = $cacheFactory.get('$http');
httpDefaultCache.remove(atlasConfig.API_ENDPOINTS.TRAITS_LIST);
$scope.typesList = navigationResource.get();
$scope.reset();
}).catch(function tagCreateFailed(error) {
notificationService.error(error.data.error, false);
}).finally(function() {
$scope.saving = false;
});
}
};
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.definition', []);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.definition').service('attributeDefinition', function attribute() {
this.getModel = function getJson() {
return {
name: null,
dataTypeName: 'string',
multiplicity: 'optional',
isComposite: false,
isUnique: false,
isIndexable: true,
reverseAttributeName: null
};
};
});
<!--
~ 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.
-->
<div class="row">
<div class="app-form col-lg-12" data-ng-controller="definitionTagsController">
<div class="panel panel-default">
<div class="panel-heading"><h4>Tag Definition</h4></div>
<div class="panel-body inputs">
<form data-name="tagForm" class="form-horizontal" novalidate role="form">
<fieldset data-ng-disabled="saving">
<div class="form-group hide">
<label for="category" class="col-sm-2 control-label">Category</label>
<div class="col-sm-10">
<select class="form-control" id="category" name="category" data-ng-model="category" data-ng-change="categoryChange()" required>
<option value="{{key}}" data-ng-repeat="(key, value) in categoryList" ng-selected="{{key===category}}">{{key}}</option>
</select>
</div>
</div>
<div class="form-group" >
<label for="typeName" class="col-sm-2 control-label">Tag Name</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="typeName" id="typeName" placeholder="Tag Name" data-ng-model="tagModel.typeName" required/>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="ParentTag">Parent Tag</label>
<div class="col-sm-5 mrt-8">
<select ng-model="selectedParent" class="form-control h160" id="ParentTag" name="ParentTag" multiple>
<option ng-repeat="data in typesList" title="{{data}}">{{data}}</option>
</select>
</div>
<div class="mtop3">
<a href ng-click="refreshTags()" class="pull-left">
<img src="../img/refresh.png" title="Refreh parent tag list">
</a>
</div>
</div>
<ng-form name="attributeForm">
<div class="form-group"
data-ng-repeat-start="attribute in tagModel.attributeDefinitions">
<label for="attributeId_{{$index}}" class="col-sm-2 control-label">Attribute name</label>
<div class="col-sm-10">
<!-- <div class="input-group"> -->
<input type="text" class="form-control" name="name" id="attributeId_{{$index}}" placeholder="Attribute name" data-ng-model="attribute.name"
required/>
<button class="remove" ng-click="removeAttribute($index)"><i class="fa fa-times"></i></button>
<!-- <i class="input-group-addon fa fa-2x" data-ng-class="{'fa-angle-double-down':!attribute.$$show, 'fa-angle-double-up':attribute.$$show}"
data-ng-click="attribute.$$show=!attribute.$$show"></i> -->
<!-- </div> -->
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show">
<label for="attributeDatatype_{{$index}}" class="col-sm-2 control-label">Data Type </label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="attributeDatatype_{{$index}}" placeholder="dataTypeName"
data-ng-model="attribute.dataTypeName"/>
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show">
<label for="attributeMultiplicity_{{$index}}" class="col-sm-2 control-label">Multiplicity</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="name" id="attributeMultiplicity_{{$index}}" placeholder="multiplicity"
data-ng-model="attribute.multiplicity"/>
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show">
<label for="attributeIscomposite_{{$index}}" class="col-sm-2 control-label">isComposite</label>
<div class="col-sm-10">
<span class ="btn-toggle">
<a class="btn-sm " ng-class="{true: 'btn-primary'}[attribute.isComposite]" ng-click="attribute.isComposite = true">true </a>
<a class="btn-sm " ng-class="{false: 'btn-danger'}[attribute.isComposite]" ng-click="attribute.isComposite = false"> false </a>
</span>
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show">
<label for="attributeIsunique_{{$index}}" class="col-sm-2 control-label">isUnique</label>
<div class="col-sm-10">
<span class ="btn-toggle">
<a class="btn-sm " ng-class="{true: 'btn-primary'}[attribute.isUnique]" ng-click="attribute.isUnique = true">true </a>
<a class="btn-sm " ng-class="{false: 'btn-danger'}[attribute.isUnique]" ng-click="attribute.isUnique = false"> false </a>
</span>
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show">
<label for="attributeIndexable_{{$index}}" class="col-sm-2 control-label">isIndexable</label>
<div class="col-sm-10">
<span class ="btn-toggle">
<a class="btn-sm " ng-class="{true: 'btn-primary'}[attribute.isIndexable]" ng-click="attribute.isIndexable = true">true </a>
<a class="btn-sm " ng-class="{false: 'btn-danger'}[attribute.isIndexable]" ng-click="attribute.isIndexable = false"> false </a>
</span>
</div>
</div>
<div class="form-group" data-ng-class="{'has-error': attributeForm.name.$invalid && attributeForm.name.$dirty}" data-ng-show="attribute.$$show"
data-ng-repeat-end>
<label for="attributeReverseName_{{$index}}" class="col-sm-2 control-label">reverseAttributeName</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="reverseName" id="attributeReverseName_{{$index}}" placeholder="reverseAttributeName"
data-ng-model="attribute.reverseAttributeName"/>
</div>
</div>
</ng-form>
<div class="form-group text-right">
<div class="col-sm-offset-2 col-sm-10">
<button data-ng-click="addAttribute()" class="btn btn-default addAttr"><i class="fa fa-plus"></i> Add Attribute</button>
</div>
</div>
<div class="form-group panel-footer">
<div class="col-sm-12 text-right padding0">
<button type="submit" data-ng-click="save(tagForm)" data-ng-disabled="tagForm.$invalid" class="btn btn-primary saveAttr">Save</button>
</div>
</div>
</fieldset>
</form>
</div>
</div>
</div>
</div>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.instance').controller('createTagController', ['$scope', 'detailsResource', '$modalInstance', 'typesList', 'lodash', 'tagsResource', '$stateParams', '$rootScope', 'tagClasses', 'notificationService',
function($scope, detailsResource, $modalInstance, typesList, _, tagsResource, $stateParams, $rootScope, categories) {
if (typesList) {
$scope.typesList = typesList;
}
var $$ = angular.element;
$scope.categoryList = categories;
$scope.category = 'TRAIT';
$scope.isSuccess = false;
$scope.getAttributeDefinations = function() {
$scope.propertiesList = {};
$scope.isRequired = {};
$scope.getAttributeApi($scope.selectedType);
};
$scope.getAttributeApi = function(tagName) {
tagsResource.get({
id: tagName
}, function(data) {
var instanceType = categories[$scope.category].instanceInfo();
if (instanceType) {
var traitTypes = angular.fromJson(data.definition)[instanceType];
for (var t = 0; t < traitTypes.length; t++) {
if (traitTypes[t]) {
for (var indx = 0; indx < traitTypes[t].attributeDefinitions.length; indx++) {
var attrDefn = traitTypes[t].attributeDefinitions[indx];
$scope.propertiesList[attrDefn.name] = '';
$scope.isRequired[attrDefn.name] = attrDefn.isRequired;
}
}
if (traitTypes[t].superTypes && traitTypes[t].superTypes.length > 0) {
for (var s = 0; s < traitTypes[t].superTypes.length; s++) {
$scope.getAttributeApi(traitTypes[t].superTypes[s]);
}
}
}
}
});
};
$scope.ok = function($event, tagDefinitionform) {
$scope.isSuccess = false;
if (tagDefinitionform.$valid) {
var requestObject = {
"jsonClass": "org.apache.atlas.typesystem.json.InstanceSerialization$_Struct",
"typeName": $scope.selectedType,
"values": $scope.propertiesList
};
detailsResource.saveTag({
id: $stateParams.tId
}, requestObject).$promise.then(function(data) {
if (data.requestId !== undefined && data.GUID === $stateParams.tId) {
var tagName = $$("#tagDefinition").val();
if ($stateParams.frm && $stateParams.frm !== 'details') {
$rootScope.updateTags(true, {
added: $scope.selectedType
});
$$("#" + $stateParams.tId).append("<a class='tab-search-tags ng-binding ng-scope' data-ui-sref='search({query: " + tagName + "})' title='" + tagName + "' href='#!/search?query=" + tagName + "'>" + tagName + "<span> </span></a>");
} else if ($stateParams.frm === 'details') {
$$("#" + $stateParams.tId + "_schema").append("<a class='tab-search-tags ng-binding ng-scope' data-ui-sref='search({query: " + tagName + "})' title='" + tagName + "' href='#!/search?query=" + tagName + "'>" + tagName + "<span> </span></a>");
}
}
$scope.successmessage = 'Tag "' + $scope.selectedType + '" has been added to entity';
$scope.isSuccess = true;
}).catch(function(err) {
$scope.isError = true;
$scope.error = err.data.error;
});
}
};
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
};
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.instance').controller('instanceTagController', ['$scope', 'detailsResource', '$stateParams', '$state',
function($scope, detailsResource, $stateParams, $state) {
$scope.id = $stateParams.id;
var $$ = angular.element;
function getResourceData() {
detailsResource.get({
id: $stateParams.id
}, function(data) {
angular.forEach(data.traits, function(obj, trait) {
var pair_arr = [];
if (obj.values !== null && Object.keys(obj.values).length > 0) {
angular.forEach(obj.values, function(value, key) {
var pair = key + ":" + value;
pair_arr.push(pair);
});
data.traits[trait].values = pair_arr.join(" , ");
} else {
data.traits[trait].values = 'NA';
}
});
$scope.traitsList = data.traits;
if ($.isEmptyObject($scope.traitsList)) {
$scope.noTags = true;
}
});
}
$scope.$on('add_Tag', function(evt, obj) {
$scope.traitsList[obj.added] = {
typeName: obj.added
};
if ($.isEmptyObject($scope.traitsList)) {
$scope.noTags = true;
} else {
$scope.noTags = false;
}
});
$scope.openAddTag = function() {
$state.go('addTag', {
tId: $scope.id
});
};
$scope.detachTag = function($event, name) {
$scope.displayName = name;
};
$scope.removeTag = function() {
$$("#myModal").modal();
var name = $scope.displayName;
detailsResource.detachTag({
id: $stateParams.id,
tagName: name
}, function(data) {
if (data.requestId !== undefined && data.GUID === $stateParams.id && data.traitName === name) {
$$("#" + name).remove();
delete $scope.traitsList[name];
if ($.isEmptyObject($scope.traitsList)) {
$scope.noTags = true;
} else {
$scope.noTags = false;
}
}
});
};
$scope.cancel = function() {
$$(".modal-backdrop").remove();
};
getResourceData();
$scope.$on('refreshResourceData', getResourceData);
}
]);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags.instance', []);
<!--
~ 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.
-->
<div class="modal-header">
<h4 class="modal-title">Add tag
<button type="button" class="close" data-dismiss="modal" ng-click="cancel()">&times;</button>
</h4>
</div>
<div class="modal-body">
<div class="form-group">
<div align="center" class="error col-sm-12 tabsearch-result pointer" title="{{error}}" ng-show="isError">
{{error}}
</div>
<div class="alert alert-success" ng-if="isSuccess" >
{{successmessage}}
</div>
</div>
<form name="tagDefinitionform" class="css-form" novalidate>
<div class="form-group hide">
<label for="category" class="col-sm-4 control-label">Category</label>
<div class="col-sm-8 input-spacing">
<select class="form-control" id="category" name="category"
ng-model="category" ng-change="categoryChange()" required>
<option value="{{key}}"
ng-repeat="(key, value) in categoryList"
ng-selected="{{key===category}}">{{key}}</option>
</select>
</div>
</div>
<div class="form-group" ng-class="{'has-error': (tagDefinitionform.tagDefinition.$invalid && tagDefinitionform.tagDefinition.$dirty)}">
<label class="control-label col-sm-4" for="tagDefinition">Tag definition</label>
<div class="col-sm-8 input-spacing">
<select ng-model="selectedType" class="form-control" id="tagDefinition" name="tagDefinition"
ng-change="getAttributeDefinations(); isError =false; isSuccess=false;" required>
<option ng-repeat="data in typesList " title="{{data}}">{{data}}</option>
</select>
</div>
</div>
<div class="form-group" ng-repeat="(key, value) in propertiesList" ng-class="{'has-error': (tagDefinitionform.propertyId_{{$index}}.$invalid && tagDefinitionform.propertyId_{{$index}}.$dirty)}">
<label class="control-label col-sm-4" for="propertyId_{{$index}}">{{key}}</label>
<div class="col-sm-8 input-spacing">
<input type="text" class="form-control" id="propertyId_{{$index}}" name="propertyId_{{$index}}" ng-model="propertiesList[key]" ng-required="isRequired[key]"/>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-success" type="submit" ng-click="ok($event, tagDefinitionform)" ng-disabled="tagDefinitionform.$invalid">Save</button>
<button class="btn btn-warning" type="button" ng-click="cancel()">Cancel</button>
</div>
</form>
</div>
<!--
~ 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.
-->
<div data-ng-controller="instanceTagController" >
<div>
<a ng-click="openAddTag()" class="add-tag btn btn-primary pull-right">Add Tag</a>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>Tag</th>
<th>Attributes</th>
<th>Tools</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="trait in traitsList" class="pointer" ng-if="!noTags" id="{{trait.typeName}}">
<td class="col-lg-5" >
{{trait.typeName}}
</td>
<td class="col-lg-5 tag-attr" >
{{trait.values}}
</td>
<td class="col-lg-1 tag-align">
<a href="" class="deleteTag confirm-delete" data-toggle="modal" data-target="#myModal" ><i class="fa fa-trash-o " ng-click="detachTag($event, trait.typeName)"></i></a>
</td>
</tr>
</tbody>
</table>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="myModalLabel">Are you sure you want to delete ? </h4>
</div>
<div class="modal-body">
<b> Tag : {{displayName}} </b>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" ng-click="cancel()">Close</button>
<button type="button" id="btnDelete" class="btn btn-primary" data-dismiss="modal" ng-click="removeTag()">Delete</button>
</div>
</div>
</div>
</div>
<div ng-if="noTags" class="no-tags">
No tags to display
</div>
</div>
\ No newline at end of file
/*
* 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.
*/
'use strict';
angular.module('dgc.tags').factory('tagClasses', ['lodash', function classFactory(_) {
function Tag(props) {
return _.merge({
superTypes: [],
typeName: null,
typeDescription: null,
attributeDefinitions: []
}, props);
}
var classes = {
ENUM: 'org.apache.atlas.typesystem.types.EnumType',
TRAIT: 'org.apache.atlas.typesystem.types.TraitType',
STRUCT: 'org.apache.atlas.typesystem.types.StructType',
CLASS: 'org.apache.atlas.typesystem.types.ClassType'
};
var instanceRespons = {
ENUM: 'enumTypes',
STRUCT: 'structTypes',
TRAIT: 'traitTypes',
SUPER: 'superTypes'
};
function Class(classId, className) {
this.tags = [];
this.id = classId;
this.name = className;
this.addTag = function addTag(props) {
var tag = new Tag(_.merge({
hierarchicalMetaTypeName: className
}, props));
this.tags.push(tag);
return this;
};
this.clearTags = function removeTags() {
this.tags = [];
return this;
};
this.toJson = function createJson() {
var classTypeKey = (this.id.toLowerCase() + 'Types'),
output = {};
_.forEach(classes, function addTypesArray(className, classKey) {
output[classKey.toLowerCase() + 'Types'] = [];
});
output[classTypeKey] = this.tags;
return output;
};
this.instanceInfo = function() {
return instanceRespons[classId];
};
}
return _.chain(classes)
.map(function createClass(className, classId) {
return new Class(classId, className);
})
.indexBy('id')
.value();
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags', ['dgc.details']);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags').factory('tagsResource', ['$resource', 'atlasConfig', function($resource, atlasConfig) {
return $resource(atlasConfig.API_ENDPOINTS.CREATE_TRAIT + '/:id', {}, {
query: {
method: 'GET',
transformResponse: function(data) {
var categories = [];
if (data) {
angular.forEach(data.results, function(value) {
categories.push({
text: value
});
});
}
return categories;
},
responseType: 'json',
isArray: true
}
});
}]);
/*
* 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.
*/
'use strict';
angular.module('dgc.tags').config(['$stateProvider',
function($stateProvider) {
$stateProvider.state('tags', {
url: '/tags',
templateUrl: '/modules/tags/definition/views/add.html'
});
$stateProvider.state('addTag', {
parent: 'details',
params: {
tId: null,
frm: 'addTag'
},
onEnter: ['$stateParams', '$state', '$modal', 'navigationResource', function($stateParams, $state, $modal, navigationResource) {
$modal.open({
templateUrl: '/modules/tags/instance/views/createTag.html',
controller: 'createTagController',
windowClass: 'create-tag-entity',
resolve: {
typesList: function() {
return navigationResource.get().$promise;
}
}
}).result.finally(function() {
$state.go('^');
});
}]
});
}
]);
......@@ -466,7 +466,6 @@
<module>repository</module>
<module>authorization</module>
<module>catalog</module>
<!-- <module>dashboard</module> -->
<module>dashboardv2</module>
<module>webapp</module>
......@@ -1053,13 +1052,6 @@
<version>${project.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboard</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency> -->
<dependency>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboardv2</artifactId>
......
......@@ -22,6 +22,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset
ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
ALL CHANGES:
ATLAS-731 Remove dashboard module in Atlas, replaced by dashboardv2 (kevalbhatt18 via sumasai)
ATLAS-664 UI: Add Support for Versioning / History (Kalyanikashikar via yhemanth)
ATLAS-833 Make default build profile for External HBase and Solr (tbeerbower via yhemanth)
ATLAS-841 mvn clean install of Atlas is failing python unit tests (yhemanth)
......
......@@ -292,14 +292,7 @@
<artifactId>spring-ldap-core</artifactId>
<version>${spring-ldap-core.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboard</artifactId>
<type>war</type>
</dependency> -->
<dependency>
<dependency>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboardv2</artifactId>
<type>war</type>
......@@ -315,10 +308,6 @@
<archiveClasses>true</archiveClasses>
<attachClasses>true</attachClasses>
<overlays>
<!-- <overlay>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboard</artifactId>
</overlay> -->
<overlay>
<groupId>org.apache.atlas</groupId>
<artifactId>atlas-dashboardv2</artifactId>
......
<!--
~ 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.
-->
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="Date-Revision-yyyymmdd" content="20130821"/>
<meta http-equiv="Content-Language" content="en"/>
<title>Apache Atlas - Data Governance for Hadoop</title>
</head>
<body class="topBarEnabled">
<h1> Apache Atlas </h1>
<a href="./dashboard/index.html" title="Atlas">Atlas Dashboard</a>
<br/>
More information at: <a href="http://atlas.incubator.apache.org/index.html" title="About">Project Website</a>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment