+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/robots.txt b/app/robots.txt
new file mode 100755
index 0000000..9417495
--- /dev/null
+++ b/app/robots.txt
@@ -0,0 +1,3 @@
+# robotstxt.org
+
+User-agent: *
diff --git a/app/scripts/app.js b/app/scripts/app.js
new file mode 100644
index 0000000..2c1d9ea
--- /dev/null
+++ b/app/scripts/app.js
@@ -0,0 +1,38 @@
+'use strict';
+
+/**
+ * @ngdoc overview
+ * @name apacheZeppelinGsocApp
+ * @description
+ * # apacheZeppelinGsocApp
+ * @author madhuka udantha
+ *
+ * Main module of the application.
+ */
+angular
+ .module('apacheZeppelinGsocApp', [
+ 'ngResource',
+ 'ngRoute',
+ 'googlechart',
+ 'highcharts-ng',
+ 'nvd3'
+ ])
+ .config(function ($routeProvider) {
+ $routeProvider
+ .when('/home', {
+ templateUrl: 'views/about.html'
+ })
+ .when('/milestone01', {
+ templateUrl: 'views/milestone01.html',
+ controller:'ChartCtrl'
+ })
+ .when('/contact', {
+ templateUrl: 'views/contact.html'
+ })
+ .when('/', {
+ templateUrl: 'views/about.html'
+ })
+ .otherwise({
+ redirectTo: '/'
+ });
+ });
diff --git a/app/scripts/chart-factory/chart-factory.js b/app/scripts/chart-factory/chart-factory.js
new file mode 100644
index 0000000..4a5448f
--- /dev/null
+++ b/app/scripts/chart-factory/chart-factory.js
@@ -0,0 +1,28 @@
+'use strict';
+
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.Chart Factory
+ * @description
+ * # Gobal Chart Factory
+ * Controller of the top navigation, mainly use for the dropdown menu
+ *
+ */
+
+angular.module('apacheZeppelinGsocApp').factory('ChartFactory', function() {
+
+ //Genric Chart model
+ var ChartFactory = function(chartLibName, chartModel) {
+ this.libname = chartLibName;
+ this.model = chartModel;
+ this.viewModel = {};
+ this.type = {};
+ this.data = {};
+ };
+
+ ChartFactory.setChartType = function(chartType) {
+ ChartFactory.type = chartType;
+ };
+
+ return ChartFactory;
+});
\ No newline at end of file
diff --git a/app/scripts/chart-factory/google-chart-factory.js b/app/scripts/chart-factory/google-chart-factory.js
new file mode 100644
index 0000000..d3347a6
--- /dev/null
+++ b/app/scripts/chart-factory/google-chart-factory.js
@@ -0,0 +1,86 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.GoogleChartFactory
+ * @description
+ * # Extending Gobal Chart Factory for Google Chart Model
+ *
+ */
+angular.module('apacheZeppelinGsocApp').factory('GoogleChartFactory', function(
+ ChartFactory) {
+ var ChartList = {
+ 'Bar': 'BarChart',
+ 'Line': 'LineChart'
+ };
+ //googleChart model (sample chart data model)
+ //TO-DO Sample Data will remove after model set.
+ var GoogelChartChartModel = {
+ type: 'BarChart',
+ cssStyle: 'height:400px; width:500px;',
+ data: {
+ 'cols': [{
+ id: 'pizza',
+ label: 'Pizza',
+ type: 'string'
+ }, {
+ id: 'populartiy',
+ label: 'Populartiy',
+ type: 'number'
+ }],
+ 'rows': [{
+ c: [{
+ v: 'Pepperoni'
+ }, {
+ v: 14
+ }]
+ }]
+ },
+ options: {
+ 'isStacked': 'true',
+ 'fill': 20,
+ 'height': 300,
+ 'displayExactValues': true,
+ 'vAxis': {
+ 'gridlines': {
+ 'count': 6
+ }
+ },
+ 'hAxis': {
+ 'title': 'hAxis title'
+ }
+ },
+ formatters: {}
+ };
+
+ function googleChartModel(d) {
+ return {
+ c: [{
+ v: d.Make
+ }, {
+ v: +d.Length
+ }]
+ };
+ }
+
+ function getGoogleChart(error, rows) {
+ GoogelChartChartModel.data.rows = rows;
+ }
+ var googlexChart = {
+ model: googleChartModel,
+ get: getGoogleChart
+ };
+
+ function setChartTypeView(chartType) {
+ GoogleChartFactory.viewModel.type = ChartList[chartType];
+ }
+ //google chart
+ var GoogleChartFactory = new ChartFactory('googleChart', googlexChart);
+ GoogleChartFactory.viewModel = GoogelChartChartModel;
+ GoogleChartFactory.setChartType = function(chartType) {
+ GoogleChartFactory.type = chartType;
+ setChartTypeView(chartType);
+ };
+ // define a new internal private method for this chart object
+ function setChartAxis() {}
+ return GoogleChartFactory;
+});
\ No newline at end of file
diff --git a/app/scripts/chart-factory/high-chart-factory.js b/app/scripts/chart-factory/high-chart-factory.js
new file mode 100644
index 0000000..8d59daf
--- /dev/null
+++ b/app/scripts/chart-factory/high-chart-factory.js
@@ -0,0 +1,82 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.HighChartFactory
+ * @description
+ * # Extending Gobal Chart Factory for High Chart Model
+ *
+ */
+angular.module('apacheZeppelinGsocApp').factory('HighChartFactory', function(
+ ChartFactory) {
+ var ChartList = {
+ 'Bar': 'bar',
+ 'Line': 'line'
+ };
+ //highChart model
+ var HighChartChartModel = {
+ options: {
+ chart: {
+ type: 'bar'
+ }
+ },
+ xAxis: {
+ categories: []
+ },
+ series: [{
+ data: []
+ }],
+ size: {
+ width: 500,
+ height: 300
+ },
+ loading: false
+ };
+ //high chart
+ // define a new internal private method for this chart object
+ function highChartModel(d) {
+ return +d.Length;
+ }
+
+ function getHighChart(error, rows) {
+ console.log('loading for view');
+ console.log(rows);
+ HighChartChartModel.series[0].data = rows;
+ }
+
+ function setChartTypeView(chartType) {
+ HighChartFactory.viewModel.options.chart.type = ChartList[chartType];
+ }
+
+ function setChartAxis() {}
+ var highxChart = {
+ model: highChartModel,
+ get: getHighChart
+ };
+ //setting up the highchart and chart view model for this chart
+ var HighChartFactory = new ChartFactory('highxChart', highxChart);
+ HighChartChartModel.series[0].data = null;
+ HighChartFactory.viewModel = HighChartChartModel;
+ HighChartFactory.setChartType = function(chartType) {
+ HighChartFactory.type = chartType;
+ setChartTypeView(chartType);
+ };
+ HighChartFactory.setChartAxis = function(data) {
+ loadYAxisLabel(data);
+ };
+ var highAxisLabels = {};
+
+ function getHighYaxis(error, rows) {
+ console.log(rows);
+ highAxisLabels = rows;
+ HighChartFactory.viewModel.xAxis.categories = highAxisLabels;
+ }
+
+ function highYaxisModel(d) {
+ return d.Make;
+ }
+
+ function loadYAxisLabel(fileName) {
+ highAxisLabels = d3.csv(fileName).row(highYaxisModel).get(getHighYaxis);
+ }
+ return HighChartFactory;
+});
\ No newline at end of file
diff --git a/app/scripts/chart-factory/nvd3-chart-factory.js b/app/scripts/chart-factory/nvd3-chart-factory.js
new file mode 100644
index 0000000..0454e92
--- /dev/null
+++ b/app/scripts/chart-factory/nvd3-chart-factory.js
@@ -0,0 +1,104 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.NVD3ChartFactory
+ * @description
+ * # Extending Gobal Chart Factory for NVD3 Chart Model
+ *
+ */
+angular.module('apacheZeppelinGsocApp').factory('NVD3ChartFactory', function(
+ ChartFactory) {
+ var ChartList = {
+ 'Bar': 'discreteBarChart',
+ 'Line': 'lineChart'
+ };
+ //NVD3 Chart model
+ var NVD3ChartChartModel = {
+ options: {
+ chart: {
+ type: 'discreteBarChart',
+ height: 300,
+ width: 500,
+ showLegend: true,
+ margin: {
+ top: 20,
+ right: 20,
+ bottom: 20,
+ left: 20
+ },
+ x: function(d) {
+ return d.valuex;
+ },
+ y: function(d) {
+ return d.value;
+ },
+ showValues: true,
+ transitionDuration: 500,
+ xAxis: {
+ axisLabel: 'X Axis'
+ },
+ yAxis: {
+ axisLabel: 'Y Axis',
+ axisLabelDistance: 10
+ }
+ }
+ },
+ data: []
+ };
+
+ function getNVD3(error, rows) {
+ var data = {
+ 'values': rows
+ };
+ NVD3ChartChartModel.data[0] = data;
+ console.log(NVD3ChartChartModel.data);
+ }
+
+ function nvd3Model(d) {
+ return {
+ label: d.Make,
+ value: +d.Length,
+ valuex: +d.No
+ };
+ }
+
+ function setChartTypeView(chartType) {
+ NVD3ChartFactory.viewModel.options.chart.type = ChartList[chartType];
+ }
+ var NVD3Chart = {
+ model: nvd3Model,
+ get: getNVD3
+ };
+ //nvd3 chart
+ var NVD3ChartFactory = new ChartFactory('NVD3Chart', NVD3Chart);
+ NVD3ChartFactory.viewModel = NVD3ChartChartModel;
+ NVD3ChartFactory.setChartType = function(chartType) {
+ NVD3ChartFactory.type = chartType;
+ setChartTypeView(chartType);
+ };
+ NVD3ChartFactory.setChartAxis = function(data) {
+ loadYAxisLabel(data);
+ };
+ // define a new internal private method for this chart object
+ var nvd3AxisLabels = {};
+
+ function getNVD3Yaxis(error, rows) {
+ console.log(rows);
+ nvd3AxisLabels = rows;
+ NVD3ChartFactory.viewModel.options.chart.xAxis = {
+ 'axisLabel': 'Make',
+ 'tickFormat': function(d) {
+ return nvd3AxisLabels[d];
+ }
+ };
+ }
+
+ function nvd3YaxisModel(d) {
+ return d.Make;
+ }
+
+ function loadYAxisLabel(fileName) {
+ nvd3AxisLabels = d3.csv(fileName).row(nvd3YaxisModel).get(getNVD3Yaxis);
+ }
+ return NVD3ChartFactory;
+});
\ No newline at end of file
diff --git a/app/scripts/config/chart-config.js b/app/scripts/config/chart-config.js
new file mode 100644
index 0000000..22c5b5a
--- /dev/null
+++ b/app/scripts/config/chart-config.js
@@ -0,0 +1,24 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.configure
+ * @description
+ * # configures will contains the configuration details for charting library
+ *
+ * @author madhuka udantha
+ */
+angular.module('apacheZeppelinGsocApp')
+ .constant('chartConfig', {
+ 'libraryName': [{
+ 'library': 'highChart',
+ 'template': 'views/charts/highchart.html'
+ }, {
+ 'library': 'NVD3Chart',
+ 'template': 'views/charts/nvd3chart.html'
+ }, {
+ 'library': 'googleChart',
+ 'template': 'views/charts/googlechart.html'
+ }],
+ 'dataFiles': ['car', 'bike'],
+ 'chartTypes': ['Line', 'Bar']
+ });
\ No newline at end of file
diff --git a/app/scripts/controllers/chart-controllers.js b/app/scripts/controllers/chart-controllers.js
new file mode 100644
index 0000000..1a7d0a8
--- /dev/null
+++ b/app/scripts/controllers/chart-controllers.js
@@ -0,0 +1,111 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.controller:ChartCtrl
+ * @description
+ * # ChartCtrl
+ * Controller of chart library, type.
+ *
+ * @author madhuka udantha
+ */
+angular.module('apacheZeppelinGsocApp').controller('ChartCtrl', function($scope,
+ ChartFactory, GoogleChartFactory, HighChartFactory, NVD3ChartFactory,
+ ChartService, ChartMetaService, chartConfig) {
+ var vm = this;
+ //loading from chart config file.
+ var libraryName = chartConfig.libraryName;
+ var files = chartConfig.dataFiles;
+ var chartTypes = chartConfig.chartTypes;
+
+ function renderChart(chart, datax) {
+ datax.row(chart.model).get(chart.get);
+ }
+ var data = {};
+
+ function loadData(fileName) {
+ setButtonActive('dataButton', fileName);
+ data = getData(fileName);
+ ChartMetaService.setChartDataSetName(fileName);
+ drawChart(data);
+ }
+
+ function loadChartLibrary(libraryIndex) {
+ setButtonActive('chartLibraryButton', libraryName[libraryIndex].library);
+ ChartMetaService.setChartLib(libraryName[libraryIndex].library);
+ ChartMetaService.setChartTemplateURL(libraryName[libraryIndex].template);
+ if (ChartMetaService.getChartType() === null) {
+ //setting default chart type
+ ChartMetaService.setChartType('Bar');
+ }
+ drawChart(data);
+ }
+
+ function getChartTemplateURL() {
+ return ChartMetaService.getChartTemplateURL();
+ }
+
+ function loadChartType(chartType) {
+ ChartMetaService.setChartType(chartType);
+ setButtonActive('chartTypeButton', chartType);
+ drawChart(data);
+ //To-Do CHart model will be completing for rendering the chart
+ }
+ //chart is generated from service, service is using HighChartfactory.HighCHart Factory is extended version of ChartFactory.
+ function drawChart(data) {
+ //Checking chart requirement is completed
+ var myNewChart = {};
+ var myChartType = ChartMetaService.getChartType();
+ console.log(myChartType);
+ switch (ChartMetaService.getChartLib()) {
+ case 'NVD3Chart':
+ //set data for NVD3
+ myNewChart = ChartService.getNVD3Chart(myChartType);
+ vm.data = myNewChart.viewModel.data;
+ vm.options = myNewChart.viewModel.options;
+ break;
+ case 'highChart':
+ myNewChart = ChartService.getHighChart(myChartType);
+ vm.chartConfig = myNewChart.viewModel;
+ break;
+ case 'googleChart':
+ myNewChart = ChartService.getGoogleChart(myChartType);
+ vm.chart = myNewChart.viewModel;
+ break;
+ }
+ if (myNewChart.model) {
+ renderChart(myNewChart.model, data);
+ }
+ //NVD3 axis update
+ }
+
+ function getData(fileName) {
+ return d3.csv('data/' + fileName + '.csv');
+ }
+ //default button picker
+ var active = {
+ 'dataButton': false,
+ 'chartLibraryButton': false,
+ 'chartTypeButton': false
+ };
+
+ function setButtonActive(set, type) {
+ active[set] = type;
+ }
+
+ function isButtonActive(set, type) {
+ return active[set] === type;
+ }
+
+ function isButtonSelected(set) {
+ return active[set];
+ }
+ vm.loadData = loadData;
+ vm.isButtonActive = isButtonActive;
+ vm.isButtonSelected = isButtonSelected;
+ vm.loadChartLibrary = loadChartLibrary;
+ vm.loadChartType = loadChartType;
+ vm.files = files;
+ vm.libraryName = libraryName;
+ vm.chartTypes = chartTypes;
+ vm.getChartTemplateURL = getChartTemplateURL;
+});
\ No newline at end of file
diff --git a/app/scripts/controllers/nav-controller.js b/app/scripts/controllers/nav-controller.js
new file mode 100644
index 0000000..bcb9415
--- /dev/null
+++ b/app/scripts/controllers/nav-controller.js
@@ -0,0 +1,25 @@
+'use strict';
+
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.controller:navCtrl
+ * @description
+ * # navCtrl
+ * Controller of the top navigation, mainly use for the dropdown menu
+ *
+ * @author madhuka udantha
+ */
+
+angular.module('apacheZeppelinGsocApp').controller('NavCtrl', function($scope, $rootScope, $location) {
+
+ /*vm stands for ViewModel*/
+ var vm = this;
+
+ function isActive(viewLocation) {
+ return viewLocation === $location.path();
+ }
+
+ vm.isActive = isActive;
+
+
+});
\ No newline at end of file
diff --git a/app/scripts/services/chart-meta-service.js b/app/scripts/services/chart-meta-service.js
new file mode 100644
index 0000000..e839e09
--- /dev/null
+++ b/app/scripts/services/chart-meta-service.js
@@ -0,0 +1,57 @@
+'use strict';
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.ChartMetaService
+ * @description
+ * # ChartMetaService will be using Handle Basic Chart Meta Details.
+ *
+ */
+angular.module('apacheZeppelinGsocApp').service('ChartMetaService', function() {
+ /*Chart Meta Data Service*/
+ var MetaModel = {
+ ChartLib: null,
+ ChartTemplateURL: null,
+ ChartType: null,
+ ChartDataSetName: null,
+ ChartDataSetPath: null,
+ ChartData: null
+ };
+ //getters
+ this.getChartLib = function() {
+ return MetaModel.ChartLib;
+ };
+ this.getChartType = function() {
+ return MetaModel.ChartType;
+ };
+ this.getChartTemplateURL = function() {
+ return MetaModel.ChartTemplateURL;
+ };
+ this.getChartDataSetName = function() {
+ return MetaModel.ChartDataSetName;
+ };
+ this.getChartDataSetPath = function() {
+ return MetaModel.ChartDataSetPath;
+ };
+ this.getChartData = function() {
+ return MetaModel.ChartData;
+ };
+ //setters
+ this.setChartLib = function(ChartLib) {
+ MetaModel.ChartLib = ChartLib;
+ };
+ this.setChartType = function(ChartType) {
+ MetaModel.ChartType = ChartType;
+ };
+ this.setChartTemplateURL = function(ChartTemplateURL) {
+ MetaModel.ChartTemplateURL = ChartTemplateURL;
+ };
+ this.setChartDataSetName = function(ChartDataSetName) {
+ MetaModel.ChartDataSetName = ChartDataSetName;
+ MetaModel.ChartDataSetPath = 'data/' + ChartDataSetName + '.csv';
+ MetaModel.ChartData = d3.csv(MetaModel.ChartDataSetPath);
+ };
+ //looking for UI model logic
+ this.isMetaCompleted = function() {
+ return MetaModel.ChartType !== null;
+ };
+});
\ No newline at end of file
diff --git a/app/scripts/services/chart-service.js b/app/scripts/services/chart-service.js
new file mode 100644
index 0000000..163c757
--- /dev/null
+++ b/app/scripts/services/chart-service.js
@@ -0,0 +1,35 @@
+'use strict';
+
+/**
+ * @ngdoc function
+ * @name apacheZeppelinGsocApp.ChartService
+ * @description
+ * # ChartService will be using ChartFactories.
+ *
+ */
+
+
+angular.module('apacheZeppelinGsocApp').service('ChartService', function(HighChartFactory, GoogleChartFactory, NVD3ChartFactory,ChartMetaService) {
+
+ /*using chart facotry*/
+ this.getHighChart = function(chartType) {
+ var myChart = HighChartFactory;
+ myChart.setChartType(chartType);
+ myChart.setChartAxis(ChartMetaService.getChartDataSetPath());
+ return myChart;
+ };
+
+ this.getGoogleChart = function(chartType) {
+ var myChart = GoogleChartFactory;
+ myChart.setChartType(chartType);
+ return myChart;
+ };
+
+ this.getNVD3Chart = function(chartType) {
+ var myChart = NVD3ChartFactory;
+ myChart.setChartType(chartType);
+ myChart.setChartAxis(ChartMetaService.getChartDataSetPath());
+ return myChart;
+ };
+
+});
\ No newline at end of file
diff --git a/app/styles/chart.css b/app/styles/chart.css
new file mode 100644
index 0000000..d01957f
--- /dev/null
+++ b/app/styles/chart.css
@@ -0,0 +1,5 @@
+/*nvd3 chart svg size fixing */
+svg {
+ width: 550px !important;
+ height: 350px !important;
+}
\ No newline at end of file
diff --git a/css/cover.css b/app/styles/cover.css
similarity index 92%
rename from css/cover.css
rename to app/styles/cover.css
index 06c8357..443ea9e 100644
--- a/css/cover.css
+++ b/app/styles/cover.css
@@ -14,10 +14,10 @@ a:hover {
.btn-default,
.btn-default:hover,
.btn-default:focus {
- color: #fff;
text-shadow: none; /* Prevent inheritence from `body` */
- background-color: #333;
- border: 1px solid #333;
+ color: #333333;
+ background-color: #ffffff;
+ border-color: #cccccc;
}
@@ -36,6 +36,7 @@ body {
text-shadow: 0 1px 3px rgba(0,0,0,.5);
}
+
/* Extra markup and styles for table-esque vertical and horizontal centering */
.site-wrapper {
display: table;
@@ -58,6 +59,14 @@ body {
.inner {
padding: 30px;
}
+.box {
+ padding-top: 10px;
+ height: 400px;
+ width: 550px;
+ vertical-align: center;
+ margin:0 auto;
+ text-align: center;
+}
/*
@@ -119,8 +128,7 @@ body {
}
.inx {
- padding: 0 20px;
- text-align: left;
+
}
@@ -166,4 +174,4 @@ body {
.cover-container {
width: 1200px;
}
-}
+}
\ No newline at end of file
diff --git a/app/styles/main.css b/app/styles/main.css
new file mode 100755
index 0000000..e69de29
diff --git a/partials/about.html b/app/views/about.html
similarity index 99%
rename from partials/about.html
rename to app/views/about.html
index 77b3053..7a16361 100644
--- a/partials/about.html
+++ b/app/views/about.html
@@ -1,7 +1,7 @@
-
-
Apache Zeppelin Gsoc 2015
-
Zeppelin is a collaborative data analytics and visualization tool for distributed, general-purpose data processing systems such as Apache Spark and Apache Flink. It has two main features, the data analytic phase and the data visualization phase. This project is an improvement or a re-design of the Data Visualization Component.
Zeppelin is a collaborative data analytics and visualization tool for distributed, general-purpose data processing systems such as Apache Spark and Apache Flink. It has two main features, the data analytic phase and the data visualization phase. This project is an improvement or a re-design of the Data Visualization Component.
\ No newline at end of file
diff --git a/app/views/charts/googlechart.html b/app/views/charts/googlechart.html
new file mode 100644
index 0000000..143dd55
--- /dev/null
+++ b/app/views/charts/googlechart.html
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/views/charts/highchart.html b/app/views/charts/highchart.html
new file mode 100644
index 0000000..f9a3342
--- /dev/null
+++ b/app/views/charts/highchart.html
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/views/charts/nvd3chart.html b/app/views/charts/nvd3chart.html
new file mode 100644
index 0000000..6760d18
--- /dev/null
+++ b/app/views/charts/nvd3chart.html
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/partials/contact.html b/app/views/contact.html
similarity index 97%
rename from partials/contact.html
rename to app/views/contact.html
index ef54f80..5624850 100644
--- a/partials/contact.html
+++ b/app/views/contact.html
@@ -1,9 +1,9 @@
-
\ No newline at end of file
diff --git a/app/views/milestone01.html b/app/views/milestone01.html
new file mode 100644
index 0000000..7aaafb5
--- /dev/null
+++ b/app/views/milestone01.html
@@ -0,0 +1,37 @@
+
\ No newline at end of file
diff --git a/bower b/bower
new file mode 100644
index 0000000..ed00320
--- /dev/null
+++ b/bower
@@ -0,0 +1,17 @@
+#
+# 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.
+#
+"node/node" "./node_modules/bower/bin/bower" "$@"
diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..d00b505
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,22 @@
+{
+ "name": "apacheZeppelinGsoc",
+ "version": "0.0.0",
+ "dependencies": {
+ "angular": "^1.4.1",
+ "bootstrap": "~3.2.0",
+ "angular-resource": "^1.3.0",
+ "angular-route": "^1.3.0",
+ "angular-bootstrap": "~0.13.0",
+ "angular-google-chart": "~0.0.11",
+ "d3": "~3.3.13",
+ "nvd3": "~1.1.15-beta",
+ "highcharts-release": "~4.1.6",
+ "highcharts-ng": "~0.0.8",
+ "angular-nvd3": "~0.1.1"
+ },
+ "devDependencies": {
+ "angular-mocks": "^1.3.0"
+ },
+ "appPath": "app",
+ "moduleName": "apacheZeppelinGsocApp"
+}
diff --git a/favicon.ico b/favicon.ico
deleted file mode 100644
index 7e5049a..0000000
Binary files a/favicon.ico and /dev/null differ
diff --git a/grunt b/grunt
new file mode 100644
index 0000000..759cae7
--- /dev/null
+++ b/grunt
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+"node/node" "./node_modules/.bin/grunt" "$@"
+
diff --git a/index.html b/index.html
deleted file mode 100644
index 1fcf3cb..0000000
--- a/index.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
-
-
- Apache Zeppelin GSOC15
-
-
-
-
-
-
-
-
-
-
-