[PORTAL-7] Rebase

This rebasing includes common libraries and common overlays projects
abstraction of components

Change-Id: I9a24a338665c7cd058978e8636bc412d9e2fdce8
Signed-off-by: st782s <statta@research.att.com>
diff --git a/ecomp-portal-FE-os/Gruntfile.js b/ecomp-portal-FE-os/Gruntfile.js
new file mode 100644
index 0000000..812fc80
--- /dev/null
+++ b/ecomp-portal-FE-os/Gruntfile.js
@@ -0,0 +1,778 @@
+// Generated on 2015-09-27 using generator-angular-fullstack 2.1.1
+'use strict';
+
+module.exports = function (grunt) {
+    var localConfig;
+    try {
+        localConfig = require('./server/config/local.env');
+    } catch (e) {
+        localConfig = {};
+    }
+
+    // Load grunt tasks automatically, when needed
+    require('jit-grunt')(grunt, {
+        express: 'grunt-express-server',
+        useminPrepare: 'grunt-usemin',
+        ngtemplates: 'grunt-angular-templates',
+        cdnify: 'grunt-google-cdn',
+        protractor: 'grunt-protractor-runner',
+        buildcontrol: 'grunt-build-control',
+        ngconstant: 'grunt-ng-constant'
+    });
+
+    // Time how long tasks take. Can help when optimizing build times
+    require('time-grunt')(grunt);
+
+    grunt.loadNpmTasks('grunt-exec');
+
+    // Define the configuration for all the tasks
+    grunt.initConfig({
+
+        // Project settings
+        pkg: grunt.file.readJSON('package.json'),
+        yeoman: {
+            // configurable paths
+            client: require('./bower.json').appPath || 'client',
+            dist: 'dist'
+        },
+        express: {
+            options: {
+                port: process.env.PORT || 9000
+            },
+            dev: {
+                options: {
+                    script: 'server/app.js',
+                    args:[
+                        grunt.option('min') ? '' : '--unmin',
+                        grunt.option('server-conf') ? '--server-conf=' + grunt.option('server-conf') : '--server-conf=development'
+                    ]
+                }
+            },
+            dev_debug: {
+                options: {
+                    script: 'server/app.js',
+                    debug: true,
+                    args:[
+                        grunt.option('min') ? '' : '--unmin',
+                        grunt.option('server-conf') ? '--server-conf=' + grunt.option('server-conf') : '--server-conf=development'
+                    ]
+                }
+            },
+            mock: {
+                options: {
+                    script: 'mock/server.js'
+                }
+            },
+            prod: {
+                options: {
+                    script: 'dist/server/app.js'
+                }
+            }
+        },
+        open: {
+            server: {
+                url: 'http://localhost:<%= express.options.port %>/ecompportal/applicationsHome'
+            }
+        },
+        watch: {
+            injectJS: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.js',
+                    '!<%= yeoman.client %>/{app,components}/**/*.spec.js',
+                    '!<%= yeoman.client %>/{app,components}/**/*.mock.js',
+                    '!<%= yeoman.client %>/app/app.js'],
+                tasks: ['injector:scripts']
+            },
+            injectCss: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.css'
+                ],
+                tasks: ['injector:css']
+            },
+            mochaTest: {
+                files: ['server/**/*.spec.js'],
+                tasks: ['env:test', 'mochaTest']
+            },
+            jsTest: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.spec.js',
+                    '<%= yeoman.client %>/{app,components}/**/*.mock.js'
+                ],
+                tasks: ['newer:jshint:all', 'karma']
+            },
+            injectLess: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.less'],
+                tasks: ['injector:less']
+            },
+            less: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.less'],
+                tasks: ['less', 'autoprefixer']
+            },
+            babel: {
+                files: [
+                    '<%= yeoman.client %>/{app,components}/**/*.js',
+                    '!<%= yeoman.client %>/{app,components}/**/*.spec.js'
+                ],
+                tasks: ['babel']
+            },
+            gruntfile: {
+                files: ['Gruntfile.js']
+            },
+            livereload: {
+                files: [
+                    '{.tmp,<%= yeoman.client %>}/{app,components}/**/*.css',
+                    '{.tmp,<%= yeoman.client %>}/{app,components}/**/*.html',
+
+                    '.tmp/{app,components}/**/*.js',
+
+                    '!{.tmp,<%= yeoman.client %>}{app,components}/**/*.spec.js',
+                    '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.mock.js',
+                    '<%= yeoman.client %>/assets/images/{,*//*}*.{png,jpg,jpeg,gif,webp,svg}'
+                ],
+                options: {
+                    livereload: true
+                }
+            },
+            express: {
+                files: [
+                    'server/**/*.{js,json}'
+                ],
+                tasks: ['express:dev', 'wait'],
+                options: {
+                    livereload: true,
+                    spawn: false //Without this option specified express won't be reloaded
+                }
+            },
+            mock:{
+                files:[
+                    'mock/**/*'
+                ],
+                tasks:['express:mock'],
+                options:{
+                    spawn: false
+                }
+            },
+            clientConf: {
+                files: [
+                    'client/configurations/*.json'
+                ],
+                tasks: ['ngconstant']
+            }
+        },
+
+        // Make sure code styles are up to par and there are no obvious mistakes
+        jshint: {
+            options: {
+                jshintrc: '<%= yeoman.client %>/.jshintrc',
+                reporter: require('jshint-stylish')
+            },
+            server: {
+                options: {
+                    jshintrc: 'server/.jshintrc'
+                },
+                src: [
+                    'server/**/*.js',
+                    '!server/**/*.spec.js'
+                ]
+            },
+            serverTest: {
+                options: {
+                    jshintrc: 'server/.jshintrc-spec'
+                },
+                src: ['server/**/*.spec.js']
+            },
+            all: [
+                '<%= yeoman.client %>/{app,components}/**/*.js',
+                '!<%= yeoman.client %>/{app,components}/**/*.spec.js',
+                '!<%= yeoman.client %>/{app,components}/**/*.mock.js'
+            ],
+            test: {
+                src: [
+                    '<%= yeoman.client %>/{app,components}/**/*.spec.js',
+                    '<%= yeoman.client %>/{app,components}/**/*.mock.js'
+                ]
+            }
+        },
+
+        // Empties folders to start fresh
+        clean: {
+            dist: {
+                files: [{
+                    dot: true,
+                    src: [
+                        '.tmp',
+                        '<%= yeoman.dist %>/*',
+                        '!<%= yeoman.dist %>/.git*',
+                        '!<%= yeoman.dist %>/.openshift',
+                        '!<%= yeoman.dist %>/Procfile'
+                    ]
+                }]
+            },
+            server: '.tmp'
+        },
+
+        // Add vendor prefixed styles
+        autoprefixer: {
+            options: {
+                browsers: ['last 1 version']
+            },
+            dist: {
+                files: [{
+                    expand: true,
+                    cwd: '.tmp/',
+                    src: '{,*/}*.css',
+                    dest: '.tmp/'
+                }]
+            }
+        },
+
+        // // Debugging with node inspector
+        // 'node-inspector': {
+        //     custom: {
+        //         options: {
+        //             'web-host': 'localhost'
+        //         }
+        //     }
+        // },
+
+        // Use nodemon to run server in debug mode with an initial breakpoint
+        nodemon: {
+            debug: {
+                script: 'server/app.js',
+                options: {
+                    nodeArgs: ['--debug-brk'],
+                    env: {
+                        PORT: process.env.PORT || 9000
+                    },
+                    callback: function (nodemon) {
+                        nodemon.on('log', function (event) {
+                            console.log(event.colour);
+                        });
+
+                        // opens browser on initial server start
+                        nodemon.on('config:update', function () {
+                            setTimeout(function () {
+                                require('open')('http://localhost:8080/debug?port=5858');
+                            }, 500);
+                        });
+                    }
+                }
+            }
+        },
+
+        // Automatically inject Bower components into the app
+        wiredep: {
+            target: {
+                src: '<%= yeoman.client %>/index.html',
+                ignorePath: '<%= yeoman.client %>/',
+                exclude: [/bootstrap-sass-official/, /bootstrap.js/, '/json3/', '/es5-shim/', /bootstrap.css/, /font-awesome.css/]
+            }
+        },
+
+        // Renames files for browser caching purposes
+        rev: {
+            dist: {
+                files: {
+                    src: [
+                        '<%= yeoman.dist %>/public/{,*/}*.js',
+                        '<%= yeoman.dist %>/public/{,*/}*.css',
+                        '<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
+                        '<%= yeoman.dist %>/public/assets/fonts/*',
+                        '!<%= yeoman.dist %>/public/assets/images/tmp/*'
+                    ]
+                }
+            }
+        },
+
+        // Reads HTML for usemin blocks to enable smart builds that automatically
+        // concat, minify and revision files. Creates configurations in memory so
+        // additional tasks can operate on them
+        useminPrepare: {
+            html: ['<%= yeoman.client %>/index.html'],
+            options: {
+                dest: '<%= yeoman.dist %>/public'
+            }
+        },
+
+        // Performs rewrites based on rev and the useminPrepare configuration
+        usemin: {
+            html: ['<%= yeoman.dist %>/public/{,*/}*.html'],
+            css: ['<%= yeoman.dist %>/public/{,*/}*.css'],
+            js: ['<%= yeoman.dist %>/public/{,*/}*.js'],
+            options: {
+                assetsDirs: [
+                    '<%= yeoman.dist %>/public',
+                    '<%= yeoman.dist %>/public/assets'
+                ],
+                // This is so we update image references in our ng-templates
+                patterns: {
+                    js: [
+                        [/(assets\/images\/.*?\.(?:gif|jpeg|jpg|png|webp|svg))/gm, 'Update the JS to reference our revved images']
+                    ]
+                }
+            }
+        },
+
+        // The following *-min tasks produce minified files in the dist folder
+        imagemin: {
+            dist: {
+                files: [{
+                    expand: true,
+                    cwd: '<%= yeoman.client %>/assets/images',
+                    src: '{,*/}*.{png,jpg,jpeg,gif}',
+                    dest: '<%= yeoman.dist %>/public/assets/images'
+                }]
+            }
+        },
+
+        svgmin: {
+            dist: {
+                files: [{
+                    expand: true,
+                    cwd: '<%= yeoman.client %>/assets/images',
+                    src: '{,*/}*.svg',
+                    dest: '<%= yeoman.dist %>/public/assets/images'
+                }]
+            }
+        },
+
+        // Allow the use of non-minsafe AngularJS files. Automatically makes it
+        // minsafe compatible so Uglify does not destroy the ng references
+        ngAnnotate: {
+            dist: {
+                files: [{
+                    expand: true,
+                    cwd: '.tmp/concat',
+                    src: '**/*.js',
+                    dest: '.tmp/concat'
+                }]
+            }
+        },
+
+        // Package all the html partials into a single javascript payload
+        ngtemplates: {
+        	app: {
+        	    options: {
+        	      prefix: ''
+        	    }
+        	 },
+            options: {
+                // This should be the name of your apps angular module
+                module: 'ecompApp',
+                htmlmin: {
+                    collapseBooleanAttributes: true,
+                    collapseWhitespace: true,
+                    removeAttributeQuotes: true,
+                    removeEmptyAttributes: true,
+                    removeRedundantAttributes: true,
+                    removeScriptTypeAttributes: true,
+                    removeStyleLinkTypeAttributes: true
+                },
+                usemin: 'app/app.js'
+            },
+            main: {
+                cwd: '<%= yeoman.client %>',
+                src: ['{app,components}/**/*.html'],
+                dest: '.tmp/templates.js'
+            },
+            tmp: {
+                cwd: '.tmp',
+                src: ['{app,components}/**/*.html'],
+                dest: '.tmp/tmp-templates.js'
+            }
+        },
+
+        // Replace Google CDN references
+        cdnify: {
+            dist: {
+                html: ['<%= yeoman.dist %>/public/*.html']
+            }
+        },
+
+        // Copies remaining files to places other tasks can use
+        copy: {
+            dist: {
+                files: [{
+                    expand: true,
+                    dot: true,
+                    cwd: '<%= yeoman.client %>',
+                    dest: '<%= yeoman.dist %>/public',
+                    src: [
+                        '*.{ico,png,txt}',
+                        '.htaccess',
+                        'bower_components/**/*',
+                        'bower_components_external/**/*',
+                        'assets/images/**/*',
+                        'assets/fonts/**/*',
+                        'index.html'
+                    ]
+                }, {
+                    expand: true,
+                    cwd: '.tmp/images',
+                    dest: '<%= yeoman.dist %>/public/assets/images',
+                    src: ['generated/*']
+                }, {
+                    expand: true,
+                    dest: '<%= yeoman.dist %>',
+                    src: [
+                        'package.json',
+                        'server/**/*'
+                    ]
+                }]
+            },
+            styles: {
+                expand: true,
+                cwd: '<%= yeoman.client %>',
+                dest: '.tmp/',
+                src: ['{app,components}/**/*.css']
+            }
+        },
+
+        buildcontrol: {
+            options: {
+                dir: 'dist',
+                commit: true,
+                push: true,
+                connectCommits: false,
+                message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%'
+            },
+            heroku: {
+                options: {
+                    remote: 'heroku',
+                    branch: 'master'
+                }
+            },
+            openshift: {
+                options: {
+                    remote: 'openshift',
+                    branch: 'master'
+                }
+            }
+        },
+
+        // Run some tasks in parallel to speed up the build process
+        concurrent: {
+            server: [
+                'babel',
+                'less',
+            ],
+            test: [
+                'babel',
+                'less',
+            ],
+            debug: {
+                tasks: [
+                    'nodemon'
+                    //'node-inspector'
+                ],
+                options: {
+                    logConcurrentOutput: true
+                }
+            },
+            dist: [
+                'babel',
+                'less',
+                //'imagemin',
+                'svgmin'
+            ]
+        },
+
+        // Test settings
+        karma: {
+            unit: {
+                configFile: 'karma.conf.js',
+                singleRun: true
+            }
+        },
+
+        mochaTest: {
+            options: {
+                reporter: 'spec'
+            },
+            src: ['server/**/*.spec.js']
+        },
+
+        protractor: {
+            options: {
+                configFile: 'protractor.conf.js'
+            },
+            chrome: {
+                options: {
+                    args: {
+                        browser: 'chrome'
+                    }
+                }
+            }
+        },
+
+        env: {
+            test: {
+                NODE_ENV: 'test'
+            },
+            prod: {
+                NODE_ENV: 'production'
+            },
+            all: localConfig
+        },
+
+        // Compiles ES6 to JavaScript using Babel
+        babel: {
+            options: {
+                sourceMap: true
+            },
+            server: {
+                files: [{
+                    expand: true,
+                    cwd: 'client',
+                    src: [
+                        '{app,components}/**/*.js',
+                        '!{app,components}/**/*.spec.js'
+                    ],
+                    dest: '.tmp'
+                }]
+            }
+        },
+
+        // Compiles Less to CSS
+        less: {
+            options: {
+                paths: [
+                    '<%= yeoman.client %>/bower_components',
+                    '<%= yeoman.client %>/app',
+                    '<%= yeoman.client %>/components'
+                ]
+            },
+            server: {
+                files: {
+                    '.tmp/app/app.css': '<%= yeoman.client %>/app/app.less'
+                }
+            },
+        },
+
+        injector: {
+            options: {},
+            // Inject application script files into index.html (doesn't include bower)
+            scripts: {
+                options: {
+                    transform: function (filePath) {
+                         filePath = filePath.replace('/client/', '');
+                         filePath = filePath.replace('/.tmp/', '');
+                         return '<script src="' + filePath + '"></script>';
+                    },
+                    starttag: '<!-- injector:js -->',
+                    endtag: '<!-- endinjector -->'
+                },
+                files: {
+                    '<%= yeoman.client %>/index.html': [
+                        [
+
+                            '.tmp/{app,components}/**/*.js',
+
+                            '!{.tmp,<%= yeoman.client %>}/app/app.js',
+                            '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.spec.js',
+                            '!{.tmp,<%= yeoman.client %>}/{app,components}/**/*.mock.js'
+                        ]
+                    ]
+                }
+            },
+
+            // Inject component less into app.less
+            less: {
+                options: {
+                    transform: function (filePath) {
+                        filePath = filePath.replace('/client/app/', '');
+                        filePath = filePath.replace('/client/components/', '');
+                        return '@import \'' + filePath + '\';';
+                    },
+                    starttag: '// injector',
+                    endtag: '// endinjector'
+                },
+                files: {
+                    '<%= yeoman.client %>/app/app.less': [
+                        '<%= yeoman.client %>/{app,components}/**/*.less',
+                        '!<%= yeoman.client %>/app/app.less'
+                    ]
+                }
+            },
+
+            // Inject component css into index.html
+            css: {
+                options: {
+                    transform: function (filePath) {
+                        filePath = filePath.replace('/client/', '');
+                        filePath = filePath.replace('/.tmp/', '');
+                        return '<link rel="stylesheet" href="' + filePath + '">';
+                    },
+                    starttag: '<!-- injector:css -->',
+                    endtag: '<!-- endinjector -->'
+                },
+                files: {
+                    '<%= yeoman.client %>/index.html': [
+                        '<%= yeoman.client %>/{app,components}/**/*.css'
+                    ]
+                }
+            }
+        },
+
+        //Project configuration task
+        ngconstant: {
+            main: {
+                options: {
+                    dest: 'client/app/configurations.js',
+                    name: 'ecomp.conf'
+                },
+                constants: function () {
+                    if (!grunt.option('env')) {
+                        grunt.fail.warn('env parameter missing, please use --env=<environment configuration>, ex: grunt serve --env=mock');
+                    }
+
+                    return {
+                        conf: grunt.file.readJSON('client/configurations/' + grunt.option('env') + '.json')
+                    }
+                }
+            }
+        },
+        exec: {
+            delete: 'sshpass -p Aa123456 ssh root@remotehost rm -rf /var/lib/tomcat/webapps/ecompportal/public/',
+            copy: 'sshpass -p Aa123456 scp -r dist/public/ root@remotehost:/var/lib/tomcat/webapps/ecompportal/'
+        }
+    });
+
+    //Express server task
+
+    // Used for delaying livereload until after server has restarted
+    grunt.registerTask('wait', function () {
+        grunt.log.ok('Waiting for server reload...');
+
+        var done = this.async();
+
+        setTimeout(function () {
+            grunt.log.writeln('Done waiting!');
+            done();
+        }, 1500);
+    });
+
+    grunt.registerTask('express-keepalive', 'Keep grunt running', function () {
+        this.async();
+    });
+
+    grunt.registerTask('serve', function (target) {
+
+        if (target === 'dist') {
+            return grunt.task.run(['build', 'env:all', 'env:prod', 'express:prod', 'express:mock', 'wait', 'open', 'express-keepalive']);
+        }
+
+        if (target === 'debug') {
+            return grunt.task.run([
+                'clean:server',
+                'env:all',
+                'injector:less',
+                'concurrent:server',
+                'express:mock',
+                'injector',
+                'wiredep',
+                'autoprefixer',
+                'concurrent:debug'
+            ]);
+        }
+
+        var isDebug = grunt.option('dev_debug');
+
+        grunt.task.run([
+            'clean:server',
+            'env:all',
+            'ngconstant',
+            'injector:less',
+            'concurrent:server',
+            'injector',
+            'wiredep',
+            'autoprefixer',
+            isDebug ? 'express:dev_debug' : 'express:dev',
+            'express:mock',
+            'wait',
+            'open',
+            'watch'
+        ]);
+    });
+
+    grunt.registerTask('server', function () {
+        grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
+        grunt.task.run(['serve']);
+    });
+
+    grunt.registerTask('test', function (target) {
+        if (target === 'server') {
+            return grunt.task.run([
+                'env:all',
+                'env:test',
+                'mochaTest'
+            ]);
+        }
+
+        else if (target === 'client') {
+            return grunt.task.run([
+                'clean:server',
+                'env:all',
+                'injector:less',
+                'concurrent:test',
+                'injector',
+                'ngtemplates:main',
+                'autoprefixer',
+                'karma'
+            ]);
+        }
+
+        else if (target === 'e2e') {
+            return grunt.task.run([
+                'clean:server',
+                'env:all',
+                'env:test',
+                'injector:less',
+                'concurrent:test',
+                'injector',
+                'wiredep',
+                'autoprefixer',
+                'express:dev',
+                'protractor'
+            ]);
+        }
+
+        else grunt.task.run([
+                'test:server',
+                'test:client'
+            ]);
+    });
+
+    grunt.registerTask('build', [
+        'clean:dist',
+        'injector:less',
+        'ngconstant',
+        'concurrent:dist',
+        'injector',
+        'wiredep',
+        'useminPrepare',
+        'autoprefixer',
+        'ngtemplates',
+        'concat',
+        'ngAnnotate',
+        'copy:dist',
+        //'cdnify',
+        'cssmin',
+        'uglify',
+        'rev',
+        'usemin'
+    ]);
+
+    grunt.registerTask('default', [
+        'newer:jshint',
+        'test',
+        'build'
+    ]);
+
+    grunt.registerTask('deploy', [
+        'build',
+        'exec'
+    ]);
+};