You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apex.apache.org by da...@apache.org on 2015/11/30 22:06:56 UTC

[50/98] [abbrv] [partial] incubator-apex-malhar git commit: Removing all web demos

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/.htaccess
----------------------------------------------------------------------
diff --git a/web/demos/app/.htaccess b/web/demos/app/.htaccess
deleted file mode 100644
index cb84cb9..0000000
--- a/web/demos/app/.htaccess
+++ /dev/null
@@ -1,543 +0,0 @@
-# Apache Configuration File
-
-# (!) Using `.htaccess` files slows down Apache, therefore, if you have access
-# to the main server config file (usually called `httpd.conf`), you should add
-# this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.
-
-# ##############################################################################
-# # CROSS-ORIGIN RESOURCE SHARING (CORS)                                       #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Cross-domain AJAX requests                                                 |
-# ------------------------------------------------------------------------------
-
-# Enable cross-origin AJAX requests.
-# http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
-# http://enable-cors.org/
-
-# <IfModule mod_headers.c>
-#    Header set Access-Control-Allow-Origin "*"
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | CORS-enabled images                                                        |
-# ------------------------------------------------------------------------------
-
-# Send the CORS header for images when browsers request it.
-# https://developer.mozilla.org/en/CORS_Enabled_Image
-# http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
-# http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
-
-<IfModule mod_setenvif.c>
-    <IfModule mod_headers.c>
-        <FilesMatch "\.(gif|ico|jpe?g|png|svg|svgz|webp)$">
-            SetEnvIf Origin ":" IS_CORS
-            Header set Access-Control-Allow-Origin "*" env=IS_CORS
-        </FilesMatch>
-    </IfModule>
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | Web fonts access                                                           |
-# ------------------------------------------------------------------------------
-
-# Allow access from all domains for web fonts
-
-<IfModule mod_headers.c>
-    <FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
-        Header set Access-Control-Allow-Origin "*"
-    </FilesMatch>
-</IfModule>
-
-
-# ##############################################################################
-# # ERRORS                                                                     #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | 404 error prevention for non-existing redirected folders                   |
-# ------------------------------------------------------------------------------
-
-# Prevent Apache from returning a 404 error for a rewrite if a directory
-# with the same name does not exist.
-# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
-# http://www.webmasterworld.com/apache/3808792.htm
-
-Options -MultiViews
-
-# ------------------------------------------------------------------------------
-# | Custom error messages / pages                                              |
-# ------------------------------------------------------------------------------
-
-# You can customize what Apache returns to the client in case of an error (see
-# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:
-
-ErrorDocument 404 /404.html
-
-
-# ##############################################################################
-# # INTERNET EXPLORER                                                          #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Better website experience                                                  |
-# ------------------------------------------------------------------------------
-
-# Force IE to render pages in the highest available mode in the various
-# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
-
-<IfModule mod_headers.c>
-    Header set X-UA-Compatible "IE=edge"
-    # `mod_headers` can't match based on the content-type, however, we only
-    # want to send this header for HTML pages and not for the other resources
-    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
-        Header unset X-UA-Compatible
-    </FilesMatch>
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | Cookie setting from iframes                                                |
-# ------------------------------------------------------------------------------
-
-# Allow cookies to be set from iframes in IE.
-
-# <IfModule mod_headers.c>
-#   Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | Screen flicker                                                             |
-# ------------------------------------------------------------------------------
-
-# Stop screen flicker in IE on CSS rollovers (this only works in
-# combination with the `ExpiresByType` directives for images from below).
-
-# BrowserMatch "MSIE" brokenvary=1
-# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
-# BrowserMatch "Opera" !brokenvary
-# SetEnvIf brokenvary 1 force-no-vary
-
-
-# ##############################################################################
-# # MIME TYPES AND ENCODING                                                    #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Proper MIME types for all files                                            |
-# ------------------------------------------------------------------------------
-
-<IfModule mod_mime.c>
-
-  # Audio
-    AddType audio/mp4                                   m4a f4a f4b
-    AddType audio/ogg                                   oga ogg
-
-  # JavaScript
-    # Normalize to standard type (it's sniffed in IE anyways):
-    # http://tools.ietf.org/html/rfc4329#section-7.2
-    AddType application/javascript                      js jsonp
-    AddType application/json                            json
-
-  # Video
-    AddType video/mp4                                   mp4 m4v f4v f4p
-    AddType video/ogg                                   ogv
-    AddType video/webm                                  webm
-    AddType video/x-flv                                 flv
-
-  # Web fonts
-    AddType application/font-woff                       woff
-    AddType application/vnd.ms-fontobject               eot
-
-    # Browsers usually ignore the font MIME types and sniff the content,
-    # however, Chrome shows a warning if other MIME types are used for the
-    # following fonts.
-    AddType application/x-font-ttf                      ttc ttf
-    AddType font/opentype                               otf
-
-    # Make SVGZ fonts work on iPad:
-    # https://twitter.com/FontSquirrel/status/14855840545
-    AddType     image/svg+xml                           svg svgz
-    AddEncoding gzip                                    svgz
-
-  # Other
-    AddType application/octet-stream                    safariextz
-    AddType application/x-chrome-extension              crx
-    AddType application/x-opera-extension               oex
-    AddType application/x-shockwave-flash               swf
-    AddType application/x-web-app-manifest+json         webapp
-    AddType application/x-xpinstall                     xpi
-    AddType application/xml                             atom rdf rss xml
-    AddType image/webp                                  webp
-    AddType image/x-icon                                ico
-    AddType text/cache-manifest                         appcache manifest
-    AddType text/vtt                                    vtt
-    AddType text/x-component                            htc
-    AddType text/x-vcard                                vcf
-
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | UTF-8 encoding                                                             |
-# ------------------------------------------------------------------------------
-
-# Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
-AddDefaultCharset utf-8
-
-# Force UTF-8 for certain file formats.
-<IfModule mod_mime.c>
-    AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
-</IfModule>
-
-
-# ##############################################################################
-# # URL REWRITES                                                               #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Rewrite engine                                                             |
-# ------------------------------------------------------------------------------
-
-# Turning on the rewrite engine and enabling the `FollowSymLinks` option is
-# necessary for the following directives to work.
-
-# If your web host doesn't allow the `FollowSymlinks` option, you may need to
-# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
-# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
-
-# Also, some cloud hosting services require `RewriteBase` to be set:
-# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site
-
-<IfModule mod_rewrite.c>
-    Options +FollowSymlinks
-  # Options +SymLinksIfOwnerMatch
-    RewriteEngine On
-  # RewriteBase /
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | Suppressing / Forcing the "www." at the beginning of URLs                  |
-# ------------------------------------------------------------------------------
-
-# The same content should never be available under two different URLs especially
-# not with and without "www." at the beginning. This can cause SEO problems
-# (duplicate content), therefore, you should choose one of the alternatives and
-# redirect the other one.
-
-# By default option 1 (no "www.") is activated:
-# http://no-www.org/faq.php?q=class_b
-
-# If you'd prefer to use option 2, just comment out all the lines from option 1
-# and uncomment the ones from option 2.
-
-# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# Option 1: rewrite www.example.com → example.com
-
-<IfModule mod_rewrite.c>
-    RewriteCond %{HTTPS} !=on
-    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
-    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
-</IfModule>
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# Option 2: rewrite example.com → www.example.com
-
-# Be aware that the following might not be a good idea if you use "real"
-# subdomains for certain parts of your website.
-
-# <IfModule mod_rewrite.c>
-#    RewriteCond %{HTTPS} !=on
-#    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
-#    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
-# </IfModule>
-
-
-# ##############################################################################
-# # SECURITY                                                                   #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Content Security Policy (CSP)                                              |
-# ------------------------------------------------------------------------------
-
-# You can mitigate the risk of cross-site scripting and other content-injection
-# attacks by setting a Content Security Policy which whitelists trusted sources
-# of content for your site.
-
-# The example header below allows ONLY scripts that are loaded from the current
-# site's origin (no inline scripts, no CDN, etc). This almost certainly won't
-# work as-is for your site!
-
-# To get all the details you'll need to craft a reasonable policy for your site,
-# read: http://html5rocks.com/en/tutorials/security/content-security-policy (or
-# see the specification: http://w3.org/TR/CSP).
-
-# <IfModule mod_headers.c>
-#    Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
-#    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
-#        Header unset Content-Security-Policy
-#    </FilesMatch>
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | File access                                                                |
-# ------------------------------------------------------------------------------
-
-# Block access to directories without a default document.
-# Usually you should leave this uncommented because you shouldn't allow anyone
-# to surf through every directory on your server (which may includes rather
-# private places like the CMS's directories).
-
-<IfModule mod_autoindex.c>
-    Options -Indexes
-</IfModule>
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# Block access to hidden files and directories.
-# This includes directories used by version control systems such as Git and SVN.
-
-<IfModule mod_rewrite.c>
-    RewriteCond %{SCRIPT_FILENAME} -d [OR]
-    RewriteCond %{SCRIPT_FILENAME} -f
-    RewriteRule "(^|/)\." - [F]
-</IfModule>
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# Block access to backup and source files.
-# These files may be left by some text editors and can pose a great security
-# danger when anyone has access to them.
-
-<FilesMatch "(^#.*#|\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$">
-    Order allow,deny
-    Deny from all
-    Satisfy All
-</FilesMatch>
-
-# ------------------------------------------------------------------------------
-# | Secure Sockets Layer (SSL)                                                 |
-# ------------------------------------------------------------------------------
-
-# Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:
-# prevent `https://www.example.com` when your certificate only allows
-# `https://secure.example.com`.
-
-# <IfModule mod_rewrite.c>
-#    RewriteCond %{SERVER_PORT} !^443
-#    RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
-# </IfModule>
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-# Force client-side SSL redirection.
-
-# If a user types "example.com" in his browser, the above rule will redirect him
-# to the secure version of the site. That still leaves a window of opportunity
-# (the initial HTTP connection) for an attacker to downgrade or redirect the
-# request. The following header ensures that browser will ONLY connect to your
-# server via HTTPS, regardless of what the users type in the address bar.
-# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
-
-# <IfModule mod_headers.c>
-#    Header set Strict-Transport-Security max-age=16070400;
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | Server software information                                                |
-# ------------------------------------------------------------------------------
-
-# Avoid displaying the exact Apache version number, the description of the
-# generic OS-type and the information about Apache's compiled-in modules.
-
-# ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!
-
-# ServerTokens Prod
-
-
-# ##############################################################################
-# # WEB PERFORMANCE                                                            #
-# ##############################################################################
-
-# ------------------------------------------------------------------------------
-# | Compression                                                                |
-# ------------------------------------------------------------------------------
-
-<IfModule mod_deflate.c>
-
-    # Force compression for mangled headers.
-    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
-    <IfModule mod_setenvif.c>
-        <IfModule mod_headers.c>
-            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
-            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
-        </IfModule>
-    </IfModule>
-
-    # Compress all output labeled with one of the following MIME-types
-    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
-    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
-    #  as `AddOutputFilterByType` is still in the core directives).
-    <IfModule mod_filter.c>
-        AddOutputFilterByType DEFLATE application/atom+xml \
-                                      application/javascript \
-                                      application/json \
-                                      application/rss+xml \
-                                      application/vnd.ms-fontobject \
-                                      application/x-font-ttf \
-                                      application/x-web-app-manifest+json \
-                                      application/xhtml+xml \
-                                      application/xml \
-                                      font/opentype \
-                                      image/svg+xml \
-                                      image/x-icon \
-                                      text/css \
-                                      text/html \
-                                      text/plain \
-                                      text/x-component \
-                                      text/xml
-    </IfModule>
-
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | Content transformations                                                    |
-# ------------------------------------------------------------------------------
-
-# Prevent some of the mobile network providers from modifying the content of
-# your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.
-
-# <IfModule mod_headers.c>
-#    Header set Cache-Control "no-transform"
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | ETag removal                                                               |
-# ------------------------------------------------------------------------------
-
-# Since we're sending far-future expires headers (see below), ETags can
-# be removed: http://developer.yahoo.com/performance/rules.html#etags.
-
-# `FileETag None` is not enough for every server.
-<IfModule mod_headers.c>
-    Header unset ETag
-</IfModule>
-
-FileETag None
-
-# ------------------------------------------------------------------------------
-# | Expires headers (for better cache control)                                 |
-# ------------------------------------------------------------------------------
-
-# The following expires headers are set pretty far in the future. If you don't
-# control versioning with filename-based cache busting, consider lowering the
-# cache time for resources like CSS and JS to something like 1 week.
-
-<IfModule mod_expires.c>
-
-    ExpiresActive on
-    ExpiresDefault                                      "access plus 1 month"
-
-  # CSS
-    ExpiresByType text/css                              "access plus 1 year"
-
-  # Data interchange
-    ExpiresByType application/json                      "access plus 0 seconds"
-    ExpiresByType application/xml                       "access plus 0 seconds"
-    ExpiresByType text/xml                              "access plus 0 seconds"
-
-  # Favicon (cannot be renamed!)
-    ExpiresByType image/x-icon                          "access plus 1 week"
-
-  # HTML components (HTCs)
-    ExpiresByType text/x-component                      "access plus 1 month"
-
-  # HTML
-    ExpiresByType text/html                             "access plus 0 seconds"
-
-  # JavaScript
-    ExpiresByType application/javascript                "access plus 1 year"
-
-  # Manifest files
-    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
-    ExpiresByType text/cache-manifest                   "access plus 0 seconds"
-
-  # Media
-    ExpiresByType audio/ogg                             "access plus 1 month"
-    ExpiresByType image/gif                             "access plus 1 month"
-    ExpiresByType image/jpeg                            "access plus 1 month"
-    ExpiresByType image/png                             "access plus 1 month"
-    ExpiresByType video/mp4                             "access plus 1 month"
-    ExpiresByType video/ogg                             "access plus 1 month"
-    ExpiresByType video/webm                            "access plus 1 month"
-
-  # Web feeds
-    ExpiresByType application/atom+xml                  "access plus 1 hour"
-    ExpiresByType application/rss+xml                   "access plus 1 hour"
-
-  # Web fonts
-    ExpiresByType application/font-woff                 "access plus 1 month"
-    ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
-    ExpiresByType application/x-font-ttf                "access plus 1 month"
-    ExpiresByType font/opentype                         "access plus 1 month"
-    ExpiresByType image/svg+xml                         "access plus 1 month"
-
-</IfModule>
-
-# ------------------------------------------------------------------------------
-# | Filename-based cache busting                                               |
-# ------------------------------------------------------------------------------
-
-# If you're not using a build process to manage your filename version revving,
-# you might want to consider enabling the following directives to route all
-# requests such as `/css/style.12345.css` to `/css/style.css`.
-
-# To understand why this is important and a better idea than `*.css?v231`, read:
-# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
-
-# <IfModule mod_rewrite.c>
-#    RewriteCond %{REQUEST_FILENAME} !-f
-#    RewriteCond %{REQUEST_FILENAME} !-d
-#    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | File concatenation                                                         |
-# ------------------------------------------------------------------------------
-
-# Allow concatenation from within specific CSS and JS files, e.g.:
-# Inside of `script.combined.js` you could have
-#   <!--#include file="libs/jquery.js" -->
-#   <!--#include file="plugins/jquery.idletimer.js" -->
-# and they would be included into this single file.
-
-# <IfModule mod_include.c>
-#    <FilesMatch "\.combined\.js$">
-#        Options +Includes
-#        AddOutputFilterByType INCLUDES application/javascript application/json
-#        SetOutputFilter INCLUDES
-#    </FilesMatch>
-#    <FilesMatch "\.combined\.css$">
-#        Options +Includes
-#        AddOutputFilterByType INCLUDES text/css
-#        SetOutputFilter INCLUDES
-#    </FilesMatch>
-# </IfModule>
-
-# ------------------------------------------------------------------------------
-# | Persistent connections                                                     |
-# ------------------------------------------------------------------------------
-
-# Allow multiple requests to be sent over the same TCP connection:
-# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.
-
-# Enable if you serve a lot of static content but, be aware of the
-# possible disadvantages!
-
-# <IfModule mod_headers.c>
-#    Header set Connection Keep-Alive
-# </IfModule>

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/404.html
----------------------------------------------------------------------
diff --git a/web/demos/app/404.html b/web/demos/app/404.html
deleted file mode 100644
index d52f7d3..0000000
--- a/web/demos/app/404.html
+++ /dev/null
@@ -1,177 +0,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.
-
--->
-<!DOCTYPE html>
-<html lang="en">
-    <head>
-        <meta charset="utf-8">
-        <title>Page Not Found :(</title>
-        <style>
-            ::-moz-selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            ::selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            html {
-                padding: 30px 10px;
-                font-size: 20px;
-                line-height: 1.4;
-                color: #737373;
-                background: #f0f0f0;
-                -webkit-text-size-adjust: 100%;
-                -ms-text-size-adjust: 100%;
-            }
-
-            html,
-            input {
-                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-            }
-
-            body {
-                max-width: 500px;
-                _width: 500px;
-                padding: 30px 20px 50px;
-                border: 1px solid #b3b3b3;
-                border-radius: 4px;
-                margin: 0 auto;
-                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
-                background: #fcfcfc;
-            }
-
-            h1 {
-                margin: 0 10px;
-                font-size: 50px;
-                text-align: center;
-            }
-
-            h1 span {
-                color: #bbb;
-            }
-
-            h3 {
-                margin: 1.5em 0 0.5em;
-            }
-
-            p {
-                margin: 1em 0;
-            }
-
-            ul {
-                padding: 0 0 0 40px;
-                margin: 1em 0;
-            }
-
-            .container {
-                max-width: 380px;
-                _width: 380px;
-                margin: 0 auto;
-            }
-
-            /* google search */
-
-            #goog-fixurl ul {
-                list-style: none;
-                padding: 0;
-                margin: 0;
-            }
-
-            #goog-fixurl form {
-                margin: 0;
-            }
-
-            #goog-wm-qt,
-            #goog-wm-sb {
-                border: 1px solid #bbb;
-                font-size: 16px;
-                line-height: normal;
-                vertical-align: top;
-                color: #444;
-                border-radius: 2px;
-            }
-
-            #goog-wm-qt {
-                width: 220px;
-                height: 20px;
-                padding: 5px;
-                margin: 5px 10px 0 0;
-                box-shadow: inset 0 1px 1px #ccc;
-            }
-
-            #goog-wm-sb {
-                display: inline-block;
-                height: 32px;
-                padding: 0 10px;
-                margin: 5px 0 0;
-                white-space: nowrap;
-                cursor: pointer;
-                background-color: #f5f5f5;
-                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                -webkit-appearance: none;
-                -moz-appearance: none;
-                appearance: none;
-                *overflow: visible;
-                *display: inline;
-                *zoom: 1;
-            }
-
-            #goog-wm-sb:hover,
-            #goog-wm-sb:focus {
-                border-color: #aaa;
-                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-                background-color: #f8f8f8;
-            }
-
-            #goog-wm-qt:hover,
-            #goog-wm-qt:focus {
-                border-color: #105cb6;
-                outline: 0;
-                color: #222;
-            }
-
-            input::-moz-focus-inner {
-                padding: 0;
-                border: 0;
-            }
-        </style>
-    </head>
-    <body>
-        <div class="container">
-            <h1>Not found <span>:(</span></h1>
-            <p>Sorry, but the page you were trying to view does not exist.</p>
-            <p>It looks like this was the result of either:</p>
-            <ul>
-                <li>a mistyped address</li>
-                <li>an out-of-date link</li>
-            </ul>
-            <script>
-                var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
-            </script>
-            <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
-        </div>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/favicon.ico
----------------------------------------------------------------------
diff --git a/web/demos/app/favicon.ico b/web/demos/app/favicon.ico
deleted file mode 100644
index 6527905..0000000
Binary files a/web/demos/app/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/images/glyphicons-halflings.png
----------------------------------------------------------------------
diff --git a/web/demos/app/images/glyphicons-halflings.png b/web/demos/app/images/glyphicons-halflings.png
deleted file mode 100644
index a996999..0000000
Binary files a/web/demos/app/images/glyphicons-halflings.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/images/main_banner.png
----------------------------------------------------------------------
diff --git a/web/demos/app/images/main_banner.png b/web/demos/app/images/main_banner.png
deleted file mode 100644
index f3f4810..0000000
Binary files a/web/demos/app/images/main_banner.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/index.html
----------------------------------------------------------------------
diff --git a/web/demos/app/index.html b/web/demos/app/index.html
deleted file mode 100644
index c0f2fa2..0000000
--- a/web/demos/app/index.html
+++ /dev/null
@@ -1,138 +0,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.
-
--->
-<!doctype html>
-<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
-<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
-<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
-<head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title></title>
-    <meta name="description" content="">
-    <meta name="viewport" content="width=device-width">
-    <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
-
-    <!-- build:css styles/vendor.css -->
-    <link rel="stylesheet" href="bower_components/bootstrap-sass/bootstrap-2.3.2.css">
-    <link rel="stylesheet" href="bower_components/bootstrap-sass/bootstrap-responsive-2.3.2.css">
-    <link rel="stylesheet" href="bower_components/ng-grid/ng-grid.css">
-    <link rel="stylesheet" href="styles/jquery.pnotify.default.css">
-    <!-- endbuild -->
-
-    <!-- build:css(.tmp) styles/main.css -->
-    <link rel="stylesheet" href="styles/main.css">
-    <!-- endbuild -->
-</head>
-<body ng-app="app">
-<!--[if lt IE 9]>
-<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
-<![endif]-->
-
-<div class="navbar navbar-inverse navbar-fixed-top">
-    <div class="navbar-inner">
-        <div class="container-fluid">
-            <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-                <span class="icon-bar"></span>
-            </button>
-            <a class="brand" href="/"></a>
-            <div class="nav-collapse collapse">
-                <ul class="nav">
-                    <li><a href="#twitterUrls">Twitter URLs</a></li>
-                    <li><a href="#twitterHashtags">Twitter Hashtags</a></li>
-                    <li><a href="#mobile">Mobile</a></li>
-                    <li><a href="#machine">Machine</a></li>
-                    <li><a href="#dimensions">Ads</a></li>
-                    <li><a href="#fraud">Fraud</a></li>
-                </ul>
-            </div><!--/.nav-collapse -->
-        </div>
-    </div>
-</div>
-
-<div class="ng-view"></div>
-
-<script src="settings.js"></script>
-
-<!-- build:js scripts/plugins.js -->
-<script src="bower_components/jquery/jquery.js"></script>
-<script src="bower_components/angular/angular.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-affix.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-alert.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-dropdown.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-tooltip.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-modal.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-transition.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-button.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-popover.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-typeahead.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-carousel.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-scrollspy.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-collapse.js"></script>
-<script src="bower_components/bootstrap-sass/js/bootstrap-tab.js"></script>
-<!-- endbuild -->
-
-<!-- build:js scripts/modules.js -->
-<script src="bower_components/underscore/underscore.js"></script>
-<script src="bower_components/angular-route/angular-route.js"></script>
-<script src="bower_components/angular-resource/angular-resource.js"></script>
-<script src="bower_components/angular-cookies/angular-cookies.js"></script>
-<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
-<script src="bower_components/restangular/src/restangular.js"></script>
-<script src="bower_components/underscore/underscore.js"></script>
-<script src="bower_components/ng-grid/ng-grid-2.0.11.debug.js"></script>
-<script src="bower_components/d3/d3.js"></script>
-<script src="bower_components/uri.js/src/URI.js"></script>
-<script src="scripts/vendor/jsbn.js"></script>
-<script src="scripts/vendor/gauge.js"></script>
-<script src="scripts/vendor/jquery.pnotify.js"></script>
-<script src="scripts/vendor/angular-google-maps.js"></script>
-<script src="scripts/vendor/visibly.js"></script>
-<!-- endbuild -->
-
-<!-- build:js({.tmp,app}) scripts/scripts.js -->
-<script src="scripts/app.js"></script>
-<script src="scripts/services/rest.js"></script>
-<script src="scripts/services/socket.js"></script>
-<script src="scripts/directives/lineChart.js"></script>
-<script src="scripts/directives/gauge.js"></script>
-<script src="scripts/directives/barChart.js"></script>
-<script src="scripts/directives/stat.js"></script>
-<script src="scripts/filters/elapsed.js"></script>
-<script src="scripts/controllers/twitter.js"></script>
-<script src="scripts/controllers/mobile.js"></script>
-<script src="scripts/controllers/machine.js"></script>
-<script src="scripts/controllers/dimensions.js"></script>
-<script src="scripts/controllers/fraud.js"></script>
-<!-- endbuild -->
-
-<script type="text/javascript" src="https://www.google.com/jsapi"></script>
-<script type="text/javascript">
-    google.load('visualization', '1', {'packages':['corechart']});
-</script>
-
-<script src="http://maps.googleapis.com/maps/api/js?sensor=false&language=en"></script>
-<script src="scripts/vendor/markerwithlabel.js"></script>
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/robots.txt
----------------------------------------------------------------------
diff --git a/web/demos/app/robots.txt b/web/demos/app/robots.txt
deleted file mode 100644
index 9417495..0000000
--- a/web/demos/app/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# robotstxt.org
-
-User-agent: *

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/scripts/app.js
----------------------------------------------------------------------
diff --git a/web/demos/app/scripts/app.js b/web/demos/app/scripts/app.js
deleted file mode 100644
index 274f355..0000000
--- a/web/demos/app/scripts/app.js
+++ /dev/null
@@ -1,73 +0,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.
- */
-/*global angular*/
-(function () {
-'use strict';
-
-angular.module('widgets', ['socket']);
-
-angular.module('twitter', ['rest', 'socket', 'widgets', 'ngGrid']);
-angular.module('mobile', ['rest', 'widgets', 'ngGrid', 'google-maps']);
-angular.module('machine', ['ng', 'rest', 'widgets']);
-angular.module('dimensions', ['ng', 'rest', 'widgets']);
-angular.module('fraud', ['rest', 'widgets']);
-
-angular.module('app', ['ngRoute', 'socket', 'twitter', 'mobile', 'machine', 'dimensions', 'fraud']);
-
-angular.module('app')
-  .config(function ($routeProvider, socketProvider) {
-    if (window.settings) {
-      socketProvider.setWebSocketURL(settings.webSocketURL);
-    }
-
-    $routeProvider
-      .when('/', {
-        templateUrl: 'views/welcome.html'
-      })
-      .when('/twitterUrls', {
-        templateUrl: 'views/twitter.html',
-        controller: 'TwitterUrlsController'
-      })
-      .when('/twitterHashtags', {
-        templateUrl: 'views/twitter.html',
-        controller: 'TwitterHashtagsController'
-      })
-      .when('/mobile', {
-        templateUrl: 'views/mobile.html',
-        controller: 'MobileController'
-      })
-      .when('/machine', {
-        templateUrl: 'views/machine.html',
-        controller: 'MachineController'
-      })
-      .when('/dimensions', {
-        templateUrl: 'views/dimensions.html',
-        controller: 'DimensionsController'
-      })
-      .when('/fraud', {
-        templateUrl: 'views/fraud.html',
-        controller: 'FraudController'
-      })
-  });
-
-})();
-
-
-    
-    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/scripts/controllers/dimensions.js
----------------------------------------------------------------------
diff --git a/web/demos/app/scripts/controllers/dimensions.js b/web/demos/app/scripts/controllers/dimensions.js
deleted file mode 100644
index 41c9bd0..0000000
--- a/web/demos/app/scripts/controllers/dimensions.js
+++ /dev/null
@@ -1,302 +0,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.
- */
-/*global settings, angular, google, jQuery, _, URI*/
-(function () {
-  'use strict';
-
-  var chartOptions = {
-    legend: 'none',
-    chartArea: { top: 20, height: 240 }
-  };
-
-  function getEmptyChartOptionsFn(scope) {
-    return function () {
-      var now = Date.now();
-      var max = new Date(now);
-      var min = new Date(now - scope.lookback * 60 * 1000);
-      var options = jQuery.extend({}, chartOptions, {
-        vAxis: { minValue: 0, maxValue: 100 },
-        hAxis: { viewWindow: { min: min, max: max }}
-      });
-      return options;
-    };
-  }
-
-  function chartData(data, property) {
-    return _.map(data, function (obj) {
-      return {
-        timestamp: obj.timestamp,
-        value: obj[property]
-      };
-    });
-  }
-
-  function chartDataFn(data, fn) {
-    return _.map(data, function (obj) {
-      return {
-        timestamp: obj.timestamp,
-        value: fn(obj)
-      };
-    });
-  }
-
-  function getRequestParams($scope) {
-    return {
-      publisher: $scope.publisher.value,
-      advertiser: $scope.advertiser.value,
-      adunit: $scope.adunit.value,
-      lookback: $scope.lookback,
-      includeLastMinute: $scope.includeLastMinute
-    };
-  }
-
-  function PollRequest (rest, scope, callback) {
-    this.rest = rest;
-    this.scope = scope;
-    this.max = scope.lookback;
-    this.dataCache = null;
-    this.callback = callback;
-    this.cancelled = false;
-    this.interval = null;
-    this.timeout = null;
-    this.params = getRequestParams(this.scope);
-  }
-
-  PollRequest.prototype = {
-    cancel: function () {
-      this.cancelled = true;
-      this.scope.requestProgress = 0;
-      clearInterval(this.interval);
-      clearTimeout(this.timeout);
-    },
-
-    responseStatus: function () {
-      this.scope.requestProgress = Math.round((Date.now() - this.requestStartTime) / 1000);
-      this.scope.$apply();
-    },
-
-    fetchDimensionsData: function () {
-      if (this.dataCache && this.dataCache.length) {
-        this.params.lastTimestamp = _.last(this.dataCache).timestamp;
-      }
-
-      var max = this.max;
-
-      this.requestStartTime = Date.now();
-
-      this.interval = setInterval(this.responseStatus.bind(this), 250);
-
-      var that = this;
-
-      this.rest.getDimensionsData(this.params).then(function (response) {
-          if (that.cancelled) {
-            return;
-          }
-
-          that.scope.response = response;
-          var minutes = response.minutes;
-          that.scope.requestProgress = 0;
-          clearInterval(that.interval);
-
-          var now = Date.now();
-          that.scope.lastResponse = new Date(now);
-          that.scope.responseTime = now - that.requestStartTime;
-          if (!that.dataCache) {
-            that.dataCache = minutes;
-
-            that.scope.minutesCached = 0;
-            that.scope.minutesReceived = minutes.length;
-
-          } else if (minutes.length > 0) {
-            that.scope.minutesCached = that.dataCache.length;
-            that.scope.minutesReceived = minutes.length;
-
-            that.dataCache.pop(); // remove last element since response should have new values for the last minute
-
-            var newlength = that.dataCache.length + minutes.length;
-
-            if (newlength > max) {
-              that.dataCache.splice(0, newlength - max);
-            }
-            that.dataCache.push.apply(that.dataCache, minutes); // add all elements
-          }
-
-          that.callback(that.dataCache);
-          var nextTimeout = that.scope.pollInterval * 1000 - (Date.now() - that.requestStartTime);
-          nextTimeout = Math.max(0, nextTimeout);
-
-          that.timeout = setTimeout(that.fetchDimensionsData.bind(that), nextTimeout);
-        },
-        function (errorResponse) {
-          that.cancel();
-        });
-    }
-  };
-
-
-  angular.module('dimensions')
-    .controller('DimensionsController', ['$scope', '$timeout', '$location', '$routeParams', 'rest', function ($scope, $timeout, $location, $routeParams, rest) {
-      var queryParams = new URI(window.location.href).query(true);
-      var emptyChartOptionsFn = getEmptyChartOptionsFn($scope);
-
-      rest.getApp(settings.dimensions.appName).then(function (app) {
-          $scope.app = app;
-          $scope.appURL = settings.appsURL + app.id;
-      });
-
-      $scope.pollInterval = settings.dimensions.pollInterval;
-      $scope.includeLastMinute = false;
-
-      $scope.range = function (name) {
-        var r = settings.dimensions.range[name];
-        return _.range(r.start, r.stop + 1);
-      };
-
-      function setupSelect(name, label) {
-        var rangeValues = $scope.range(name);
-        var list = _.map(rangeValues, function (value) {
-          return {
-            value: String(value),
-            label: label + ' ' + value
-          };
-        });
-        list.splice(0, 0, { value: "", label: 'ALL '});
-
-        $scope.select[name] = list;
-
-        var selected = null;
-
-        if (queryParams[name]) {
-          selected = _.findWhere(list, { value: queryParams[name] });
-        }
-
-        if (selected) {
-          $scope[name] = selected;
-        } else {
-          $scope[name] = list[0];
-        }
-      }
-
-      $scope.select = {};
-      setupSelect('publisher', 'Publisher');
-      setupSelect('advertiser', 'Advertiser');
-      setupSelect('adunit', 'Ad Unit');
-      $scope.lookback = queryParams.lookback ? parseInt(queryParams.lookback, 10) : settings.dimensions.lookback;
-
-      $scope.reload = function () {
-        //TODO have Angular route instead of reloading the page
-        window.location.href = window.location.pathname + '?' + jQuery.param(getRequestParams($scope));
-      };
-
-      function updateCharts(data) {
-        $scope.costChart = {
-          data: chartData(data, 'cost'),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-        $scope.revenueChart = {
-          data: chartData(data, 'revenue'),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-        $scope.impressionsChart = {
-          data: chartData(data, 'impressions'),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-        $scope.clicksChart = {
-          data: chartData(data, 'clicks'),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-        $scope.ctrChart = {
-          data: chartDataFn(data, function (item) {
-            return item.clicks / item.impressions * 100;
-          }),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-        $scope.marginChart = {
-          data: chartDataFn(data, function (item) {
-            return (item.cost - item.revenue) / item.revenue;
-          }),
-          options: chartOptions,
-          emptyChartOptions: emptyChartOptionsFn
-        };
-      }
-
-      $scope.costChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.revenueChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.impressionsChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.clicksChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.ctrChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.marginChart = {
-        emptyChartOptions: emptyChartOptionsFn
-      };
-
-      var request = null;
-      function reloadCharts() {
-        //TODO check if lookback is valid
-        if (request) {
-          request.cancel();
-        }
-        request = new PollRequest(rest, $scope, updateCharts);
-        request.fetchDimensionsData();
-      }
-
-      $scope.$watch('[publisher, advertiser, adunit]', function () {
-        reloadCharts();
-      }, true);
-
-      function watchWithDelay(model, delay) {
-        var timeout;
-        var firstUpdate = true;
-        $scope.$watch(model, function () {
-          if (!firstUpdate) { // skip first change since there is a watch for select fields
-            clearTimeout(timeout);
-            timeout = setTimeout(reloadCharts, delay);
-          } else {
-            firstUpdate = false;
-          }
-        });
-      }
-
-      watchWithDelay('lookback', 500);
-      watchWithDelay('pollInterval', 500);
-      watchWithDelay('includeLastMinute', 0); //TODO no delay necessary
-
-      // stop server polling on destroy (e.g. when navigating to another view)
-      $scope.$on('$destroy', function () {
-        if (request) {
-          request.cancel();
-        }
-      }.bind(this));
-    }]);
-
-})();

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/scripts/controllers/fraud.js
----------------------------------------------------------------------
diff --git a/web/demos/app/scripts/controllers/fraud.js b/web/demos/app/scripts/controllers/fraud.js
deleted file mode 100644
index a19f022..0000000
--- a/web/demos/app/scripts/controllers/fraud.js
+++ /dev/null
@@ -1,442 +0,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.
- */
-/*global angular, jQuery, _*/
-(function () {
-'use strict';
-
-angular.module('fraud')
-
-    .controller('FraudController', ['$scope', 'rest', 'socket', function ($scope, rest, socket) {
-        
-        // topic for publishing transactions
-        var txTopic = 'demos.app.frauddetect.submitTransaction';
-        var appPromise = rest.getApp(settings.fraud.appName);
-        appPromise.then(function (app) {
-            $scope.app = app;
-            $scope.appURL = settings.appsURL + app.id;
-            $scope.startedTime = app.startedTime;
-        });
-
-        // Options for merchant, terminal, zip, card, bin
-        $scope.alertTypeTitles = {
-            "smallThenLarge": "Suspicious Transaction Sequence",
-            "sameCard": "Same Card Multiple Times",
-            "sameBankId": "Same Bank Number Multiple Times",
-            "aboveAvg": "Above Average Transaction"
-        }
-        $scope.stats = [
-            { id: 'totalTxns',          topic: 'demos.app.frauddetect.totalTransactions', value: 0, label: 'Total Txns' },
-            { id: 'amtInLastSecond',    topic: 'demos.app.frauddetect.txLastSecond',      value: 0, label: 'Total Dollars / sec' },
-            // { id: 'amtInLastHour',      topic: 'demos.app.frauddetect.txLastHour',        value: 0, label: 'Total for Last Hour' },
-            { id: 'avgAmtInLastSecond', topic: 'demos.app.frauddetect.avgLastSecond',     value: 0, label: 'Avg Txn Amount / sec' },
-            { id: 'numFrauds',          topic: 'demos.app.frauddetect.totalFrauds',       value: 0, label: 'No. of Anomalies Detected' },
-            // { id: 'avgScore',           topic: 'demos.app.frauddetect.avgScore',          value: 0, label: 'Average Score' }
-        ];
-        $scope.merchants = ['Wal-Mart', 'Target', 'Amazon', 'Apple', 'Sears', 'Macys', 'JCPenny', 'Levis'];
-        $scope.terminals = [1, 2, 3, 4, 5, 6, 7, 8];
-        $scope.zips      = [94086, 94087, 94088, 94089, 94090, 94091, 94092, 94093];
-        $scope.actions   = [
-            {
-                id: 1,
-                subtitle: $scope.alertTypeTitles.smallThenLarge,
-                severity: 'low',
-                description: 'This anomaly is when one credit card is used for a small purchase, then immediately again for a larger purchase. The idea here is that a scammer will first try a small purchase to ensure that the card works, then proceed with a larger purchase upon success.',
-                generateTxns: function(e) {
-                    
-                    var bin = getRandomBin();
-                    var card = getRandomCard();
-                    
-                    submitTransaction({ 
-                        'zipCode': getRandom('zips'),
-                        'merchantId': getRandom('merchants'), 
-                        'terminalId': getRandom('terminals'),
-                        'bankIdNum': bin,
-                        'ccNum': card,
-                        'amount': 5.00
-                    });
-                    
-                    setTimeout(function() {
-                        submitTransaction({ 
-                            'zipCode': getRandom('zips'),
-                            'merchantId': getRandom('merchants'), 
-                            'terminalId': getRandom('terminals'),
-                            'bankIdNum': bin,
-                            'ccNum': card,
-                            'amount': 600.00
-                        });
-                    }, 5000)
-                    
-                }
-            },
-            // {
-            //     id: 2,
-            //     subtitle: $scope.alertTypeTitles.sameCard,
-            //     description: 'This anomaly is when one credit card is used for multiple transactions across one or more vendors within a short time interval.',
-            //     generateTxns: function() {
-            //         
-            //         var bin = getRandomBin();
-            //         var card = getRandomCard();
-            //         var merchant = getRandom('merchants');
-            //         
-            //         var intval = setInterval(function() {
-            //             submitTransaction({
-            //                 'zipCode': getRandom('zips'),
-            //                 'merchantId': merchant, 
-            //                 'terminalId': getRandom('terminals'),
-            //                 'bankIdNum': bin,
-            //                 'ccNum': card,
-            //                 'amount': roundToPrice(10 + Math.random() * 1000)
-            //             });
-            //         }, 1000);
-            //         
-            //         setTimeout(function() {
-            //             clearInterval(intval);
-            //         }, 8000);
-            //     }
-            // },
-            {
-                id: 2,
-                subtitle: $scope.alertTypeTitles.sameBankId,
-                severity: 'high',
-                description: 'This anomaly is detected when several transactions are made by cards issued by the same bank at the same terminal ID over moving window of 30 sec.',
-                generateTxns: function() {
-                    var bin = getRandomBin().replace(/\d{4}$/, '1111');
-                    var zipCode = getRandom('zips');
-                    var terminalId = getRandom('terminals');
-                    var merchant = getRandom('merchants');
-                    
-                    var intval = setInterval(function() {
-                        submitTransaction({
-                            'zipCode': zipCode,
-                            'merchantId': merchant, 
-                            'terminalId': terminalId,
-                            'bankIdNum': bin,
-                            'ccNum': getRandomCard(),
-                            'amount': roundToPrice(100 + Math.random() * 10)
-                        }, true);
-                    }, 200);
-                    
-                    $.pnotify({
-                        title: 'Several Transactions Being Sent',
-                        text: '<strong>Bank ID:</strong> ' + bin + ', <strong>Merchant:</strong> ' + merchant,
-                        type: 'success'
-                    });
-                    
-                    setTimeout(function() {
-                        clearInterval(intval);
-                    }, 11000);
-                }
-            },
-            {
-                id: 3,
-                subtitle: $scope.alertTypeTitles.aboveAvg,
-                severity: 'medium',
-                description: 'This anomaly is when a transaction at a given merchant significantly exceeds that merchant\'s average transaction amount.',
-                generateTxns: function() {
-                    console.log('getting randomStats');
-                    // $.get('/fraud/randomStats').done(function(res) {
-                    //     var bin = getRandomBin();
-                    //     var merchantId = res.merchantId;
-                    //     var terminalId = res.terminalId;
-                    //     var zipCode = res.zipCode;
-                    //     var amount = roundToPrice(res.sma + 35000);
-                    //     
-                    //     for (var i = 5; i >= 0; i--) {
-                    //         submitTransaction({
-                    //             'zipCode': zipCode,
-                    //             'merchantId': merchantId, 
-                    //             'terminalId': terminalId,
-                    //             'bankIdNum': getRandomBin(),
-                    //             'ccNum': getRandomCard(),
-                    //             'amount': 20 + Math.round(Math.random() * 10)
-                    //         }, true);
-                    //     }
-                    //     
-                    //     setTimeout(function() {
-                    //         submitTransaction({
-                    //             'zipCode': zipCode,
-                    //             'merchantId': merchantId, 
-                    //             'terminalId': terminalId,
-                    //             'bankIdNum': getRandomBin(),
-                    //             'ccNum': getRandomCard(),
-                    //             'amount': amount
-                    //         });
-                    //     }, 3000)
-                    //     
-                    // });
-                    $.pnotify({
-                        'type': 'info',
-                        'title': 'Retrieving Average Information'
-                    });
-                    $.get('/fraud/randomStats').done(function(res) {
-
-                        var bin = getRandomBin();
-                        var merchantId = res.merchantId;
-                        var terminalId = res.terminalId;
-                        var zipCode = res.zipCode;
-                        var amount = roundToPrice(res.sma + 1500);
-                        
-                        setTimeout(function() {
-                            submitTransaction({
-                                'zipCode': zipCode,
-                                'merchantId': merchantId, 
-                                'terminalId': terminalId,
-                                'bankIdNum': getRandomBin(),
-                                'ccNum': getRandomCard(),
-                                'amount': amount
-                            });
-                        }, 1000)
-                        
-                    });
-                }
-            }
-        ];
-        
-        // subscribe to appropriate topics for alerts and stats
-        appPromise.then(function(app) {
-            socket.subscribe('demos.app.frauddetect.fraudAlert', function(res) {
-                // console.log('received fraudAlert: ', res);
-                // console.log(res.data.alertType, res.data.alertData ? res.data.alertData.fullCcNum : '');
-                if (res.data.alertType === 'aboveAvg') {
-                    console.log('aboveAvg', res.data);
-                }
-                if (res.data.userGenerated === "true" || res.data.userGenerated === true) {
-                    displayAlert(res.data);
-                }
-            }, $scope);
-            socket.subscribe('demos.app.frauddetect.txSummary', function(res) {
-                var data = res.data;
-                _.each(['amtInLastSecond','avgAmtInLastSecond','totalTxns','txnsInLastSecond'], function(key) {
-                    
-                    // Find stat to update
-                    var stat = _.find($scope.stats, function(obj) {
-                        return obj.id == key;
-                    });
-                    
-                    // Check that stat was found
-                    if (stat) {
-
-                        if (['amtInLastSecond', 'avgAmtInLastSecond'].indexOf(key) > -1) {
-
-                            stat.value = '$' + makeMoney(data[key]);
-                            
-                        } else {
-                            
-                            stat.value = commaGroups(data[key]);
-                            
-                        }
-                        
-                    }
-                    
-                });
-                $scope.$apply();
-            }, $scope);
-        });
-        $scope.stats.forEach(function(stat){
-            socket.subscribe(stat.topic, function(res) {
-                console.log("stat topic " + stat.topic + " data received: ", res);
-                stat.value = res.value;
-                $scope.$apply();
-            }, $scope);
-        });
-        
-        $scope.alerts = [];
-        
-        // helper function for choosing random items from a list
-        function getRandom(list) {
-            return $scope[list][ Math.floor(Math.random() * $scope[list].length) ];
-        }
-        function roundToPrice(amt) {
-            // return Math.round( amt * 100 ) / 100;
-            return Math.round(amt);
-        }
-        function getRandomBin() {
-            // Bank ID will be between 1000 0000 and 3500 0000 (25 BINs)
-            var base = Math.floor(Math.random() * 25) + 10;
-            return base + "00 0000";
-        }
-        function getRandomCard() {
-            // CC will be 1000 0000 to 1400 0000 (400,000 cards per BIN)
-            var base = Math.floor(Math.random() * 400000) + 10000000;
-            var baseString = base + '';
-            return baseString.substring(0, 4) + " " + baseString.substring(4);
-        }
-        function displayAlert(data) {
-            var index = $scope.alerts.push(data) - 1;
-            var alertTitle = $scope.alertTypeTitles[data.alertType];
-            var html = '';
-            switch(data.alertType) {
-                case 'smallThenLarge': 
-                    html = [
-                        '<article class="alert-msg low" style="display:none">',
-                            '<h1>' + alertTitle + '</h1>',
-                            '<p>' + data.message + '</p>',
-                            '<div><a href="#" class="btn view-txn-btn" data-txidx="' + index + '">view details</a></div>',
-                        '</article>'
-                    ].join('');
-                break;
-                case 'sameBankId':
-                    console.log('same bank', data);
-                    html = [
-                        '<article class="alert-msg high" style="display:none">',
-                            '<h1>' + alertTitle + '</h1>',
-                            '<p>' + data.message + '</p>',
-                            '<div><a href="#" class="btn view-txn-btn" data-txidx="' + index + '">view details</a></div>',
-                        '</article>'
-                    ].join('');
-                break;
-                default:
-                    html = [
-                        '<article class="alert-msg medium" style="display:none">',
-                            '<h1>' + alertTitle + '</h1>',
-                            '<p>' + data.message + '</p>',
-                            '<div><a href="#" class="btn view-txn-btn" data-txidx="' + index + '">view details</a></div>',
-                        '</article>'
-                    ].join('');
-                break;
-                
-                
-            }
-            var $el = $(html);
-            $('#alertDisplayBox').prepend($el);
-            $el
-                .slideDown()
-                .animate({ 'opacity': 0.5 }, 180)
-                .animate({ 'opacity': 1 }, 180)
-                .animate({ 'opacity': 0.5 }, 180)
-                .animate({ 'opacity': 1 }, 180)
-        }
-        function submitTransaction(txn, noMessage) {
-            socket.publish(txTopic, txn);
-            console.log('txn', txn);
-            if (!noMessage) {
-                $.pnotify({
-                    'title': 'Transaction Submitted',
-                    'text': 
-                        '<strong>card</strong>: ' + txn.bankIdNum + ' ' + txn.ccNum + '<br/> ' + 
-                        '<strong>amount</strong>: $' + makeMoney(txn.amount) + '<br/> ' + 
-                        '<strong>merchant</strong>: ' + txn.merchantId + ', <strong>terminal</strong>: ' + txn.terminalId,
-        
-                    'type': 'success'
-                });
-            }
-        }
-        function genTxnDisplayMarkup(alert) {
-            var html = '';
-            switch(alert.alertType) {
-                case "smallThenLarge":
-                    var info = alert.alertData;
-                    html = [
-                        '<strong>Card Number:</strong> ' + info.fullCcNum + '<br/>',
-                        '<strong>Zip Code:</strong> ' + info.zipCode + '<br/>',
-                        '<strong>Merchant:</strong> ' + info.merchantId + ' (' + info.merchantType.toLowerCase().replace('_', ' ') + ')' + '<br/>',
-                        '<strong>Small Amount:</strong> $' + makeMoney(info.small) + '<br/>',
-                        '<strong>Large Amount:</strong> $' + makeMoney(info.large) + '<br/>',
-                        '<strong>Threshold:</strong> $'    + makeMoney(info.threshold) + '<br/>',
-                        '<strong>Time:</strong> ' + new Date(1*info.time).toLocaleString() + '<br/>'
-                    ].join('');
-                    
-                    break;
-                
-                case "sameBankId":
-                    var info = alert.alertData;
-                    html = [
-                        '<strong>Transaction Count:</strong> ' + info.count + '<br/>',
-                        '<strong>Bank ID Number:</strong> ' + info.bankIdNum + '<br/>',
-                        '<strong>Zip Code:</strong> ' + info.zipCode + '<br/>',
-                        '<strong>Merchant:</strong> ' + info.merchantId + ' (' + info.merchantType.toLowerCase().replace('_', ' ') + ')' + '<br/>',
-                        '<strong>Terminal:</strong> ' + info.terminalId + '<br/>',
-                        '<strong>Time:</strong> ' + new Date(1*info.time).toLocaleString() + '<br/>'
-                    ].join('');
-                    
-                    break;
-                    
-                case "aboveAvg":
-                    var info = alert.alertData;
-                    html = [
-                        '<strong>Dollar Amount:</strong> $' + makeMoney(info.amount) + '<br/>',
-                        '<strong>Last Average:</strong> $' + makeMoney(info.lastSmaValue) + '<br/>',
-                        '<strong>Difference:</strong> $' + makeMoney(info.change) + '<br/>',
-                        '<strong>Zip Code:</strong> ' + info.zipCode + '<br/>',
-                        '<strong>Merchant:</strong> ' + info.merchantId + ' (' + info.merchantType.toLowerCase().replace('_', ' ') + ')' + '<br/>',
-                        '<strong>Terminal:</strong> ' + info.terminalId + '<br/>',
-                        '<strong>Time:</strong> ' + new Date(1*info.time).toLocaleString() + '<br/>'
-                    ].join('');
-                    break;
-            }
-            return html;
-        }
-        function makeMoney(value) {
-            value = (value * 1).toFixed(2);
-            return commaGroups(value);
-        }
-        function commaGroups(value) {
-            var parts = value.toString().split(".");
-            parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
-            return parts.join(".");
-        }
-
-        var scopeDestroyed = false;
-
-        function  updateFraudCount() {
-            if (scopeDestroyed) {
-                return;
-            }
-
-            if ($scope.startedTime) {
-                $.get('/fraud/alertCount?since=' + $scope.startedTime).done(function(res) {
-                
-                    var countStat = _.find($scope.stats, function(obj) {
-                        return obj.id == 'numFrauds';
-                    });
-                
-                    var value = _.reduce(res, function(memo, val, key) { return memo + val }, 0);
-                
-                    countStat.value = commaGroups(value); 
-                
-                    setTimeout(updateFraudCount, 2000);
-                });
-            } else {
-                setTimeout(updateFraudCount, 2000);
-            }
-        }
-        
-        // Set up viewing transaction modal
-        $('#alertDisplayBox').on('click', '.view-txn-btn', function(evt) {
-            evt.preventDefault();
-            var index = $(this).attr('data-txidx');
-            var alert = $scope.alerts[index];
-            $('#txn-modal .modal-body').html(genTxnDisplayMarkup(alert));
-            $('#txn-modal').modal();
-        });
-        
-        // Start interval to poll for alerts count
-        updateFraudCount();
-        
-        $scope.clearFrauds = function() {
-            $('#alertDisplayBox').html("");
-        }
-
-        // stop server polling on destroy (e.g. when navigating to another view)
-        $scope.$on('$destroy', function () {
-          scopeDestroyed = true;
-        }.bind(this));
-    }]);
-
-})();

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/scripts/controllers/machine.js
----------------------------------------------------------------------
diff --git a/web/demos/app/scripts/controllers/machine.js b/web/demos/app/scripts/controllers/machine.js
deleted file mode 100644
index d6a6d3a..0000000
--- a/web/demos/app/scripts/controllers/machine.js
+++ /dev/null
@@ -1,275 +0,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.
- */
-/*global settings, angular, google, jQuery, _, URI*/
-(function () {
-'use strict';
-
-var chartOptions = {
-  legend: 'none',
-  vAxis: { format: settings.machine.metricformat },
-  chartArea: { top: 20, height: 240 }
-};
-
-function getEmptyChartOptionsFn(scope) {
-  return function () {
-    var now = Date.now();
-    var max = new Date(now);
-    var min = new Date(now - scope.lookback * 60 * 1000);
-    var options = jQuery.extend({}, chartOptions, {
-      vAxis: { minValue: 0, maxValue: 100 },
-      hAxis: { viewWindow: { min: min, max: max }}
-    });
-    return options;
-  };
-}
-
-function chartData(data, property) {
-  return _.map(data, function (obj) {
-    return {
-      timestamp: obj.timestamp,
-      value: obj[property]
-    };
-  });
-}
-
-function getRequestParams($scope) {
-  return {
-    customer: $scope.customer.value,
-    product: $scope.product.value,
-    os: $scope.os.value,
-    software1: $scope.software1.value,
-    software2: $scope.software2.value,
-    deviceId: $scope.deviceId.value,
-    lookback: $scope.lookback
-  };
-}
-
-function PollRequest (rest, scope, callback) {
-  this.rest = rest;
-  this.scope = scope;
-  this.max = scope.lookback;
-  this.dataCache = null;
-  this.callback = callback;
-  this.cancelled = false;
-  this.interval = null;
-  this.timeout = null;
-  this.params = getRequestParams(this.scope);
-}
-
-PollRequest.prototype = {
-  cancel: function () {
-    this.cancelled = true;
-    this.scope.requestProgress = 0;
-    clearInterval(this.interval);
-    clearTimeout(this.timeout);
-  },
-
-  responseStatus: function () {
-    this.scope.requestProgress = Math.round((Date.now() - this.requestStartTime) / 1000);
-    this.scope.$apply();
-  },
-
-  fetchMachineData: function () {
-    if (this.dataCache && this.dataCache.length) {
-      this.params.lastTimestamp = _.last(this.dataCache).timestamp;
-    }
-
-    var max = this.max;
-
-    this.requestStartTime = Date.now();
-
-    this.interval = setInterval(this.responseStatus.bind(this), 250);
-
-    var that = this;
-
-    this.rest.getMachineData(this.params).then(function (response) {
-      if (that.cancelled) {
-        return;
-      }
-
-      that.scope.response = response;
-      var minutes = response.minutes;
-      that.scope.requestProgress = 0;
-      clearInterval(that.interval);
-
-      var now = Date.now();
-      that.scope.lastResponse = new Date(now);
-      that.scope.responseTime = now - that.requestStartTime;
-      if (!that.dataCache) {
-        that.dataCache = minutes;
-
-        that.scope.minutesCached = 0;
-        that.scope.minutesReceived = minutes.length;
-
-      } else if (minutes.length > 0) {
-        that.scope.minutesCached = that.dataCache.length;
-        that.scope.minutesReceived = minutes.length;
-
-        that.dataCache.pop(); // remove last element since response should have new values for the last minute
-
-        var newlength = that.dataCache.length + minutes.length;
-
-        if (newlength > max) {
-          that.dataCache.splice(0, newlength - max);
-        }
-        that.dataCache.push.apply(that.dataCache, minutes); // add all elements
-      }
-
-      that.callback(that.dataCache);
-
-      var nextTimeout = settings.machine.pollInterval - (Date.now() - that.requestStartTime);
-      nextTimeout = Math.max(0, nextTimeout);
-
-      that.timeout = setTimeout(that.fetchMachineData.bind(that), nextTimeout);
-    },
-    function (errorResponse) {
-      that.cancel();
-    });
-  }
-};
-
-
-angular.module('machine')
-  .controller('MachineController', ['$scope', '$timeout', '$location', '$routeParams', 'rest', function ($scope, $timeout, $location, $routeParams, rest) {
-    var queryParams = new URI(window.location.href).query(true);
-    var emptyChartOptionsFn = getEmptyChartOptionsFn($scope);
-
-    rest.getApp(settings.machine.appName).then(function (app) {
-        $scope.app = app;
-        $scope.appURL = settings.appsURL + app.id;
-    });
-
-    $scope.cpu = 0;
-    $scope.ram = 0;
-    $scope.hdd = 0;
-
-    $scope.range = function (name) {
-      var r = settings.machine.range[name];
-      return _.range(r.start, r.stop + 1);
-    };
-
-    function setupSelect(name, label) {
-      var rangeValues = $scope.range(name);
-      var list = _.map(rangeValues, function (value) {
-        return {
-          value: String(value),
-          label: label + ' ' + value
-        };
-      });
-      list.splice(0, 0, { value: "", label: 'ALL '});
-
-      $scope.select[name] = list;
-
-      var selected = null;
-
-      if (queryParams[name]) {
-        selected = _.findWhere(list, { value: queryParams[name] });
-      }
-
-      if (selected) {
-        $scope[name] = selected;
-      } else {
-        $scope[name] = list[0];
-      }
-    }
-
-    $scope.select = {};
-    setupSelect('customer', 'Customer');
-    setupSelect('product', 'Product');
-    setupSelect('os', 'OS');
-    setupSelect('software1', 'Software1 Version');
-    setupSelect('software2', 'Software2 Version');
-    setupSelect('deviceId', 'Device ID');
-    $scope.lookback = queryParams.lookback ? parseInt(queryParams.lookback, 10) : settings.machine.lookback;
-
-    $scope.reload = function () {
-      //TODO have Angular route instead of reloading the page
-      window.location.href = window.location.pathname + '?' + jQuery.param(getRequestParams($scope));
-    };
-
-    function updateCharts(data) {
-      if (data && (data.length > 0)) {
-        var current = _.last(data);
-        $scope.cpu = parseFloat(current.cpu);
-        $scope.ram = parseFloat(current.ram);
-        $scope.hdd = parseFloat(current.hdd);
-      }
-      $scope.cpuChart = {
-        data: chartData(data, 'cpu'),
-        options: chartOptions,
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.ramChart = {
-        data: chartData(data, 'ram'),
-        options: chartOptions,
-        emptyChartOptions: emptyChartOptionsFn
-      };
-      $scope.hddChart = {
-        data: chartData(data, 'hdd'),
-        options: chartOptions,
-        emptyChartOptions: emptyChartOptionsFn
-      };
-    }
-
-    $scope.cpuChart = {
-      emptyChartOptions: emptyChartOptionsFn
-    };
-    $scope.ramChart = {
-      emptyChartOptions: emptyChartOptionsFn
-    };
-    $scope.hddChart = {
-      emptyChartOptions: emptyChartOptionsFn
-    };
-
-    var request = null;
-    function reloadCharts() {
-      //TODO check if lookback is valid
-      if (request) {
-        request.cancel();
-      }
-      request = new PollRequest(rest, $scope, updateCharts);
-      request.fetchMachineData();
-    }
-
-    $scope.$watch('[customer, product, os, software1, software1, deviceId]', function () {
-      reloadCharts();
-    }, true);
-
-    var lookbackTimeout;
-
-    var firstUpdate = true;
-
-    $scope.$watch('lookback', function () {
-      if (!firstUpdate) { // skip first change since there is a watch for select fields
-        clearTimeout(lookbackTimeout);
-        lookbackTimeout = setTimeout(reloadCharts, 500);
-      } else {
-        firstUpdate = false;
-      }
-    });
-
-    // stop server polling on destroy (e.g. when navigating to another view)
-    $scope.$on('$destroy', function () {
-      if (request) {
-        request.cancel();
-      }
-    }.bind(this));
-  }]);
-
-})();

http://git-wip-us.apache.org/repos/asf/incubator-apex-malhar/blob/e1a45507/web/demos/app/scripts/controllers/mobile.js
----------------------------------------------------------------------
diff --git a/web/demos/app/scripts/controllers/mobile.js b/web/demos/app/scripts/controllers/mobile.js
deleted file mode 100644
index 2301041..0000000
--- a/web/demos/app/scripts/controllers/mobile.js
+++ /dev/null
@@ -1,131 +0,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.
- */
-/*global settings, angular, google, jQuery, _*/
-(function () {
-'use strict';
-
-function translateLatLong(item) {
-    var match = item.location.match(/\((\d+),(\d+)/); //TODO server should pass this data as numbers
-    var lat = parseInt(match[1], 10);
-    var lon = parseInt(match[2], 10);
-    var phone = parseInt(item.phone, 10);
-
-    //TODO magic numbers
-    var latitude = 37.40180101292334 + (phone % 4 - 2) * 0.01 - lat * 0.005;
-    var longitude = -121.9966721534729 + (phone % 8 - 4) * 0.01 + lon * 0.007;
-
-    return { latitude: latitude, longitude: longitude, label: item.phone, phone: item.phone };
-}
-
-angular.module('mobile')
-    .controller('MobileController', ['$scope', 'rest', 'socket', function ($scope, rest, socket) {
-        rest.getApp(settings.mobile.appName).then(function (app) {
-            $scope.app = app;
-            $scope.appURL = settings.appsURL + app.id;
-        });
-
-        var map = {};
-
-        socket.subscribe(settings.mobile.topic.out, function(message) {
-            var item = message.data;
-
-            if (!item.hasOwnProperty('removed')) {
-                var latlon = translateLatLong(item);
-                map[item.phone] = latlon;
-            } else {
-                delete map[item.phone];
-            }
-
-            $scope.$broadcast('datachanged', map);
-        }, $scope);
-
-        //$scope.$on('phone_added', function (event, phone) {
-        //    map[phone] = { phone: phone };
-        //    $scope.$broadcast('datachanged', map);
-        //});
-
-        //$scope.$on('phone_removed', function (event, phone) {
-        //    removed[phone] = Date.now();
-        //    delete map[phone];
-        //    $scope.$broadcast('datachanged', map);
-        //});
-    }])
-    .controller('MobileGridControlller', ['$scope', '$filter', '$timeout', 'socket', function ($scope, $filter, $timeout, socket) {
-        $scope.$on('datachanged', function (event, map) {
-            $scope.gridData = _.values(map);
-        });
-
-        $scope.phone = '';
-        $scope.addPhone = function () {
-            var command = {
-                command : 'add',
-                phone : $scope.phone
-            };
-
-            var message = { "type" : "publish", "topic" : settings.mobile.topic.in, "data" : command };
-            socket.send(message);
-
-            //$scope.$emit('phone_added', $scope.phone);
-
-            $scope.phone = '';
-        };
-
-        $scope.removePhone = function(phone) {
-            var command = {
-                command : 'del',
-                phone : phone
-            };
-
-            var message = { "type" : "publish", "topic" : settings.mobile.topic.in, "data" : command };
-            socket.send(message);
-
-            //$scope.$emit('phone_removed', phone);
-        };
-
-        $scope.gridOptions = {
-            data: 'gridData',
-            enableColumnResize: true,
-            enableRowSelection: false,
-            columnDefs: [
-                { field: "phone", displayName: 'Phone', width: '30%', sortable: false },
-                { field: "latitude", displayName: 'Latitude', cellFilter: 'number:3', width: '30%', sortable: false },
-                { field: "longitude", displayName: 'Longitude', cellFilter: 'number:3', width: '30%', sortable: false },
-                { field: "phone", displayName: '', cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()" ng-click="removePhone(COL_FIELD)"><i class="icon-trash"></i></div>', cellClass: 'mobile-grid-remove', width: '10%', sortable: false }
-            ]
-        };
-    }])
-    .controller('MapController', ['$scope', 'socket', function ($scope, socket) {
-        google.maps.visualRefresh = true;
-
-        $scope.$on('datachanged', function (event, map) {
-            $scope.markersProperty = _.values(map); //TODO update only changed marker
-        });
-
-        angular.extend($scope, {
-            position: {
-                coords: {
-                    latitude: 37.36197126180853,
-                    longitude: -121.92674696445465
-                }
-            },
-            zoomProperty: 12
-        });
-    }]);
-
-})();