From: Ioakeim Samaras Date: Mon, 24 Jun 2019 16:08:46 +0000 (+0300) Subject: UI adaptation for supporting ONAP portal SDK X-Git-Tag: 2.0.0~63^2 X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=validation.git;a=commitdiff_plain;h=2879b2ee5e1e2815e5f43cb802352bf2878397af UI adaptation for supporting ONAP portal SDK JIRA: VAL-29 Signed-off-by: Ioakeim Samaras Change-Id: I1ff3118e09b7cc91b465fb8293a0e7765c82a581 --- diff --git a/.coafile b/.coafile index 95a31b4..0514a52 100644 --- a/.coafile +++ b/.coafile @@ -46,6 +46,12 @@ bears = SpaceConsistencyBear,JavaPMDBear files = ui/**.java language = java use_spaces = true +ignore = ui/target/**, + ui/src/main/java/org/akraino/validation/ui/login/LoginStrategyImpl.java, + ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppInitializer.java, + ui/src/main/java/org/akraino/validation/ui/scheduler/RegistryAdapter.java, + ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppConfig.java, + ui/src/main/java/org/akraino/validation/ui/filter/SecurityXssFilter.java [all.JS] bears = ESLintBear,JSComplexityBear @@ -53,6 +59,10 @@ files = ui/**.js language = javascript javascript_strictness = False use_spaces = true -ignore = ui/src/main/webapp/reusable_chart.js, +ignore = ui/src/main/webapp/app/fusion/**, + ui/src/main/webapp/static/**, ui/bin/**, - ui/target/** + ui/target/**, + ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmission.js, + ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissions.js, + ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionId.js diff --git a/docker/README.rst b/docker/README.rst index 34e7641..e4c4f4b 100644 --- a/docker/README.rst +++ b/docker/README.rst @@ -76,9 +76,8 @@ stored on the local server. By default, the container will run the k8s conformance test. If you want to enter the container, add */bin/sh* at the end of the command above - -The postgresql container -======================== +The mariadb container +===================== Building and pushing the container ---------------------------------- @@ -87,25 +86,35 @@ To build just the postgresql container, use the command: .. code-block:: console - make postgresql-build [ REGISTRY= NAME=] + make mariadb-build [ REGISTRY= NAME=] To both build and push the container, use the command: .. code-block:: console - make postgresql [ REGISTRY= NAME=] + make mariadb [ REGISTRY= NAME=] Using the container ------------------- +In order for the container to be easily created, the deploy.sh script has been developed. This script accepts the following as input parameters: -If you want to deploy the container, you can run the corresponding deploy.sh script with the appropriate parameters. +CONTAINER_NAME, name of the container, default value is akraino-validation-mariadb +MARIADB_ROOT_PASSWORD, the desired mariadb root user password, this variable is required +UI_ADMIN_PASSWORD, the desired Blueprint Validation UI password for the admin user, this variable is required +UI_AKRAINO_PASSWORD, the desired Blueprint Validation UI password for the akraino user, this variable is required +REGISTRY, registry of the mariadb image, default value is akraino +NAME, name of the mariadb image, default value is validation +TAG_PRE, first part of the image version, default value is mariadb +TAG_VER, last part of the image version, default value is latest +MARIADB_HOST_PORT, port on which mariadb is exposed on host, default value is 3307 -Example: +If you want to deploy the container, you can run this script with the appropriate parameters. -.. code-block:: console +Example (assuming you have used the default variables for building the image using the make command): - ./deploy.sh POSTGRES_PASSWORD=password +.. code-block:: console + ./deploy.sh MARIADB_ROOT_PASSWORD=password UI_ADMIN_PASSWORD=admin UI_AKRAINO_PASSWORD=akraino The ui container ================ @@ -113,8 +122,7 @@ The ui container Building and pushing the container ---------------------------------- -To build just the ui container, you must first compile the ui project. -Then use the command: +To build just the UI container, use the command: .. code-block:: console @@ -128,15 +136,37 @@ To both build and push the container, use the command: Using the container ------------------- +In order for the container to be easily created, the deploy.sh script has been developed. This script accepts the following as input parameters: -If you want to deploy the container, you can run the corresponding deploy.sh script with the appropriate parameters. -Note, that you must also build and run the postgresql container for a functional UI. +CONTAINER_NAME, name of the contaner, default value is akraino-validation-ui +DB_CONNECTION_URL, the URL connection with the akraino database of the maridb instance, this variable is required +MARIADB_ROOT_PASSWORD, mariadb root user password, this variable is required +REGISTRY, registry of the mariadb image, default value is akraino +NAME, name of the mariadb image, default value is validation +TAG_PRE, first part of the image version, default value is ui +TAG_VER, last part of the image version, default value is latest +JENKINS_URL, the URL of the Jenkins instance, this variable is required +JENKINS_USERNAME, the Jenkins user name, this variable is required +JENKINS_USER_PASSWORD, the Jenkins user password, this variable is required +JENKINS_JOB_NAME, the name of Jenkins job capable of executing the blueprint validation tests, this variable is required +NEXUS_PROXY, the proxy needed in order for the Nexus server to be reachable, default value is none +JENKINS_PROXY, the proxy needed in order for the Jenkins server to be reachable, default value is none -Example: +Note that, for a functional UI, the following prerequisites are needed: + +- The mariadb container in up and running state +- A Jenkins instance capable of running the blueprint validation test +- A Nexus repo in which all the test results are stored. + +Look at the UI README file for more info. + +If you want to deploy the container, you can run the aforementioned script with the appropriate parameters. + +Example (assuming you have used the default variables for building the image using the make command): .. code-block:: console - ./deploy.sh postgres_db_user_pwd=password jenkins_url=http://192.168.2.2:8080 jenkins_user_name=name jenkins_user_pwd=jenkins_pwd jenkins_job_name=job1 nexus_results_url=https://nexus.akraino.org/content/sites/logs proxy_ip=172.28.40.9 proxy_port=3128 + ./deploy.sh DB_CONNECTION_URL=172.17.0.3:3306/akraino MARIADB_ROOT_PASSWORD=password JENKINS_URL=http://192.168.2.2:8080 JENKINS_USERNAME=name JENKINS_USER_PASSWORD=jenkins_pwd JENKINS_JOB_NAME=job1 The kube-conformance container ============================== diff --git a/docker/mariadb/Dockerfile b/docker/mariadb/Dockerfile new file mode 100644 index 0000000..7d109bc --- /dev/null +++ b/docker/mariadb/Dockerfile @@ -0,0 +1,25 @@ +############################################################################## +# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you maynot 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. # +############################################################################## + +FROM alpine/git:1.0.7 +RUN git clone https://gerrit.akraino.org/r/validation /opt/akraino/validation/repo + +FROM mariadb:10.4.6 +COPY --from=0 /opt/akraino/validation/repo/ui/db-scripts/EcompSdkDDLMySql_2_4_Common.sql /docker-entrypoint-initdb.d +COPY --from=0 /opt/akraino/validation/repo/ui/db-scripts/EcompSdkDDLMySql_2_4_OS.sql /docker-entrypoint-initdb.d +COPY --from=0 /opt/akraino/validation/repo/ui/db-scripts/EcompSdkDMLMySql_2_4_Common.sql /docker-entrypoint-initdb.d +COPY --from=0 /opt/akraino/validation/repo/ui/db-scripts/EcompSdkDMLMySql_2_4_OS.sql /docker-entrypoint-initdb.d +COPY --from=0 /opt/akraino/validation/repo/ui/db-scripts/akraino-blueprint_validation_db.sql /docker-entrypoint-initdb.d diff --git a/docker/postgresql/Makefile b/docker/mariadb/Makefile similarity index 100% rename from docker/postgresql/Makefile rename to docker/mariadb/Makefile diff --git a/docker/mariadb/deploy.sh b/docker/mariadb/deploy.sh new file mode 100755 index 0000000..12c985c --- /dev/null +++ b/docker/mariadb/deploy.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Copyright (c) 2019 AT&T Intellectual Property. All other rights reserved. +# +# Licensed 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. + +# Directory on host in where database data will be stored +HOST_STORAGE_DIR="/var/lib/mariadb" +# Container name +CONTAINER_NAME="akraino-validation-mariadb" +# Container input variables +MARIADB_ROOT_PASSWORD="" +UI_ADMIN_PASSWORD="" +UI_AKRAINO_PASSWORD="" +# Image data +REGISTRY=akraino +NAME=validation +TAG_PRE=mariadb +TAG_VER=latest +MARIADB_HOST_PORT=3307 + +for ARGUMENT in "$@" +do + KEY=$(echo $ARGUMENT | cut -f1 -d=) + VALUE=$(echo $ARGUMENT | cut -f2 -d=) + case "$KEY" in + REGISTRY) REGISTRY=${VALUE} ;; + NAME) NAME=${VALUE} ;; + TAG_VER) TAG_VER=${VALUE} ;; + TAG_PRE) TAG_PRE=${VALUE} ;; + MARIADB_ROOT_PASSWORD) MARIADB_ROOT_PASSWORD=${VALUE} ;; + CONTAINER_NAME) CONTAINER_NAME=${VALUE} ;; + MARIADB_HOST_PORT) MARIADB_HOST_PORT=${VALUE} ;; + UI_ADMIN_PASSWORD) UI_ADMIN_PASSWORD=${VALUE} ;; + UI_AKRAINO_PASSWORD) UI_AKRAINO_PASSWORD=${VALUE} ;; + *) + esac +done + +if [ -z "$MARIADB_ROOT_PASSWORD" ] + then + echo "ERROR: You must specify the mariadb database root password" + exit 1 +fi + +if [ -z "$UI_ADMIN_PASSWORD" ] + then + echo "ERROR: You must specify the password of the UI admin user" + exit 1 +fi + +if [ -z "$UI_AKRAINO_PASSWORD" ] + then + echo "ERROR: You must specify the password for the UI akraino user" + exit 1 +fi + +IMAGE="$REGISTRY"/"$NAME":"$TAG_PRE"-"$TAG_VER" +docker run --detach --name $CONTAINER_NAME --publish $MARIADB_HOST_PORT:3306 --volume $HOST_STORAGE_DIR:/var/lib/mysql -v "/$(pwd)/mariadb.conf:/etc/mysql/conf.d/my.cnf" -e MYSQL_ROOT_PASSWORD="$MARIADB_ROOT_PASSWORD" -e UI_ADMIN_PASSWORD="$UI_ADMIN_PASSWORD" -e UI_AKRAINO_PASSWORD="$UI_AKRAINO_PASSWORD" $IMAGE +sleep 10 +docker exec $CONTAINER_NAME /bin/bash -c 'sed -i 's/admin_password/'"$UI_ADMIN_PASSWORD"'/g' /docker-entrypoint-initdb.d/EcompSdkDMLMySql_2_4_OS.sql ; sed -i 's/akraino_password/'"$UI_AKRAINO_PASSWORD"'/g' /docker-entrypoint-initdb.d/akraino-blueprint_validation_db.sql; continue=`ps aux | grep mysql` ; while [ -z "$continue" ]; do continue=`ps aux | grep mysql`; sleep 5; done ; sleep 10 ;' diff --git a/docker/postgresql/Dockerfile b/docker/mariadb/mariadb.conf similarity index 83% rename from docker/postgresql/Dockerfile rename to docker/mariadb/mariadb.conf index 0259da2..0819156 100644 --- a/docker/postgresql/Dockerfile +++ b/docker/mariadb/mariadb.conf @@ -14,8 +14,6 @@ # limitations under the License. # ############################################################################## -FROM postgres:9.6.9 +[mysqld] +lower_case_table_names = 1 -COPY akraino-blueprint_validation_db.sql /akraino-blueprint_validation_db.sql -RUN chown -R postgres:postgres /var/lib/postgresql/data && \ - chown -R postgres:postgres /akraino-blueprint_validation_db.sql \ No newline at end of file diff --git a/docker/postgresql/akraino-blueprint_validation_db.sql b/docker/postgresql/akraino-blueprint_validation_db.sql deleted file mode 100644 index fb27ad5..0000000 --- a/docker/postgresql/akraino-blueprint_validation_db.sql +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -drop sequence IF EXISTS akraino.seq_timeslot; -drop sequence IF EXISTS akraino.seq_blueprint; -drop sequence IF EXISTS akraino.seq_blueprint_instance; -drop sequence IF EXISTS akraino.seq_submission; - -drop table IF EXISTS akraino.submission; -drop table IF EXISTS akraino.blueprint_instance; -drop table IF EXISTS akraino.blueprint; -drop table IF EXISTS akraino.timeslot; - -CREATE SCHEMA IF NOT EXISTS akraino - AUTHORIZATION postgres; - -CREATE TABLE akraino.timeslot -( - timeslot_id bigint not NULL unique, - start_date_time text not NULL, - duration int not NULL, - lab text not NULL -) -WITH ( - OIDS = FALSE -) -; -ALTER TABLE akraino.timeslot - OWNER TO postgres; - -CREATE TABLE akraino.blueprint -( - blueprint_id bigint not NULL, - blueprint_name text not NULL unique, - CONSTRAINT blueprint_id_pk PRIMARY KEY (blueprint_id) -) -WITH ( - OIDS = FALSE -) -; -ALTER TABLE akraino.blueprint - OWNER TO postgres; - -CREATE TABLE akraino.blueprint_instance -( - blueprint_instance_id bigint not NULL, - blueprint_id bigint not NULL, - version text not NULL, - layer text not NULL, - layer_description text not NULL, - timeslot_id bigint not NULL unique, - CONSTRAINT blueprint_instance_id_pk PRIMARY KEY (blueprint_instance_id), - CONSTRAINT blueprint_id_fk FOREIGN KEY (blueprint_id) - REFERENCES akraino.blueprint (blueprint_id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION, - CONSTRAINT timeslot_id_fk FOREIGN KEY (timeslot_id) - REFERENCES akraino.timeslot (timeslot_id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION -) -WITH ( - OIDS = FALSE -) -; -ALTER TABLE akraino.blueprint_instance - OWNER TO postgres; - -CREATE TABLE akraino.submission -( - submission_id bigint not NULL, - status text not NULL, - jenkins_queue_job_item_url text, - nexus_result_url text, - blueprint_instance_id bigint not NULL, - CONSTRAINT submission_id_pk PRIMARY KEY (submission_id), - CONSTRAINT blueprint_instance_id_fk FOREIGN KEY (blueprint_instance_id) - REFERENCES akraino.blueprint_instance (blueprint_instance_id) MATCH SIMPLE - ON UPDATE NO ACTION ON DELETE NO ACTION -) -WITH ( - OIDS = FALSE -) -; -ALTER TABLE akraino.submission - OWNER TO postgres; - -CREATE SEQUENCE akraino.seq_timeslot - START WITH 1 INCREMENT BY 1; - -CREATE SEQUENCE akraino.seq_blueprint - START WITH 1 INCREMENT BY 1; - -CREATE SEQUENCE akraino.seq_blueprint_instance - START WITH 1 INCREMENT BY 1; - -CREATE SEQUENCE akraino.seq_submission - START WITH 1 INCREMENT BY 1; - -insert into akraino.timeslot values(1, now(), 10, 0); /* stands for AT&T lab */ -insert into akraino.timeslot values(2, now(), 1000, 0); /* stands for AT&T lab */ -insert into akraino.timeslot values(3, now(), 10000, 0); /* stands for AT&T lab */ -insert into akraino.timeslot values(4, now(), 100000, 0); /* stands for AT&T lab */ -insert into akraino.timeslot values(5, now(), 100000, 0); /* stands for AT&T lab */ - -insert into akraino.blueprint (blueprint_id, blueprint_name) values(1, 'dummy'); -insert into akraino.blueprint (blueprint_id, blueprint_name) values(2, 'Unicycle'); -insert into akraino.blueprint (blueprint_id, blueprint_name) values(3, 'REC'); - -insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(1, 1, '0.0.2-SNAPSHOT', 0, 'Dell Hardware', 1); /* 0 Stands for hardware layer */ -insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(2, 2, '0.0.1-SNAPSHOT', 0, 'Dell Hardware', 2); /* 0 Stands for hardware layer */ -insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(3, 2, '0.0.7-SNAPSHOT', 1, 'CentOS Linux 7 (Core)', 3); /* 1 Stands for OS layer */ -insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(4, 3, '0.0.4-SNAPSHOT', 2, 'K8s with High Availability Ingress controller', 4); /* 2 Stands for k8s layer */ -insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(5, 3, '0.0.8-SNAPSHOT', 2, 'K8s with High Availability Ingress controller', 5); /* 2 Stands for k8s layer */ - -commit; diff --git a/docker/postgresql/deploy.sh b/docker/postgresql/deploy.sh deleted file mode 100755 index 60af84e..0000000 --- a/docker/postgresql/deploy.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2019 AT&T Intellectual Property. All other rights reserved. -# -# Licensed 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. - -export DROOT=/var/lib -CONTAINER_NAME="validation_postgresql" -POSTGRES_HOST_PORT=6432 -REGISTRY=akraino -NAME=validation -TAG_PRE=`echo "${PWD##*/}"` -TAG_VER=latest -POSTGRES_PASSWORD="" -HOST_ARCH=amd64 - -# get the architecture of the host -if [ "`uname -m`" = "aarch64" ]; then - HOST_ARCH=arm64 -fi - -for ARGUMENT in "$@" -do - KEY=$(echo $ARGUMENT | cut -f1 -d=) - VALUE=$(echo $ARGUMENT | cut -f2 -d=) - case "$KEY" in - REGISTRY) REGISTRY=${VALUE} ;; - NAME) NAME=${VALUE} ;; - TAG_VER) TAG_VER=${VALUE} ;; - POSTGRES_PASSWORD) POSTGRES_PASSWORD=${VALUE} ;; - *) - esac -done - -if [ -z "$POSTGRES_PASSWORD" ] - then - echo "ERROR: You must specify at least the postgreSQL database password" - exit 1 -fi - -IMAGE="$REGISTRY"/"$NAME":"$TAG_PRE"-"$HOST_ARCH"-"$TAG_VER" -docker run --detach --name $CONTAINER_NAME --restart=always --publish $POSTGRES_HOST_PORT:5432 --volume $DROOT/postgres:/var/lib/postgresql/data --env POSTGRES_USER=admin --env POSTGRES_PASSWORD="$POSTGRES_PASSWORD" $IMAGE -sleep 10 -docker exec $CONTAINER_NAME /bin/bash -c "psql -h localhost -p 5432 -U admin -f /akraino-blueprint_validation_db.sql" diff --git a/docker/ui/Dockerfile b/docker/ui/Dockerfile index cec47f9..3f5c98a 100644 --- a/docker/ui/Dockerfile +++ b/docker/ui/Dockerfile @@ -16,7 +16,7 @@ FROM maven:3.6.1-jdk-11 as build RUN git clone https://gerrit.akraino.org/r/validation /opt/akraino/validation/repo -RUN cd /opt/akraino/validation/repo/ui && mvn clean install +RUN cd /opt/akraino/validation/repo/ui && mvn clean package FROM tomcat:8.5.37 COPY --from=build /opt/akraino/validation/repo/ui/target/AECBlueprintValidationUI.war /usr/local/tomcat/webapps diff --git a/docker/ui/deploy.sh b/docker/ui/deploy.sh index fef0bed..6b77dd9 100755 --- a/docker/ui/deploy.sh +++ b/docker/ui/deploy.sh @@ -14,26 +14,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -CONTAINER_NAME="validation-ui" +# Container name +CONTAINER_NAME="akraino-validation-ui" +# Image data REGISTRY=akraino NAME=validation -TAG_PRE=`echo "${PWD##*/}"` +TAG_PRE=ui TAG_VER=latest -HOST_ARCH=amd64 -postgres_db_user_pwd="" -jenkins_url="" -jenkins_user_name="" -jenkins_user_pwd="" -jenkins_job_name="" -nexus_results_url="" -proxy_ip="" -proxy_port="" - -# get the architecture of the host -if [ "`uname -m`" = "aarch64" ] - then - HOST_ARCH=arm64 -fi +# Container input parameters +MARIADB_ROOT_PASSWORD="" +JENKINS_URL="" +JENKINS_USERNAME="" +JENKINS_USER_PASSWORD="" +JENKINS_JOB_NAME="" +DB_CONNECTION_URL="" +NEXUS_PROXY="" +JENKINS_PROXY="" for ARGUMENT in "$@" do @@ -42,55 +38,57 @@ do case "$KEY" in REGISTRY) REGISTRY=${VALUE} ;; NAME) NAME=${VALUE} ;; + TAG_PRE) TAG_PRE=${VALUE} ;; TAG_VER) TAG_VER=${VALUE} ;; - postgres_db_user_pwd) postgres_db_user_pwd=${VALUE} ;; - jenkins_url) jenkins_url=${VALUE} ;; - jenkins_user_name) jenkins_user_name=${VALUE} ;; - jenkins_user_pwd) jenkins_user_pwd=${VALUE} ;; - jenkins_job_name) jenkins_job_name=${VALUE} ;; - nexus_results_url) nexus_results_url=${VALUE} ;; - proxy_ip) proxy_ip=${VALUE} ;; - proxy_port) proxy_port=${VALUE} ;; + MARIADB_ROOT_PASSWORD) MARIADB_ROOT_PASSWORD=${VALUE} ;; + JENKINS_URL) JENKINS_URL=${VALUE} ;; + JENKINS_USERNAME) JENKINS_USERNAME=${VALUE} ;; + JENKINS_USER_PASSWORD) JENKINS_USER_PASSWORD=${VALUE} ;; + JENKINS_JOB_NAME) JENKINS_JOB_NAME=${VALUE} ;; + DB_CONNECTION_URL) DB_CONNECTION_URL=${VALUE} ;; + CONTAINER_NAME) CONTAINER_NAME=${VALUE} ;; + NEXUS_PROXY) NEXUS_PROXY=${VALUE} ;; + JENKINS_PROXY) JENKINS_PROXY=${VALUE} ;; *) esac done -if [ -z "$postgres_db_user_pwd" ] +if [ -z "$DB_CONNECTION_URL" ] then - echo "ERROR: You must specify the postgresql root user password" + echo "ERROR: You must specify the database connection url" exit 1 fi -if [ -z "$jenkins_url" ] +if [ -z "$MARIADB_ROOT_PASSWORD" ] then - echo "ERROR: You must specify the Jenkins Url" + echo "ERROR: You must specify the mariadb root user password" exit 1 fi -if [ -z "$jenkins_user_name" ] +if [ -z "$JENKINS_URL" ] then - echo "ERROR: You must specify the Jenkins username" + echo "ERROR: You must specify the Jenkins Url" exit 1 fi -if [ -z "$jenkins_user_pwd" ] +if [ -z "$JENKINS_USERNAME" ] then - echo "ERROR: You must specify the Jenkins user password" + echo "ERROR: You must specify the Jenkins username" exit 1 fi -if [ -z "$jenkins_job_name" ] +if [ -z "$JENKINS_USER_PASSWORD" ] then - echo "ERROR: You must specify the Jenkins job name" + echo "ERROR: You must specify the Jenkins user password" exit 1 fi -if [ -z "$nexus_results_url" ] +if [ -z "$JENKINS_JOB_NAME" ] then - echo "ERROR: You must specify the Nexus Url" + echo "ERROR: You must specify the Jenkins job name" exit 1 fi -IMAGE="$REGISTRY"/"$NAME":"$TAG_PRE"-"$HOST_ARCH"-"$TAG_VER" -docker run --name $CONTAINER_NAME --network="host" -it --rm -e postgres_db_user_pwd="$postgres_db_user_pwd" -e jenkins_url="$jenkins_url" -e jenkins_user_name="$jenkins_user_name" -e jenkins_user_pwd="$jenkins_user_pwd" -e jenkins_job_name="$jenkins_job_name" -e nexus_results_url="$nexus_results_url" -e proxy_ip="$proxy_ip" -e proxy_port="$proxy_port" $IMAGE +IMAGE="$REGISTRY"/"$NAME":"$TAG_PRE"-"$TAG_VER" +docker run --name $CONTAINER_NAME --network="host" -it --rm -e DB_CONNECTION_URL="$DB_CONNECTION_URL" -e MARIADB_ROOT_PASSWORD="$MARIADB_ROOT_PASSWORD" -e JENKINS_URL="$JENKINS_URL" -e JENKINS_USERNAME="$JENKINS_USERNAME" -e JENKINS_USER_PASSWORD="$JENKINS_USER_PASSWORD" -e JENKINS_JOB_NAME="$JENKINS_JOB_NAME" -e NEXUS_PROXY="$NEXUS_PROXY" -e JENKINS_PROXY="$JENKINS_PROXY" $IMAGE sleep 10 diff --git a/ui/CHANGELOG.md b/ui/CHANGELOG.md index fd87d9b..beb7192 100644 --- a/ui/CHANGELOG.md +++ b/ui/CHANGELOG.md @@ -59,4 +59,39 @@ All notable changes to this project will be documented in this file. - Trailing spaces removed from all files. - README file is updated. -### Removed \ No newline at end of file +### Removed + +## [0.1.0-SNAPSHOT] - 24 June 2019 +### Added +- The following database initialization scripts of ONAP portal SDK project have been added (but modified in order to support the Akraino database) : epsdk-app-common/db-scripts/EcompSdkDDLMySql_2_4_Common.sql, epsdk-app-os/db-scripts/EcompSdkDDLMySql_2_4_OS.sql, epsdk-app-common/db-scripts/EcompSdkDMLMySql_2_4_Common.sql and epsdk-app-os/db-scripts/EcompSdkDMLMySql_2_4_OS.sql. The copyrights of these files have not been changed. +- Proxies for connecting with Nexus and Jenkins are now supported. +- io.fabric8/docker-maven-plugin can now be used for creating UI container for development purposes + +### Changed +- Adaptation to ONAP portal SDK completed. Version 2.4.0 (Casablanca) has been used. +- The new URL of the results stored in Nexus is now used. +- Jenkins API is used by utilizing lower case for blueprint names and layers +- README file is updated +- Bug fixed when test suite is selected +- Jenkins job name is dynamically defined in the Nexus result URL +- Shell script input variables are now declared using capital letters + +### Removed + +## [0.1.0-SNAPSHOT] - 2 Jule 2019 +### Added +- "All" blueprint layers is now supported. +- Pop up windows inform UI user about the status of result retrieval +- Blueprint version is now passed as a parameter to the Jenkins validation job +- Database tables have been added, namely 'lab' and 'silo' + +### Changed +- Start date time and duration are initialized to 'now' and null respectively, as they are not taken into account +- As the blueprint, bluprint_instance_for_validation and timeslot tables must be initialized differently for each lab use case, the previous initialization data was extracted from the db-scripts/akraino-blueprint_validation_db_example.sql file and was placed inside a new file, namely db-scripts/examples/initialize_db_example.sql. +- The table 'blueprint_instance' has been renamed to 'blueprint_instance_for_validation' +- DB scripts are now copied to the /docker-entrypoint-initdb.d directory +- Lab field has been removed from timeslot table and placed in the submission table. +- README file has been updated +- Definition of system architecture removed from the pom.xml + +### Removed diff --git a/ui/README.rst b/ui/README.rst index 73ec832..afb7c16 100644 --- a/ui/README.rst +++ b/ui/README.rst @@ -2,159 +2,343 @@ Akraino Blueprint Validation UI ======== -This project contains the source code of the Akraino Blueprint Validation UI. +Introduction +------------ + +This project contains the source code of the Akraino Blueprint Validation UI. It is based on the ONAP portal SDK, version 2.4.0. It should be noted that the copyright of all the files of the aforementioned project that were left intact, has not been changed. This UI consists of the front-end and back-end parts. -The front-end part is based on HTML, CSS, and AngularJS technologies. -The back-end part is based on Spring MVC and Apache Tomcat technologies. + +The front-end part is based on HTML, CSS, and AngularJS technologies. The back-end part is based on Spring MVC and Apache Tomcat technologies. Based on these instructions, a user can provide the prerequisites, compile the source code and deploy the UI. +Scope +----- + +The blueprint validation UI aims to be hosted by LF servers and will be exposed using public IP and domain names. + +It provides a user-friendly way for displaying blueprints validation test results. Based on these results, the status of a blueprint can be determined (mature, incubation state, etc.). + +In specific, the purpose of the UI is twofold: + +1) Support full control loop of producing results. In this mode, the UI must be connected with a Jenkins instance capable of running blueprint validation tests. + It will enable the user to define a blueprint for validation using its name, version, layer, desired lab and desired timeslot. This data constitutes a submission. It should be noted that the blueprint family is derived from the blueprint name. + Also, the UI will have the ability to track the lifecycle of a submission. A submission state can be one of the following: submitted, waiting, running and completed. The implementation vehicle for this action is the REST API of Jenkins. + Moreover, the UI must be connected with a mariadb instance and the Nexus server where the results are stored. + Then, it will be able to trigger the appropriate job in Jenkins and receive the corresponding results from Nexus. + Note that it makes no difference whether the Jenkins instance is the community one or a private one. +2) Partial control of producing results. In this mode, the UI must be connected with a mariadb instance and the Nexus server where the results are stored. + Every blueprint owner is responsible of executing tests and storing results in Nexus using his/her own Jenkins instance. The UI only retrieves results from Nexus and displays them. + +Currently, the partial control loop is not supported. + +In both modes, user authentication, authorization and accounting (AAA) will be supported in order to control access to resources, enforce policies on these resources and audit their usage. + +Prerequisites: +~~~~~~~~~~~~~~ + +In order for the blueprint validation UI to be functional, the following items are taken for granted: + +- An appropriate mariadb instance is up and running (look at the Database subsection). + This prerequisite concerns both of the UI modes. + +- The available labs for blueprint validation execution are defined by the corresponding lab owners (look at the Database subsection). It is their responsibility to publish them. Currently, this data is statically stored in the blueprint validation UI mariadb database. In order for a lab owner to update them, he/her must update the corresponding table entries. This inconvenience will be handled in the future. + This prerequisite concerns only the full control loop mode. + +- The available timeslots for blueprint validation execution of every lab are defined by the corresponding lab owners (look at the Database subsection). It is their responsibility to publish them. Currently, this data is statically stored in the blueprint validation UI mariadb database. In order for a lab owner to update them, he/her must update the corresponding table entries. This inconvenience will be handled in the future. + This prerequisite concerns only the full control loop mode. + +- The data of the lab silos (i.e. which silo is used by a lab in order to store results in Nexus) is stored in the mariadb database (look at the Database subsection). It is the blueprint owner's responsibility to publish it. Currently, this data is statically stored in the blueprint validation UI mariadb database. In order for a blueprint owner to update it, he/her must update the corresponding table entries. This inconvenience will be handled in the future. + This prerequisite concerns only the full control loop mode. + +- The data of available blueprints (i.e. blueprint name) is stored in the mariadb database (look at the Database subsection). It is the blueprint owner's responsibility to publish it. Currently, this data is statically stored in the blueprint validation UI mariadb database. In order for a blueprint owner to update it, he/her must update the corresponding table entries. This inconvenience will be handled in the future. + This prerequisite concerns only the full control loop mode. + +- The data of an available blueprint instance for validation (i.e. version, layer and description of the layer) is stored in the mariadb database (look at the Database subsection). It is the blueprint owner's responsibility to publish it. Currently, this data is statically stored in the blueprint validation UI mariadb database. In order for a blueprint owner to update it, he/her must update the corresponding table entries. This inconvenience will be handled in the future. + This prerequisite concerns only the full control loop mode. + +- A Jenkins instance exists capable of executing blueprint validation tests on the specified lab and storing the results to Nexus server (look at the Jenkins configuration subsection). + This prerequisite concerns only the full control loop mode. + +- A Nexus server exists where all the blueprint validation results are stored (look at the Nexus subsection). + This prerequisite concerns both of the UI modes. + +- The whole installation and deployment of a blueprint and its corresponding blueprint family components (i.e. the appropriate edge cloud stack with its combination of infrastructure hardware components, OS, K8s, software, etc) are already performed in the appropriate lab. + Recall that multiple labs can be used for a specific blueprint validation. Also, it is the responsibility of the blueprint submitter to ensure that the edge validation and community CI labs can support comprehensive validation of the blueprint and cover all use case characteristics. + This prerequisite concerns both of the UI modes. + +Developer's guide +----------------- + Download the project --------------------- +~~~~~~~~~~~~~~~~~~~~ .. code-block:: console git clone "https://gerrit.akraino.org/r/validation" Prerequisites ---------------- +~~~~~~~~~~~~~ - Database -A PostgreSQL database instance is needed with the appropriate relations in order for the back-end system to store and retrieve data. -Configure the postgreSQL root password in the variable POSTGRES_PASSWORD and execute the following commands in order to build and deploy this database container: +A mariadb database instance is needed for both modes of the UI with the appropriate databases and tables in order for the back-end system to store and retrieve data. + +The pom.xml file supports the creation of an appropriate docker image for development purposes. The initialization scripts reside under the db-scripts directory. + +Also, a script has been developed, namely validation/docker/mariadb/deploy.sh which easily deploys the container. This script accepts the following as input parameters: + +CONTAINER_NAME, name of the container, default value is akraino-validation-mariadb +MARIADB_ROOT_PASSWORD, the desired mariadb root user password, this variable is required +UI_ADMIN_PASSWORD, the desired Blueprint Validation UI password for the admin user, this variable is required +UI_AKRAINO_PASSWORD, the desired Blueprint Validation UI password for the akraino user, this variable is required +REGISTRY, registry of the mariadb image, default value is akraino +NAME, name of the mariadb image, default value is validation +TAG_PRE, first part of the image version, default value is mariadb +TAG_VER, last part of the image version, default value is latest +MARIADB_HOST_PORT, port on which mariadb is exposed on host, default value is 3307 + +Currently, two users are supported for the UI, namely admin (full privileges) and akraino (limited privileges). Their passwords must be defined in the database. + +Let's build and deploy the image using only the required parameters. + +Configure the mariadb root user password (currently the UI connects to the database using root privileges), the UI admin password and the UI akraino password in the appropriate variables and execute the following commands in order to build and deploy this database container: + +.. code-block:: console + + cd validation/ui + mvn docker:build + cd ../docker/mariadb + ./deploy.sh TAG_PRE=dev-mariadb MARIADB_ROOT_PASSWORD= UI_ADMIN_PASSWORD= UI_AKRAINO_PASSWORD= + mysql -p -uroot -h < ../../ui/db-scripts/examples/initialize_db_example.sql + +In order to retrieve the IP of the mariadb container, execute the following command: .. code-block:: console - cd validation/docker/postgresql - make build - ./deploy.sh POSTGRES_PASSWORD=password + docker inspect + +It should be noted that, currently, both images (UI and mariadb) are built using the mvn docker:build command. + +Furthermore, the TAG_PRE variable should be defined as the default value is 'mariadb' (note that the 'dev-mariadb' is used for development purposes - look at pom.xml file). + +If you want to re-deploy the database, you must first delete the container and the directory on the host machine where data are stored. To this end, execute the following command: + +.. code-block:: console + + docker stop ; docker rm ; sudo rm -rf /var/lib/mariadb + +In the context of the full control loop mode, the following tables must be initialized with appropriate data: + +- lab (here every lab owner should store the name of the lab) +- timeslot (here every lab owner should register the available timeslots that can be used for blueprint validation test execution) +- silo (here every lab owner should register the silo which is used for storing results in Nexus, for example for AT&T lab the value is 'att-blu-val') +- blueprint (here every blueprint owner should register the name of the blueprint) +- blueprint_instance_for_validation (here every blueprint owner should register the blueprint instances for validation, i.e. version, layer and description of a layer) + +The following file can be used for initializing the aforementioned data (as we did in the above example using the 'mysql -p -uroot -h < ../../ui/db-scripts/examples/initialize_db_example.sql' command): + + db-scripts/examples/initialize_db_example.sql -Below, some data that is initialized in the aforementioned database is illustrated (note that this data is used mainly for testing purposes): +Some of this data is illustrated below (refer to 'org.akraino.validation.ui.data' package for more info regarding available values): .. code-block:: console + Lab + id:1, lab:0 (0 stands for AT&T) + Timeslots: - id:1 , start date and time: now() (i.e. the time of the postgreSQL container deployment), duration: 10 (sec), lab: 0 (i.e. AT&T) - id:2 , start date and time: now() (i.e. the time of the postgreSQL container deployment), duration: 1000 (sec), lab: 0 (i.e. AT&T) + id:1 , start date and time: 'now', duration: null, lab: 1 + + Silo + id:1, silo: 'att-blu-val', lab: 1 Blueprints: - id: 1 , name : 'dummy' - id: 2 , name : 'Unicycle' + id: 3 , name : 'REC' Blueprint Instances: - id: 1, blueprint_id: 1 (i.e. dummy), version: "0.0.2-SNAPSHOT", layer: 0 (i.e. Hardware), layer_description: "Dell Hardware", timeslot id: 1 - id: 2, blueprint_id: 2 (i.e. Unicycle), version: "0.0.1-SNAPSHOT", layer: 0 (i.e. Hardware), layer_description: "Dell Hardware", timeslot id: 2 - -For more information about this data, please refer to the file: + id: 2, blueprint_id: 3 (i.e. REC), version: "latest", layer: 0 (i.e. Hardware), layer_description: "AT&T Hardware" - validation/docker/postgresql/akraino-blueprint_validation_db.sql +It should be noted that currently the start date and time and the duration of the timeslot are not taken into account by the UI (see limitation section). Therefore, a user should define 'now' and null respectively for their content. Based on this data, the UI enables the user to select an appropriate blueprint instance for validation. -Currently, this data cannot be retrieved dynamically by the UI (see limitations subsection). +Currently, this data cannot be retrieved dynamically by the UI (see limitations subsection). For this reason, in cases of new data, a user should define new entries in this database. -For this reason, in cases of new blueprint data, a user should define new entries in this database. +For example, if a user wants to define a new lab with the following data: + + lab: Community + +the following file should be created: + +name: dbscript +content: + SET FOREIGN_KEY_CHECKS=1; + use akraino; + insert into lab values(2, 2); + +2 stands for community lab. Refer to 'org.akraino.validation.ui.data' package for more info. + +Then, the following command should be executed: + +.. code-block:: console + + mysql -p -uroot -h < ./dbscript.sql For example, if a user wants to define a new timeslot with the following data: - start date and time:now, duration: 123 in secs, lab: Community + start date and time:'now', duration: 0, lab: AT&T + +the following file should be created: + +name: dbscript +content: + SET FOREIGN_KEY_CHECKS=1; + use akraino; + insert into timeslot values(2, 'now', null, 1); + +1 is the id of the AT&T lab. + +Then, the following command should be executed: + +.. code-block:: console + + mysql -p -uroot -h < ./dbscript.sql + +For example, if a user wants to define a new silo with the following data: + + silo: 'community-blu-val', lab: AT&T the following file should be created: name: dbscript content: - insert into akraino.timeslot values(5, now(), 123, 2); + SET FOREIGN_KEY_CHECKS=1; + use akraino; + insert into silo values(2, 'community-blu-val', 2); + +2 is the id of the community lab. Then, the following command should be executed: .. code-block:: console - psql -h -p 6432 -U admin -f ./dbscript + mysql -p -uroot -h < ./dbscript.sql Furthermore, if a user wants to define a new blueprint, namely "newBlueprint" and a new instance of this blueprint with the following data: - version: "0.0.1-SNAPSHOT", layer: 2 (i.e. K8s), layer_description: "K8s with High Availability Ingress controller", timeslot id: 5 (i.e. the new timeslot) + version: "latest", layer: 2 (i.e. K8s), layer_description: "K8s with High Availability Ingress controller" the following file should be created: name: dbscript content: - insert into akraino.blueprint (blueprint_id, blueprint_name) values(4, 'newBlueprint'); - insert into akraino.blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description, timeslot_id) values(6, 4, '0.0.1-SNAPSHOT', 2, 'K8s with High Availability Ingress controller', 5); + SET FOREIGN_KEY_CHECKS=1; + use akraino; + insert into blueprint (blueprint_id, blueprint_name) values(4, 'newBlueprint'); + insert into blueprint_instance (blueprint_instance_id, blueprint_id, version, layer, layer_description) values(6, 4, 'latest', 2, 'K8s with High Availability Ingress controller'); Then, the following command should be executed: .. code-block:: console - psql -h -p 6432 -U admin -f ./dbscript + mysql -p -uroot -h < ./dbscript.sql The UI will automatically retrieve this new data and display it to the user. - Jenkins Configuration -The Blueprint validation UI will trigger job executions in a Jenkins instance. +Recall that for full control loop, a Jenkins instance is needed capable of executing blueprint validation tests to the specified lab. The Blueprint validation UI will trigger job executions in that instance. + +It should be noted that it is not the UI responsibility to deploy a Jenkins instance. -This instance must have the following option enabled: "Manage Jenkins -> Configure Global Security -> Prevent Cross Site Request Forgery exploits". +Furthermore, this instance must have the following option enabled: "Manage Jenkins -> Configure Global Security -> Prevent Cross Site Request Forgery exploits". -Also, currently corresponding Jenkins job should accept the following as input parameters: "SUBMISSION_ID", "BLUEPRINT", "LAYER" and "UI_IP". -The "SUBMISSION_ID" and "UI_IP" parameters (i.e. IP address of the UI host machine-this is needed by the Jenkins instance in order to send back Job completion notification) are created and provided by the backend part of the UI. -The "BLUEPRINT" and "LAYER" parameters are configured by the UI user. +Also, currently, the corresponding Jenkins job should accept the following as input parameters: "SUBMISSION_ID", "BLUEPRINT", "VERSION", "LAYER" and "UI_IP". +The "SUBMISSION_ID" and "UI_IP" parameters (i.e. IP address of the UI host machine-this is needed by the Jenkins instance in order to send back Job completion notification) are created and provided by the back-end part of the UI. +The "BLUEPRINT", "VERSION" and "LAYER" parameters are configured by the UI user. -Moreover, as the Jenkins notification plugin (https://wiki.jenkins.io/display/JENKINS/Notification+Plugin) seems to ignore proxy settings, the corresponding Jenkins job must be configured to execute the following command at the end (Post-build Actions) +Moreover, as the Jenkins notification plugin (https://wiki.jenkins.io/display/JENKINS/Notification+Plugin) seems to ignore proxy settings, the corresponding Jenkins job must be configured to execute the following commands at the end (Post-build Actions) .. code-block:: console - curl -v -H "Content-Type: application/json" -X POST --insecure --silent http://$UI_IP:8080/AECBlueprintValidationUI/api/jenkinsJobNotification/ --data '{"submissionId": "'"$SUBMISSION_ID"'" , "name":"'"$JOB_NAME"'", "buildNumber":"'"$BUILD_NUMBER"'"}' + cookie=`curl -v -H "Content-Type: application/x-www-form-urlencoded" -X POST --insecure --silent http://$UI_IP:8080/AECBlueprintValidationUI/login_external -d "loginId=akraino&password=akraino" 2>&1 | grep "Set-Cookie: " | awk -F ':' '{print $2}'` + curl -v --cookie $cookie -H "Content-Type: application/json" -X POST --insecure --silent http://$UI_IP:8080/AECBlueprintValidationUI/api/jenkinsJobNotification/ --data '{"submissionId": "'"$SUBMISSION_ID"'" , "name":"'"$JOB_NAME"'", "buildNumber":"'"$BUILD_NUMBER"'"}' -Finally, the Jenkins instance must be accessible from the UI host without using system proxy. +It should be noted that the credentials user=akraino and password=akraino defined in the above commands should be replaced with the credentials of a real UI user. Recall that these credentials are defined in the database. - Nexus server -All the blueprint validation results are stored in Nexus server. +All the blueprint validation results are stored in Nexus server for both modes of the UI. + +It should be noted that it is not the UI responsibility to deploy a Nexus server. + +In the context of the full control loop, these results must be available in the following url: -These results must be available in the following url: + https://nexus.akraino.org/content/sites/logs//job///results//. - https://nexus.akraino.org/content/sites/logs/"lab"-blu-val/job/validation/"Jenkins job number"/results/"name_of_the_test_suite". +where is the silo used by a lab for storing results in Nexus (for example 'att-blu-val'), is the Jenkins job name that is triggered by the UI, is the number of the Jenkins job that produced this result, is the blueprint layer and is the name of the corresponding test suite. -where "lab" is the name of the lab (for example 'att'), "Jenkins job number" is the number of the Jenkins job that produced this result, and "name_of_the_test_suite" is the name of the test suite. -If multiple test suites must run, multiple directories should be created. +If multiple test suites are available, multiple test suite names should be created. -Moreover, the results should be stored in the 'output.xml' file using the following format: +Moreover, the results should be stored in the 'output.xml' file and placed in the aforementioned URL using the following format: TBD -Finally, the Nexus server must be accessible from the UI (with or without using system proxy). +In the context of partial control, the results must be available in the following url: +TBD Compiling ---------- +~~~~~~~~~ .. code-block:: console cd validation/ui - mvn clean install + mvn clean package Deploying ---------- - -In the context of deploying, the following data is needed: - -- The postgres root user password +~~~~~~~~~ + +The pom.xml file supports the building of an appropriate container image using the produced war file. Also, a script has been developed, namely validation/docker/ui/deploy.sh which easily deploys the container. + +This script accepts the following as input parameters: + +CONTAINER_NAME, name of the contaner, default value is akraino-validation-ui +DB_CONNECTION_URL, the URL connection with the akraino database of the maridb instance, this variable is required +MARIADB_ROOT_PASSWORD, mariadb root user password, this variable is required +REGISTRY, registry of the mariadb image, default value is akraino +NAME, name of the mariadb image, default value is validation +TAG_PRE, first part of the image version, default value is ui +TAG_VER, last part of the image version, default value is latest +JENKINS_URL, the URL of the Jenkins instance, this variable is required +JENKINS_USERNAME, the Jenkins user name, this variable is required +JENKINS_USER_PASSWORD, the Jenkins user password, this variable is required +JENKINS_JOB_NAME, the name of Jenkins job capable of executing the blueprint validation tests, this variable is required +NEXUS_PROXY, the proxy needed in order for the Nexus server to be reachable, default value is none +JENKINS_PROXY, the proxy needed in order for the Jenkins server to be reachable, default value is none + +Let's build the image using only the required parameters. To this end, the following data is needed: + +- The mariadb root user password (look at the Database subsection) +- The URL for connecting to the akraino database of the mariadb - The Jenkins url - The Jenkins username and password - The name of Jenkins Job -- The Url of the Nexus results -- The host system's proxy ip and port -These variables must be configured as content of the deploy script input parameters. Execute the following commands in order to build and deploy the UI container: +Execute the following commands in order to build and deploy the UI container: .. code-block:: console - cd validation/docker/ui - make build - ./deploy.sh postgres_db_user_pwd=password jenkins_url=http://192.168.2.2:8080 jenkins_user_name=name jenkins_user_pwd=jenkins_pwd jenkins_job_name=job1 nexus_results_url=https://nexus.akraino.org/content/sites/logs proxy_ip=172.28.40.9 proxy_port=3128 + cd validation/ui + mvn docker:build + cd ../docker/ui + ./deploy.sh TAG_PRE=dev-ui DB_CONNECTION_URL= MARIADB_ROOT_PASSWORD= JENKINS_URL= JENKINS_USERNAME= JENKINS_USER_PASSWORD= JENKINS_JOB_NAME= + +The content of the DB_CONNECTION_URL can be for example 172.17.0.3:3306/akraino (i.e. IP and port of the database container plus '/akraino'). + +Furthermore, the TAG_PRE variable should be defined as the default value is 'ui' (note that the 'dev-ui' is used for development purposes - look at pom.xml file). If no proxy exists, just do not define proxy ip and port variables. @@ -162,16 +346,20 @@ The UI should be available in the following url: http://localhost:8080/AECBlueprintValidationUI +Note that the deployment uses the network host mode, so the 8080 must be available on the host. + +User's guide +----------------- +TBD + Limitations ----------- - +- The partial loop mode is not currently supported. - The UI has been tested using Chrome and Firefox browsers. -- The UI is not connected to any LDAP server. Currently, any user can login. -- The UI and postgreSQL containers must be deployed on the same server. -- The back-end part of the UI does not take into account the configured timeslot. It immediately triggers the corresponding Jenkins Job. +- The back-end part of the UI does not take into account the start date and time and duration of the configured timeslot. It immediately triggers the corresponding Jenkins Job. - Results data manipulation (filtering, graphical representation, indexing in time order, etc) is not supported. - Only the following labs are supported: AT&T, Ericsson, Community and Arm. - Only the following tabs are functional: 'Committed Submissions', 'Blueprint Validation Results -> Get by submission id'. -- The UI configures only the "BLUEPRINT" and "LAYER" input parameters of the Jenkins job. -- The available blueprints and timeslots must be manually configured in the PostgreSQL database. -- The Jenkins instance must be accessible from the UI host without using system proxy. \ No newline at end of file +- The UI configures only the "BLUEPRINT", "VERSION", "LAYER", "SUBMISSION_ID" and "UI_IP" input parameters of the Jenkins job. +- The silos, labs, and the available blueprints and timeslots must be manually configured in the mariadb database. +- Logout action is not currently supported. \ No newline at end of file diff --git a/ui/db-scripts/EcompSdkDDLMySql_2_4_Common.sql b/ui/db-scripts/EcompSdkDDLMySql_2_4_Common.sql new file mode 100644 index 0000000..bdfb647 --- /dev/null +++ b/ui/db-scripts/EcompSdkDDLMySql_2_4_Common.sql @@ -0,0 +1,1392 @@ +-- --------------------------------------------------------------------------------------------------------------- +-- This script creates tables in the COMMON version 2.1.0 of the ONAP SDK application database. +-- Additional DDL scripts may be required! +-- +-- Note to database admin: set the MySQL system variable called lower_case_table_names to 1 +-- It can be set 3 different ways: +-- command-line options (Cmd-line), +-- options valid in configuration files (Option file), or +-- server system variables (System Var). +-- +-- When set to 1 table names are stored in lowercase on disk and comparisons are not case sensitive. +-- +-- MySql/MariaDB Version compatibility information +-- +-- bash-4.2$ mysql --version – cluster version +-- mysql Ver 15.1 Distrib 10.1.17-MariaDB, for Linux (x86_64) using readline 5.1 +-- +-- All versions newer or older than these DO NOT necessarily mean they are compatible. +-- --------------------------------------------------------------------------------------------------------------- + +SET FOREIGN_KEY_CHECKS=1; + +CREATE DATABASE IF NOT EXISTS akraino; + +USE akraino; + +-- ---------- create table SECTION +-- +-- NAME: CR_FAVORITE_REPORTS; TYPE: TABLE +-- +create table cr_favorite_reports ( + USER_ID INTEGER NOT NULL, + REP_ID INTEGER NOT NULL +); + +-- +-- NAME: CR_FILEHIST_LOG; TYPE: TABLE +-- +create table cr_filehist_log ( + SCHEDULE_ID NUMERIC(11,0) NOT NULL, + URL CHARACTER VARYING(4000), + NOTES CHARACTER VARYING(3500), + RUN_TIME TIMESTAMP +); + +-- +-- NAME: CR_FOLDER; TYPE: TABLE +-- +create table cr_folder ( + FOLDER_ID INTEGER NOT NULL, + FOLDER_NAME CHARACTER VARYING(50) NOT NULL, + DESCR CHARACTER VARYING(500), + CREATE_ID INTEGER NOT NULL, + CREATE_DATE TIMESTAMP NOT NULL, + PARENT_FOLDER_ID INTEGER, + PUBLIC_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL +); + +-- +-- NAME: CR_FOLDER_ACCESS; TYPE: TABLE +-- +create table cr_folder_access ( + FOLDER_ACCESS_ID NUMERIC(11,0) NOT NULL, + FOLDER_ID NUMERIC(11,0) NOT NULL, + ORDER_NO NUMERIC(11,0) NOT NULL, + ROLE_ID NUMERIC(11,0), + USER_ID NUMERIC(11,0), + READ_ONLY_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL +); + +-- +-- NAME: CR_HIST_USER_MAP; TYPE: TABLE +-- +create table cr_hist_user_map ( + HIST_ID INT(11) NOT NULL, + USER_ID INT(11) NOT NULL +); + +-- +-- NAME: CR_LU_FILE_TYPE; TYPE: TABLE +-- +create table cr_lu_file_type ( + LOOKUP_ID NUMERIC(2,0) NOT NULL, + LOOKUP_DESCR CHARACTER VARYING(255) NOT NULL, + ACTIVE_YN CHARACTER(1) DEFAULT 'Y', + ERROR_CODE NUMERIC(11,0) +); + +-- +-- NAME: CR_RAPTOR_ACTION_IMG; TYPE: TABLE +-- +create table cr_raptor_action_img ( + IMAGE_ID CHARACTER VARYING(100) NOT NULL, + IMAGE_LOC CHARACTER VARYING(400) +); + +-- +-- NAME: CR_RAPTOR_PDF_IMG; TYPE: TABLE +-- +create table cr_raptor_pdf_img ( + IMAGE_ID CHARACTER VARYING(100) NOT NULL, + IMAGE_LOC CHARACTER VARYING(400) +); + +-- +-- NAME: CR_REMOTE_SCHEMA_INFO; TYPE: TABLE +-- +create table cr_remote_schema_info ( + SCHEMA_PREFIX CHARACTER VARYING(5) NOT NULL, + SCHEMA_DESC CHARACTER VARYING(75) NOT NULL, + DATASOURCE_TYPE CHARACTER VARYING(100) +); + +-- +-- NAME: CR_REPORT; TYPE: TABLE +-- +create table cr_report ( + REP_ID NUMERIC(11,0) NOT NULL, + TITLE CHARACTER VARYING(100) NOT NULL, + DESCR CHARACTER VARYING(255), + PUBLIC_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL, + REPORT_XML TEXT, + CREATE_ID NUMERIC(11,0), + CREATE_DATE TIMESTAMP default now(), + MAINT_ID NUMERIC(11,0), + MAINT_DATE TIMESTAMP DEFAULT NOW(), + MENU_ID CHARACTER VARYING(500), + MENU_APPROVED_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL, + OWNER_ID NUMERIC(11,0), + FOLDER_ID INTEGER DEFAULT 0, + DASHBOARD_TYPE_YN CHARACTER VARYING(1) DEFAULT 'N', + DASHBOARD_YN CHARACTER VARYING(1) DEFAULT 'N' +); + +-- +-- NAME: CR_REPORT_ACCESS; TYPE: TABLE +-- +create table cr_report_access ( + REP_ID NUMERIC(11,0) NOT NULL, + ORDER_NO NUMERIC(11,0) NOT NULL, + ROLE_ID NUMERIC(11,0), + USER_ID NUMERIC(11,0), + READ_ONLY_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL +); + +-- +-- NAME: CR_REPORT_DWNLD_LOG; TYPE: TABLE +-- +create table cr_report_dwnld_log ( + USER_ID NUMERIC(11,0) NOT NULL, + REP_ID INTEGER NOT NULL, + FILE_NAME CHARACTER VARYING(100) NOT NULL, + DWNLD_START_TIME TIMESTAMP DEFAULT NOW() NOT NULL, + RECORD_READY_TIME TIMESTAMP DEFAULT NOW(), + FILTER_PARAMS CHARACTER VARYING(2000) +); + +-- +-- NAME: CR_REPORT_EMAIL_SENT_LOG; TYPE: TABLE +-- +create table cr_report_email_sent_log ( + LOG_ID INTEGER NOT NULL, + SCHEDULE_ID NUMERIC(11,0), + GEN_KEY CHARACTER VARYING(25) NOT NULL, + REP_ID NUMERIC(11,0) NOT NULL, + USER_ID NUMERIC(11,0), + SENT_DATE TIMESTAMP DEFAULT NOW(), + ACCESS_FLAG CHARACTER VARYING(1) DEFAULT 'Y' NOT NULL, + TOUCH_DATE TIMESTAMP DEFAULT NOW() +); + +-- +-- NAME: CR_REPORT_FILE_HISTORY; TYPE: TABLE +-- +create table cr_report_file_history ( + HIST_ID INT(11) NOT NULL, + SCHED_USER_ID NUMERIC(11,0) NOT NULL, + SCHEDULE_ID NUMERIC(11,0) NOT NULL, + USER_ID NUMERIC(11,0) NOT NULL, + REP_ID NUMERIC(11,0), + RUN_DATE TIMESTAMP, + RECURRENCE CHARACTER VARYING(50), + FILE_TYPE_ID NUMERIC(2,0), + FILE_NAME CHARACTER VARYING(80), + FILE_BLOB BLOB, + FILE_SIZE NUMERIC(11,0), + RAPTOR_URL CHARACTER VARYING(4000), + ERROR_YN CHARACTER(1) DEFAULT 'N', + ERROR_CODE NUMERIC(11,0), + DELETED_YN CHARACTER(1) DEFAULT 'N', + DELETED_BY NUMERIC(38,0) +); + +-- +-- NAME: CR_REPORT_LOG; TYPE: TABLE +-- +create table cr_report_log ( + REP_ID NUMERIC(11,0) NOT NULL, + LOG_TIME TIMESTAMP NOT NULL, + USER_ID NUMERIC(11,0) NOT NULL, + ACTION CHARACTER VARYING(2000) NOT NULL, + ACTION_VALUE CHARACTER VARYING(50), + FORM_FIELDS CHARACTER VARYING(4000) +); + +-- +-- NAME: CR_REPORT_SCHEDULE; TYPE: TABLE +-- +create table cr_report_schedule ( + SCHEDULE_ID NUMERIC(11,0) NOT NULL, + SCHED_USER_ID NUMERIC(11,0) NOT NULL, + REP_ID NUMERIC(11,0) NOT NULL, + ENABLED_YN CHARACTER VARYING(1) NOT NULL, + START_DATE TIMESTAMP DEFAULT NOW(), + END_DATE TIMESTAMP DEFAULT NOW(), + RUN_DATE TIMESTAMP DEFAULT NOW(), + RECURRENCE CHARACTER VARYING(50), + CONDITIONAL_YN CHARACTER VARYING(1) NOT NULL, + CONDITION_SQL CHARACTER VARYING(4000), + NOTIFY_TYPE INTEGER DEFAULT 0, + MAX_ROW INTEGER DEFAULT 1000, + INITIAL_FORMFIELDS CHARACTER VARYING(3500), + PROCESSED_FORMFIELDS CHARACTER VARYING(3500), + FORMFIELDS CHARACTER VARYING(3500), + CONDITION_LARGE_SQL TEXT, + ENCRYPT_YN CHARACTER(1) DEFAULT 'N', + ATTACHMENT_YN CHARACTER(1) DEFAULT 'Y' +); + +-- +-- NAME: CR_REPORT_SCHEDULE_USERS; TYPE: TABLE +-- +create table cr_report_schedule_users ( + SCHEDULE_ID NUMERIC(11,0) NOT NULL, + REP_ID NUMERIC(11,0) NOT NULL, + USER_ID NUMERIC(11,0) NOT NULL, + ROLE_ID NUMERIC(11,0), + ORDER_NO NUMERIC(11,0) NOT NULL +); + +-- +-- NAME: CR_REPORT_TEMPLATE_MAP; TYPE: TABLE +-- +create table cr_report_template_map ( + REPORT_ID INTEGER NOT NULL, + TEMPLATE_FILE CHARACTER VARYING(200) +); + +-- +-- NAME: CR_SCHEDULE_ACTIVITY_LOG; TYPE: TABLE +-- +create table cr_schedule_activity_log ( + SCHEDULE_ID NUMERIC(11,0) NOT NULL, + URL CHARACTER VARYING(4000), + NOTES CHARACTER VARYING(2000), + RUN_TIME TIMESTAMP +); + +-- +-- NAME: CR_TABLE_JOIN; TYPE: TABLE +-- +create table cr_table_join ( + SRC_TABLE_NAME CHARACTER VARYING(30) NOT NULL, + DEST_TABLE_NAME CHARACTER VARYING(30) NOT NULL, + JOIN_EXPR CHARACTER VARYING(500) NOT NULL +); + +-- +-- NAME: CR_TABLE_ROLE; TYPE: TABLE +-- +create table cr_table_role ( + TABLE_NAME CHARACTER VARYING(30) NOT NULL, + ROLE_ID NUMERIC(11,0) NOT NULL +); + +-- +-- NAME: CR_TABLE_SOURCE; TYPE: TABLE +-- +create table cr_table_source ( + TABLE_NAME CHARACTER VARYING(30) NOT NULL, + DISPLAY_NAME CHARACTER VARYING(30) NOT NULL, + PK_FIELDS CHARACTER VARYING(200), + WEB_VIEW_ACTION CHARACTER VARYING(50), + LARGE_DATA_SOURCE_YN CHARACTER VARYING(1) DEFAULT 'N' NOT NULL, + FILTER_SQL CHARACTER VARYING(4000), + SOURCE_DB CHARACTER VARYING(50) +); + +-- +-- NAME: FN_LU_TIMEZONE; TYPE: TABLE +-- +create table fn_lu_timezone ( + TIMEZONE_ID INT(11) NOT NULL, + TIMEZONE_NAME CHARACTER VARYING(100) NOT NULL, + TIMEZONE_VALUE CHARACTER VARYING(100) NOT NULL +); + +create table fn_user ( + USER_ID INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + ORG_ID INT(11), + MANAGER_ID INT(11), + FIRST_NAME CHARACTER VARYING(50), + MIDDLE_NAME CHARACTER VARYING(50), + LAST_NAME CHARACTER VARYING(50), + PHONE CHARACTER VARYING(25), + FAX CHARACTER VARYING(25), + CELLULAR CHARACTER VARYING(25), + EMAIL CHARACTER VARYING(50), + ADDRESS_ID NUMERIC(11,0), + ALERT_METHOD_CD CHARACTER VARYING(10), + HRID CHARACTER VARYING(20), + ORG_USER_ID CHARACTER VARYING(20), + ORG_CODE CHARACTER VARYING(30), + LOGIN_ID CHARACTER VARYING(25), + LOGIN_PWD CHARACTER VARYING(25), + LAST_LOGIN_DATE TIMESTAMP, + ACTIVE_YN CHARACTER VARYING(1) DEFAULT 'Y' NOT NULL, + CREATED_ID INT(11), + CREATED_DATE TIMESTAMP DEFAULT NOW(), + MODIFIED_ID INT(11), + MODIFIED_DATE TIMESTAMP default now(), + IS_INTERNAL_YN CHARACTER(1) DEFAULT 'N' NOT NULL, + ADDRESS_LINE_1 CHARACTER VARYING(100), + ADDRESS_LINE_2 CHARACTER VARYING(100), + CITY CHARACTER VARYING(50), + STATE_CD CHARACTER VARYING(3), + ZIP_CODE CHARACTER VARYING(11), + COUNTRY_CD CHARACTER VARYING(3), + LOCATION_CLLI CHARACTER VARYING(8), + ORG_MANAGER_USERID CHARACTER VARYING(20), + COMPANY CHARACTER VARYING(100), + DEPARTMENT_NAME CHARACTER VARYING(100), + JOB_TITLE CHARACTER VARYING(100), + TIMEZONE INT(11), + DEPARTMENT CHARACTER VARYING(25), + BUSINESS_UNIT CHARACTER VARYING(25), + BUSINESS_UNIT_NAME CHARACTER VARYING(100), + COST_CENTER CHARACTER VARYING(25), + FIN_LOC_CODE CHARACTER VARYING(10), + SILO_STATUS CHARACTER VARYING(10) +); + +-- +-- NAME: FN_ROLE; TYPE: TABLE +-- +create table fn_role ( + ROLE_ID INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + ROLE_NAME CHARACTER VARYING(300) NOT NULL, + ACTIVE_YN CHARACTER VARYING(1) DEFAULT 'Y' NOT NULL, + PRIORITY NUMERIC(4,0) +); + +-- +-- NAME: FN_AUDIT_ACTION; TYPE: TABLE +-- +create table fn_audit_action ( + AUDIT_ACTION_ID INTEGER NOT NULL, + CLASS_NAME CHARACTER VARYING(500) NOT NULL, + METHOD_NAME CHARACTER VARYING(50) NOT NULL, + AUDIT_ACTION_CD CHARACTER VARYING(20) NOT NULL, + AUDIT_ACTION_DESC CHARACTER VARYING(200), + ACTIVE_YN CHARACTER VARYING(1) +); + +-- +-- NAME: FN_AUDIT_ACTION_LOG; TYPE: TABLE +-- +create table fn_audit_action_log ( + AUDIT_LOG_ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, + AUDIT_ACTION_CD CHARACTER VARYING(200), + ACTION_TIME TIMESTAMP, + USER_ID NUMERIC(11,0), + CLASS_NAME CHARACTER VARYING(100), + METHOD_NAME CHARACTER VARYING(50), + SUCCESS_MSG CHARACTER VARYING(20), + ERROR_MSG CHARACTER VARYING(500) +); + +-- +-- NAME: FN_LU_ACTIVITY; TYPE: TABLE +-- +create table fn_lu_activity ( + ACTIVITY_CD CHARACTER VARYING(50) NOT NULL PRIMARY KEY, + ACTIVITY CHARACTER VARYING(50) NOT NULL +); + +-- +-- NAME: FN_AUDIT_LOG; TYPE: TABLE +-- +create table fn_audit_log ( + LOG_ID INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + USER_ID INT(11) NOT NULL, + ACTIVITY_CD CHARACTER VARYING(50) NOT NULL, + AUDIT_DATE TIMESTAMP DEFAULT NOW() NOT NULL, + COMMENTS CHARACTER VARYING(1000), + AFFECTED_RECORD_ID_BK CHARACTER VARYING(500), + AFFECTED_RECORD_ID CHARACTER VARYING(4000), + CONSTRAINT FK_FN_AUDIT_REF_209_FN_USER FOREIGN KEY (USER_ID) REFERENCES FN_USER(USER_ID) +); + +-- +-- NAME: FN_BROADCAST_MESSAGE; TYPE: TABLE +-- +create table fn_broadcast_message ( + MESSAGE_ID INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + MESSAGE_TEXT CHARACTER VARYING(1000) NOT NULL, + MESSAGE_LOCATION_ID NUMERIC(11,0) NOT NULL, + BROADCAST_START_DATE TIMESTAMP NOT NULL DEFAULT NOW(), + BROADCAST_END_DATE TIMESTAMP NOT NULL DEFAULT NOW(), + ACTIVE_YN CHARACTER(1) DEFAULT 'Y' NOT NULL, + SORT_ORDER NUMERIC(4,0) NOT NULL, + BROADCAST_SITE_CD CHARACTER VARYING(50) +); + +-- +-- NAME: FN_CHAT_LOGS; TYPE: TABLE +-- +create table fn_chat_logs ( + CHAT_LOG_ID INTEGER NOT NULL, + CHAT_ROOM_ID INTEGER, + USER_ID INTEGER, + MESSAGE CHARACTER VARYING(1000), + MESSAGE_DATE_TIME TIMESTAMP +); + +-- +-- NAME: FN_CHAT_ROOM; TYPE: TABLE +-- +create table fn_chat_room ( + CHAT_ROOM_ID INTEGER NOT NULL, + NAME CHARACTER VARYING(50) NOT NULL, + DESCRIPTION CHARACTER VARYING(500), + OWNER_ID INTEGER, + CREATED_DATE TIMESTAMP DEFAULT NOW(), + UPDATED_DATE TIMESTAMP DEFAULT NOW() +); + +-- +-- NAME: FN_CHAT_USERS; TYPE: TABLE +-- +create table fn_chat_users ( + CHAT_ROOM_ID INTEGER, + USER_ID INTEGER, + LAST_ACTIVITY_DATE_TIME TIMESTAMP, + CHAT_STATUS CHARACTER VARYING(20), + ID INTEGER NOT NULL +); + +-- +-- NAME: FN_DATASOURCE; TYPE: TABLE +-- +create table fn_datasource ( + ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, + NAME CHARACTER VARYING(50), + DRIVER_NAME CHARACTER VARYING(256), + SERVER CHARACTER VARYING(256), + PORT INTEGER, + USER_NAME CHARACTER VARYING(256), + PASSWORD CHARACTER VARYING(256), + URL CHARACTER VARYING(256), + MIN_POOL_SIZE INTEGER, + MAX_POOL_SIZE INTEGER, + ADAPTER_ID INTEGER, + DS_TYPE CHARACTER VARYING(20) +); + +-- +-- NAME: FN_FUNCTION; TYPE: TABLE +-- +create table fn_function ( + FUNCTION_CD CHARACTER VARYING(30) NOT NULL PRIMARY KEY, + FUNCTION_NAME CHARACTER VARYING(50) NOT NULL, + TYPE VARCHAR(20) NOT NULL, + ACTION VARCHAR(20) NOT NULL, + UNIQUE KEY function (FUNCTION_CD,TYPE,ACTION) +); + +-- +-- NAME: FN_LU_ALERT_METHOD; TYPE: TABLE +-- +create table fn_lu_alert_method ( + ALERT_METHOD_CD CHARACTER VARYING(10) NOT NULL, + ALERT_METHOD CHARACTER VARYING(50) NOT NULL +); + +-- +-- NAME: FN_LU_BROADCAST_SITE; TYPE: TABLE +-- +create table fn_lu_broadcast_site ( + BROADCAST_SITE_CD CHARACTER VARYING(50) NOT NULL, + BROADCAST_SITE_DESCR CHARACTER VARYING(100) +); +-- +-- NAME: FN_LU_MENU_SET; TYPE: TABLE +-- +create table fn_lu_menu_set ( + MENU_SET_CD CHARACTER VARYING(10) NOT NULL PRIMARY KEY, + MENU_SET_NAME CHARACTER VARYING(50) NOT NULL +); + +-- +-- NAME: FN_LU_PRIORITY; TYPE: TABLE +-- +create table fn_lu_priority ( + PRIORITY_ID NUMERIC(11,0) NOT NULL, + PRIORITY CHARACTER VARYING(50) NOT NULL, + ACTIVE_YN CHARACTER(1) NOT NULL, + SORT_ORDER NUMERIC(5,0) +); + +-- +-- NAME: FN_LU_ROLE_TYPE; TYPE: TABLE +-- +create table fn_lu_role_type ( + ROLE_TYPE_ID NUMERIC(11,0) NOT NULL, + ROLE_TYPE CHARACTER VARYING(50) NOT NULL +); +-- +-- NAME: FN_LU_TAB_SET; TYPE: TABLE +-- +create table fn_lu_tab_set ( + TAB_SET_CD CHARACTER VARYING(30) NOT NULL, + TAB_SET_NAME CHARACTER VARYING(50) NOT NULL +); + +-- +-- NAME: FN_MENU; TYPE: TABLE +-- +create table fn_menu ( + MENU_ID INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, + LABEL CHARACTER VARYING(100), + PARENT_ID INT(11), + SORT_ORDER NUMERIC(4,0), + ACTION CHARACTER VARYING(200), + FUNCTION_CD CHARACTER VARYING(30), + ACTIVE_YN CHARACTER VARYING(1) DEFAULT 'Y' NOT NULL, + SERVLET CHARACTER VARYING(50), + QUERY_STRING CHARACTER VARYING(200), + EXTERNAL_URL CHARACTER VARYING(200), + TARGET CHARACTER VARYING(25), + MENU_SET_CD CHARACTER VARYING(10) DEFAULT 'APP', + SEPARATOR_YN CHARACTER(1) DEFAULT 'N', + IMAGE_SRC CHARACTER VARYING(100), + CONSTRAINT FK_FN_MENU_REF_196_FN_MENU FOREIGN KEY (PARENT_ID) REFERENCES FN_MENU(MENU_ID), + CONSTRAINT FK_FN_MENU_MENU_SET_CD FOREIGN KEY (MENU_SET_CD) REFERENCES FN_LU_MENU_SET(MENU_SET_CD) +); + +-- +-- NAME: FN_ORG; TYPE: TABLE +-- +create table fn_org ( + ORG_ID INT(11) NOT NULL, + ORG_NAME CHARACTER VARYING(50) NOT NULL, + ACCESS_CD CHARACTER VARYING(10) +); + +-- +-- NAME: FN_RESTRICTED_URL; TYPE: TABLE +-- +create table fn_restricted_url ( + RESTRICTED_URL CHARACTER VARYING(250) NOT NULL, + FUNCTION_CD CHARACTER VARYING(30) NOT NULL +); + +-- +-- NAME: FN_ROLE_COMPOSITE; TYPE: TABLE +-- +create table fn_role_composite ( + PARENT_ROLE_ID INT(11) NOT NULL, + CHILD_ROLE_ID INT(11) NOT NULL, + CONSTRAINT FK_FN_ROLE_COMPOSITE_CHILD FOREIGN KEY (CHILD_ROLE_ID) REFERENCES FN_ROLE(ROLE_ID), + CONSTRAINT FK_FN_ROLE_COMPOSITE_PARENT FOREIGN KEY (PARENT_ROLE_ID) REFERENCES FN_ROLE(ROLE_ID) +); + +-- +-- NAME: FN_ROLE_FUNCTION; TYPE: TABLE +-- +create table fn_role_function ( + ROLE_ID INT(11) NOT NULL, + FUNCTION_CD CHARACTER VARYING(30) NOT NULL, + CONSTRAINT FK_FN_ROLE__REF_198_FN_ROLE FOREIGN KEY (ROLE_ID) REFERENCES FN_ROLE(ROLE_ID) +); + +-- +-- NAME: FN_TAB; TYPE: TABLE +-- +create table fn_tab ( + TAB_CD CHARACTER VARYING(30) NOT NULL, + TAB_NAME CHARACTER VARYING(50) NOT NULL, + TAB_DESCR CHARACTER VARYING(100), + ACTION CHARACTER VARYING(100) NOT NULL, + FUNCTION_CD CHARACTER VARYING(30) NOT NULL, + ACTIVE_YN CHARACTER(1) NOT NULL, + SORT_ORDER NUMERIC(11,0) NOT NULL, + PARENT_TAB_CD CHARACTER VARYING(30), + TAB_SET_CD CHARACTER VARYING(30) +); + +-- +-- NAME: FN_TAB_SELECTED; TYPE: TABLE +-- +create table fn_tab_selected ( + SELECTED_TAB_CD CHARACTER VARYING(30) NOT NULL, + TAB_URI CHARACTER VARYING(40) NOT NULL +); + +-- +-- NAME: FN_USER_PSEUDO_ROLE; TYPE: TABLE +-- +create table fn_user_pseudo_role ( + PSEUDO_ROLE_ID INT(11) NOT NULL, + USER_ID INT(11) NOT NULL +); + +-- +-- NAME: FN_USER_ROLE; TYPE: TABLE +-- +create table fn_user_role ( + USER_ID INT(10) NOT NULL, + ROLE_ID INT(10) NOT NULL, + PRIORITY NUMERIC(4,0), + APP_ID INT(11) DEFAULT 1, + CONSTRAINT FK_FN_USER__REF_172_FN_USER FOREIGN KEY (USER_ID) REFERENCES FN_USER(USER_ID), + CONSTRAINT FK_FN_USER__REF_175_FN_ROLE FOREIGN KEY (ROLE_ID) REFERENCES FN_ROLE(ROLE_ID) +); +-- +-- NAME: SCHEMA_INFO; TYPE: TABLE +-- +create table schema_info ( + SCHEMA_ID CHARACTER VARYING(25) NOT NULL, + SCHEMA_DESC CHARACTER VARYING(75) NOT NULL, + DATASOURCE_TYPE CHARACTER VARYING(100), + CONNECTION_URL VARCHAR(200) NOT NULL, + USER_NAME VARCHAR(45) NOT NULL, + PASSWORD VARCHAR(45) NULL DEFAULT NULL, + DRIVER_CLASS VARCHAR(100) NOT NULL, + MIN_POOL_SIZE INT NOT NULL, + MAX_POOL_SIZE INT NOT NULL, + IDLE_CONNECTION_TEST_PERIOD INT NOT NULL + +); + +-- ---------------------------------------------------------- +-- NAME: FN_APP; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_app ( + APP_ID int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, + APP_NAME varchar(100) NOT NULL DEFAULT '?', + APP_IMAGE_URL varchar(256) DEFAULT NULL, + APP_DESCRIPTION varchar(512) DEFAULT NULL, + APP_NOTES varchar(4096) DEFAULT NULL, + APP_URL varchar(256) DEFAULT NULL, + APP_ALTERNATE_URL varchar(256) DEFAULT NULL, + APP_REST_ENDPOINT varchar(2000) DEFAULT NULL, + ML_APP_NAME varchar(50) NOT NULL DEFAULT '?', + ML_APP_ADMIN_ID varchar(7) NOT NULL DEFAULT '?', + MOTS_ID int(11) DEFAULT NULL, + APP_PASSWORD varchar(256) NOT NULL DEFAULT '?', + OPEN char(1) DEFAULT 'N', + ENABLED char(1) DEFAULT 'Y', + THUMBNAIL mediumblob, + APP_USERNAME varchar(50), + UEB_KEY VARCHAR(256) DEFAULT NULL, + UEB_SECRET VARCHAR(256) DEFAULT NULL, + UEB_TOPIC_NAME VARCHAR(256) DEFAULT NULL + +); + +-- ---------------------------------------------------------- +-- NAME: FN_FN_WORKFLOW; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_workflow ( + id mediumint(9) NOT NULL AUTO_INCREMENT, + name varchar(20) NOT NULL, + description varchar(500) DEFAULT NULL, + run_link varchar(300) DEFAULT NULL, + suspend_link varchar(300) DEFAULT NULL, + modified_link varchar(300) DEFAULT NULL, + active_yn varchar(300) DEFAULT NULL, + created varchar(300) DEFAULT NULL, + created_by int(11) DEFAULT NULL, + modified varchar(300) DEFAULT NULL, + modified_by int(11) DEFAULT NULL, + workflow_key varchar(50) DEFAULT NULL, + PRIMARY KEY (id), + UNIQUE KEY name (name) +); + +-- ---------------------------------------------------------- +-- NAME: FN_SCHEDULE_WORKFLOWS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_schedule_workflows ( + id_schedule_workflows bigint(25) PRIMARY KEY NOT NULL AUTO_INCREMENT, + workflow_server_url varchar(45) DEFAULT NULL, + workflow_key varchar(45) NOT NULL, + workflow_arguments varchar(45) DEFAULT NULL, + startDateTimeCron varchar(45) DEFAULT NULL, + endDateTime TIMESTAMP DEFAULT NOW(), + start_date_time TIMESTAMP DEFAULT NOW(), + recurrence varchar(45) DEFAULT NULL + ); + +-- For demo reporting application add : demo_bar_chart, demo_bar_chart_inter, demo_line_chart, demo_pie_chart and demo_util_chart +-- demo_scatter_chart, demo_scatter_plot +-- ---------------------------------------------------------- +-- NAME: DEMO_BAR_CHART; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_bar_chart ( + label varchar(20), + value numeric(25,15) + ); + +-- ---------------------------------------------------------- +-- NAME: DEMO_BAR_CHART_INTER; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_bar_chart_inter ( + spam_date date, + num_rpt_sources numeric(10,0), + num_det_sources numeric(10,0) + ); + +-- ---------------------------------------------------------- +-- NAME: DEMO_LINE_CHART; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_line_chart ( + series varchar(20), + log_date date, + data_value numeric(10,5) + ); + +-- ---------------------------------------------------------- +-- NAME: DEMO_PIE_CHART; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_pie_chart ( + legend varchar(20), + data_value numeric(10,5) + ); + +-- ---------------------------------------------------------- +-- NAME: DEMO_UTIL_CHART; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_util_chart ( + traffic_date date, + util_perc numeric(10,5) + ); + +-- ---------------------------------------------------------- +-- NAME: DEMO_SCATTER_CHART; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_scatter_chart ( + rainfall numeric(10,2), + key_value varchar(20), + measurements numeric(10,2) +); + +-- ---------------------------------------------------------- +-- NAME: DEMO_SCATTER_PLOT; TYPE: TABLE +-- ---------------------------------------------------------- +create table demo_scatter_plot +( + SERIES VARCHAR(20), + VALUEX numeric(25,15), + VALUEY numeric(25,15) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_JOB_DETAILS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_job_details ( +SCHED_NAME VARCHAR(120) NOT NULL, +JOB_NAME VARCHAR(200) NOT NULL, +JOB_GROUP VARCHAR(200) NOT NULL, +DESCRIPTION VARCHAR(250) NULL, +JOB_CLASS_NAME VARCHAR(250) NOT NULL, +IS_DURABLE VARCHAR(1) NOT NULL, +IS_NONCONCURRENT VARCHAR(1) NOT NULL, +IS_UPDATE_DATA VARCHAR(1) NOT NULL, +REQUESTS_RECOVERY VARCHAR(1) NOT NULL, +JOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_triggers ( +SCHED_NAME VARCHAR(120) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +JOB_NAME VARCHAR(200) NOT NULL, +JOB_GROUP VARCHAR(200) NOT NULL, +DESCRIPTION VARCHAR(250) NULL, +NEXT_FIRE_TIME BIGINT(13) NULL, +PREV_FIRE_TIME BIGINT(13) NULL, +PRIORITY INTEGER NULL, +TRIGGER_STATE VARCHAR(16) NOT NULL, +TRIGGER_TYPE VARCHAR(8) NOT NULL, +START_TIME BIGINT(13) NOT NULL, +END_TIME BIGINT(13) NULL, +CALENDAR_NAME VARCHAR(200) NULL, +MISFIRE_INSTR SMALLINT(2) NULL, +JOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) +REFERENCES FN_QZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_SIMPLE_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_simple_triggers ( +SCHED_NAME VARCHAR(120) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +REPEAT_COUNT BIGINT(7) NOT NULL, +REPEAT_INTERVAL BIGINT(12) NOT NULL, +TIMES_TRIGGERED BIGINT(10) NOT NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES FN_QZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_CRON_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_cron_triggers ( +SCHED_NAME VARCHAR(120) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +CRON_EXPRESSION VARCHAR(120) NOT NULL, +TIME_ZONE_ID VARCHAR(80), +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES FN_QZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_SIMPROP_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_simprop_triggers + ( + SCHED_NAME VARCHAR(120) NOT NULL, + TRIGGER_NAME VARCHAR(200) NOT NULL, + TRIGGER_GROUP VARCHAR(200) NOT NULL, + STR_PROP_1 VARCHAR(512) NULL, + STR_PROP_2 VARCHAR(512) NULL, + STR_PROP_3 VARCHAR(512) NULL, + INT_PROP_1 INT NULL, + INT_PROP_2 INT NULL, + LONG_PROP_1 BIGINT NULL, + LONG_PROP_2 BIGINT NULL, + DEC_PROP_1 NUMERIC(13,4) NULL, + DEC_PROP_2 NUMERIC(13,4) NULL, + BOOL_PROP_1 VARCHAR(1) NULL, + BOOL_PROP_2 VARCHAR(1) NULL, + PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), + FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) + REFERENCES FN_QZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_BLOB_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_blob_triggers ( +SCHED_NAME VARCHAR(120) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +BLOB_DATA BLOB NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), +INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), +FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +REFERENCES FN_QZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_CALENDARS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_calendars ( +SCHED_NAME VARCHAR(120) NOT NULL, +CALENDAR_NAME VARCHAR(200) NOT NULL, +CALENDAR BLOB NOT NULL, +PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_PAUSED_TRIGGER_GRPS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_paused_trigger_grps ( +SCHED_NAME VARCHAR(120) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_FIRED_TRIGGERS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_fired_triggers ( +SCHED_NAME VARCHAR(120) NOT NULL, +ENTRY_ID VARCHAR(95) NOT NULL, +TRIGGER_NAME VARCHAR(200) NOT NULL, +TRIGGER_GROUP VARCHAR(200) NOT NULL, +INSTANCE_NAME VARCHAR(200) NOT NULL, +FIRED_TIME BIGINT(13) NOT NULL, +SCHED_TIME BIGINT(13) NOT NULL, +PRIORITY INTEGER NOT NULL, +STATE VARCHAR(16) NOT NULL, +JOB_NAME VARCHAR(200) NULL, +JOB_GROUP VARCHAR(200) NULL, +IS_NONCONCURRENT VARCHAR(1) NULL, +REQUESTS_RECOVERY VARCHAR(1) NULL, +PRIMARY KEY (SCHED_NAME,ENTRY_ID) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_SCHEDULER_STATE; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_scheduler_state ( +SCHED_NAME VARCHAR(120) NOT NULL, +INSTANCE_NAME VARCHAR(200) NOT NULL, +LAST_CHECKIN_TIME BIGINT(13) NOT NULL, +CHECKIN_INTERVAL BIGINT(13) NOT NULL, +PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) +); + +-- ---------------------------------------------------------- +-- NAME: FN_QZ_LOCKS; TYPE: TABLE +-- ---------------------------------------------------------- +create table fn_qz_locks ( +SCHED_NAME VARCHAR(120) NOT NULL, +LOCK_NAME VARCHAR(40) NOT NULL, +PRIMARY KEY (SCHED_NAME,LOCK_NAME) +); + +-- +-- name: rcloudinvocation; type: table +-- +create table rcloudinvocation ( + id varchar(128) not null primary key, + created timestamp not null, + userinfo varchar(2048) not null, + notebookid varchar(128) not null, + parameters varchar(2048) default null, + tokenreaddate timestamp null +); + +-- +-- name: rcloudnotebook; type: table +-- +create table rcloudnotebook ( + notebookname varchar(128) not null primary key, + notebookid varchar(128) not null +); + +-- +-- Name: fn_lu_message_location; Type: TABLE +-- + +CREATE TABLE fn_lu_message_location ( + message_location_id numeric(11,0) NOT NULL, + message_location_descr character varying(30) NOT NULL +); + +-- ------------------ CREATE VIEW SECTION +-- +-- NAME: V_URL_ACCESS; TYPE: VIEW +-- +CREATE VIEW v_url_access AS + SELECT DISTINCT M.ACTION AS URL, + M.FUNCTION_CD + FROM FN_MENU M + WHERE (M.ACTION IS NOT NULL) +UNION + SELECT DISTINCT T.ACTION AS URL, + T.FUNCTION_CD + FROM FN_TAB T + WHERE (T.ACTION IS NOT NULL) +UNION + SELECT R.RESTRICTED_URL AS URL, + R.FUNCTION_CD + FROM FN_RESTRICTED_URL R; + +-- ------------------ ALTER TABLE ADD CONSTRAINT PRIMARY KEY SECTION +-- +-- NAME: CR_FAVORITE_REPORTS_USER_IDREP_ID; TYPE: CONSTRAINT +-- +alter table cr_favorite_reports + add constraint cr_favorite_reports_user_idrep_id primary key (user_id, rep_id); +-- +-- NAME: CR_FOLDER_FOLDER_ID; TYPE: CONSTRAINT +-- +alter table cr_folder + add constraint cr_folder_folder_id primary key (folder_id); +-- +-- NAME: CR_FOLDER_ACCESS_FOLDER_ACCESS_ID; TYPE: CONSTRAINT +-- +alter table cr_folder_access + add constraint cr_folder_access_folder_access_id primary key (folder_access_id); +-- +-- NAME: CR_HIST_USER_MAP_HIST_IDUSER_ID; TYPE: CONSTRAINT +-- +alter table cr_hist_user_map + add constraint cr_hist_user_map_hist_iduser_id primary key (hist_id, user_id); +-- +-- NAME: CR_LU_FILE_TYPE_LOOKUP_ID; TYPE: CONSTRAINT +-- +alter table cr_lu_file_type + add constraint cr_lu_file_type_lookup_id primary key (lookup_id); +-- +-- NAME: CR_RAPTOR_ACTION_IMG_IMAGE_ID; TYPE: CONSTRAINT +-- +alter table cr_raptor_action_img + add constraint cr_raptor_action_img_image_id primary key (image_id); +-- +-- NAME: CR_RAPTOR_PDF_IMG_IMAGE_ID; TYPE: CONSTRAINT +-- +alter table cr_raptor_pdf_img + add constraint cr_raptor_pdf_img_image_id primary key (image_id); +-- +-- NAME: CR_REMOTE_SCHEMA_INFO_SCHEMA_PREFIX; TYPE: CONSTRAINT +-- +alter table cr_remote_schema_info + add constraint cr_remote_schema_info_schema_prefix primary key (schema_prefix); +-- +-- NAME: CR_REPORT_REP_ID; TYPE: CONSTRAINT +-- +alter table cr_report + add constraint cr_report_rep_id primary key (rep_id); +-- +-- NAME: CR_REPORT_ACCESS_REP_IDORDER_NO; TYPE: CONSTRAINT +-- +alter table cr_report_access + add constraint cr_report_access_rep_idorder_no primary key (rep_id, order_no); +-- +-- NAME: CR_REPORT_EMAIL_SENT_LOG_LOG_ID; TYPE: CONSTRAINT +-- +alter table cr_report_email_sent_log + add constraint cr_report_email_sent_log_log_id primary key (log_id); +-- +-- NAME: CR_REPORT_FILE_HISTORY_HIST_ID; TYPE: CONSTRAINT +-- +alter table cr_report_file_history + add constraint cr_report_file_history_hist_id primary key (hist_id); +-- +-- NAME: CR_REPORT_SCHEDULE_SCHEDULE_ID; TYPE: CONSTRAINT +-- +alter table cr_report_schedule + add constraint cr_report_schedule_schedule_id primary key (schedule_id); +-- +-- NAME: CR_REPORT_SCHEDULE_USERS_SCHEDULE_IDREP_IDUSER_IDORDER_NO; TYPE: CONSTRAINT +-- +alter table cr_report_schedule_users + add constraint cr_report_schedule_users_schedule_idrep_iduser_idorder_no primary key (schedule_id, rep_id, user_id, order_no); +-- +-- NAME: CR_REPORT_TEMPLATE_MAP_REPORT_ID; TYPE: CONSTRAINT +-- +alter table cr_report_template_map + add constraint cr_report_template_map_report_id primary key (report_id); +-- +-- NAME: CR_TABLE_ROLE_TABLE_NAMEROLE_ID; TYPE: CONSTRAINT +-- +alter table cr_table_role + add constraint cr_table_role_table_namerole_id primary key (table_name, role_id); +-- +-- NAME: CR_TABLE_SOURCE_TABLE_NAME; TYPE: CONSTRAINT +-- +alter table cr_table_source + add constraint cr_table_source_table_name primary key (table_name); +-- +-- NAME: FN_AUDIT_ACTION_AUDIT_ACTION_ID; TYPE: CONSTRAINT +-- +alter table fn_audit_action + add constraint fn_audit_action_audit_action_id primary key (audit_action_id); +-- +-- NAME: FN_CHAT_LOGS_CHAT_LOG_ID; TYPE: CONSTRAINT +-- +alter table fn_chat_logs + add constraint fn_chat_logs_chat_log_id primary key (chat_log_id); +-- +-- NAME: FN_CHAT_ROOM_CHAT_ROOM_ID; TYPE: CONSTRAINT +-- +alter table fn_chat_room + add constraint fn_chat_room_chat_room_id primary key (chat_room_id); +-- +-- NAME: FN_CHAT_USERS_ID; TYPE: CONSTRAINT +-- +alter table fn_chat_users + add constraint fn_chat_users_id primary key (id); +-- +-- NAME: FN_LU_ALERT_METHOD_ALERT_METHOD_CD; TYPE: CONSTRAINT +-- +alter table fn_lu_alert_method + add constraint fn_lu_alert_method_alert_method_cd primary key (alert_method_cd); +-- +-- NAME: FN_LU_BROADCAST_SITE_BROADCAST_SITE_CD; TYPE: CONSTRAINT +-- +alter table fn_lu_broadcast_site + add constraint fn_lu_broadcast_site_broadcast_site_cd primary key (broadcast_site_cd); +-- +-- NAME: FN_LU_PRIORITY_PRIORITY_ID; TYPE: CONSTRAINT +-- +alter table fn_lu_priority + add constraint fn_lu_priority_priority_id primary key (priority_id); +-- +-- NAME: FN_LU_ROLE_TYPE_ROLE_TYPE_ID; TYPE: CONSTRAINT +-- +alter table fn_lu_role_type + add constraint fn_lu_role_type_role_type_id primary key (role_type_id); +-- +-- NAME: FN_LU_TAB_SET_TAB_SET_CD; TYPE: CONSTRAINT +-- +alter table fn_lu_tab_set + add constraint fn_lu_tab_set_tab_set_cd primary key (tab_set_cd); +-- +-- NAME: FN_LU_TIMEZONE_TIMEZONE_ID; TYPE: CONSTRAINT +-- +alter table fn_lu_timezone + add constraint fn_lu_timezone_timezone_id primary key (timezone_id); +-- +-- NAME: FN_ORG_ORG_ID; TYPE: CONSTRAINT +-- +alter table fn_org + add constraint fn_org_org_id primary key (org_id); +-- +-- NAME: FN_RESTRICTED_URL_RESTRICTED_URLFUNCTION_CD; TYPE: CONSTRAINT +-- +alter table fn_restricted_url + add constraint fn_restricted_url_restricted_urlfunction_cd primary key (restricted_url, function_cd); +-- +-- NAME: FN_ROLE_COMPOSITE_PARENT_ROLE_IDCHILD_ROLE_ID; TYPE: CONSTRAINT +-- +alter table fn_role_composite + add constraint fn_role_composite_parent_role_idchild_role_id primary key (parent_role_id, child_role_id); +-- +-- NAME: FN_ROLE_FUNCTION_ROLE_IDFUNCTION_CD; TYPE: CONSTRAINT +-- +alter table fn_role_function + add constraint fn_role_function_role_idfunction_cd primary key (role_id, function_cd); +-- +-- NAME: FN_TAB_TAB_CD; TYPE: CONSTRAINT +-- +alter table fn_tab + add constraint fn_tab_tab_cd primary key (tab_cd); +-- +-- NAME: FN_TAB_SELECTED_SELECTED_TAB_CDTAB_URI; TYPE: CONSTRAINT +-- +alter table fn_tab_selected + add constraint fn_tab_selected_selected_tab_cdtab_uri primary key (selected_tab_cd, tab_uri); +-- +-- NAME: FN_USER_PSEUDO_ROLE_PSEUDO_ROLE_IDUSER_ID; TYPE: CONSTRAINT +-- +alter table fn_user_pseudo_role + add constraint fn_user_pseudo_role_pseudo_role_iduser_id primary key (pseudo_role_id, user_id); +-- +-- NAME: FN_USER_ROLE_USER_IDROLE_ID; TYPE: CONSTRAINT +-- +alter table fn_user_role + add constraint fn_user_role_user_idrole_id primary key (user_id, role_id, app_id); +-- +-- Name: fn_lu_message_location_MESSAGE_LOCATION_ID; Type: CONSTRAINT +-- + +ALTER TABLE fn_lu_message_location + ADD CONSTRAINT fn_lu_message_location_MESSAGE_LOCATION_ID PRIMARY KEY (message_location_id); + +-- ------------------ CREATE INDEX SECTION +-- +-- NAME: CR_REPORT_CREATE_IDPUBLIC_YNTITLE; TYPE: INDEX +-- +create index cr_report_create_idpublic_yntitle using btree on cr_report (create_id, public_yn, title); +-- +-- NAME: CR_TABLE_JOIN_DEST_TABLE_NAME; TYPE: INDEX +-- +create index cr_table_join_dest_table_name using btree on cr_table_join (dest_table_name); +-- +-- NAME: CR_TABLE_JOIN_SRC_TABLE_NAME; TYPE: INDEX +-- +create index cr_table_join_src_table_name using btree on cr_table_join (src_table_name); +-- +-- NAME: FN_AUDIT_LOG_ACTIVITY_CD; TYPE: INDEX +-- +create index fn_audit_log_activity_cd using btree on fn_audit_log (activity_cd); +-- +-- NAME: FN_AUDIT_LOG_USER_ID; TYPE: INDEX +-- +create index fn_audit_log_user_id using btree on fn_audit_log (user_id); +-- +-- NAME: FN_ORG_ACCESS_CD; TYPE: INDEX +-- +create index fn_org_access_cd using btree on fn_org (access_cd); +-- +-- NAME: FN_ROLE_FUNCTION_FUNCTION_CD; TYPE: INDEX +-- +create index fn_role_function_function_cd using btree on fn_role_function (function_cd); +-- +-- NAME: FN_ROLE_FUNCTION_ROLE_ID; TYPE: INDEX +-- +create index fn_role_function_role_id using btree on fn_role_function (role_id); +-- +-- NAME: FN_USER_ADDRESS_ID; TYPE: INDEX +-- +create index fn_user_address_id using btree on fn_user (address_id); +-- +-- NAME: FN_USER_ALERT_METHOD_CD; TYPE: INDEX +-- +create index fn_user_alert_method_cd using btree on fn_user (alert_method_cd); +-- +-- NAME: FN_USER_HRID; TYPE: INDEX +-- +create unique index fn_user_hrid using btree on fn_user (hrid); +-- +-- NAME: FN_USER_LOGIN_ID; TYPE: INDEX +-- +create unique index fn_user_login_id using btree on fn_user (login_id); +-- +-- NAME: FN_USER_ORG_ID; TYPE: INDEX +-- +create index fn_user_org_id using btree on fn_user (org_id); +-- +-- NAME: FN_USER_ROLE_ROLE_ID; TYPE: INDEX +-- +create index fn_user_role_role_id using btree on fn_user_role (role_id); +-- +-- NAME: FN_USER_ROLE_USER_ID; TYPE: INDEX +-- +create index fn_user_role_user_id using btree on fn_user_role (user_id); +-- +-- NAME: FK_FN_USER__REF_178_FN_APP_idx; TYPE: INDEX +-- +create index fk_fn_user__ref_178_fn_app_IDX on fn_user_role (app_id); + +-- ---------------------------------------------------------- +-- NAME: QUARTZ TYPE: INDEXES +-- ---------------------------------------------------------- +create index idx_fn_qz_j_req_recovery on fn_qz_job_details(sched_name,requests_recovery); +create index idx_fn_qz_j_grp on fn_qz_job_details(sched_name,job_group); +create index idx_fn_qz_t_j on fn_qz_triggers(sched_name,job_name,job_group); +create index idx_fn_qz_t_jg on fn_qz_triggers(sched_name,job_group); +create index idx_fn_qz_t_c on fn_qz_triggers(sched_name,calendar_name); +create index idx_fn_qz_t_g on fn_qz_triggers(sched_name,trigger_group); +create index idx_fn_qz_t_state on fn_qz_triggers(sched_name,trigger_state); +create index idx_fn_qz_t_n_state on fn_qz_triggers(sched_name,trigger_name,trigger_group,trigger_state); +create index idx_fn_qz_t_n_g_state on fn_qz_triggers(sched_name,trigger_group,trigger_state); +create index idx_fn_qz_t_next_fire_time on fn_qz_triggers(sched_name,next_fire_time); +create index idx_fn_qz_t_nft_st on fn_qz_triggers(sched_name,trigger_state,next_fire_time); +create index idx_fn_qz_t_nft_misfire on fn_qz_triggers(sched_name,misfire_instr,next_fire_time); +create index idx_fn_qz_t_nft_st_misfire on fn_qz_triggers(sched_name,misfire_instr,next_fire_time,trigger_state); +create index idx_fn_qz_t_nft_st_misfire_grp on fn_qz_triggers(sched_name,misfire_instr,next_fire_time,trigger_group,trigger_state); +create index idx_fn_qz_ft_trig_inst_name on fn_qz_fired_triggers(sched_name,instance_name); +create index idx_fn_qz_ft_inst_job_req_rcvry on fn_qz_fired_triggers(sched_name,instance_name,requests_recovery); +create index idx_fn_qz_ft_j_g on fn_qz_fired_triggers(sched_name,job_name,job_group); +create index idx_fn_qz_ft_jg on fn_qz_fired_triggers(sched_name,job_group); +create index idx_fn_qz_ft_t_g on fn_qz_fired_triggers(sched_name,trigger_name,trigger_group); +create index idx_fn_qz_ft_tg on fn_qz_fired_triggers(sched_name,trigger_group); + +-- ------------------ ALTER TABLE ADD CONSTRAINT FOREIGN KEY SECTION +-- +-- NAME: FK_FN_AUDIT_REF_205_FN_LU_AC; TYPE: CONSTRAINT +-- +alter table fn_audit_log + add constraint fk_fn_audit_ref_205_fn_lu_ac foreign key (activity_cd) references fn_lu_activity(activity_cd); +-- +-- NAME: FK_FN_ROLE__REF_201_FN_FUNCT; TYPE: CONSTRAINT +-- +alter table fn_role_function + add constraint fk_fn_role__ref_201_fn_funct foreign key (function_cd) references fn_function(function_cd); +-- +-- NAME: FK_FN_USER__REF_178_FN_APP; TYPE: FK CONSTRAINT +-- +alter table fn_user_role + add constraint fk_fn_user__ref_178_fn_app foreign key (app_id) references fn_app(app_id); +-- +-- NAME: FK_CR_REPOR_REF_14707_CR_REPOR; TYPE: FK CONSTRAINT +-- +alter table cr_report_schedule + add constraint fk_cr_repor_ref_14707_cr_repor foreign key (rep_id) references cr_report(rep_id); +-- +-- NAME: FK_CR_REPOR_REF_14716_CR_REPOR; TYPE: FK CONSTRAINT +-- +alter table cr_report_schedule_users + add constraint fk_cr_repor_ref_14716_cr_repor foreign key (schedule_id) references cr_report_schedule(schedule_id); +-- +-- NAME: FK_CR_REPOR_REF_17645_CR_REPOR; TYPE: FK CONSTRAINT +-- +alter table cr_report_log + add constraint fk_cr_repor_ref_17645_cr_repor foreign key (rep_id) references cr_report(rep_id); +-- +-- NAME: FK_CR_REPOR_REF_8550_CR_REPOR; TYPE: FK CONSTRAINT +-- +alter table cr_report_access + add constraint fk_cr_repor_ref_8550_cr_repor foreign key (rep_id) references cr_report(rep_id); +-- +-- NAME: FK_CR_REPORT_REP_ID; TYPE: FK CONSTRAINT +-- +alter table cr_report_email_sent_log + add constraint fk_cr_report_rep_id foreign key (rep_id) references cr_report(rep_id); +-- +-- NAME: FK_CR_TABLE_REF_311_CR_TAB; TYPE: FK CONSTRAINT +-- +alter table cr_table_join + add constraint fk_cr_table_ref_311_cr_tab foreign key (src_table_name) references cr_table_source(table_name); +-- +-- NAME: FK_CR_TABLE_REF_315_CR_TAB; TYPE: FK CONSTRAINT +-- +alter table cr_table_join + add constraint fk_cr_table_ref_315_cr_tab foreign key (dest_table_name) references cr_table_source(table_name); +-- +-- NAME: FK_CR_TABLE_REF_32384_CR_TABLE; TYPE: FK CONSTRAINT +-- +alter table cr_table_role + add constraint fk_cr_table_ref_32384_cr_table foreign key (table_name) references cr_table_source(table_name); +-- +-- NAME: FK_FN_TAB_FUNCTION_CD; TYPE: FK CONSTRAINT +-- +alter table fn_tab + add constraint fk_fn_tab_function_cd foreign key (function_cd) references fn_function(function_cd); +-- +-- NAME: FK_FN_TAB_SELECTED_TAB_CD; TYPE: FK CONSTRAINT +-- +alter table fn_tab_selected + add constraint fk_fn_tab_selected_tab_cd foreign key (selected_tab_cd) references fn_tab(tab_cd); +-- +-- NAME: FK_FN_TAB_SET_CD; TYPE: FK CONSTRAINT +-- +alter table fn_tab + add constraint fk_fn_tab_set_cd foreign key (tab_set_cd) references fn_lu_tab_set(tab_set_cd); +-- +-- NAME: FK_FN_USER_REF_110_FN_ORG; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_fn_user_ref_110_fn_org foreign key (org_id) references fn_org(org_id); +-- +-- NAME: FK_FN_USER_REF_123_FN_LU_AL; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_fn_user_ref_123_fn_lu_al foreign key (alert_method_cd) references fn_lu_alert_method(alert_method_cd); +-- +-- NAME: FK_FN_USER_REF_197_FN_USER; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_fn_user_ref_197_fn_user foreign key (manager_id) references fn_user(user_id); +-- +-- NAME: FK_FN_USER_REF_198_FN_USER; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_fn_user_ref_198_fn_user foreign key (created_id) references fn_user(user_id); +-- +-- NAME: FK_FN_USER_REF_199_FN_USER; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_fn_user_ref_199_fn_user foreign key (modified_id) references fn_user(user_id); +-- +-- NAME: FK_PARENT_KEY_CR_FOLDER; TYPE: FK CONSTRAINT +-- +alter table cr_folder + add constraint fk_parent_key_cr_folder foreign key (parent_folder_id) references cr_folder(folder_id); +-- +-- NAME: FK_PSEUDO_ROLE_PSEUDO_ROLE_ID; TYPE: FK CONSTRAINT +-- +alter table fn_user_pseudo_role + add constraint fk_pseudo_role_pseudo_role_id foreign key (pseudo_role_id) references fn_role(role_id); +-- +-- NAME: FK_PSEUDO_ROLE_USER_ID; TYPE: FK CONSTRAINT +-- +alter table fn_user_pseudo_role + add constraint fk_pseudo_role_user_id foreign key (user_id) references fn_user(user_id); +-- +-- NAME: FK_TIMEZONE; TYPE: FK CONSTRAINT +-- +alter table fn_user + add constraint fk_timezone foreign key (timezone) references fn_lu_timezone(timezone_id); +-- +-- NAME: SYS_C0014614; TYPE: FK CONSTRAINT +-- +alter table cr_report_file_history + add constraint sys_c0014614 foreign key (file_type_id) references cr_lu_file_type(lookup_id); +-- +-- NAME: SYS_C0014615; TYPE: FK CONSTRAINT +-- +alter table cr_report_file_history + add constraint sys_c0014615 foreign key (rep_id) references cr_report(rep_id); +-- +-- NAME: SYS_C0014616; TYPE: FK CONSTRAINT +-- +alter table cr_hist_user_map + add constraint sys_c0014616 foreign key (hist_id) references cr_report_file_history(hist_id); +-- +-- NAME: SYS_C0014617; TYPE: FK CONSTRAINT +-- +alter table cr_hist_user_map + add constraint sys_c0014617 foreign key (user_id) references fn_user(user_id); + +commit; diff --git a/ui/db-scripts/EcompSdkDDLMySql_2_4_OS.sql b/ui/db-scripts/EcompSdkDDLMySql_2_4_OS.sql new file mode 100644 index 0000000..4a35dd6 --- /dev/null +++ b/ui/db-scripts/EcompSdkDDLMySql_2_4_OS.sql @@ -0,0 +1,12 @@ +-- --------------------------------------------------------------------------------------------------------------- +-- This script adds tables for the OPEN-SOURCE version 2.1.0 of the ECOMP SDK application database. +-- The DDL COMMON script must be executed first! +-- --------------------------------------------------------------------------------------------------------------- + +SET FOREIGN_KEY_CHECKS=1; + +USE akraino; + +-- No additional tables required at this time + +commit; diff --git a/ui/db-scripts/EcompSdkDMLMySql_2_4_Common.sql b/ui/db-scripts/EcompSdkDMLMySql_2_4_Common.sql new file mode 100644 index 0000000..611c6f8 --- /dev/null +++ b/ui/db-scripts/EcompSdkDMLMySql_2_4_Common.sql @@ -0,0 +1,2881 @@ +-- --------------------------------------------------------------------------------------------------------------- +-- This script populates tables in the COMMON version 2.1.0 of the ONAP SDK application database. +-- Additional DML scripts may be required! +-- --------------------------------------------------------------------------------------------------------------- + +SET FOREIGN_KEY_CHECKS=1; + +USE akraino; + +-- fn_function +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_process','Process List','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job','Job Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job_create','Job Create','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_job_designer','Process in Designer view','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_task','Task Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_task_search','Task Search','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_map','Map Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_sample','Sample Pages Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('login','Login','url','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_home','Home Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_customer','Customer Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_reports','Reports Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile','Profile Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_admin','Admin Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_feedback','Feedback Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_help','Help Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_logout','Logout Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_notes','Notes Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_ajax','Ajax Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_customer_create','Customer Create','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile_create','Profile Create','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_profile_import','Profile Import','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_tab','Sample Tab Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('view_reports','View Raptor reports','menu','*'); + +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_itracker_admin','Itracker Admin/Support menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('quantum_bd','Big Data Function','url','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig','Hive Configuration','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce_create','Map Reduce Configuration Create','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce_search','Map Reduce Configuration Search','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig_search','Hive Configuration Search','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_hiveconfig_create','Hive Configuration Create','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_test','Test Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_doclib','Document Library Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('doclib','Document Library','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('doclib_admin','Document Library Admin','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_concept','CoNCEPT','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_itracker','iTracker Menu','menu','*'); +Insert into fn_function (FUNCTION_CD,FUNCTION_NAME,TYPE,ACTION) values ('menu_mapreduce','Map Reduce Configuration','menu','*'); + +-- fn_lu_activity +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('add_role','add_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('remove_role','remove_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('add_user_role','add_user_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('remove_user_role','remove_user_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('add_role_function','add_role_function'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('remove_role_function','remove_role_function'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('add_child_role','add_child_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('remove_child_role','remove_child_role'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('mobile_login','Mobile Login'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('mobile_logout','Mobile Logout'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('login','Login'); +Insert into fn_lu_activity (ACTIVITY_CD,ACTIVITY) values ('logout','Logout'); + +-- fn_lu_alert_method +Insert into fn_lu_alert_method (ALERT_METHOD_CD,ALERT_METHOD) values ('PHONE','Phone'); +Insert into fn_lu_alert_method (ALERT_METHOD_CD,ALERT_METHOD) values ('FAX','Fax'); +Insert into fn_lu_alert_method (ALERT_METHOD_CD,ALERT_METHOD) values ('PAGER','Pager'); +Insert into fn_lu_alert_method (ALERT_METHOD_CD,ALERT_METHOD) values ('EMAIL','Email'); +Insert into fn_lu_alert_method (ALERT_METHOD_CD,ALERT_METHOD) values ('SMS','SMS'); + +-- fn_lu_menu_set +Insert into fn_lu_menu_set (MENU_SET_CD,MENU_SET_NAME) values ('APP','Application Menu'); + +-- fn_lu_priority +Insert into fn_lu_priority (PRIORITY_ID,PRIORITY,ACTIVE_YN,SORT_ORDER) values (10,'Low','Y',10); +Insert into fn_lu_priority (PRIORITY_ID,PRIORITY,ACTIVE_YN,SORT_ORDER) values (20,'Normal','Y',20); +Insert into fn_lu_priority (PRIORITY_ID,PRIORITY,ACTIVE_YN,SORT_ORDER) values (30,'High','Y',30); +Insert into fn_lu_priority (PRIORITY_ID,PRIORITY,ACTIVE_YN,SORT_ORDER) values (40,'Urgent','Y',40); +Insert into fn_lu_priority (PRIORITY_ID,PRIORITY,ACTIVE_YN,SORT_ORDER) values (50,'Fatal','Y',50); + +-- fn_lu_tab_set +Insert into fn_lu_tab_set (TAB_SET_CD,TAB_SET_NAME) values ('APP','Application Tabs'); + +-- fn_lu_timezone +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (10,'US/Eastern','US/Eastern'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (20,'US/Central','US/Central'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (30,'US/Mountain','US/Mountain'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (40,'US/Arizona','America/Phoenix'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (50,'US/Pacific','US/Pacific'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (60,'US/Alaska','US/Alaska'); +Insert into fn_lu_timezone (TIMEZONE_ID,TIMEZONE_NAME,TIMEZONE_VALUE) values (70,'US/Hawaii','US/Hawaii'); + +-- fn_restricted_url +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('attachment.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('broadcast.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('file_upload.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('job.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('role.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('role_function.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('test.htm','menu_admin'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('async_test.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('chatWindow.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('contact_list.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('customer_dynamic_list.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('event.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('event_list.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('mobile_welcome.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('sample_map.htm','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('template.jsp','menu_home'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('jbpm_designer.htm','menu_job_create'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('jbpm_drools.htm','menu_job_create'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('process_job.htm','menu_job_create'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('profile.htm','menu_profile_create'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor2.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor_blob_extract.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor_email_attachment.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor_search.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('report_list.htm','menu_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('gauge.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('gmap_controller.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('gmap_frame.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('map.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('map_download.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('map_grid_search.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('sample_animated_map.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('sample_map_2.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('sample_map_3.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab2_sub1.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab2_sub2_link1.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab2_sub2_link2.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab2_sub3.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab3.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('tab4.htm','menu_tab'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor.htm','view_reports'); +INSERT INTO fn_restricted_url (restricted_url, function_cd) VALUES ('raptor_blob_extract.htm','view_reports'); +INSERT INTO fn_restricted_url VALUES('admin','menu_admin'); +INSERT INTO fn_restricted_url VALUES('get_role','menu_admin'); +INSERT INTO fn_restricted_url VALUES('get_role_functions','menu_admin'); +INSERT INTO fn_restricted_url VALUES('role_list/*','menu_admin'); +INSERT INTO fn_restricted_url VALUES('role_function_list/*','menu_admin'); +INSERT INTO fn_restricted_url VALUES('addRole','menu_admin'); +INSERT INTO fn_restricted_url VALUES('addRoleFunction','menu_admin'); +INSERT INTO fn_restricted_url VALUES('removeRole','menu_admin'); +INSERT INTO fn_restricted_url VALUES('removeRoleFunction','menu_admin'); +INSERT INTO fn_restricted_url VALUES('profile/*','menu_admin'); +INSERT INTO fn_restricted_url VALUES('samplePage','menu_sample'); +INSERT INTO fn_restricted_url VALUES('workflows','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/list','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/addWorkflow','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/saveCronJob','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/editWorkflow','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/removeWorkflow','menu_admin'); +INSERT INTO fn_restricted_url VALUES('workflows/removeAllWorkflows','menu_admin'); +INSERT INTO fn_restricted_url VALUES('role/saveRole.htm','menu_admin'); +INSERT INTO fn_restricted_url VALUES('post_search/process','menu_admin'); +INSERT INTO fn_restricted_url VALUES('post_search/search','menu_admin'); +INSERT INTO fn_restricted_url VALUES('post_search/search','menu_profile'); +INSERT INTO fn_restricted_url VALUES('report/wizard/retrieve_def_tab_wise_data/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/retrieve_form_tab_wise_data/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/retrieve_sql_tab_wise_data/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/security/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/copy_report/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/save_def_tab_data/*','menu_reports'); +INSERT INTO fn_restricted_url VALUES('report/wizard/retrieve_data/true','menu_reports'); + +-- fn_role +Insert into fn_role (ROLE_ID,ROLE_NAME,ACTIVE_YN,PRIORITY) values (16,'Standard User','Y',5); +Insert into fn_role (ROLE_ID,ROLE_NAME,ACTIVE_YN,PRIORITY) values (1,'System Administrator','Y',1); + +-- fn_role_composite +Insert into fn_role_composite (PARENT_ROLE_ID,CHILD_ROLE_ID) values (1,16); + +-- fn_role_function +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'login'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_admin'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_ajax'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_customer'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_customer_create'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_feedback'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_help'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_home'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_job'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_job_create'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_logout'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_notes'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_process'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_profile'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_profile_create'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_profile_import'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_reports'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_sample'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (1,'menu_tab'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'login'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_ajax'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_customer'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_customer_create'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_home'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_logout'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_map'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_profile'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_reports'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (16,'menu_tab'); + +-- fn_tab +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB2_SUB1_S1','Left Tab 1','Sub - Sub Tab 1 Information','tab2_sub1.htm','menu_tab','Y',10,'TAB2_SUB1','APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB1','Tab 1','Tab 1 Information','tab1.htm','menu_tab','Y',10,null,'APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB2','Tab 2','Tab 2 Information','tab2_sub1.htm','menu_tab','Y',20,null,'APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB3','Tab 3','Tab 3 Information','tab3.htm','menu_tab','Y',30,null,'APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB4','Tab 4','Tab 4 Information','tab4.htm','menu_tab','Y',40,null,'APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB2_SUB1','Sub Tab 1','Sub Tab 1 Information','tab2_sub1.htm','menu_tab','Y',10,'TAB2','APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB2_SUB2','Sub Tab 2','Sub Tab 2 Information','tab2_sub2.htm','menu_tab','Y',20,'TAB2','APP'); +Insert into fn_tab (TAB_CD,TAB_NAME,TAB_DESCR,ACTION,FUNCTION_CD,ACTIVE_YN,SORT_ORDER,PARENT_TAB_CD,TAB_SET_CD) values ('TAB2_SUB3','Sub Tab 3','Sub Tab 3 Information','tab2_sub3.htm','menu_tab','Y',30,'TAB2','APP'); + +-- fn_tab_selected +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB1','tab1'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2','tab2_sub1'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2','tab2_sub2'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2','tab2_sub3'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2_SUB1','tab2_sub1'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2_SUB1_S1','tab2_sub1'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2_SUB2','tab2_sub2'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB2_SUB3','tab2_sub3'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB3','tab3'); +Insert into fn_tab_selected (SELECTED_TAB_CD,TAB_URI) values ('TAB4','tab4'); + +-- DEMO_BAR_CHART +Insert into demo_bar_chart (label, value) values ('A', 29.765957771107); +Insert into demo_bar_chart (label, value) values ('B', 0); +Insert into demo_bar_chart (label, value) values ('C', 32.807804682612); +Insert into demo_bar_chart (label, value) values ('D', 196.45946739256); +Insert into demo_bar_chart (label, value) values ('E', 0.19434030906893); +Insert into demo_bar_chart (label, value) values ('F', 98.079782601442); +Insert into demo_bar_chart (label, value) values ('G', 13.925743130903); +Insert into demo_bar_chart (label, value) values ('H', 5.1387322875705); + +-- DEMO_BAR_CHART_INTER +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('6-Mar-13','%e-%b-%y'), 198, 220); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('5-Mar-13','%e-%b-%y'), 198, 220); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('4-Mar-13','%e-%b-%y'), 238, 235); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('3-Mar-13','%e-%b-%y'), 238, 235); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('2-Mar-13','%e-%b-%y'), 256, 275); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('1-Mar-13','%e-%b-%y'), 239, 260); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('28-Feb-13','%e-%b-%y'), 247, 255); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('27-Feb-13','%e-%b-%y'), 252, 265); +Insert into demo_bar_chart_inter (spam_date, num_rpt_sources, num_det_sources) values (STR_TO_DATE('26-Feb-13','%e-%b-%y'), 198, 220); + +-- DEMO_LINE_CHART +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-May-12','%e-%b-%y'),582.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Apr-12','%e-%b-%y'),583.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-Apr-12','%e-%b-%y'),603); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Apr-12','%e-%b-%y'),607.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Apr-12','%e-%b-%y'),610); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Apr-12','%e-%b-%y'),560.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Apr-12','%e-%b-%y'),571.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Apr-12','%e-%b-%y'),572.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Apr-12','%e-%b-%y'),587.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Apr-12','%e-%b-%y'),608.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Apr-12','%e-%b-%y'),609.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Apr-12','%e-%b-%y'),580.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Apr-12','%e-%b-%y'),605.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Apr-12','%e-%b-%y'),622.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Apr-12','%e-%b-%y'),626.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Apr-12','%e-%b-%y'),628.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Apr-12','%e-%b-%y'),636.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Apr-12','%e-%b-%y'),633.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Apr-12','%e-%b-%y'),624.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Apr-12','%e-%b-%y'),629.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Apr-12','%e-%b-%y'),618.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Mar-12','%e-%b-%y'),599.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Mar-12','%e-%b-%y'),609.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Mar-12','%e-%b-%y'),617.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Mar-12','%e-%b-%y'),614.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Mar-12','%e-%b-%y'),606.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Mar-12','%e-%b-%y'),596.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Mar-12','%e-%b-%y'),599.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Mar-12','%e-%b-%y'),602.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Mar-12','%e-%b-%y'),605.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Mar-12','%e-%b-%y'),601.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Mar-12','%e-%b-%y'),585.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('15-Mar-12','%e-%b-%y'),585.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Mar-12','%e-%b-%y'),589.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Mar-12','%e-%b-%y'),568.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Mar-12','%e-%b-%y'),552); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Mar-12','%e-%b-%y'),545.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Mar-12','%e-%b-%y'),541.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('7-Mar-12','%e-%b-%y'),530.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Mar-12','%e-%b-%y'),530.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Mar-12','%e-%b-%y'),533.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Mar-12','%e-%b-%y'),545.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Mar-12','%e-%b-%y'),544.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Feb-12','%e-%b-%y'),542.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Feb-12','%e-%b-%y'),535.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Feb-12','%e-%b-%y'),525.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Feb-12','%e-%b-%y'),522.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Feb-12','%e-%b-%y'),516.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Feb-12','%e-%b-%y'),513.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Feb-12','%e-%b-%y'),514.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Feb-12','%e-%b-%y'),502.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Feb-12','%e-%b-%y'),502.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Feb-12','%e-%b-%y'),497.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Feb-12','%e-%b-%y'),509.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Feb-12','%e-%b-%y'),502.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Feb-12','%e-%b-%y'),493.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Feb-12','%e-%b-%y'),493.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Feb-12','%e-%b-%y'),476.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Feb-12','%e-%b-%y'),468.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Feb-12','%e-%b-%y'),463.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Feb-12','%e-%b-%y'),459.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Feb-12','%e-%b-%y'),455.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Feb-12','%e-%b-%y'),456.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Jan-12','%e-%b-%y'),456.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Jan-12','%e-%b-%y'),453.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jan-12','%e-%b-%y'),447.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Jan-12','%e-%b-%y'),444.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jan-12','%e-%b-%y'),446.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Jan-12','%e-%b-%y'),420.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jan-12','%e-%b-%y'),427.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Jan-12','%e-%b-%y'),420.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jan-12','%e-%b-%y'),427.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jan-12','%e-%b-%y'),429.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jan-12','%e-%b-%y'),424.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Jan-12','%e-%b-%y'),419.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Jan-12','%e-%b-%y'),421.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jan-12','%e-%b-%y'),422.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Jan-12','%e-%b-%y'),423.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Jan-12','%e-%b-%y'),421.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Jan-12','%e-%b-%y'),422.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Jan-12','%e-%b-%y'),418.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Jan-12','%e-%b-%y'),413.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Jan-12','%e-%b-%y'),411.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Dec-11','%e-%b-%y'),405); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Dec-11','%e-%b-%y'),405.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Dec-11','%e-%b-%y'),402.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-Dec-11','%e-%b-%y'),406.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Dec-11','%e-%b-%y'),403.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Dec-11','%e-%b-%y'),398.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Dec-11','%e-%b-%y'),396.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Dec-11','%e-%b-%y'),395.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Dec-11','%e-%b-%y'),382.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Dec-11','%e-%b-%y'),381.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Dec-11','%e-%b-%y'),378.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Dec-11','%e-%b-%y'),380.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Dec-11','%e-%b-%y'),388.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Dec-11','%e-%b-%y'),391.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Dec-11','%e-%b-%y'),393.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Dec-11','%e-%b-%y'),390.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Dec-11','%e-%b-%y'),389.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Dec-11','%e-%b-%y'),390.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Dec-11','%e-%b-%y'),393.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Dec-11','%e-%b-%y'),389.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Dec-11','%e-%b-%y'),387.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Nov-11','%e-%b-%y'),382.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Nov-11','%e-%b-%y'),373.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Nov-11','%e-%b-%y'),376.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Nov-11','%e-%b-%y'),363.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Nov-11','%e-%b-%y'),366.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Nov-11','%e-%b-%y'),376.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Nov-11','%e-%b-%y'),369.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Nov-11','%e-%b-%y'),374.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Nov-11','%e-%b-%y'),377.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Nov-11','%e-%b-%y'),384.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Nov-11','%e-%b-%y'),388.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Nov-11','%e-%b-%y'),379.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Nov-11','%e-%b-%y'),384.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Nov-11','%e-%b-%y'),385.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Nov-11','%e-%b-%y'),395.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Nov-11','%e-%b-%y'),406.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Nov-11','%e-%b-%y'),399.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Nov-11','%e-%b-%y'),400.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('3-Nov-11','%e-%b-%y'),403.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Nov-11','%e-%b-%y'),397.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Nov-11','%e-%b-%y'),396.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Oct-11','%e-%b-%y'),404.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Oct-11','%e-%b-%y'),404.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Oct-11','%e-%b-%y'),404.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('26-Oct-11','%e-%b-%y'),400.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Oct-11','%e-%b-%y'),397.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Oct-11','%e-%b-%y'),405.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Oct-11','%e-%b-%y'),392.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Oct-11','%e-%b-%y'),395.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Oct-11','%e-%b-%y'),398.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('18-Oct-11','%e-%b-%y'),422.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Oct-11','%e-%b-%y'),419.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Oct-11','%e-%b-%y'),422); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Oct-11','%e-%b-%y'),408.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Oct-11','%e-%b-%y'),402.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Oct-11','%e-%b-%y'),400.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Oct-11','%e-%b-%y'),388.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Oct-11','%e-%b-%y'),369.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Oct-11','%e-%b-%y'),377.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Oct-11','%e-%b-%y'),378.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Oct-11','%e-%b-%y'),372.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Oct-11','%e-%b-%y'),374.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Sep-11','%e-%b-%y'),381.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Sep-11','%e-%b-%y'),390.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Sep-11','%e-%b-%y'),397.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Sep-11','%e-%b-%y'),399.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Sep-11','%e-%b-%y'),403.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Sep-11','%e-%b-%y'),404.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('22-Sep-11','%e-%b-%y'),401.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Sep-11','%e-%b-%y'),412.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Sep-11','%e-%b-%y'),413.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Sep-11','%e-%b-%y'),411.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Sep-11','%e-%b-%y'),400.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Sep-11','%e-%b-%y'),392.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Sep-11','%e-%b-%y'),389.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Sep-11','%e-%b-%y'),384.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Sep-11','%e-%b-%y'),379.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Sep-11','%e-%b-%y'),377.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Sep-11','%e-%b-%y'),384.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Sep-11','%e-%b-%y'),383.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-Sep-11','%e-%b-%y'),379.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Sep-11','%e-%b-%y'),374.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Sep-11','%e-%b-%y'),381.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Aug-11','%e-%b-%y'),384.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Aug-11','%e-%b-%y'),389.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Aug-11','%e-%b-%y'),389.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('26-Aug-11','%e-%b-%y'),383.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Aug-11','%e-%b-%y'),373.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Aug-11','%e-%b-%y'),376.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Aug-11','%e-%b-%y'),373.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Aug-11','%e-%b-%y'),356.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Aug-11','%e-%b-%y'),356.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('18-Aug-11','%e-%b-%y'),366.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Aug-11','%e-%b-%y'),380.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Aug-11','%e-%b-%y'),380.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Aug-11','%e-%b-%y'),383.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Aug-11','%e-%b-%y'),376.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Aug-11','%e-%b-%y'),373.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Aug-11','%e-%b-%y'),363.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Aug-11','%e-%b-%y'),374.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Aug-11','%e-%b-%y'),353.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Aug-11','%e-%b-%y'),373.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Aug-11','%e-%b-%y'),377.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Aug-11','%e-%b-%y'),392.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Aug-11','%e-%b-%y'),388.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Aug-11','%e-%b-%y'),396.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Jul-11','%e-%b-%y'),390.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jul-11','%e-%b-%y'),391.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Jul-11','%e-%b-%y'),392.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Jul-11','%e-%b-%y'),403.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Jul-11','%e-%b-%y'),398.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jul-11','%e-%b-%y'),393.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Jul-11','%e-%b-%y'),387.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Jul-11','%e-%b-%y'),386.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Jul-11','%e-%b-%y'),376.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Jul-11','%e-%b-%y'),373.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('15-Jul-11','%e-%b-%y'),364.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jul-11','%e-%b-%y'),357.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Jul-11','%e-%b-%y'),358.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Jul-11','%e-%b-%y'),353.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jul-11','%e-%b-%y'),354); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Jul-11','%e-%b-%y'),359.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('7-Jul-11','%e-%b-%y'),357.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Jul-11','%e-%b-%y'),351.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Jul-11','%e-%b-%y'),349.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jul-11','%e-%b-%y'),343.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Jun-11','%e-%b-%y'),335.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Jun-11','%e-%b-%y'),334.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Jun-11','%e-%b-%y'),335.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jun-11','%e-%b-%y'),332.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Jun-11','%e-%b-%y'),326.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jun-11','%e-%b-%y'),331.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Jun-11','%e-%b-%y'),322.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Jun-11','%e-%b-%y'),325.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Jun-11','%e-%b-%y'),315.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jun-11','%e-%b-%y'),320.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Jun-11','%e-%b-%y'),325.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jun-11','%e-%b-%y'),326.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Jun-11','%e-%b-%y'),332.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jun-11','%e-%b-%y'),326.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Jun-11','%e-%b-%y'),325.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jun-11','%e-%b-%y'),331.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Jun-11','%e-%b-%y'),332.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Jun-11','%e-%b-%y'),332.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Jun-11','%e-%b-%y'),338.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jun-11','%e-%b-%y'),343.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Jun-11','%e-%b-%y'),346.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jun-11','%e-%b-%y'),345.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-May-11','%e-%b-%y'),347.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-May-11','%e-%b-%y'),337.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-May-11','%e-%b-%y'),335); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-May-11','%e-%b-%y'),336.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-May-11','%e-%b-%y'),332.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-May-11','%e-%b-%y'),334.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-May-11','%e-%b-%y'),335.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-May-11','%e-%b-%y'),340.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-May-11','%e-%b-%y'),339.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-May-11','%e-%b-%y'),336.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-May-11','%e-%b-%y'),333.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-May-11','%e-%b-%y'),340.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-May-11','%e-%b-%y'),346.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-May-11','%e-%b-%y'),347.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-May-11','%e-%b-%y'),349.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-May-11','%e-%b-%y'),347.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-May-11','%e-%b-%y'),346.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-May-11','%e-%b-%y'),346.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-May-11','%e-%b-%y'),349.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-May-11','%e-%b-%y'),348.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-May-11','%e-%b-%y'),346.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Apr-11','%e-%b-%y'),350.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Apr-11','%e-%b-%y'),346.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Apr-11','%e-%b-%y'),350.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Apr-11','%e-%b-%y'),350.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Apr-11','%e-%b-%y'),353.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Apr-11','%e-%b-%y'),350.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Apr-11','%e-%b-%y'),342.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Apr-11','%e-%b-%y'),337.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Apr-11','%e-%b-%y'),331.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Apr-11','%e-%b-%y'),327.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Apr-11','%e-%b-%y'),332.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Apr-11','%e-%b-%y'),336.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Apr-11','%e-%b-%y'),332.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Apr-11','%e-%b-%y'),330.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Apr-11','%e-%b-%y'),335.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Apr-11','%e-%b-%y'),338.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Apr-11','%e-%b-%y'),338.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Apr-11','%e-%b-%y'),338.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Apr-11','%e-%b-%y'),341.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Apr-11','%e-%b-%y'),344.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Mar-11','%e-%b-%y'),348.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Mar-11','%e-%b-%y'),348.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Mar-11','%e-%b-%y'),350.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Mar-11','%e-%b-%y'),350.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Mar-11','%e-%b-%y'),351.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Mar-11','%e-%b-%y'),344.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Mar-11','%e-%b-%y'),339.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Mar-11','%e-%b-%y'),341.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Mar-11','%e-%b-%y'),339.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Mar-11','%e-%b-%y'),330.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Mar-11','%e-%b-%y'),334.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Mar-11','%e-%b-%y'),330.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Mar-11','%e-%b-%y'),345.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Mar-11','%e-%b-%y'),353.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Mar-11','%e-%b-%y'),351.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Mar-11','%e-%b-%y'),346.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Mar-11','%e-%b-%y'),352.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Mar-11','%e-%b-%y'),355.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Mar-11','%e-%b-%y'),355.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Mar-11','%e-%b-%y'),360); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Mar-11','%e-%b-%y'),359.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Mar-11','%e-%b-%y'),352.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Mar-11','%e-%b-%y'),349.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Feb-11','%e-%b-%y'),353.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Feb-11','%e-%b-%y'),348.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Feb-11','%e-%b-%y'),342.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Feb-11','%e-%b-%y'),342.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Feb-11','%e-%b-%y'),338.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Feb-11','%e-%b-%y'),350.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Feb-11','%e-%b-%y'),358.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Feb-11','%e-%b-%y'),363.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Feb-11','%e-%b-%y'),359.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Feb-11','%e-%b-%y'),359.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Feb-11','%e-%b-%y'),356.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Feb-11','%e-%b-%y'),354.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Feb-11','%e-%b-%y'),358.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Feb-11','%e-%b-%y'),355.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Feb-11','%e-%b-%y'),351.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Feb-11','%e-%b-%y'),346.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Feb-11','%e-%b-%y'),343.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Feb-11','%e-%b-%y'),344.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Feb-11','%e-%b-%y'),345.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Jan-11','%e-%b-%y'),339.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Jan-11','%e-%b-%y'),336.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jan-11','%e-%b-%y'),343.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Jan-11','%e-%b-%y'),343.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jan-11','%e-%b-%y'),341.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Jan-11','%e-%b-%y'),337.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Jan-11','%e-%b-%y'),326.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Jan-11','%e-%b-%y'),332.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jan-11','%e-%b-%y'),338.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jan-11','%e-%b-%y'),340.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jan-11','%e-%b-%y'),348.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Jan-11','%e-%b-%y'),345.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Jan-11','%e-%b-%y'),344.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jan-11','%e-%b-%y'),341.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Jan-11','%e-%b-%y'),342.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Jan-11','%e-%b-%y'),336.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Jan-11','%e-%b-%y'),333.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Jan-11','%e-%b-%y'),334); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Jan-11','%e-%b-%y'),331.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Jan-11','%e-%b-%y'),329.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Dec-10','%e-%b-%y'),322.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Dec-10','%e-%b-%y'),323.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Dec-10','%e-%b-%y'),325.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Dec-10','%e-%b-%y'),325.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Dec-10','%e-%b-%y'),324.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Dec-10','%e-%b-%y'),323.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Dec-10','%e-%b-%y'),325.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Dec-10','%e-%b-%y'),324.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Dec-10','%e-%b-%y'),322.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Dec-10','%e-%b-%y'),320.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Dec-10','%e-%b-%y'),321.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Dec-10','%e-%b-%y'),320.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Dec-10','%e-%b-%y'),320.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Dec-10','%e-%b-%y'),321.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Dec-10','%e-%b-%y'),320.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Dec-10','%e-%b-%y'),319.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Dec-10','%e-%b-%y'),321.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Dec-10','%e-%b-%y'),318.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Dec-10','%e-%b-%y'),320.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Dec-10','%e-%b-%y'),317.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Dec-10','%e-%b-%y'),318.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Dec-10','%e-%b-%y'),316.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Nov-10','%e-%b-%y'),311.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Nov-10','%e-%b-%y'),316.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Nov-10','%e-%b-%y'),315); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Nov-10','%e-%b-%y'),314.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Nov-10','%e-%b-%y'),308.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('22-Nov-10','%e-%b-%y'),313.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Nov-10','%e-%b-%y'),306.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Nov-10','%e-%b-%y'),308.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Nov-10','%e-%b-%y'),300.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Nov-10','%e-%b-%y'),301.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Nov-10','%e-%b-%y'),307.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Nov-10','%e-%b-%y'),308.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Nov-10','%e-%b-%y'),316.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Nov-10','%e-%b-%y'),318.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Nov-10','%e-%b-%y'),316.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Nov-10','%e-%b-%y'),318.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Nov-10','%e-%b-%y'),317.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Nov-10','%e-%b-%y'),318.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Nov-10','%e-%b-%y'),312.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Nov-10','%e-%b-%y'),309.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Nov-10','%e-%b-%y'),304.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Oct-10','%e-%b-%y'),300.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Oct-10','%e-%b-%y'),305.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-Oct-10','%e-%b-%y'),307.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Oct-10','%e-%b-%y'),308.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Oct-10','%e-%b-%y'),308.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Oct-10','%e-%b-%y'),307.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Oct-10','%e-%b-%y'),309.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Oct-10','%e-%b-%y'),310.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Oct-10','%e-%b-%y'),309.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Oct-10','%e-%b-%y'),318); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Oct-10','%e-%b-%y'),314.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Oct-10','%e-%b-%y'),302.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Oct-10','%e-%b-%y'),300.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Oct-10','%e-%b-%y'),298.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Oct-10','%e-%b-%y'),295.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Oct-10','%e-%b-%y'),294.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Oct-10','%e-%b-%y'),289.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Oct-10','%e-%b-%y'),289.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Oct-10','%e-%b-%y'),288.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Oct-10','%e-%b-%y'),278.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Oct-10','%e-%b-%y'),282.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Sep-10','%e-%b-%y'),283.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Sep-10','%e-%b-%y'),287.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Sep-10','%e-%b-%y'),286.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Sep-10','%e-%b-%y'),291.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Sep-10','%e-%b-%y'),292.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Sep-10','%e-%b-%y'),288.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Sep-10','%e-%b-%y'),287.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Sep-10','%e-%b-%y'),283.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Sep-10','%e-%b-%y'),283.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Sep-10','%e-%b-%y'),275.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Sep-10','%e-%b-%y'),276.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('15-Sep-10','%e-%b-%y'),270.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Sep-10','%e-%b-%y'),268.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Sep-10','%e-%b-%y'),267.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Sep-10','%e-%b-%y'),263.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Sep-10','%e-%b-%y'),263.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Sep-10','%e-%b-%y'),262.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('7-Sep-10','%e-%b-%y'),257.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Sep-10','%e-%b-%y'),258.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Sep-10','%e-%b-%y'),258.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Sep-10','%e-%b-%y'),252.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Sep-10','%e-%b-%y'),250.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Aug-10','%e-%b-%y'),243.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Aug-10','%e-%b-%y'),242.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Aug-10','%e-%b-%y'),241.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Aug-10','%e-%b-%y'),240.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Aug-10','%e-%b-%y'),242.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Aug-10','%e-%b-%y'),239.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Aug-10','%e-%b-%y'),245.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Aug-10','%e-%b-%y'),249.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Aug-10','%e-%b-%y'),249.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Aug-10','%e-%b-%y'),253.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Aug-10','%e-%b-%y'),251.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Aug-10','%e-%b-%y'),247.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Aug-10','%e-%b-%y'),249.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Aug-10','%e-%b-%y'),251.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Aug-10','%e-%b-%y'),250.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Aug-10','%e-%b-%y'),259.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Aug-10','%e-%b-%y'),261.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Aug-10','%e-%b-%y'),260.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Aug-10','%e-%b-%y'),261.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Aug-10','%e-%b-%y'),262.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Aug-10','%e-%b-%y'),261.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Aug-10','%e-%b-%y'),261.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Jul-10','%e-%b-%y'),257.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Jul-10','%e-%b-%y'),258.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jul-10','%e-%b-%y'),260.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-Jul-10','%e-%b-%y'),264.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Jul-10','%e-%b-%y'),259.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Jul-10','%e-%b-%y'),259.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jul-10','%e-%b-%y'),259.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Jul-10','%e-%b-%y'),254.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Jul-10','%e-%b-%y'),251.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Jul-10','%e-%b-%y'),245.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Jul-10','%e-%b-%y'),249.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Jul-10','%e-%b-%y'),251.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jul-10','%e-%b-%y'),252.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Jul-10','%e-%b-%y'),251.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Jul-10','%e-%b-%y'),257.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Jul-10','%e-%b-%y'),259.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Jul-10','%e-%b-%y'),258.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Jul-10','%e-%b-%y'),258.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Jul-10','%e-%b-%y'),248.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Jul-10','%e-%b-%y'),246.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Jul-10','%e-%b-%y'),246.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Jul-10','%e-%b-%y'),248.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Jun-10','%e-%b-%y'),251.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Jun-10','%e-%b-%y'),256.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jun-10','%e-%b-%y'),268.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Jun-10','%e-%b-%y'),266.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Jun-10','%e-%b-%y'),269); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Jun-10','%e-%b-%y'),270.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jun-10','%e-%b-%y'),273.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Jun-10','%e-%b-%y'),270.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Jun-10','%e-%b-%y'),274.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Jun-10','%e-%b-%y'),271.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Jun-10','%e-%b-%y'),267.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('15-Jun-10','%e-%b-%y'),259.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jun-10','%e-%b-%y'),254.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jun-10','%e-%b-%y'),253.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Jun-10','%e-%b-%y'),250.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Jun-10','%e-%b-%y'),243.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Jun-10','%e-%b-%y'),249.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('7-Jun-10','%e-%b-%y'),250.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Jun-10','%e-%b-%y'),255.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Jun-10','%e-%b-%y'),263.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Jun-10','%e-%b-%y'),263.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Jun-10','%e-%b-%y'),260.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-May-10','%e-%b-%y'),256.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-May-10','%e-%b-%y'),256.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-May-10','%e-%b-%y'),253.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-May-10','%e-%b-%y'),244.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-May-10','%e-%b-%y'),245.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-May-10','%e-%b-%y'),246.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-May-10','%e-%b-%y'),242.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-May-10','%e-%b-%y'),237.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-May-10','%e-%b-%y'),248.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-May-10','%e-%b-%y'),252.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-May-10','%e-%b-%y'),254.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-May-10','%e-%b-%y'),253.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-May-10','%e-%b-%y'),258.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-May-10','%e-%b-%y'),262.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-May-10','%e-%b-%y'),256.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-May-10','%e-%b-%y'),253.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-May-10','%e-%b-%y'),235.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-May-10','%e-%b-%y'),246.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-May-10','%e-%b-%y'),255.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-May-10','%e-%b-%y'),258.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-May-10','%e-%b-%y'),266.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Apr-10','%e-%b-%y'),261.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Apr-10','%e-%b-%y'),268.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Apr-10','%e-%b-%y'),261.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Apr-10','%e-%b-%y'),262.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('26-Apr-10','%e-%b-%y'),269.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Apr-10','%e-%b-%y'),270.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Apr-10','%e-%b-%y'),266.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Apr-10','%e-%b-%y'),259.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Apr-10','%e-%b-%y'),244.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Apr-10','%e-%b-%y'),247.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Apr-10','%e-%b-%y'),247.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Apr-10','%e-%b-%y'),248.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Apr-10','%e-%b-%y'),245.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Apr-10','%e-%b-%y'),242.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Apr-10','%e-%b-%y'),242.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Apr-10','%e-%b-%y'),241.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Apr-10','%e-%b-%y'),239.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Apr-10','%e-%b-%y'),240.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Apr-10','%e-%b-%y'),239.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Apr-10','%e-%b-%y'),238.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Apr-10','%e-%b-%y'),235.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Apr-10','%e-%b-%y'),235.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('31-Mar-10','%e-%b-%y'),235); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Mar-10','%e-%b-%y'),235.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Mar-10','%e-%b-%y'),232.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Mar-10','%e-%b-%y'),230.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Mar-10','%e-%b-%y'),226.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Mar-10','%e-%b-%y'),229.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Mar-10','%e-%b-%y'),228.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Mar-10','%e-%b-%y'),224.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Mar-10','%e-%b-%y'),222.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Mar-10','%e-%b-%y'),224.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Mar-10','%e-%b-%y'),224.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Mar-10','%e-%b-%y'),224.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('15-Mar-10','%e-%b-%y'),223.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Mar-10','%e-%b-%y'),226.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Mar-10','%e-%b-%y'),225.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Mar-10','%e-%b-%y'),224.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Mar-10','%e-%b-%y'),223.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Mar-10','%e-%b-%y'),219.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Mar-10','%e-%b-%y'),218.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Mar-10','%e-%b-%y'),210.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Mar-10','%e-%b-%y'),209.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Mar-10','%e-%b-%y'),208.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Mar-10','%e-%b-%y'),208.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Feb-10','%e-%b-%y'),204.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Feb-10','%e-%b-%y'),202); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Feb-10','%e-%b-%y'),200.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Feb-10','%e-%b-%y'),197.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Feb-10','%e-%b-%y'),200.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Feb-10','%e-%b-%y'),201.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Feb-10','%e-%b-%y'),202.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Feb-10','%e-%b-%y'),202.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Feb-10','%e-%b-%y'),203.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Feb-10','%e-%b-%y'),200.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Feb-10','%e-%b-%y'),200.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Feb-10','%e-%b-%y'),198.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Feb-10','%e-%b-%y'),195.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Feb-10','%e-%b-%y'),196.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Feb-10','%e-%b-%y'),194.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Feb-10','%e-%b-%y'),195.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Feb-10','%e-%b-%y'),192.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Feb-10','%e-%b-%y'),199.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Feb-10','%e-%b-%y'),195.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Feb-10','%e-%b-%y'),194.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Jan-10','%e-%b-%y'),192.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Jan-10','%e-%b-%y'),199.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jan-10','%e-%b-%y'),207.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Jan-10','%e-%b-%y'),205.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jan-10','%e-%b-%y'),203.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('22-Jan-10','%e-%b-%y'),197.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Jan-10','%e-%b-%y'),208.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Jan-10','%e-%b-%y'),211.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jan-10','%e-%b-%y'),215.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jan-10','%e-%b-%y'),205.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jan-10','%e-%b-%y'),205.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Jan-10','%e-%b-%y'),209.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jan-10','%e-%b-%y'),210.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Jan-10','%e-%b-%y'),207.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Jan-10','%e-%b-%y'),210.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Jan-10','%e-%b-%y'),211.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Jan-10','%e-%b-%y'),210.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-Jan-10','%e-%b-%y'),210.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Jan-10','%e-%b-%y'),214.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Jan-10','%e-%b-%y'),214.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jan-10','%e-%b-%y'),210.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Dec-09','%e-%b-%y'),210.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Dec-09','%e-%b-%y'),211.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Dec-09','%e-%b-%y'),209.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Dec-09','%e-%b-%y'),211.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Dec-09','%e-%b-%y'),209.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Dec-09','%e-%b-%y'),209.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Dec-09','%e-%b-%y'),202.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Dec-09','%e-%b-%y'),200.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Dec-09','%e-%b-%y'),198.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Dec-09','%e-%b-%y'),195.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Dec-09','%e-%b-%y'),191.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Dec-09','%e-%b-%y'),195.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Dec-09','%e-%b-%y'),194.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Dec-09','%e-%b-%y'),196.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Dec-09','%e-%b-%y'),194.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Dec-09','%e-%b-%y'),196.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Dec-09','%e-%b-%y'),197.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Dec-09','%e-%b-%y'),189.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Dec-09','%e-%b-%y'),188.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Dec-09','%e-%b-%y'),193.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('3-Dec-09','%e-%b-%y'),196.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Dec-09','%e-%b-%y'),196.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Dec-09','%e-%b-%y'),196.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Nov-09','%e-%b-%y'),199.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Nov-09','%e-%b-%y'),200.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Nov-09','%e-%b-%y'),204.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Nov-09','%e-%b-%y'),204.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Nov-09','%e-%b-%y'),204.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Nov-09','%e-%b-%y'),205.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Nov-09','%e-%b-%y'),199.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Nov-09','%e-%b-%y'),200.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Nov-09','%e-%b-%y'),205.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Nov-09','%e-%b-%y'),207); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Nov-09','%e-%b-%y'),206.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Nov-09','%e-%b-%y'),204.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Nov-09','%e-%b-%y'),201.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Nov-09','%e-%b-%y'),203.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Nov-09','%e-%b-%y'),202.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Nov-09','%e-%b-%y'),201.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Nov-09','%e-%b-%y'),194.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Nov-09','%e-%b-%y'),194.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Nov-09','%e-%b-%y'),190.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Nov-09','%e-%b-%y'),188.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Nov-09','%e-%b-%y'),189.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Oct-09','%e-%b-%y'),188.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Oct-09','%e-%b-%y'),196.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Oct-09','%e-%b-%y'),192.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Oct-09','%e-%b-%y'),197.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Oct-09','%e-%b-%y'),202.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Oct-09','%e-%b-%y'),203.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('22-Oct-09','%e-%b-%y'),205.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Oct-09','%e-%b-%y'),204.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Oct-09','%e-%b-%y'),198.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Oct-09','%e-%b-%y'),189.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Oct-09','%e-%b-%y'),188.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Oct-09','%e-%b-%y'),190.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Oct-09','%e-%b-%y'),191.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Oct-09','%e-%b-%y'),190.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Oct-09','%e-%b-%y'),190.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Oct-09','%e-%b-%y'),190.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Oct-09','%e-%b-%y'),189.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Oct-09','%e-%b-%y'),190.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-Oct-09','%e-%b-%y'),190.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Oct-09','%e-%b-%y'),186.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Oct-09','%e-%b-%y'),184.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Oct-09','%e-%b-%y'),180.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Sep-09','%e-%b-%y'),185.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Sep-09','%e-%b-%y'),185.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Sep-09','%e-%b-%y'),186.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Sep-09','%e-%b-%y'),182.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Sep-09','%e-%b-%y'),183.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Sep-09','%e-%b-%y'),185.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Sep-09','%e-%b-%y'),184.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Sep-09','%e-%b-%y'),184.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('18-Sep-09','%e-%b-%y'),185.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Sep-09','%e-%b-%y'),184.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Sep-09','%e-%b-%y'),181.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Sep-09','%e-%b-%y'),175.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Sep-09','%e-%b-%y'),173.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Sep-09','%e-%b-%y'),172.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Sep-09','%e-%b-%y'),172.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Sep-09','%e-%b-%y'),171.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Sep-09','%e-%b-%y'),172.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Sep-09','%e-%b-%y'),170.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Sep-09','%e-%b-%y'),166.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Sep-09','%e-%b-%y'),165.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Sep-09','%e-%b-%y'),165.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Aug-09','%e-%b-%y'),168.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Aug-09','%e-%b-%y'),170.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Aug-09','%e-%b-%y'),169.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Aug-09','%e-%b-%y'),167.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Aug-09','%e-%b-%y'),169.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Aug-09','%e-%b-%y'),169.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Aug-09','%e-%b-%y'),169.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Aug-09','%e-%b-%y'),166.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Aug-09','%e-%b-%y'),164.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Aug-09','%e-%b-%y'),164); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Aug-09','%e-%b-%y'),159.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Aug-09','%e-%b-%y'),166.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Aug-09','%e-%b-%y'),168.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Aug-09','%e-%b-%y'),165.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Aug-09','%e-%b-%y'),164.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Aug-09','%e-%b-%y'),165.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Aug-09','%e-%b-%y'),163.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Aug-09','%e-%b-%y'),165.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Aug-09','%e-%b-%y'),165.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Aug-09','%e-%b-%y'),166.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Jul-09','%e-%b-%y'),163.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Jul-09','%e-%b-%y'),162.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Jul-09','%e-%b-%y'),160.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Jul-09','%e-%b-%y'),160); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jul-09','%e-%b-%y'),160.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Jul-09','%e-%b-%y'),159.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jul-09','%e-%b-%y'),157.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Jul-09','%e-%b-%y'),156.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Jul-09','%e-%b-%y'),151.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Jul-09','%e-%b-%y'),152.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jul-09','%e-%b-%y'),151.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Jul-09','%e-%b-%y'),147.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jul-09','%e-%b-%y'),146.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Jul-09','%e-%b-%y'),142.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jul-09','%e-%b-%y'),142.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Jul-09','%e-%b-%y'),138.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jul-09','%e-%b-%y'),136.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Jul-09','%e-%b-%y'),137.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Jul-09','%e-%b-%y'),135.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Jul-09','%e-%b-%y'),138.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jul-09','%e-%b-%y'),140.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Jul-09','%e-%b-%y'),140.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jul-09','%e-%b-%y'),142.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Jun-09','%e-%b-%y'),142.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Jun-09','%e-%b-%y'),141.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Jun-09','%e-%b-%y'),142.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jun-09','%e-%b-%y'),139.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Jun-09','%e-%b-%y'),136.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jun-09','%e-%b-%y'),134.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Jun-09','%e-%b-%y'),137.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jun-09','%e-%b-%y'),139.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jun-09','%e-%b-%y'),135.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jun-09','%e-%b-%y'),135.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Jun-09','%e-%b-%y'),136.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jun-09','%e-%b-%y'),136.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Jun-09','%e-%b-%y'),136.97); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Jun-09','%e-%b-%y'),139.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Jun-09','%e-%b-%y'),140.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jun-09','%e-%b-%y'),142.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Jun-09','%e-%b-%y'),143.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Jun-09','%e-%b-%y'),144.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Jun-09','%e-%b-%y'),143.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jun-09','%e-%b-%y'),140.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Jun-09','%e-%b-%y'),139.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jun-09','%e-%b-%y'),139.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-May-09','%e-%b-%y'),135.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-May-09','%e-%b-%y'),135.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-May-09','%e-%b-%y'),133.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-May-09','%e-%b-%y'),130.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-May-09','%e-%b-%y'),122.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-May-09','%e-%b-%y'),124.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-May-09','%e-%b-%y'),125.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-May-09','%e-%b-%y'),127.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-May-09','%e-%b-%y'),126.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-May-09','%e-%b-%y'),122.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-May-09','%e-%b-%y'),122.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-May-09','%e-%b-%y'),119.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-May-09','%e-%b-%y'),124.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-May-09','%e-%b-%y'),129.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-May-09','%e-%b-%y'),129.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-May-09','%e-%b-%y'),129.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-May-09','%e-%b-%y'),132.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-May-09','%e-%b-%y'),132.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-May-09','%e-%b-%y'),132.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-May-09','%e-%b-%y'),127.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Apr-09','%e-%b-%y'),125.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Apr-09','%e-%b-%y'),125.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Apr-09','%e-%b-%y'),123.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Apr-09','%e-%b-%y'),124.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Apr-09','%e-%b-%y'),123.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Apr-09','%e-%b-%y'),125.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Apr-09','%e-%b-%y'),121.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Apr-09','%e-%b-%y'),121.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Apr-09','%e-%b-%y'),120.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Apr-09','%e-%b-%y'),123.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Apr-09','%e-%b-%y'),121.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Apr-09','%e-%b-%y'),117.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Apr-09','%e-%b-%y'),118.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Apr-09','%e-%b-%y'),120.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Apr-09','%e-%b-%y'),119.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Apr-09','%e-%b-%y'),119.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Apr-09','%e-%b-%y'),116.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Apr-09','%e-%b-%y'),115); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Apr-09','%e-%b-%y'),118.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Apr-09','%e-%b-%y'),115.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Apr-09','%e-%b-%y'),112.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Apr-09','%e-%b-%y'),108.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('31-Mar-09','%e-%b-%y'),105.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Mar-09','%e-%b-%y'),104.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Mar-09','%e-%b-%y'),106.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Mar-09','%e-%b-%y'),109.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Mar-09','%e-%b-%y'),106.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Mar-09','%e-%b-%y'),106.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Mar-09','%e-%b-%y'),107.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Mar-09','%e-%b-%y'),101.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Mar-09','%e-%b-%y'),101.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Mar-09','%e-%b-%y'),101.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Mar-09','%e-%b-%y'),99.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Mar-09','%e-%b-%y'),95.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Mar-09','%e-%b-%y'),95.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Mar-09','%e-%b-%y'),96.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Mar-09','%e-%b-%y'),92.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Mar-09','%e-%b-%y'),88.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Mar-09','%e-%b-%y'),83.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Mar-09','%e-%b-%y'),85.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Mar-09','%e-%b-%y'),88.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Mar-09','%e-%b-%y'),91.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Mar-09','%e-%b-%y'),88.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Mar-09','%e-%b-%y'),87.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Feb-09','%e-%b-%y'),89.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Feb-09','%e-%b-%y'),89.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Feb-09','%e-%b-%y'),91.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Feb-09','%e-%b-%y'),90.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Feb-09','%e-%b-%y'),86.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Feb-09','%e-%b-%y'),91.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Feb-09','%e-%b-%y'),90.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Feb-09','%e-%b-%y'),94.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Feb-09','%e-%b-%y'),94.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Feb-09','%e-%b-%y'),99.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Feb-09','%e-%b-%y'),99.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Feb-09','%e-%b-%y'),96.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Feb-09','%e-%b-%y'),97.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Feb-09','%e-%b-%y'),102.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-Feb-09','%e-%b-%y'),99.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Feb-09','%e-%b-%y'),96.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Feb-09','%e-%b-%y'),93.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Feb-09','%e-%b-%y'),92.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Feb-09','%e-%b-%y'),91.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Jan-09','%e-%b-%y'),90.13); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Jan-09','%e-%b-%y'),93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jan-09','%e-%b-%y'),94.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Jan-09','%e-%b-%y'),90.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Jan-09','%e-%b-%y'),89.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Jan-09','%e-%b-%y'),88.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jan-09','%e-%b-%y'),88.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Jan-09','%e-%b-%y'),82.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Jan-09','%e-%b-%y'),78.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Jan-09','%e-%b-%y'),82.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jan-09','%e-%b-%y'),83.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Jan-09','%e-%b-%y'),85.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jan-09','%e-%b-%y'),87.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Jan-09','%e-%b-%y'),88.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jan-09','%e-%b-%y'),90.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Jan-09','%e-%b-%y'),92.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Jan-09','%e-%b-%y'),91.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Jan-09','%e-%b-%y'),93.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Jan-09','%e-%b-%y'),94.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Jan-09','%e-%b-%y'),90.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jan-09','%e-%b-%y'),85.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Dec-08','%e-%b-%y'),85.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Dec-08','%e-%b-%y'),86.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Dec-08','%e-%b-%y'),86.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Dec-08','%e-%b-%y'),85.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Dec-08','%e-%b-%y'),85.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Dec-08','%e-%b-%y'),85.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Dec-08','%e-%b-%y'),86.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Dec-08','%e-%b-%y'),85.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Dec-08','%e-%b-%y'),90); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Dec-08','%e-%b-%y'),89.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Dec-08','%e-%b-%y'),89.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Dec-08','%e-%b-%y'),95.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Dec-08','%e-%b-%y'),94.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Dec-08','%e-%b-%y'),98.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Dec-08','%e-%b-%y'),95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Dec-08','%e-%b-%y'),98.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Dec-08','%e-%b-%y'),100.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Dec-08','%e-%b-%y'),99.72); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Dec-08','%e-%b-%y'),94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Dec-08','%e-%b-%y'),91.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Dec-08','%e-%b-%y'),95.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Dec-08','%e-%b-%y'),92.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-Dec-08','%e-%b-%y'),88.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Nov-08','%e-%b-%y'),92.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Nov-08','%e-%b-%y'),95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Nov-08','%e-%b-%y'),95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Nov-08','%e-%b-%y'),90.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Nov-08','%e-%b-%y'),92.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Nov-08','%e-%b-%y'),82.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Nov-08','%e-%b-%y'),80.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Nov-08','%e-%b-%y'),86.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Nov-08','%e-%b-%y'),89.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Nov-08','%e-%b-%y'),88.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Nov-08','%e-%b-%y'),90.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Nov-08','%e-%b-%y'),96.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Nov-08','%e-%b-%y'),90.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Nov-08','%e-%b-%y'),94.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Nov-08','%e-%b-%y'),95.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Nov-08','%e-%b-%y'),98.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Nov-08','%e-%b-%y'),99.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Nov-08','%e-%b-%y'),103.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Nov-08','%e-%b-%y'),110.99); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Nov-08','%e-%b-%y'),106.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Oct-08','%e-%b-%y'),107.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Oct-08','%e-%b-%y'),111.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Oct-08','%e-%b-%y'),104.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Oct-08','%e-%b-%y'),99.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Oct-08','%e-%b-%y'),92.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Oct-08','%e-%b-%y'),96.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Oct-08','%e-%b-%y'),98.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Oct-08','%e-%b-%y'),96.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Oct-08','%e-%b-%y'),91.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Oct-08','%e-%b-%y'),98.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Oct-08','%e-%b-%y'),97.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Oct-08','%e-%b-%y'),101.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Oct-08','%e-%b-%y'),97.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Oct-08','%e-%b-%y'),104.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Oct-08','%e-%b-%y'),110.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Oct-08','%e-%b-%y'),96.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Oct-08','%e-%b-%y'),88.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Oct-08','%e-%b-%y'),89.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Oct-08','%e-%b-%y'),89.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Oct-08','%e-%b-%y'),98.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Oct-08','%e-%b-%y'),97.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('2-Oct-08','%e-%b-%y'),100.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Oct-08','%e-%b-%y'),109.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Sep-08','%e-%b-%y'),113.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Sep-08','%e-%b-%y'),105.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Sep-08','%e-%b-%y'),128.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Sep-08','%e-%b-%y'),131.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('24-Sep-08','%e-%b-%y'),128.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Sep-08','%e-%b-%y'),126.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Sep-08','%e-%b-%y'),131.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Sep-08','%e-%b-%y'),140.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Sep-08','%e-%b-%y'),134.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Sep-08','%e-%b-%y'),127.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Sep-08','%e-%b-%y'),139.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Sep-08','%e-%b-%y'),140.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Sep-08','%e-%b-%y'),148.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Sep-08','%e-%b-%y'),152.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Sep-08','%e-%b-%y'),151.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Sep-08','%e-%b-%y'),151.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Sep-08','%e-%b-%y'),157.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Sep-08','%e-%b-%y'),160.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Sep-08','%e-%b-%y'),161.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Sep-08','%e-%b-%y'),166.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Sep-08','%e-%b-%y'),166.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Aug-08','%e-%b-%y'),169.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Aug-08','%e-%b-%y'),173.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Aug-08','%e-%b-%y'),174.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Aug-08','%e-%b-%y'),173.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Aug-08','%e-%b-%y'),172.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-Aug-08','%e-%b-%y'),176.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Aug-08','%e-%b-%y'),174.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Aug-08','%e-%b-%y'),175.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Aug-08','%e-%b-%y'),173.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Aug-08','%e-%b-%y'),175.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Aug-08','%e-%b-%y'),175.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Aug-08','%e-%b-%y'),179.32); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Aug-08','%e-%b-%y'),179.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Aug-08','%e-%b-%y'),176.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Aug-08','%e-%b-%y'),173.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Aug-08','%e-%b-%y'),169.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Aug-08','%e-%b-%y'),163.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Aug-08','%e-%b-%y'),164.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Aug-08','%e-%b-%y'),160.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Aug-08','%e-%b-%y'),153.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Aug-08','%e-%b-%y'),156.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Jul-08','%e-%b-%y'),158.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Jul-08','%e-%b-%y'),159.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Jul-08','%e-%b-%y'),157.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jul-08','%e-%b-%y'),154.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Jul-08','%e-%b-%y'),162.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Jul-08','%e-%b-%y'),159.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Jul-08','%e-%b-%y'),166.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jul-08','%e-%b-%y'),162.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Jul-08','%e-%b-%y'),166.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Jul-08','%e-%b-%y'),165.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Jul-08','%e-%b-%y'),171.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Jul-08','%e-%b-%y'),172.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Jul-08','%e-%b-%y'),169.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jul-08','%e-%b-%y'),173.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jul-08','%e-%b-%y'),172.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Jul-08','%e-%b-%y'),176.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-Jul-08','%e-%b-%y'),174.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Jul-08','%e-%b-%y'),179.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Jul-08','%e-%b-%y'),175.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jul-08','%e-%b-%y'),170.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Jul-08','%e-%b-%y'),168.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Jul-08','%e-%b-%y'),174.68); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Jun-08','%e-%b-%y'),167.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jun-08','%e-%b-%y'),170.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Jun-08','%e-%b-%y'),168.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jun-08','%e-%b-%y'),177.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Jun-08','%e-%b-%y'),173.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jun-08','%e-%b-%y'),173.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('20-Jun-08','%e-%b-%y'),175.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jun-08','%e-%b-%y'),180.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jun-08','%e-%b-%y'),178.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jun-08','%e-%b-%y'),181.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Jun-08','%e-%b-%y'),176.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jun-08','%e-%b-%y'),172.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Jun-08','%e-%b-%y'),173.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Jun-08','%e-%b-%y'),180.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Jun-08','%e-%b-%y'),185.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jun-08','%e-%b-%y'),181.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Jun-08','%e-%b-%y'),185.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Jun-08','%e-%b-%y'),189.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Jun-08','%e-%b-%y'),185.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jun-08','%e-%b-%y'),185.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Jun-08','%e-%b-%y'),186.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-May-08','%e-%b-%y'),188.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-May-08','%e-%b-%y'),186.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-May-08','%e-%b-%y'),187.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-May-08','%e-%b-%y'),186.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-May-08','%e-%b-%y'),181.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('22-May-08','%e-%b-%y'),177.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-May-08','%e-%b-%y'),178.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-May-08','%e-%b-%y'),185.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-May-08','%e-%b-%y'),183.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-May-08','%e-%b-%y'),187.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-May-08','%e-%b-%y'),189.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-May-08','%e-%b-%y'),186.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-May-08','%e-%b-%y'),189.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-May-08','%e-%b-%y'),188.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-May-08','%e-%b-%y'),183.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-May-08','%e-%b-%y'),185.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-May-08','%e-%b-%y'),182.59); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-May-08','%e-%b-%y'),186.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-May-08','%e-%b-%y'),184.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-May-08','%e-%b-%y'),180.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-May-08','%e-%b-%y'),180); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('30-Apr-08','%e-%b-%y'),173.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-Apr-08','%e-%b-%y'),175.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('28-Apr-08','%e-%b-%y'),172.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Apr-08','%e-%b-%y'),169.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Apr-08','%e-%b-%y'),168.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Apr-08','%e-%b-%y'),162.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('22-Apr-08','%e-%b-%y'),160.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Apr-08','%e-%b-%y'),168.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Apr-08','%e-%b-%y'),161.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Apr-08','%e-%b-%y'),154.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Apr-08','%e-%b-%y'),153.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Apr-08','%e-%b-%y'),148.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Apr-08','%e-%b-%y'),147.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Apr-08','%e-%b-%y'),147.14); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Apr-08','%e-%b-%y'),154.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Apr-08','%e-%b-%y'),151.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Apr-08','%e-%b-%y'),152.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Apr-08','%e-%b-%y'),155.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Apr-08','%e-%b-%y'),153.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Apr-08','%e-%b-%y'),151.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Apr-08','%e-%b-%y'),147.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Apr-08','%e-%b-%y'),149.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Mar-08','%e-%b-%y'),143.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Mar-08','%e-%b-%y'),143.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('27-Mar-08','%e-%b-%y'),140.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Mar-08','%e-%b-%y'),145.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Mar-08','%e-%b-%y'),140.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Mar-08','%e-%b-%y'),139.53); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Mar-08','%e-%b-%y'),133.27); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Mar-08','%e-%b-%y'),129.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('18-Mar-08','%e-%b-%y'),132.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Mar-08','%e-%b-%y'),126.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Mar-08','%e-%b-%y'),126.61); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Mar-08','%e-%b-%y'),127.94); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Mar-08','%e-%b-%y'),126.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Mar-08','%e-%b-%y'),127.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Mar-08','%e-%b-%y'),119.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Mar-08','%e-%b-%y'),122.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Mar-08','%e-%b-%y'),120.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Mar-08','%e-%b-%y'),124.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Mar-08','%e-%b-%y'),124.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Mar-08','%e-%b-%y'),121.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Feb-08','%e-%b-%y'),125.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Feb-08','%e-%b-%y'),129.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Feb-08','%e-%b-%y'),122.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Feb-08','%e-%b-%y'),119.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Feb-08','%e-%b-%y'),119.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Feb-08','%e-%b-%y'),119.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Feb-08','%e-%b-%y'),121.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Feb-08','%e-%b-%y'),123.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Feb-08','%e-%b-%y'),122.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Feb-08','%e-%b-%y'),124.63); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Feb-08','%e-%b-%y'),127.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Feb-08','%e-%b-%y'),129.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('12-Feb-08','%e-%b-%y'),124.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Feb-08','%e-%b-%y'),129.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Feb-08','%e-%b-%y'),125.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Feb-08','%e-%b-%y'),121.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Feb-08','%e-%b-%y'),122); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Feb-08','%e-%b-%y'),129.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('4-Feb-08','%e-%b-%y'),131.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Feb-08','%e-%b-%y'),133.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Jan-08','%e-%b-%y'),135.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Jan-08','%e-%b-%y'),132.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Jan-08','%e-%b-%y'),131.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jan-08','%e-%b-%y'),130.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Jan-08','%e-%b-%y'),130.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Jan-08','%e-%b-%y'),135.6); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Jan-08','%e-%b-%y'),139.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jan-08','%e-%b-%y'),155.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('18-Jan-08','%e-%b-%y'),161.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jan-08','%e-%b-%y'),160.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('16-Jan-08','%e-%b-%y'),159.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Jan-08','%e-%b-%y'),169.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('14-Jan-08','%e-%b-%y'),178.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Jan-08','%e-%b-%y'),172.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('10-Jan-08','%e-%b-%y'),178.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jan-08','%e-%b-%y'),179.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('8-Jan-08','%e-%b-%y'),171.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Jan-08','%e-%b-%y'),177.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('4-Jan-08','%e-%b-%y'),180.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('3-Jan-08','%e-%b-%y'),194.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Jan-08','%e-%b-%y'),194.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Dec-07','%e-%b-%y'),198.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('28-Dec-07','%e-%b-%y'),199.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Dec-07','%e-%b-%y'),198.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('26-Dec-07','%e-%b-%y'),198.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Dec-07','%e-%b-%y'),198.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Dec-07','%e-%b-%y'),193.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Dec-07','%e-%b-%y'),187.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Dec-07','%e-%b-%y'),183.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Dec-07','%e-%b-%y'),182.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Dec-07','%e-%b-%y'),184.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Dec-07','%e-%b-%y'),190.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Dec-07','%e-%b-%y'),191.83); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Dec-07','%e-%b-%y'),190.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Dec-07','%e-%b-%y'),188.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Dec-07','%e-%b-%y'),194.21); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Dec-07','%e-%b-%y'),194.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Dec-07','%e-%b-%y'),189.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Dec-07','%e-%b-%y'),185.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Dec-07','%e-%b-%y'),179.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('3-Dec-07','%e-%b-%y'),178.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Nov-07','%e-%b-%y'),182.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('29-Nov-07','%e-%b-%y'),184.29); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Nov-07','%e-%b-%y'),180.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Nov-07','%e-%b-%y'),174.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Nov-07','%e-%b-%y'),172.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('23-Nov-07','%e-%b-%y'),171.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('21-Nov-07','%e-%b-%y'),168.46); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Nov-07','%e-%b-%y'),168.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Nov-07','%e-%b-%y'),163.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Nov-07','%e-%b-%y'),166.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('15-Nov-07','%e-%b-%y'),164.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('14-Nov-07','%e-%b-%y'),166.11); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Nov-07','%e-%b-%y'),169.96); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Nov-07','%e-%b-%y'),153.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Nov-07','%e-%b-%y'),165.37); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('8-Nov-07','%e-%b-%y'),175.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('7-Nov-07','%e-%b-%y'),186.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('6-Nov-07','%e-%b-%y'),191.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Nov-07','%e-%b-%y'),186.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('2-Nov-07','%e-%b-%y'),187.87); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('1-Nov-07','%e-%b-%y'),187.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Oct-07','%e-%b-%y'),189.95); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Oct-07','%e-%b-%y'),187); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Oct-07','%e-%b-%y'),185.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Oct-07','%e-%b-%y'),184.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Oct-07','%e-%b-%y'),182.78); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Oct-07','%e-%b-%y'),185.93); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Oct-07','%e-%b-%y'),186.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Oct-07','%e-%b-%y'),174.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('19-Oct-07','%e-%b-%y'),170.42); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Oct-07','%e-%b-%y'),173.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Oct-07','%e-%b-%y'),172.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Oct-07','%e-%b-%y'),169.58); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Oct-07','%e-%b-%y'),166.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Oct-07','%e-%b-%y'),167.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('11-Oct-07','%e-%b-%y'),162.23); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Oct-07','%e-%b-%y'),166.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Oct-07','%e-%b-%y'),167.86); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Oct-07','%e-%b-%y'),167.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Oct-07','%e-%b-%y'),161.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Oct-07','%e-%b-%y'),156.24); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('3-Oct-07','%e-%b-%y'),157.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Oct-07','%e-%b-%y'),158.45); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Oct-07','%e-%b-%y'),156.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Sep-07','%e-%b-%y'),153.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Sep-07','%e-%b-%y'),154.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Sep-07','%e-%b-%y'),152.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-Sep-07','%e-%b-%y'),153.18); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Sep-07','%e-%b-%y'),148.28); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-Sep-07','%e-%b-%y'),144.15); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Sep-07','%e-%b-%y'),140.31); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Sep-07','%e-%b-%y'),140.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Sep-07','%e-%b-%y'),140.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-Sep-07','%e-%b-%y'),138.41); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Sep-07','%e-%b-%y'),138.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('13-Sep-07','%e-%b-%y'),137.2); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Sep-07','%e-%b-%y'),136.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Sep-07','%e-%b-%y'),135.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Sep-07','%e-%b-%y'),136.71); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('7-Sep-07','%e-%b-%y'),131.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Sep-07','%e-%b-%y'),135.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('5-Sep-07','%e-%b-%y'),136.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Sep-07','%e-%b-%y'),144.16); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('31-Aug-07','%e-%b-%y'),138.48); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Aug-07','%e-%b-%y'),136.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Aug-07','%e-%b-%y'),134.08); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Aug-07','%e-%b-%y'),126.82); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Aug-07','%e-%b-%y'),132.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Aug-07','%e-%b-%y'),135.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-Aug-07','%e-%b-%y'),131.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Aug-07','%e-%b-%y'),132.51); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Aug-07','%e-%b-%y'),127.57); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Aug-07','%e-%b-%y'),122.22); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('17-Aug-07','%e-%b-%y'),122.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-Aug-07','%e-%b-%y'),117.05); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Aug-07','%e-%b-%y'),119.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Aug-07','%e-%b-%y'),124.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Aug-07','%e-%b-%y'),127.79); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-Aug-07','%e-%b-%y'),125); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('9-Aug-07','%e-%b-%y'),126.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Aug-07','%e-%b-%y'),134.01); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Aug-07','%e-%b-%y'),135.03); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Aug-07','%e-%b-%y'),135.25); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('3-Aug-07','%e-%b-%y'),131.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Aug-07','%e-%b-%y'),136.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Aug-07','%e-%b-%y'),135); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-Jul-07','%e-%b-%y'),131.76); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-Jul-07','%e-%b-%y'),141.43); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('27-Jul-07','%e-%b-%y'),143.85); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('26-Jul-07','%e-%b-%y'),146); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('25-Jul-07','%e-%b-%y'),137.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('24-Jul-07','%e-%b-%y'),134.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('23-Jul-07','%e-%b-%y'),143.7); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('20-Jul-07','%e-%b-%y'),143.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('19-Jul-07','%e-%b-%y'),140); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('18-Jul-07','%e-%b-%y'),138.12); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('17-Jul-07','%e-%b-%y'),138.91); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('16-Jul-07','%e-%b-%y'),138.1); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('13-Jul-07','%e-%b-%y'),137.73); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('12-Jul-07','%e-%b-%y'),134.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('11-Jul-07','%e-%b-%y'),132.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('10-Jul-07','%e-%b-%y'),132.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('9-Jul-07','%e-%b-%y'),130.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('6-Jul-07','%e-%b-%y'),132.3); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('5-Jul-07','%e-%b-%y'),132.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-Jul-07','%e-%b-%y'),127.17); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-Jul-07','%e-%b-%y'),121.26); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('29-Jun-07','%e-%b-%y'),122.04); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('28-Jun-07','%e-%b-%y'),120.56); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Jun-07','%e-%b-%y'),121.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Jun-07','%e-%b-%y'),119.65); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Jun-07','%e-%b-%y'),122.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-Jun-07','%e-%b-%y'),123); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('21-Jun-07','%e-%b-%y'),123.9); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('20-Jun-07','%e-%b-%y'),121.55); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('19-Jun-07','%e-%b-%y'),123.66); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-Jun-07','%e-%b-%y'),125.09); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-Jun-07','%e-%b-%y'),120.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-Jun-07','%e-%b-%y'),118.75); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('13-Jun-07','%e-%b-%y'),117.5); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('12-Jun-07','%e-%b-%y'),120.38); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-Jun-07','%e-%b-%y'),120.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-Jun-07','%e-%b-%y'),124.49); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-Jun-07','%e-%b-%y'),124.07); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('6-Jun-07','%e-%b-%y'),123.64); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('5-Jun-07','%e-%b-%y'),122.67); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-Jun-07','%e-%b-%y'),121.33); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('1-Jun-07','%e-%b-%y'),118.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('31-May-07','%e-%b-%y'),121.19); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('30-May-07','%e-%b-%y'),118.77); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('29-May-07','%e-%b-%y'),114.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('25-May-07','%e-%b-%y'),113.62); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-May-07','%e-%b-%y'),110.69); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('23-May-07','%e-%b-%y'),112.89); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('22-May-07','%e-%b-%y'),113.54); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('21-May-07','%e-%b-%y'),111.98); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('18-May-07','%e-%b-%y'),110.02); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('17-May-07','%e-%b-%y'),109.44); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('16-May-07','%e-%b-%y'),107.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('15-May-07','%e-%b-%y'),107.52); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('14-May-07','%e-%b-%y'),109.36); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('11-May-07','%e-%b-%y'),108.74); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('10-May-07','%e-%b-%y'),107.34); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('9-May-07','%e-%b-%y'),106.88); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('8-May-07','%e-%b-%y'),105.06); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('7-May-07','%e-%b-%y'),103.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('4-May-07','%e-%b-%y'),100.81); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('3-May-07','%e-%b-%y'),100.4); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('2-May-07','%e-%b-%y'),100.39); +Insert into demo_line_chart (series, log_date, data_value) values ('Series3',STR_TO_DATE('1-May-07','%e-%b-%y'),99.47); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('30-Apr-07','%e-%b-%y'),99.8); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('27-Apr-07','%e-%b-%y'),99.92); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('26-Apr-07','%e-%b-%y'),98.84); +Insert into demo_line_chart (series, log_date, data_value) values ('Series2',STR_TO_DATE('25-Apr-07','%e-%b-%y'),95.35); +Insert into demo_line_chart (series, log_date, data_value) values ('Series1',STR_TO_DATE('24-Apr-07','%e-%b-%y'),93.24); + +-- DEMO_PIE_CHART +Insert into demo_pie_chart (legend, data_value) values ('One', 5); +Insert into demo_pie_chart (legend, data_value) values ('Two', 2); +Insert into demo_pie_chart (legend, data_value) values ('Three', 9); +Insert into demo_pie_chart (legend, data_value) values ('Four', 7); +Insert into demo_pie_chart (legend, data_value) values ('Five', 4); +Insert into demo_pie_chart (legend, data_value) values ('Six', 3); +Insert into demo_pie_chart (legend, data_value) values ('Seven', .5); + + +-- DEMO_SCATTER_CHART +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (4.1, 'Particulate', 122); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (4.3, 'Particulate', 117); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (5.7, 'Particulate', 112); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (5.4, 'Particulate', 114); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (5.9, 'Particulate', 110); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (5.0, 'Particulate', 114); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (3.6, 'Particulate', 128); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (1.9, 'Particulate', 137); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (7.3, 'Particulate', 104); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (6.9, 'Humidity', 119); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (7.9, 'Humidity', 118); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (9.8, 'Humidity', 103); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (4.9, 'Humidity', 137); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (6.8, 'Humidity', 102); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (4.7, 'Humidity', 89); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (2.7, 'Humidity', 98); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (3.7, 'Humidity', 145); +Insert into demo_scatter_chart (rainfall, key_value, measurements) values (7.4, 'Humidity', 118); + +-- DEMO_SCATTER_PLOT + +-- SET DEFINE OFF; +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -46.5901128883449, -464.477370615131); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -85.0293361247543, -362.252178232471); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 70.9700275365898, 402.214363675566); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -50.1110580054506, -310.108907443154); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 85.043005750476, 813.481841353449); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -14.2356123424179, -134.200903707809); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -66.7014933188071, -445.754374526706); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -79.941582021797, -694.089097548454); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -64.4665101305822, -431.660620986243); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 13.718818366452, 100.010719918027); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 35.457456199233, 223.254643848734); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 55.2326402548387, 268.940835852805); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -32.9989160276248, -237.280626944034); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -0.464911506111831, -2.65656324666862); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -59.0205101710777, -498.895652307826); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 28.0939970575828, 117.200615553207); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 31.7305239061572, 186.662624012256); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 50.9035126419798, 440.937283203403); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 58.3875046571053, 547.879249694999); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 76.7846997917459, 525.020578968308); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 1.73485745801611, 7.28149474936192); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 15.304841061276, 71.2374666595537); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 75.1342455000693, 381.145932349436); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -58.2087417684623, -573.630956069476); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 76.7977837302114, 624.733726327778); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 56.3295585433654, 309.697529902676); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -9.27601440680639, -49.5126219388194); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 98.3002030040236, 765.653589829535); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -25.0987502451517, -174.651201240269); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 39.9215299020147, 337.889176256456); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 77.9225832868337, 356.183903852096); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 75.4311841137638, 14.5258766665983); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 58.9445375968278, 376.359576288564); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', 46.9521897141796, 3.5679984193934); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -49.0378307695689, -230.816092788509); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -96.2461776340861, -863.765255159092); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -96.3388912796447, -538.147283544646); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -21.4684477767032, -200.140077054848); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -30.3532837083366, -226.462637188158); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample0', -17.5055590488884, -118.709622452841); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 56.6394671790491, 385.48951169801); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 70.4622912302344, 356.986529538635); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 58.2647422222769, 489.418744916999); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -92.16093253903, -425.576081634713); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -2.64574970943097, -26.190027661226); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -16.7568654181289, -117.460886096034); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 68.215377945908, 606.917788617984); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 53.7387814434413, 367.53491797949); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -51.8861573715238, -289.998186955562); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -15.9721784074351, -75.335027134323); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 63.2540648905791, 602.546517566905); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -53.376167960458, -470.921238684285); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 40.8307443439851, 276.112653117961); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -13.0540977188468, -127.648158921993); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -43.7358336047599, -435.080470107322); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -74.5673321340732, -617.960236798371); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -6.47907144443936, -55.654651151187); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 68.1915507628225, 352.320728639801); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -23.5393521654339, -137.714557244391); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 28.3621412621467, 141.103859877604); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -99.5615230664525, -974.857161307048); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -77.7132553058204, -736.182131225006); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 95.9321864873013, 478.286112499176); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 97.7451855292708, 940.301427763062); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -10.2483179758141, -70.1145330070458); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -24.0750124187893, -113.523998470537); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -5.5721118558967, -43.8516395203455); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -55.5378338160537, -368.506951528332); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 52.6669516338013, 38.2926120131942); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -74.1981412067658, -436.990411988621); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -8.70511941690364, -71.3277811558721); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 63.2921735621378, 534.825008407329); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 97.9066635843841, 678.994971737474); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -83.1613916743288, -494.53303650568); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 23.4730547863992, 223.031148353333); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 40.6105099506845, 199.937366405274); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 35.4473225526307, 331.61786915261); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 27.2050975460142, 146.277993239147); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', -1.54684302938646, -12.6706471561247); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample1', 45.8386162291745, 401.780882699918); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 43.4241956158593, 228.71488367607); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -23.4517134254585, -165.958577325218); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -98.8954664030229, -829.964553125469); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 48.0527046113198, 451.527720751234); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -77.8912947988124, -416.867729852279); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 23.8325471824168, 206.907438743452); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 83.2787398847467, 814.01250022556); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 49.1572992549647, 451.03037365466); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -11.1351768833872, -57.3863334655361); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 71.1980242104626, 572.745863967841); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 15.0952976022392, 103.30274980367); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 75.0300005037414, 406.581640027236); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -82.0092720309019, -690.340287049552); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 40.2433497232209, 363.579616486762); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 26.8157962678174, 262.150124949525); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -83.9563210001448, -432.739081022174); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -20.6480437627346, -161.330015497217); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 37.1388896882226, 161.352404658606); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 20.2126667486174, 168.833789818416); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 58.3723632769494, 293.206814023827); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -20.2876832456236, -88.0090685884954); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 72.9768050433371, 691.684023528398); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -21.6612128833675, -130.834158714088); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 97.4870524045038, 806.47904449193); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 60.6688063197852, 255.749289305775); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -44.235772358471, -336.262226570567); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -47.39573087854, -321.133647936626); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -24.7522484346097, -204.548308435727); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -42.903238078129, -239.651563752902); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 20.4656734934697, 172.700213789797); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 56.0665747085147, 365.360390019834); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 31.9979219049038, 237.490140339893); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -29.9884426739069, -203.821484170813); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 13.5011085362703, 79.4784314297668); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 41.8402945507358, 297.04934398378); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -84.9323678979223, -345.2331996232); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', -42.2469964847455, -361.468816319656); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 98.1057699772752, 445.181262282444); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 95.5327901766563, 522.663100406047); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample2', 35.0916611161316, 246.796980313209); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 99.3987950082867, 401.97428571655); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -3.0419413965969, -14.5325761725203); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -79.388026451666, -701.817589967372); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -88.451242397524, -668.370526000304); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 34.3131838963851, 254.418322223563); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -61.518208630511, -347.521623572776); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 45.6124480237487, 356.33565541369); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -1.0716036518037, -7.80544934354423); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 31.7371714687412, 283.925868763573); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -76.771029786315, -626.268489584739); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -67.913690110843, -614.736930677921); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 34.9311671860034, 171.384205820777); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 94.3264454603021, 914.267819214392); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 76.7493996267558, 705.649611960615); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -87.795202856922, -749.505178721718); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 2.10914716736019, 15.4036733330536); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -50.456669557937, -318.410608422062); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -94.646644883092, -734.660992935541); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 34.9170862075359, 347.583881438806); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 44.3524585090071, 294.615219199443); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -67.191016143335, -609.956472872497); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -78.826443879164, -369.129912603377); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -50.427554400015, -418.144241602024); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -70.371769526721, -307.02193189609); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 16.3220947890044, 97.0997346831135); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -47.067245718878, -398.27032236792); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 5.91206661301702, 24.7239863780181); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -99.621681801868, -843.593457399484); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 87.4503492670535, 695.345037859433); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -91.176921118057, -683.305064255346); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -0.6632900001386, -5.34157539224209); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 2.98188785882178, 12.1181973600389); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 30.6008700087597, 205.922863867274); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 7.90348761612496, 65.5271597329641); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 40.3565229854156, 268.058138389501); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 37.6892733312091, 247.519083233639); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 16.4759733864001, 107.72661087278); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -53.578492311122, -369.768816039059); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', 77.1292326560541, 765.262108306778); +Insert into demo_scatter_plot + (SERIES, VALUEX, VALUEY) + Values + ('Sample3', -79.566811593352, -677.545127214159); + +-- DEMO_UTIL_CHART +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-17','%Y-%m-%d'),53.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-10','%Y-%m-%d'),62.95747); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-21','%Y-%m-%d'),48.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-22','%Y-%m-%d'),51.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-11','%Y-%m-%d'),56.13373); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-23','%Y-%m-%d'),53.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-12','%Y-%m-%d'),57.05287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-24','%Y-%m-%d'),51.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-13','%Y-%m-%d'),55.78947); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-25','%Y-%m-%d'),54.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-14','%Y-%m-%d'),63.34907); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-26','%Y-%m-%d'),50.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-15','%Y-%m-%d'),52.21327); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-27','%Y-%m-%d'),48.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-16','%Y-%m-%d'),51.32080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-28','%Y-%m-%d'),50.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-17','%Y-%m-%d'),58.35720); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-29','%Y-%m-%d'),51.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-18','%Y-%m-%d'),57.62293); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-04-30','%Y-%m-%d'),67.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-19','%Y-%m-%d'),55.25000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-01','%Y-%m-%d'),59.89393); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-20','%Y-%m-%d'),58.79573); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-02','%Y-%m-%d'),61.20753); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-21','%Y-%m-%d'),54.09720); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-03','%Y-%m-%d'),58.98340); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-22','%Y-%m-%d'),59.95813); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-04','%Y-%m-%d'),59.55873); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-23','%Y-%m-%d'),62.03067); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-05','%Y-%m-%d'),58.73680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-24','%Y-%m-%d'),61.97620); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-06','%Y-%m-%d'),59.89967); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-25','%Y-%m-%d'),58.00207); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-07','%Y-%m-%d'),60.67973); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-26','%Y-%m-%d'),59.95440); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-08','%Y-%m-%d'),60.85913); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-27','%Y-%m-%d'),55.43747); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-09','%Y-%m-%d'),60.62460); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-28','%Y-%m-%d'),52.53933); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-10','%Y-%m-%d'),59.51887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-29','%Y-%m-%d'),57.46260); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-11','%Y-%m-%d'),61.57187); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-30','%Y-%m-%d'),60.04787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-12','%Y-%m-%d'),60.70000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-31','%Y-%m-%d'),58.79480); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-13','%Y-%m-%d'),69.85133); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-01','%Y-%m-%d'),54.40107); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-14','%Y-%m-%d'),68.99620); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-02','%Y-%m-%d'),62.26007); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-15','%Y-%m-%d'),67.64080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-03','%Y-%m-%d'),60.72360); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-16','%Y-%m-%d'),59.71433); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-04','%Y-%m-%d'),60.95847); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-17','%Y-%m-%d'),59.99667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-05','%Y-%m-%d'),59.45920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-18','%Y-%m-%d'),63.27207); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-06','%Y-%m-%d'),60.58620); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-19','%Y-%m-%d'),60.32080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-07','%Y-%m-%d'),61.94207); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-20','%Y-%m-%d'),57.32907); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-08','%Y-%m-%d'),59.03327); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-21','%Y-%m-%d'),59.76933); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-09','%Y-%m-%d'),62.83087); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-22','%Y-%m-%d'),59.12453); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-10','%Y-%m-%d'),59.36840); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-23','%Y-%m-%d'),57.10167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-11','%Y-%m-%d'),56.11480); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-24','%Y-%m-%d'),58.45820); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-12','%Y-%m-%d'),62.23393); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-25','%Y-%m-%d'),59.45440); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-13','%Y-%m-%d'),59.72313); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-26','%Y-%m-%d'),60.12807); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-14','%Y-%m-%d'),53.37093); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-27','%Y-%m-%d'),59.11760); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-15','%Y-%m-%d'),52.99233); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-28','%Y-%m-%d'),57.32020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-16','%Y-%m-%d'),55.99080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-29','%Y-%m-%d'),59.80360); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-17','%Y-%m-%d'),53.93853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-30','%Y-%m-%d'),66.73280); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-18','%Y-%m-%d'),55.99313); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-05-31','%Y-%m-%d'),58.78673); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-19','%Y-%m-%d'),68.23393); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-01','%Y-%m-%d'),58.82773); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-20','%Y-%m-%d'),61.86213); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-02','%Y-%m-%d'),63.12100); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-21','%Y-%m-%d'),61.20307); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-03','%Y-%m-%d'),59.70467); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-22','%Y-%m-%d'),61.05900); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-04','%Y-%m-%d'),58.85173); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-23','%Y-%m-%d'),58.41040); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-05','%Y-%m-%d'),61.21880); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-24','%Y-%m-%d'),59.15967); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-06','%Y-%m-%d'),58.99920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-25','%Y-%m-%d'),56.42153); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-07','%Y-%m-%d'),59.94693); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-26','%Y-%m-%d'),60.46580); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-08','%Y-%m-%d'),66.27293); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-27','%Y-%m-%d'),57.44333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-09','%Y-%m-%d'),61.46773); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-28','%Y-%m-%d'),56.88887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-10','%Y-%m-%d'),59.70467); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-29','%Y-%m-%d'),61.85773); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-11','%Y-%m-%d'),60.16000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-09-30','%Y-%m-%d'),61.96400); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-12','%Y-%m-%d'),61.20300); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-01','%Y-%m-%d'),65.88833); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-13','%Y-%m-%d'),60.95673); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-02','%Y-%m-%d'),62.67920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-14','%Y-%m-%d'),60.70207); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-03','%Y-%m-%d'),63.52047); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-15','%Y-%m-%d'),61.02520); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-04','%Y-%m-%d'),58.60280); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-16','%Y-%m-%d'),60.33953); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-05','%Y-%m-%d'),63.74487); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-17','%Y-%m-%d'),61.20300); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-06','%Y-%m-%d'),59.94880); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-18','%Y-%m-%d'),63.12100); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-07','%Y-%m-%d'),59.44380); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-23','%Y-%m-%d'),61.09153); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-08','%Y-%m-%d'),59.16320); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-24','%Y-%m-%d'),61.28867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-09','%Y-%m-%d'),60.84593); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-25','%Y-%m-%d'),60.95673); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-10','%Y-%m-%d'),58.84113); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-26','%Y-%m-%d'),60.61100); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-11','%Y-%m-%d'),62.59827); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-27','%Y-%m-%d'),61.22913); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-12','%Y-%m-%d'),60.94660); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-28','%Y-%m-%d'),58.88507); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-13','%Y-%m-%d'),59.37593); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-29','%Y-%m-%d'),59.73693); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-14','%Y-%m-%d'),67.21840); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-06-30','%Y-%m-%d'),62.45307); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-15','%Y-%m-%d'),68.56020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-01','%Y-%m-%d'),61.30167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-16','%Y-%m-%d'),57.56493); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-02','%Y-%m-%d'),62.92727); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-17','%Y-%m-%d'),57.02280); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-03','%Y-%m-%d'),60.05887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-18','%Y-%m-%d'),56.20947); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-06','%Y-%m-%d'),61.20100); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-19','%Y-%m-%d'),55.69353); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-07','%Y-%m-%d'),60.66120); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-20','%Y-%m-%d'),57.17640); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-08','%Y-%m-%d'),59.78180); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-21','%Y-%m-%d'),57.50867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-09','%Y-%m-%d'),58.74653); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-22','%Y-%m-%d'),61.67860); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-10','%Y-%m-%d'),59.77893); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-23','%Y-%m-%d'),57.34867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-11','%Y-%m-%d'),67.34500); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-24','%Y-%m-%d'),61.68080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-12','%Y-%m-%d'),57.07293); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-25','%Y-%m-%d'),55.55793); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-13','%Y-%m-%d'),57.37567); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-26','%Y-%m-%d'),55.81013); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-14','%Y-%m-%d'),63.97820); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-27','%Y-%m-%d'),59.85540); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-15','%Y-%m-%d'),56.06647); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-28','%Y-%m-%d'),61.05073); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-16','%Y-%m-%d'),53.66347); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-29','%Y-%m-%d'),59.81253); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-23','%Y-%m-%d'),56.50813); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-30','%Y-%m-%d'),61.02047); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-24','%Y-%m-%d'),53.19667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-10-31','%Y-%m-%d'),60.60413); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-25','%Y-%m-%d'),51.57133); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-01','%Y-%m-%d'),57.43067); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-26','%Y-%m-%d'),45.98160); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-02','%Y-%m-%d'),58.63027); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-27','%Y-%m-%d'),49.21113); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-03','%Y-%m-%d'),59.08127); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-28','%Y-%m-%d'),49.67213); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-04','%Y-%m-%d'),59.37373); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-29','%Y-%m-%d'),52.94053); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-05','%Y-%m-%d'),58.13413); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-30','%Y-%m-%d'),57.55727); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-06','%Y-%m-%d'),57.18893); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-07-31','%Y-%m-%d'),61.76900); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-07','%Y-%m-%d'),56.72853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-01','%Y-%m-%d'),56.51953); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-08','%Y-%m-%d'),56.47340); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-02','%Y-%m-%d'),61.04853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-09','%Y-%m-%d'),62.02333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-03','%Y-%m-%d'),70.06067); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-10','%Y-%m-%d'),61.21787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-04','%Y-%m-%d'),60.97787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-11','%Y-%m-%d'),62.01087); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-05','%Y-%m-%d'),59.25967); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-12','%Y-%m-%d'),62.67573); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-06','%Y-%m-%d'),56.12287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-13','%Y-%m-%d'),59.23993); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-07','%Y-%m-%d'),63.99913); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-14','%Y-%m-%d'),67.34973); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-08','%Y-%m-%d'),58.71127); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-15','%Y-%m-%d'),60.93753); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-08-09','%Y-%m-%d'),64.01913); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-16','%Y-%m-%d'),54.52607); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-17','%Y-%m-%d'),57.81127); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-18','%Y-%m-%d'),63.53027); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-19','%Y-%m-%d'),58.13000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-20','%Y-%m-%d'),58.46827); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-21','%Y-%m-%d'),65.27807); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-22','%Y-%m-%d'),53.74513); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-23','%Y-%m-%d'),60.99107); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-24','%Y-%m-%d'),60.45427); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-25','%Y-%m-%d'),56.16847); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-26','%Y-%m-%d'),59.04040); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-27','%Y-%m-%d'),54.62040); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-28','%Y-%m-%d'),56.34687); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-29','%Y-%m-%d'),54.81560); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-11-30','%Y-%m-%d'),60.22753); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-01','%Y-%m-%d'),59.07307); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-02','%Y-%m-%d'),59.73553); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-03','%Y-%m-%d'),68.69447); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-04','%Y-%m-%d'),68.91767); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-05','%Y-%m-%d'),67.86460); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-06','%Y-%m-%d'),64.43120); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-01','%Y-%m-%d'),61.22507); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-07','%Y-%m-%d'),60.67793); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-02','%Y-%m-%d'),63.27533); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-08','%Y-%m-%d'),62.47060); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-03','%Y-%m-%d'),69.88087); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-09','%Y-%m-%d'),58.26053); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-04','%Y-%m-%d'),66.84920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-10','%Y-%m-%d'),61.03340); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-05','%Y-%m-%d'),61.57367); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-11','%Y-%m-%d'),57.32620); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-06','%Y-%m-%d'),60.52293); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-12','%Y-%m-%d'),63.10353); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-07','%Y-%m-%d'),62.21027); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-13','%Y-%m-%d'),61.73167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-08','%Y-%m-%d'),63.20380); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-14','%Y-%m-%d'),65.31080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-09','%Y-%m-%d'),62.72427); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-15','%Y-%m-%d'),64.67620); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-10','%Y-%m-%d'),61.59373); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-16','%Y-%m-%d'),62.87287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-11','%Y-%m-%d'),61.21280); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-17','%Y-%m-%d'),60.14680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-12','%Y-%m-%d'),60.79787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-18','%Y-%m-%d'),63.01007); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-13','%Y-%m-%d'),60.00080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-19','%Y-%m-%d'),57.82680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-14','%Y-%m-%d'),60.82333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-20','%Y-%m-%d'),62.59173); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-15','%Y-%m-%d'),59.62020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-21','%Y-%m-%d'),61.65607); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-16','%Y-%m-%d'),60.27420); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-23','%Y-%m-%d'),61.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-17','%Y-%m-%d'),60.06200); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-24','%Y-%m-%d'),59.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-18','%Y-%m-%d'),60.88900); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-25','%Y-%m-%d'),50.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-19','%Y-%m-%d'),59.92547); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-26','%Y-%m-%d'),60.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-20','%Y-%m-%d'),59.99853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-27','%Y-%m-%d'),62.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-21','%Y-%m-%d'),58.65873); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-28','%Y-%m-%d'),61.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-22','%Y-%m-%d'),60.61000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-29','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-23','%Y-%m-%d'),59.92280); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-30','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-24','%Y-%m-%d'),59.52427); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2014-12-31','%Y-%m-%d'),62.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-25','%Y-%m-%d'),59.44887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-01','%Y-%m-%d'),60.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-26','%Y-%m-%d'),60.23540); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-02','%Y-%m-%d'),62.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-27','%Y-%m-%d'),61.18333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-03','%Y-%m-%d'),62.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-28','%Y-%m-%d'),60.88133); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-04','%Y-%m-%d'),60.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-29','%Y-%m-%d'),61.74160); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-06','%Y-%m-%d'),62.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-30','%Y-%m-%d'),60.25647); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-08','%Y-%m-%d'),61.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-03-31','%Y-%m-%d'),60.41220); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-09','%Y-%m-%d'),63.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-01','%Y-%m-%d'),59.21053); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-10','%Y-%m-%d'),61.82227); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-02','%Y-%m-%d'),55.04713); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-11','%Y-%m-%d'),61.89553); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-03','%Y-%m-%d'),56.08473); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-12','%Y-%m-%d'),60.90127); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-04','%Y-%m-%d'),64.51107); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-13','%Y-%m-%d'),62.23660); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-05','%Y-%m-%d'),56.75193); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-14','%Y-%m-%d'),61.76947); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-06','%Y-%m-%d'),61.64240); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-15','%Y-%m-%d'),63.08853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-07','%Y-%m-%d'),61.33653); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-16','%Y-%m-%d'),60.12627); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-08','%Y-%m-%d'),69.28867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-17','%Y-%m-%d'),60.60020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-09','%Y-%m-%d'),60.87507); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-18','%Y-%m-%d'),60.43440); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-10','%Y-%m-%d'),68.08707); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-19','%Y-%m-%d'),65.02820); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-11','%Y-%m-%d'),60.57680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-20','%Y-%m-%d'),62.95593); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-12','%Y-%m-%d'),61.52467); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-21','%Y-%m-%d'),61.23967); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-13','%Y-%m-%d'),58.06567); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-22','%Y-%m-%d'),62.61853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-14','%Y-%m-%d'),59.80807); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-23','%Y-%m-%d'),63.64227); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-15','%Y-%m-%d'),79.90007); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-24','%Y-%m-%d'),63.42147); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-16','%Y-%m-%d'),54.75020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-25','%Y-%m-%d'),60.82687); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-17','%Y-%m-%d'),65.69500); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-26','%Y-%m-%d'),60.66260); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-18','%Y-%m-%d'),68.56247); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-27','%Y-%m-%d'),60.12767); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-19','%Y-%m-%d'),72.67153); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-28','%Y-%m-%d'),60.51513); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-20','%Y-%m-%d'),71.30720); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-29','%Y-%m-%d'),61.71520); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-21','%Y-%m-%d'),57.75233); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-30','%Y-%m-%d'),60.89553); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-22','%Y-%m-%d'),59.04200); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-01-31','%Y-%m-%d'),63.50540); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-23','%Y-%m-%d'),62.30153); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-01','%Y-%m-%d'),62.37533); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-24','%Y-%m-%d'),67.68287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-02','%Y-%m-%d'),60.31400); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-25','%Y-%m-%d'),69.21800); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-03','%Y-%m-%d'),63.43920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-26','%Y-%m-%d'),69.75993); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-04','%Y-%m-%d'),61.20487); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-27','%Y-%m-%d'),64.64113); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-05','%Y-%m-%d'),62.11167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-28','%Y-%m-%d'),60.10053); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-06','%Y-%m-%d'),59.96140); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-29','%Y-%m-%d'),58.67653); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-07','%Y-%m-%d'),62.60727); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-04-30','%Y-%m-%d'),58.29180); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-08','%Y-%m-%d'),61.95493); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-01','%Y-%m-%d'),60.56173); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-09','%Y-%m-%d'),58.89653); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-02','%Y-%m-%d'),57.15840); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-10','%Y-%m-%d'),66.20167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-03','%Y-%m-%d'),54.49167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-11','%Y-%m-%d'),64.76873); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-04','%Y-%m-%d'),61.54087); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-12','%Y-%m-%d'),69.90680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-05','%Y-%m-%d'),63.86073); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-13','%Y-%m-%d'),68.49253); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-06','%Y-%m-%d'),64.13460); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-14','%Y-%m-%d'),63.19360); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-07','%Y-%m-%d'),65.30087); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-15','%Y-%m-%d'),63.35453); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-08','%Y-%m-%d'),64.46353); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-16','%Y-%m-%d'),59.78020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-09','%Y-%m-%d'),62.81193); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-17','%Y-%m-%d'),60.70760); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-10','%Y-%m-%d'),56.14480); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-18','%Y-%m-%d'),58.05167); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-11','%Y-%m-%d'),61.47853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-19','%Y-%m-%d'),57.12700); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-12','%Y-%m-%d'),63.39287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-20','%Y-%m-%d'),59.49013); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-13','%Y-%m-%d'),64.30640); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-21','%Y-%m-%d'),59.18607); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-14','%Y-%m-%d'),64.29447); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-22','%Y-%m-%d'),60.94680); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-15','%Y-%m-%d'),65.63307); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-23','%Y-%m-%d'),59.85807); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-16','%Y-%m-%d'),62.32887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-24','%Y-%m-%d'),60.06767); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-17','%Y-%m-%d'),56.52853); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-25','%Y-%m-%d'),61.60267); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-18','%Y-%m-%d'),70.26520); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-26','%Y-%m-%d'),60.94220); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-19','%Y-%m-%d'),64.38267); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-27','%Y-%m-%d'),59.99040); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-20','%Y-%m-%d'),63.01447); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-02-28','%Y-%m-%d'),63.05567); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-21','%Y-%m-%d'),61.89200); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-22','%Y-%m-%d'),62.06920); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-23','%Y-%m-%d'),68.49253); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-24','%Y-%m-%d'),69.98867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-25','%Y-%m-%d'),60.26940); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-26','%Y-%m-%d'),62.91493); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-09','%Y-%m-%d'),62.28433); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-27','%Y-%m-%d'),62.36827); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-10','%Y-%m-%d'),64.38787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-11','%Y-%m-%d'),61.17093); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-28','%Y-%m-%d'),60.33887); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-12','%Y-%m-%d'),57.17713); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-29','%Y-%m-%d'),83.89220); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-13','%Y-%m-%d'),57.69653); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-30','%Y-%m-%d'),60.96747); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-14','%Y-%m-%d'),55.97980); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-05-31','%Y-%m-%d'),57.80627); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-15','%Y-%m-%d'),62.08940); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-01','%Y-%m-%d'),61.60173); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-16','%Y-%m-%d'),83.81047); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-02','%Y-%m-%d'),63.23627); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-17','%Y-%m-%d'),61.32540); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-03','%Y-%m-%d'),58.39987); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-18','%Y-%m-%d'),61.08900); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-04','%Y-%m-%d'),69.51947); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-19','%Y-%m-%d'),67.26267); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-05','%Y-%m-%d'),69.67787); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-20','%Y-%m-%d'),58.71120); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-06','%Y-%m-%d'),62.40513); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-21','%Y-%m-%d'),55.77320); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-07','%Y-%m-%d'),61.01893); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-22','%Y-%m-%d'),59.99420); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-08','%Y-%m-%d'),61.34813); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-23','%Y-%m-%d'),60.83867); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-24','%Y-%m-%d'),59.57020); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-25','%Y-%m-%d'),63.20393); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-17','%Y-%m-%d'),67.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-26','%Y-%m-%d'),58.30480); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-18','%Y-%m-%d'),64.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-27','%Y-%m-%d'),58.79667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-19','%Y-%m-%d'),60.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-28','%Y-%m-%d'),54.04967); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-20','%Y-%m-%d'),57.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-29','%Y-%m-%d'),57.88313); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-21','%Y-%m-%d'),58.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-06-30','%Y-%m-%d'),56.94940); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-22','%Y-%m-%d'),59.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-01','%Y-%m-%d'),65.01080); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-23','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-02','%Y-%m-%d'),64.97013); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-24','%Y-%m-%d'),59.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-03','%Y-%m-%d'),65.06647); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-25','%Y-%m-%d'),59.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-04','%Y-%m-%d'),64.08287); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-26','%Y-%m-%d'),76.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-05','%Y-%m-%d'),65.40367); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-27','%Y-%m-%d'),59.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-06','%Y-%m-%d'),72.61373); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-28','%Y-%m-%d'),59.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-07','%Y-%m-%d'),72.53120); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-29','%Y-%m-%d'),58.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-08','%Y-%m-%d'),72.54133); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-26','%Y-%m-%d'),58.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-30','%Y-%m-%d'),54.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-01','%Y-%m-%d'),58.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-02','%Y-%m-%d'),59.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-03','%Y-%m-%d'),58.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-04','%Y-%m-%d'),60.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-05','%Y-%m-%d'),101.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-06','%Y-%m-%d'),58.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-07','%Y-%m-%d'),59.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-08','%Y-%m-%d'),56.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-09','%Y-%m-%d'),57.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-10','%Y-%m-%d'),65.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-11','%Y-%m-%d'),56.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-12','%Y-%m-%d'),54.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-13','%Y-%m-%d'),68.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-14','%Y-%m-%d'),69.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-15','%Y-%m-%d'),66.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-16','%Y-%m-%d'),58.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-17','%Y-%m-%d'),60.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-18','%Y-%m-%d'),58.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-19','%Y-%m-%d'),55.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-20','%Y-%m-%d'),55.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-21','%Y-%m-%d'),57.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-22','%Y-%m-%d'),57.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-23','%Y-%m-%d'),58.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-24','%Y-%m-%d'),57.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-25','%Y-%m-%d'),58.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-26','%Y-%m-%d'),61.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-27','%Y-%m-%d'),57.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-28','%Y-%m-%d'),58.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-29','%Y-%m-%d'),59.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-30','%Y-%m-%d'),55.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-10-31','%Y-%m-%d'),53.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-01','%Y-%m-%d'),56.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-02','%Y-%m-%d'),57.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-03','%Y-%m-%d'),55.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-04','%Y-%m-%d'),57.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-05','%Y-%m-%d'),65.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-06','%Y-%m-%d'),55.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-07','%Y-%m-%d'),57.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-08','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-09','%Y-%m-%d'),60.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-10','%Y-%m-%d'),58.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-11','%Y-%m-%d'),58.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-12','%Y-%m-%d'),57.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-13','%Y-%m-%d'),57.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-14','%Y-%m-%d'),55.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-15','%Y-%m-%d'),55.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-16','%Y-%m-%d'),58.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-17','%Y-%m-%d'),58.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-18','%Y-%m-%d'),64.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-19','%Y-%m-%d'),59.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-20','%Y-%m-%d'),57.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-21','%Y-%m-%d'),57.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-22','%Y-%m-%d'),59.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-23','%Y-%m-%d'),56.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-24','%Y-%m-%d'),58.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-25','%Y-%m-%d'),57.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-26','%Y-%m-%d'),57.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-27','%Y-%m-%d'),53.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-28','%Y-%m-%d'),58.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-29','%Y-%m-%d'),56.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-11-30','%Y-%m-%d'),58.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-01','%Y-%m-%d'),60.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-02','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-03','%Y-%m-%d'),58.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-04','%Y-%m-%d'),77.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-05','%Y-%m-%d'),56.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-06','%Y-%m-%d'),55.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-07','%Y-%m-%d'),57.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-08','%Y-%m-%d'),57.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-09','%Y-%m-%d'),71.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-10','%Y-%m-%d'),62.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-11','%Y-%m-%d'),59.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-12','%Y-%m-%d'),59.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-13','%Y-%m-%d'),62.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-14','%Y-%m-%d'),59.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-15','%Y-%m-%d'),59.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-16','%Y-%m-%d'),62.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-17','%Y-%m-%d'),66.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-18','%Y-%m-%d'),59.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-19','%Y-%m-%d'),60.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-20','%Y-%m-%d'),57.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-21','%Y-%m-%d'),60.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-22','%Y-%m-%d'),59.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-23','%Y-%m-%d'),61.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-24','%Y-%m-%d'),57.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-25','%Y-%m-%d'),52.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-09','%Y-%m-%d'),70.77980); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-10','%Y-%m-%d'),70.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-11','%Y-%m-%d'),60.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-12','%Y-%m-%d'),58.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-13','%Y-%m-%d'),58.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-14','%Y-%m-%d'),58.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-15','%Y-%m-%d'),68.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-16','%Y-%m-%d'),84.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-17','%Y-%m-%d'),61.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-18','%Y-%m-%d'),64.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-19','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-20','%Y-%m-%d'),77.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-21','%Y-%m-%d'),60.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-22','%Y-%m-%d'),65.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-23','%Y-%m-%d'),68.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-24','%Y-%m-%d'),58.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-25','%Y-%m-%d'),56.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-26','%Y-%m-%d'),58.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-27','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-28','%Y-%m-%d'),59.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-29','%Y-%m-%d'),58.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-30','%Y-%m-%d'),59.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-27','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-07-31','%Y-%m-%d'),57.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-28','%Y-%m-%d'),305.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-01','%Y-%m-%d'),59.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-29','%Y-%m-%d'),62.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-02','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-30','%Y-%m-%d'),60.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-03','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-12-31','%Y-%m-%d'),60.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-04','%Y-%m-%d'),83.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-01','%Y-%m-%d'),55.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-05','%Y-%m-%d'),59.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-02','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-06','%Y-%m-%d'),58.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-03','%Y-%m-%d'),61.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-07','%Y-%m-%d'),59.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-04','%Y-%m-%d'),62.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-08','%Y-%m-%d'),57.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-05','%Y-%m-%d'),61.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-09','%Y-%m-%d'),58.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-06','%Y-%m-%d'),61.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-10','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-07','%Y-%m-%d'),62.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-11','%Y-%m-%d'),58.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-08','%Y-%m-%d'),100.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-12','%Y-%m-%d'),57.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-09','%Y-%m-%d'),62.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-13','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-10','%Y-%m-%d'),66.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-14','%Y-%m-%d'),58.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-11','%Y-%m-%d'),61.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-15','%Y-%m-%d'),59.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-12','%Y-%m-%d'),60.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-16','%Y-%m-%d'),61.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-13','%Y-%m-%d'),61.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-17','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-14','%Y-%m-%d'),60.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-18','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-15','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-19','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-16','%Y-%m-%d'),61.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-20','%Y-%m-%d'),60.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-17','%Y-%m-%d'),70.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-21','%Y-%m-%d'),63.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-18','%Y-%m-%d'),61.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-22','%Y-%m-%d'),58.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-19','%Y-%m-%d'),61.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-23','%Y-%m-%d'),59.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-20','%Y-%m-%d'),61.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-24','%Y-%m-%d'),59.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-21','%Y-%m-%d'),61.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-25','%Y-%m-%d'),63.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-22','%Y-%m-%d'),60.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-26','%Y-%m-%d'),61.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-23','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-27','%Y-%m-%d'),60.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-24','%Y-%m-%d'),60.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-28','%Y-%m-%d'),57.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-25','%Y-%m-%d'),61.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-29','%Y-%m-%d'),59.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-26','%Y-%m-%d'),61.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-30','%Y-%m-%d'),57.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-27','%Y-%m-%d'),61.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-08-31','%Y-%m-%d'),59.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-28','%Y-%m-%d'),61.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-01','%Y-%m-%d'),58.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-29','%Y-%m-%d'),61.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-02','%Y-%m-%d'),61.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-30','%Y-%m-%d'),61.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-03','%Y-%m-%d'),59.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-01-31','%Y-%m-%d'),59.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-04','%Y-%m-%d'),59.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-01','%Y-%m-%d'),60.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-05','%Y-%m-%d'),59.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-02','%Y-%m-%d'),60.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-06','%Y-%m-%d'),61.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-03','%Y-%m-%d'),60.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-07','%Y-%m-%d'),59.20000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-04','%Y-%m-%d'),61.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-08','%Y-%m-%d'),61.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-05','%Y-%m-%d'),60.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-09','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-06','%Y-%m-%d'),60.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-10','%Y-%m-%d'),60.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-07','%Y-%m-%d'),60.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-11','%Y-%m-%d'),58.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-08','%Y-%m-%d'),61.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-12','%Y-%m-%d'),58.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-09','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-13','%Y-%m-%d'),58.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-10','%Y-%m-%d'),60.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-14','%Y-%m-%d'),60.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-11','%Y-%m-%d'),60.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-15','%Y-%m-%d'),62.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-12','%Y-%m-%d'),59.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2015-09-16','%Y-%m-%d'),65.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-13','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-14','%Y-%m-%d'),69.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-15','%Y-%m-%d'),59.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-16','%Y-%m-%d'),59.80000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-17','%Y-%m-%d'),60.46667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-18','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-19','%Y-%m-%d'),62.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-20','%Y-%m-%d'),60.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-21','%Y-%m-%d'),59.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-22','%Y-%m-%d'),61.40000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-23','%Y-%m-%d'),60.93333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-24','%Y-%m-%d'),64.13333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-25','%Y-%m-%d'),61.53333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-26','%Y-%m-%d'),59.06667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-27','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-28','%Y-%m-%d'),60.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-02-29','%Y-%m-%d'),61.00000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-01','%Y-%m-%d'),61.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-02','%Y-%m-%d'),61.66667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-03','%Y-%m-%d'),60.73333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-04','%Y-%m-%d'),61.26667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-05','%Y-%m-%d'),61.60000); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-06','%Y-%m-%d'),61.33333); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-07','%Y-%m-%d'),61.86667); +INSERT INTO demo_util_chart (TRAFFIC_DATE,UTIL_PERC ) VALUES (str_to_date('2016-03-08','%Y-%m-%d'),62.00000); + +commit; diff --git a/ui/db-scripts/EcompSdkDMLMySql_2_4_OS.sql b/ui/db-scripts/EcompSdkDMLMySql_2_4_OS.sql new file mode 100644 index 0000000..781e8bc --- /dev/null +++ b/ui/db-scripts/EcompSdkDMLMySql_2_4_OS.sql @@ -0,0 +1,39 @@ +-- --------------------------------------------------------------------------------------------------------------- +-- This script populates tables in the OPEN-SOURCE version 2.1.0 of the ECOMP SDK application database. +-- The DML COMMON script must be executed first! +-- --------------------------------------------------------------------------------------------------------------- + +SET FOREIGN_KEY_CHECKS=1; +USE akraino; + +-- fn_menu +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (1, 'Root', NULL, 10, NULL, 'menu_home', 'N', NULL, NULL, NULL, NULL, 'APP', 'N', NULL); -- we need even though it's inactive +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (5000, 'Sample Pages', 1, 30, 'sample.htm', 'menu_sample', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-documents-book'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (2, 'Home', 1, 10, 'welcome', 'menu_home', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-building-home'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (8, 'Reports', 1, 40, 'report.htm', 'menu_reports', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-misc-piechart'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (9, 'Profile', 1, 90, 'userProfile', 'menu_profile', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-people-oneperson'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (10, 'Admin', 1, 110, 'role_list.htm', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-content-star'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (84, 'All Reports', 8, 50, 'report', 'menu_reports', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) values (87, 'Create Reports', 8, 120, 'report#/report_wizard', 'menu_reports', 'Y', NULL, 'r_action=report.create', NULL, NULL, 'APP', 'N', NULL); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) values (88, 'Sample Dashboard', 8, 130, 'report_dashboard', 'menu_reports', 'N', NULL, NULL, NULL, NULL, 'APP', 'N', NULL); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (89, 'Import', 8, 140, 'report#/report_import', 'menu_reports', 'N', null, null, null, null, 'APP', 'N', null); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (94, 'Self', 9, 40,'userProfile#/self_profile', 'menu_profile', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/profile.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (101, 'Roles', 10, 20, 'admin#/admin', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/users.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (102, 'Role Functions', 10, 30, 'admin#/role_function_list', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', NULL); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (105, 'Cache Admin', 10, 40, 'admin#/jcs_admin', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/cache.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (108, 'Usage', 10, 80, 'admin#/usage_list', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/users.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (121, 'Collaboration', 5000, 100, 'samplePage#/collaborate_list', 'menu_sample', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/bubble.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (930, 'Search', 9, 15, 'userProfile', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/search_profile.png'); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (150022, 'Menus', 10, 60, 'admin#/admin_menu_edit', 'menu_admin', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', NULL); +INSERT INTO fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (150038,'Notebook',5000,135,'samplePage#/notebook','menu_sample','Y',NULL,NULL,NULL,NULL,'APP','N',NULL); + +-- fn_user +Insert into fn_user (USER_ID,ORG_ID,MANAGER_ID,FIRST_NAME,MIDDLE_NAME,LAST_NAME,PHONE,FAX,CELLULAR,EMAIL,ADDRESS_ID,ALERT_METHOD_CD,HRID,ORG_USER_ID,ORG_CODE,LOGIN_ID,LOGIN_PWD,LAST_LOGIN_DATE,ACTIVE_YN,CREATED_ID,CREATED_DATE,MODIFIED_ID,MODIFIED_DATE,IS_INTERNAL_YN,ADDRESS_LINE_1,ADDRESS_LINE_2,CITY,STATE_CD,ZIP_CODE,COUNTRY_CD,LOCATION_CLLI,ORG_MANAGER_USERID,COMPANY,DEPARTMENT_NAME,JOB_TITLE,TIMEZONE,DEPARTMENT,BUSINESS_UNIT,BUSINESS_UNIT_NAME,COST_CENTER,FIN_LOC_CODE,SILO_STATUS) values (1,null,null,'admin',null,'User',null,null,null,'admin@email.com',null,null,null,'admin',null,'admin','admin_password',str_to_date('24-OCT-16','%d-%M-%Y'),'Y',null,str_to_date('17-OCT-16','%d-%M-%Y'),1,str_to_date('24-OCT-16','%d-%M-%Y'),'N',null,null,null,'NJ',null,'US',null,null,null,null,null,10,null,null,null,null,null,null); + +-- fn_app +Insert into fn_app (APP_ID,APP_NAME,APP_IMAGE_URL,APP_DESCRIPTION,APP_NOTES,APP_URL,APP_ALTERNATE_URL,APP_REST_ENDPOINT,ML_APP_NAME,ML_APP_ADMIN_ID,MOTS_ID,APP_PASSWORD,OPEN,ENABLED,THUMBNAIL,APP_USERNAME,UEB_KEY,UEB_SECRET,UEB_TOPIC_NAME) VALUES (1,'Default',null,'Some Default Description','Some Default Note',null,null,null,'ECPP','?','1','JuCerIRKt/faEcx8QdgncLEEv+IOZjpHe7Pi5DEPqKs=','N','N',null,'Default',null,null,'ECOMP-PORTAL-INBOX'); + +-- fn_user_role +Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (1,1,null,1); + +commit; diff --git a/ui/db-scripts/akraino-blueprint_validation_db.sql b/ui/db-scripts/akraino-blueprint_validation_db.sql new file mode 100644 index 0000000..c2d7320 --- /dev/null +++ b/ui/db-scripts/akraino-blueprint_validation_db.sql @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +SET FOREIGN_KEY_CHECKS=1; + +use akraino; + +DROP TABLE IF EXISTS submission; +DROP TABLE IF EXISTS blueprint_instance_for_validation; +DROP TABLE IF EXISTS blueprint; +DROP TABLE IF EXISTS silo; +DROP TABLE IF EXISTS timeslot; +DROP TABLE IF EXISTS lab; + +create table lab ( + id bigint not NULL AUTO_INCREMENT, + lab text not NULL, + CONSTRAINT id_pk PRIMARY KEY (id) +); + +create table timeslot ( + id bigint not NULL AUTO_INCREMENT, + start_date_time text, + duration text, + lab_id bigint not NULL, + CONSTRAINT id_pk PRIMARY KEY (id), + CONSTRAINT lab_id_fk FOREIGN KEY (lab_id) + REFERENCES lab (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION +); + +create table silo ( + id bigint not NULL AUTO_INCREMENT, + silo text not NULL, + lab_id bigint not NULL, + CONSTRAINT id_pk PRIMARY KEY (id), + CONSTRAINT lab_id_fk2 FOREIGN KEY (lab_id) + REFERENCES lab (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION +); + +CREATE TABLE blueprint +( + id bigint not NULL AUTO_INCREMENT, + blueprint_name varchar(20) not NULL unique, + CONSTRAINT id_pk PRIMARY KEY (id) +); + +CREATE TABLE blueprint_instance_for_validation +( + id bigint not NULL AUTO_INCREMENT, + blueprint_id bigint not NULL, + version text not NULL, + layer text not NULL, + layer_description text not NULL, + CONSTRAINT id_pk PRIMARY KEY (id), + CONSTRAINT blueprint_id_fk FOREIGN KEY (blueprint_id) + REFERENCES blueprint (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION +); + +CREATE TABLE submission +( + id bigint not NULL AUTO_INCREMENT, + status text not NULL, + jenkins_queue_job_item_url text, + nexus_result_url text, + blueprint_instance_for_validation_id bigint not NULL, + timeslot_id bigint not NULL, + CONSTRAINT id_pk PRIMARY KEY (id), + CONSTRAINT blueprint_instance_for_validation_id_fk FOREIGN KEY (blueprint_instance_for_validation_id) + REFERENCES blueprint_instance_for_validation (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION, + CONSTRAINT timeslot_id_fk FOREIGN KEY (timeslot_id) + REFERENCES timeslot (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION +); + +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (21, 'New Submission', 1, 10, 'newSubmission', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-building-home'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (22, 'Committed Submissions', 1, 10, 'committedSubmissions', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-building-home'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (23, 'Validation Results', 1, 10, 'report.htm', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', 'icon-misc-piechart'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (24, 'Get by submission id', 23, 10, 'getBySubmissionId', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (25, 'Get by blueprint name', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (26, 'Get by layer', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (27, 'Get by execution dates', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (28, 'Get by number of successful runs', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (29, 'Get by number of successful last runs', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (30, 'Get by number of failed last runs', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); +insert into fn_menu (MENU_ID, LABEL, PARENT_ID, SORT_ORDER, ACTION, FUNCTION_CD, ACTIVE_YN, SERVLET, QUERY_STRING, EXTERNAL_URL, TARGET, MENU_SET_CD, SEPARATOR_YN, IMAGE_SRC) VALUES (31, 'Get all', 23, 10, '', 'menu_tab', 'Y', NULL, NULL, NULL, NULL, 'APP', 'N', '/static/fusion/images/reports.png'); + +-- fn_user +Insert into fn_user (USER_ID,ORG_ID,MANAGER_ID,FIRST_NAME,MIDDLE_NAME,LAST_NAME,PHONE,FAX,CELLULAR,EMAIL,ADDRESS_ID,ALERT_METHOD_CD,HRID,ORG_USER_ID,ORG_CODE,LOGIN_ID,LOGIN_PWD,LAST_LOGIN_DATE,ACTIVE_YN,CREATED_ID,CREATED_DATE,MODIFIED_ID,MODIFIED_DATE,IS_INTERNAL_YN,ADDRESS_LINE_1,ADDRESS_LINE_2,CITY,STATE_CD,ZIP_CODE,COUNTRY_CD,LOCATION_CLLI,ORG_MANAGER_USERID,COMPANY,DEPARTMENT_NAME,JOB_TITLE,TIMEZONE,DEPARTMENT,BUSINESS_UNIT,BUSINESS_UNIT_NAME,COST_CENTER,FIN_LOC_CODE,SILO_STATUS) values (2,null,null,'akraino',null,null,null,null,null,null,null,null,null,'akraino',null,'akraino','akraino_password',now(),'Y',null,now(),1,now(),'N',null,null,null,'NJ',null,'US',null,null,null,null,null,10,null,null,null,null,null,null); + +-- fn_role +Insert into fn_role (ROLE_ID,ROLE_NAME,ACTIVE_YN,PRIORITY) values (17,'Blueprint Validation UI user','Y',5); + +-- fn_role_function +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (17,'menu_home'); +Insert into fn_role_function (ROLE_ID,FUNCTION_CD) values (17,'menu_tab'); + +-- fn_user_role +Insert into fn_user_role (USER_ID,ROLE_ID,PRIORITY,APP_ID) values (2,17,null,1); + +commit; diff --git a/ui/db-scripts/examples/initialize_db_example.sql b/ui/db-scripts/examples/initialize_db_example.sql new file mode 100644 index 0000000..7902b94 --- /dev/null +++ b/ui/db-scripts/examples/initialize_db_example.sql @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +SET FOREIGN_KEY_CHECKS=1; + +use akraino; + +insert into lab values(1, 0); /* 0 stands for AT&T lab */ + +insert into timeslot values(1, 'now', null, 1); + +insert into silo values(1, 'att-blu-val', 1); + +insert into blueprint (id, blueprint_name) values(1, 'dummy'); +insert into blueprint (id, blueprint_name) values(2, 'Unicycle'); +insert into blueprint (id, blueprint_name) values(3, 'REC'); + +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(1, 1, 'latest', 0, 'Dummy Hardware'); /* 0 Stands for hardware layer */ +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(2, 3, 'latest', 0, 'AT&T Hardware'); /* 0 Stands for hardware layer */ +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(3, 3, 'latest', 1, 'OS of the AT&T platform'); /* 1 Stands for OS layer */ +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(4, 3, 'latest', 2, 'K8s of the AT&T platform'); /* 2 Stands for K8s layer */ +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(5, 3, 'latest', 7, 'All layers'); /* 7 Stands for all layers */ +insert into blueprint_instance_for_validation (id, blueprint_id, version, layer, layer_description) values(6, 2, 'latest', 0, 'Unicycle Hardware'); /* 0 Stands for hardware layer */ + +commit; diff --git a/ui/distribution.xml b/ui/distribution.xml new file mode 100644 index 0000000..f3732bc --- /dev/null +++ b/ui/distribution.xml @@ -0,0 +1,33 @@ + + + distribution + + zip + + false + + + ${basedir} + + + .classpath + .project + .settings/ + bin/ + target/ + distribution.xml + **/WEB-INF/conf/system.properties.* + + + + \ No newline at end of file diff --git a/ui/pom.xml b/ui/pom.xml old mode 100755 new mode 100644 index 85890da..46c647f --- a/ui/pom.xml +++ b/ui/pom.xml @@ -1,236 +1,376 @@ - + + 4.0.0 -Licensed 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 + org.akraino.validation + ui + 0.1.0-SNAPSHOT + AECBlueprintValidationUI Maven Webapp + war - http://www.apache.org/licenses/LICENSE-2.0 + + 1.8 + 1.8 + 1.8 + UTF-8 + + true + + false + 2.4.0 + 0.7.9 + 4.2.3.RELEASE + 2.19.1 + 2.0.2 + 2.8 + 1.0.0 + 2.8.10 + 0.9.5.2 + 2.0.0 + 3.1.0 + 4.12 + 2.2.0 + 20180813 + 2.2.1 + 1.7.12 + 1.19.4 + 27.1-jre + 1.12.1 + 3.1 + 0.22.0 + http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.37/bin + apache-tomcat-8.0.37 + 3.0.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. ---> + + + onap-releases + onap-releases + https://nexus.onap.org/content/repositories/releases/ + + - - 4.0.0 - org.akraino.validation - ui - war - 0.0.1-SNAPSHOT - AECBlueprintValidationUI Maven Webapp - http://maven.apache.org - - 1.8 - 4.3.0.RELEASE - 3.2.3.RELEASE - 2.7.5 - UTF-8 - 1.19.4 - 27.1-jre - + + + AECBlueprintValidationUI - - - central - Central Repository - http://repo.maven.apache.org/maven2 - default - - false - - - + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin-version} + + ${skiptests} + + **/Test*.java + **/*Test.java + **/*TestCase.java + + + ${basedir}/war + + + classpath: + + + - - - central - Maven Plugin Repository - http://repo1.maven.org/maven2 - default - - false - - - never - - - + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin-version} + + + + true + + + ${project.version} + ${maven.build.timestamp} + + + + + org.onap.portal.sdk + epsdk-app-overlay + + app/fusion/scripts/DS2-view-models/welcome-content.html + + + + + - - - junit - junit - 4.12 - test - - - commons-codec - commons-codec - 1.11 - - - org.springframework - spring-webmvc - ${org.springframework-version} - - - org.springframework - spring-context - ${org.springframework-version} - - - org.springframework - spring-orm - ${org.springframework-version} - - - org.springframework - spring-tx - ${org.springframework-version} - - - commons-fileupload - commons-fileupload - 1.3.2 - - - org.hibernate - hibernate-core - 5.2.6.Final - - - org.javassist - javassist - 3.18.2-GA - - - org.hibernate - hibernate-c3p0 - 5.2.6.Final - - - commons-dbcp - commons-dbcp - 1.4 - - - com.mchange - c3p0 - 0.9.5.2 - - - org.hibernate - hibernate-validator - 5.4.1.Final - - - log4j - log4j - 1.2.17 - - - org.springframework - spring-test - ${org.springframework-version} - test - - - javax.servlet - javax.servlet-api - 3.0.1 - provided - - - javax.servlet - jstl - 1.2 - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.library} - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.library} - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${jackson.library} - - - org.apache.commons - commons-lang3 - 3.4 - - - org.postgresql - postgresql - 42.2.2 - - - com.sun.jersey - jersey-json - ${jersey-version} - - - com.sun.jersey - jersey-client - ${jersey-version} - - - com.google.guava - guava - ${google.guava-version} - - - org.json - json - 20180813 - - - org.jsoup - jsoup - 1.12.1 - - - commons-httpclient - commons-httpclient - 3.1 - + + org.apache.maven.plugins + maven-assembly-plugin + ${maven-assembly-plugin.version} + + ${skipassembly} + + ${basedir}/distribution.xml + + + + + make-assembly + package + + single + + + + - + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin-version} + + true + + - - AECBlueprintValidationUI - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - ${java-version} - ${java-version} - - - - org.apache.maven.plugins - maven-war-plugin - 2.4 - - src/main/webapp - AECBlueprintValidationUI - false - - - - - + + io.fabric8 + docker-maven-plugin + ${docker-maven-plugin.version} + + true + + + akraino/validation:dev-ui-latest + + tomcat:8.5.37 + + artifact + + + + + + + + + akraino/validation:dev-mariadb-latest + + mariadb:10.4.6 + + project + + + + + + + + + + + + + + + + + + org.onap.portal.sdk + epsdk-app-overlay + ${epsdk.version} + war + + + org.onap.portal.sdk + epsdk-app-common + ${epsdk.version} + jar + + + + org.onap.portal.sdk + epsdk-core + ${epsdk.version} + + + org.onap.portal.sdk + epsdk-analytics + ${epsdk.version} + + + org.onap.portal.sdk + epsdk-workflow + ${epsdk.version} + + + org.onap.portal.sdk + epsdk-music + ${epsdk.version} + + + com.att.eelf + eelf-core + ${eelf-core-version} + + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.mchange + c3p0 + ${c3p0.version} + + + io.searchbox + jest + ${io.searchbox.jest.version} + + + commons-logging + commons-logging + + + + + javax.servlet + javax.servlet-api + ${javax.servlet-api.version} + + + junit + junit + ${junit.version} + + + + org.elasticsearch + elasticsearch + ${elasticsearch} + + + org.apache.lucene + lucene-queryparser + + + + + org.json + json + ${org.json.version} + + + org.quartz-scheduler + quartz + ${quartz.version} + + + + c3p0 + c3p0 + + + + + + org.slf4j + jcl-over-slf4j + ${jcl-over-slf4j.version} + + + org.springframework + spring-context-support + ${springframework-version} + + + org.springframework + spring-core + ${springframework-version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-test + ${springframework-version} + + + org.springframework + spring-tx + ${springframework-version} + + + org.springframework + spring-web + ${springframework-version} + + + org.springframework + spring-webmvc + ${springframework-version} + + + + org.jacoco + org.jacoco.agent + ${jacoco.version} + runtime + + + com.sun.jersey + jersey-json + ${jersey-version} + + + com.sun.jersey + jersey-client + ${jersey-version} + + + com.google.guava + guava + ${google.guava-version} + + + org.jsoup + jsoup + ${org.jsoup.version} + + + commons-httpclient + commons-httpclient + ${commons-httpclient.version} + + + diff --git a/ui/src/main/java/org/akraino/validation/ui/client/jenkins/JenkinsExecutorClient.java b/ui/src/main/java/org/akraino/validation/ui/client/jenkins/JenkinsExecutorClient.java index 313ce89..6c80c24 100644 --- a/ui/src/main/java/org/akraino/validation/ui/client/jenkins/JenkinsExecutorClient.java +++ b/ui/src/main/java/org/akraino/validation/ui/client/jenkins/JenkinsExecutorClient.java @@ -1,21 +1,25 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.client.jenkins; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; import java.net.MalformedURLException; +import java.net.Proxy; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; @@ -39,7 +43,7 @@ import org.akraino.validation.ui.client.jenkins.resources.Parameter; import org.akraino.validation.ui.client.jenkins.resources.Parameters; import org.akraino.validation.ui.client.jenkins.resources.QueueJobItem; import org.apache.commons.httpclient.HttpException; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientHandlerException; @@ -51,10 +55,12 @@ import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; import com.sun.jersey.api.json.JSONConfiguration; import com.sun.jersey.client.urlconnection.HTTPSProperties; +import com.sun.jersey.client.urlconnection.HttpURLConnectionFactory; +import com.sun.jersey.client.urlconnection.URLConnectionClientHandler; public final class JenkinsExecutorClient { - private static final Logger LOGGER = Logger.getLogger(JenkinsExecutorClient.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(JenkinsExecutorClient.class); private static final List JENKINS_CLIENTS = new ArrayList<>(); private static final Object LOCK = new Object(); @@ -73,7 +79,23 @@ public final class JenkinsExecutorClient { this.baseurl = newBaseurl; ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - this.client = Client.create(clientConfig); + this.client = new Client(new URLConnectionClientHandler(new HttpURLConnectionFactory() { + Proxy proxy = null; + + @Override + public HttpURLConnection getHttpURLConnection(URL url) throws IOException { + try { + String proxyIp = System.getenv("JENKINS_PROXY").substring(0, + System.getenv("JENKINS_PROXY").lastIndexOf(":")); + String proxyPort = System.getenv("JENKINS_PROXY") + .substring(System.getenv("JENKINS_PROXY").lastIndexOf(":") + 1); + proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, Integer.parseInt(proxyPort))); + return (HttpURLConnection) url.openConnection(proxy); + } catch (Exception ex) { + return (HttpURLConnection) url.openConnection(); + } + } + }), clientConfig); this.client.addFilter(new HTTPBasicAuthFilter(user, password)); // Create all-trusting host name verifier hostnameVerifier = new HostnameVerifier() { @@ -130,11 +152,11 @@ public final class JenkinsExecutorClient { public QueueJobItem getQueueJobItem(URL queueJobItemUrl) throws HttpException, ClientHandlerException, UniformInterfaceException, KeyManagementException, NoSuchAlgorithmException { synchronized (LOCK) { - LOGGER.info("Trying to get a Jenkins resource"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Trying to get a Jenkins resource"); String crumb = this.getCrumb(); - LOGGER.debug("Jenkins crumb is: " + crumb); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Jenkins crumb is: " + crumb); WebResource webResource = this.client.resource(queueJobItemUrl + "/api/json"); - LOGGER.debug("Request URI of get: " + webResource.getURI().toString()); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Request URI of get: " + webResource.getURI().toString()); WebResource.Builder builder = webResource.getRequestBuilder(); builder.header("Jenkins-Crumb", crumb); ClientResponse response = @@ -143,7 +165,7 @@ public final class JenkinsExecutorClient { throw new HttpException("Get on Jenkins failed. HTTP error code : " + response.getStatus() + " and message: " + response.getEntity(String.class)); } - LOGGER.info("Get of Jenkins resource succeeded"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Get of Jenkins resource succeeded"); return response.getEntity(QueueJobItem.class); } } @@ -164,9 +186,9 @@ public final class JenkinsExecutorClient { throws HttpException, ClientHandlerException, UniformInterfaceException, MalformedURLException, KeyManagementException, NoSuchAlgorithmException { synchronized (LOCK) { - LOGGER.info("Trying to trigger a job to Jenkins"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Trying to trigger a job in Jenkins"); String crumb = this.getCrumb(); - LOGGER.debug("Jenkins crumb is: " + crumb); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Jenkins crumb is: " + crumb); String queryParams = "?"; for (Parameter parameter : parameters.getParameter()) { queryParams = queryParams + parameter.getName() + "=" + parameter.getValue() + "&"; @@ -174,7 +196,7 @@ public final class JenkinsExecutorClient { queryParams = queryParams.substring(0, queryParams.length() - 1); WebResource webResource = this.client.resource(this.getBaseUrl() + "/job/" + jobName + "/buildWithParameters" + queryParams); - LOGGER.debug("Request URI of post: " + webResource.getURI().toString()); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Request URI of post: " + webResource.getURI().toString()); WebResource.Builder builder = webResource.getRequestBuilder(); builder.header("Jenkins-Crumb", crumb); ClientResponse response = builder.type("application/json").post(ClientResponse.class, String.class); @@ -182,7 +204,7 @@ public final class JenkinsExecutorClient { throw new HttpException("Post of Jenkins job failed. HTTP error code : " + response.getStatus() + " and message: " + response.getEntity(String.class)); } - LOGGER.info("Jenkins job has been successfully triggered"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Jenkins job has been successfully triggered"); URL buildQueueUrl = null; MultivaluedMap responseValues = response.getHeaders(); Iterator iter = responseValues.keySet().iterator(); @@ -198,7 +220,7 @@ public final class JenkinsExecutorClient { private String getCrumb() throws HttpException, ClientHandlerException, UniformInterfaceException, KeyManagementException, NoSuchAlgorithmException { - LOGGER.info("Get crumb attempt"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Attempting to get the crumb"); setProperties(); String crumbUri = baseurl + "/crumbIssuer/api/json"; WebResource webResource = this.client.resource(crumbUri); @@ -206,7 +228,7 @@ public final class JenkinsExecutorClient { webResource.accept("application/json").type("application/json").get(ClientResponse.class); if (response.getStatus() == 201 || response.getStatus() == 200) { CrumbResponse crumbResponse = response.getEntity(CrumbResponse.class); - LOGGER.info("Successful crumb retrieval."); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Successful crumb retrieval"); return crumbResponse.getCrumb(); } throw new HttpException("Get crumb attempt towards Jenkins failed. HTTP error code: " + response.getStatus() diff --git a/ui/src/main/java/org/akraino/validation/ui/client/nexus/NexusExecutorClient.java b/ui/src/main/java/org/akraino/validation/ui/client/nexus/NexusExecutorClient.java index 988685b..a0723c8 100644 --- a/ui/src/main/java/org/akraino/validation/ui/client/nexus/NexusExecutorClient.java +++ b/ui/src/main/java/org/akraino/validation/ui/client/nexus/NexusExecutorClient.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.client.nexus; @@ -35,13 +35,15 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.akraino.validation.ui.client.nexus.resources.RobotTestResult; +import org.akraino.validation.ui.client.nexus.resources.WrapperRobotTestResult; +import org.akraino.validation.ui.data.BlueprintLayer; import org.apache.commons.httpclient.HttpException; -import org.apache.log4j.Logger; import org.json.JSONObject; import org.json.XML; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -61,7 +63,7 @@ import com.sun.jersey.client.urlconnection.URLConnectionClientHandler; public final class NexusExecutorClient { - private static final Logger LOGGER = Logger.getLogger(NexusExecutorClient.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(NexusExecutorClient.class); private final Client client; private final String baseurl; @@ -72,17 +74,19 @@ public final class NexusExecutorClient { this.baseurl = newBaseurl; ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); - client = new Client(new URLConnectionClientHandler(new HttpURLConnectionFactory() { + this.client = new Client(new URLConnectionClientHandler(new HttpURLConnectionFactory() { Proxy proxy = null; @Override public HttpURLConnection getHttpURLConnection(URL url) throws IOException { try { - String proxyIp = System.getenv("proxy_ip"); - String proxyPort = System.getenv("proxy_port"); + String proxyIp = + System.getenv("NEXUS_PROXY").substring(0, System.getenv("NEXUS_PROXY").lastIndexOf(":")); + String proxyPort = + System.getenv("NEXUS_PROXY").substring(System.getenv("NEXUS_PROXY").lastIndexOf(":") + 1); proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, Integer.parseInt(proxyPort))); return (HttpURLConnection) url.openConnection(proxy); - } catch (NumberFormatException ex) { + } catch (Exception ex) { return (HttpURLConnection) url.openConnection(); } } @@ -117,26 +121,54 @@ public final class NexusExecutorClient { return this.baseurl; } - public List getRobotTestResults() throws ClientHandlerException, UniformInterfaceException, + public List getRobotTestResults() throws ClientHandlerException, UniformInterfaceException, JsonParseException, JsonMappingException, IOException, KeyManagementException, NoSuchAlgorithmException { - List robotTestResults = new ArrayList(); - LOGGER.info("Trying to get Robot Test Results"); + List listOfwrappers = new ArrayList(); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Trying to get the blueprint layers"); setProperties(); WebResource webResource = this.client.resource(this.baseurl + "/"); - LOGGER.debug("Request URI of get: " + webResource.getURI().toString()); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Request URI of get: " + webResource.getURI().toString()); ClientResponse response = webResource.get(ClientResponse.class); if (response.getStatus() != 200) { - throw new HttpException("Could not retrieve robot test results from Nexus. HTTP error code : " + throw new HttpException("Could not retrieve blueprint layers from Nexus. HTTP error code : " + response.getStatus() + " and message: " + response.getEntity(String.class)); } Document document = Jsoup.parse(response.getEntity(String.class)); List elements = document.getElementsByTag("body").get(0).getElementsByTag("table").get(0).getElementsByTag("tr"); for (int i = 2; i < elements.size(); i++) { - String resultName = elements.get(i).getElementsByTag("td").get(0).getElementsByTag("a").get(0).text(); - resultName = resultName.substring(0, resultName.length() - 1); - webResource = this.client.resource(this.baseurl + "/" + resultName + "/output.xml"); - LOGGER.debug("Request URI of get: " + webResource.getURI().toString()); + String layer = elements.get(i).getElementsByTag("td").get(0).getElementsByTag("a").get(0).text(); + layer = layer.substring(0, layer.length() - 1); + List robotTestResults = getResultsOfALayer(this.baseurl + "/" + layer); + WrapperRobotTestResult wrapper = new WrapperRobotTestResult(); + wrapper.setBlueprintLayer(BlueprintLayer.valueOf(layer.substring(0, 1).toUpperCase() + layer.substring(1))); + wrapper.setRobotTestResults(robotTestResults); + listOfwrappers.add(wrapper); + } + return listOfwrappers; + } + + private List getResultsOfALayer(String resultsUrl) + throws ClientHandlerException, UniformInterfaceException, JsonParseException, JsonMappingException, + IOException, KeyManagementException, NoSuchAlgorithmException { + List robotTestResults = new ArrayList(); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Trying to get Robot Test Results"); + setProperties(); + WebResource webResource = this.client.resource(resultsUrl + "/"); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Request URI of get: " + webResource.getURI().toString()); + ClientResponse response = webResource.get(ClientResponse.class); + if (response.getStatus() != 200) { + throw new HttpException("Could not retrieve robot test results from Nexus. HTTP error code : " + + response.getStatus() + " and message: " + response.getEntity(String.class)); + } + Document document = Jsoup.parse(response.getEntity(String.class)); + List elements = document.getElementsByTag("body").get(0).getElementsByTag("table").get(0) + .getElementsByTag("tbody").get(0).getElementsByTag("tr"); + for (int i = 2; i < elements.size(); i++) { + String testSuiteName = elements.get(i).getElementsByTag("td").get(0).getElementsByTag("a").get(0).text(); + testSuiteName = testSuiteName.substring(0, testSuiteName.length() - 1); + webResource = this.client.resource(resultsUrl + "/" + testSuiteName + "/output.xml"); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Request URI of get: " + webResource.getURI().toString()); response = webResource.get(ClientResponse.class); if (response.getStatus() != 200) { throw new HttpException("Could not retrieve robot test result from Nexus. HTTP error code : " @@ -147,7 +179,7 @@ public final class NexusExecutorClient { ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); RobotTestResult robotTestResult = mapper.readValue(xmlJSONObj.toString(), RobotTestResult.class); - robotTestResult.setName(resultName); + robotTestResult.setName(testSuiteName); robotTestResults.add(robotTestResult); } return robotTestResults; diff --git a/ui/src/main/java/org/akraino/validation/ui/client/nexus/resources/WrapperRobotTestResult.java b/ui/src/main/java/org/akraino/validation/ui/client/nexus/resources/WrapperRobotTestResult.java new file mode 100644 index 0000000..30e6721 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/client/nexus/resources/WrapperRobotTestResult.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.client.nexus.resources; + +import java.util.List; + +import org.akraino.validation.ui.data.BlueprintLayer; + +public class WrapperRobotTestResult { + + private BlueprintLayer layer; + + private List testResults; + + public WrapperRobotTestResult() { + + } + + public BlueprintLayer getBlueprintLayer() { + return this.layer; + } + + public void setBlueprintLayer(BlueprintLayer layer) { + this.layer = layer; + } + + public List getRobotTestResults() { + return this.testResults; + } + + public void setRobotTestResults(List testResults) { + this.testResults = testResults; + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/common/PropertyUtil.java b/ui/src/main/java/org/akraino/validation/ui/common/PropertyUtil.java deleted file mode 100644 index d0e46b2..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/common/PropertyUtil.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.common; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -import org.akraino.validation.ui.config.AppConfig; -import org.apache.log4j.Logger; - -public class PropertyUtil { - private static final Logger LOGGER = Logger.getLogger(PropertyUtil.class); - private static final String PROP_FILENAME = "app.properties"; - private static PropertyUtil instance; - - private Properties appProps; - - /** - * Return the single instance of this object in the app. - * - * @return the singleton - */ - public static synchronized PropertyUtil getInstance() { - if (instance == null) { - instance = new PropertyUtil(); - } - return instance; - } - - private PropertyUtil() { - InputStream input = AppConfig.class.getClassLoader().getResourceAsStream(PROP_FILENAME); - appProps = new Properties(); - try { - appProps.load(input); - } catch (IOException e) { - LOGGER.error("Error loading properties file: " + PROP_FILENAME); - } finally { - try { - input.close(); - } catch (IOException e) { - // ignore - } - } - } - - /** - * Get a property from the PropertyUtil object. If the environment variable $IP is set, then any URL's referring to - * localhost will be rewritten to use this IP address instead. - * - * @param key the key to use to find the property - * @return the value - */ - public String getProperty(String key) { - String property = appProps.getProperty(key); - if (property != null && property.indexOf("://localhost:") > 0) { - String ipAddr = System.getenv().get("IP"); - if (ipAddr != null && !"".contentEquals(ipAddr)) { - property = property.replaceAll("://localhost:", "://" + ipAddr + ":"); - } - } - return property; - } -} diff --git a/ui/src/main/java/org/akraino/validation/ui/common/SessionManagerFilter.java b/ui/src/main/java/org/akraino/validation/ui/common/SessionManagerFilter.java deleted file mode 100644 index e0ddd91..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/common/SessionManagerFilter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.common; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.log4j.Logger; -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -public class SessionManagerFilter implements HandlerInterceptor { - - private static final Logger LOGGER = Logger.getLogger(SessionManagerFilter.class); - - @Override - public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) - throws Exception { - - LOGGER.info("user authenticated"); - - } - - @Override - public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) - throws Exception { - - LOGGER.info("user authenticated"); - - } - - @Override - public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object data) throws Exception { - - try { - return true; - /* - * if (StringUtil.notEmpty(req.getHeader("tokenId"))) { - * - * String clientToken = req.getHeader("tokenId"); - * - * AccessService service = new AccessService(); - * - * UserSession user = service.getUserSession(LoginUtil.decode(LoginUtil.getUserName(clientToken))); - * - * if (user.getTokenId()!= null && !sessionExpired(user)) { - * - * if (user.getTokenId().equals(LoginUtil.getPassword(clientToken))) { // user authorized return true; - * - * } else { // unauthorized access res.sendError(401); } } else { // session does not exist/expired, - * temporary re-direct, ask user to re-login res.sendError(307); } - * - * } else { // bad request, no authToken sent in the request res.sendError(400); } - */ - } catch (Exception e) { - LOGGER.error(e); - } - - - return false; - } - - -} diff --git a/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppConfig.java b/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppConfig.java new file mode 100644 index 0000000..bb139f6 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppConfig.java @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.conf; + +import java.util.ArrayList; +import java.util.List; + +import javax.sql.DataSource; + +import org.akraino.validation.ui.login.LoginStrategyImpl; +import org.akraino.validation.ui.scheduler.RegistryAdapter; +import org.onap.portalapp.music.conf.MusicSessionConfig; +import org.onap.portalsdk.core.auth.LoginStrategy; +import org.onap.portalsdk.core.conf.AppConfig; +import org.onap.portalsdk.core.conf.Configurable; +import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum; +import org.onap.portalsdk.core.logging.format.AppMessagesEnum; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.objectcache.AbstractCacheManager; +import org.onap.portalsdk.core.onboarding.util.CipherUtil; +import org.onap.portalsdk.core.service.DataAccessService; +import org.onap.portalsdk.core.util.CacheManager; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.portalsdk.core.web.support.UserUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Profile; +import org.springframework.context.annotation.PropertySource; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; + +import com.mchange.v2.c3p0.ComboPooledDataSource; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = {"org.akraino", "org.onap"}) +@PropertySource(value = {"${container.classpath:}/WEB-INF/conf/app/test.properties"}, ignoreResourceNotFound = true) +@Profile("src") +@EnableAsync +@EnableScheduling +@Import({MusicSessionConfig.class}) +public class ExternalAppConfig extends AppConfig implements Configurable { + + private RegistryAdapter schedulerRegistryAdapter; + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(ExternalAppConfig.class); + + @Configuration + @Import(SystemProperties.class) + static class InnerConfiguration { + } + + /** + * @see org.onap.portalsdk.core.conf.AppConfig#viewResolver() + */ + @Override + public ViewResolver viewResolver() { + return super.viewResolver(); + } + + /** + * @see org.onap.portalsdk.core.conf.AppConfig#addResourceHandlers(ResourceHandlerRegistry) + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + super.addResourceHandlers(registry); + } + + /** + * @see org.onap.portalsdk.core.conf.AppConfig#dataAccessService() + */ + @Override + public DataAccessService dataAccessService() { + return super.dataAccessService(); + } + + /** + * + * Creates the Application Data Source. + * + * @return DataSource Object + * @throws Exception on failure to create data source object + */ + @Override + @Bean + public DataSource dataSource() throws Exception { + + systemProperties(); + + ComboPooledDataSource dataSource = new ComboPooledDataSource(); + try { + dataSource.setDriverClass(SystemProperties.getProperty(SystemProperties.DB_DRIVER)); + dataSource.setJdbcUrl("jdbc:mariadb://" + System.getenv("DB_CONNECTION_URL")); + dataSource.setUser(SystemProperties.getProperty(SystemProperties.DB_USERNAME)); + String password = System.getenv("MARIADB_ROOT_PASSWORD"); + if (SystemProperties.containsProperty(SystemProperties.DB_ENCRYPT_FLAG)) { + String encryptFlag = SystemProperties.getProperty(SystemProperties.DB_ENCRYPT_FLAG); + if (encryptFlag != null && encryptFlag.equalsIgnoreCase("true")) { + password = CipherUtil.decrypt(password); + } + } + dataSource.setPassword(password); + dataSource + .setMinPoolSize(Integer.parseInt(SystemProperties.getProperty(SystemProperties.DB_MIN_POOL_SIZE))); + dataSource + .setMaxPoolSize(Integer.parseInt(SystemProperties.getProperty(SystemProperties.DB_MAX_POOL_SIZE))); + dataSource.setIdleConnectionTestPeriod( + Integer.parseInt(SystemProperties.getProperty(SystemProperties.IDLE_CONNECTION_TEST_PERIOD))); + dataSource.setTestConnectionOnCheckout(getConnectionOnCheckout()); + dataSource.setPreferredTestQuery(getPreferredTestQuery()); + } catch (Exception e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error initializing database, verify database settings in properties file: " + + UserUtils.getStackTrace(e), + AlarmSeverityEnum.CRITICAL); + LOGGER.error(EELFLoggerDelegate.debugLogger, + "Error initializing database, verify database settings in properties file: " + + UserUtils.getStackTrace(e), + AlarmSeverityEnum.CRITICAL); + // Raise an alarm that opening a connection to the database failed. + LOGGER.logEcompError(AppMessagesEnum.BeDaoSystemError); + throw e; + } + return dataSource; + } + + /** + * Creates a new list with a single entry that is the external app + * definitions.xml path. + * + * @return List of String, size 1 + */ + @Override + public List addTileDefinitions() { + List definitions = new ArrayList<>(); + definitions.add("/WEB-INF/defs/definitions.xml"); + return definitions; + } + + /** + * Adds request interceptors to the specified registry by calling + * {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes + * certain paths from the session timeout interceptor. + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm", + "/api*", "/single_signon.htm", "/single_signon"); + super.addInterceptors(registry); + } + + /** + * Creates and returns a new instance of a {@link CacheManager} class. + * + * @return New instance of {@link CacheManager} + */ + @Bean + public AbstractCacheManager cacheManager() { + return new CacheManager(); + } + + /** + * Creates and returns a new instance of a {@link SchedulerFactoryBean} + * and populates it with triggers. + * + * @return New instance of {@link SchedulerFactoryBean} + * @throws Exception + */ + // @Bean // ANNOTATION COMMENTED OUT + // APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION + public SchedulerFactoryBean schedulerFactoryBean() throws Exception { + SchedulerFactoryBean scheduler = new SchedulerFactoryBean(); + scheduler.setTriggers(schedulerRegistryAdapter.getTriggers()); + scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties")); + scheduler.setDataSource(dataSource()); + return scheduler; + } + + /** + * Sets the scheduler registry adapter. + * + * @param schedulerRegistryAdapter + */ + @Autowired + public void setSchedulerRegistryAdapter(final RegistryAdapter schedulerRegistryAdapter) { + this.schedulerRegistryAdapter = schedulerRegistryAdapter; + } + + @Bean + public LoginStrategy loginStrategy() { + return new LoginStrategyImpl(); + } + + /** + * Gets the value of the property + * {@link SystemProperties#PREFERRED_TEST_QUERY}; defaults to "Select 1" + * if the property is not defined. + * + * @return String value that is a SQL query + */ + private String getPreferredTestQuery() { + // Use simple default + String preferredTestQueryStr = "SELECT 1"; + if (SystemProperties.containsProperty(SystemProperties.PREFERRED_TEST_QUERY)) { + preferredTestQueryStr = SystemProperties.getProperty(SystemProperties.PREFERRED_TEST_QUERY); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "getPreferredTestQuery: property key {} value is {}", + SystemProperties.PREFERRED_TEST_QUERY, preferredTestQueryStr); + } else { + LOGGER.info(EELFLoggerDelegate.errorLogger, + "getPreferredTestQuery: property key {} not found, using default value {}", + SystemProperties.PREFERRED_TEST_QUERY, preferredTestQueryStr); + } + return preferredTestQueryStr; + } + + /** + * Gets the value of the property + * {@link SystemProperties#TEST_CONNECTION_ON_CHECKOUT}; defaults to true + * if the property is not defined. + * + * @return Boolean value + */ + private Boolean getConnectionOnCheckout() { + // Default to true, always test connection + boolean testConnectionOnCheckout = true; + if (SystemProperties.containsProperty(SystemProperties.TEST_CONNECTION_ON_CHECKOUT)) { + testConnectionOnCheckout = + Boolean.valueOf(SystemProperties.getProperty(SystemProperties.TEST_CONNECTION_ON_CHECKOUT)); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "getConnectionOnCheckout: property key {} value is {}", + SystemProperties.TEST_CONNECTION_ON_CHECKOUT, testConnectionOnCheckout); + } else { + LOGGER.info(EELFLoggerDelegate.errorLogger, + "getConnectionOnCheckout: property key {} not found, using default value {}", + SystemProperties.TEST_CONNECTION_ON_CHECKOUT, testConnectionOnCheckout); + } + return testConnectionOnCheckout; + } +} diff --git a/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppInitializer.java b/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppInitializer.java new file mode 100644 index 0000000..c50d1b3 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/conf/ExternalAppInitializer.java @@ -0,0 +1,63 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); you may not use + * this software 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. + * + * Unless otherwise specified, all documentation contained herein is + * licensed under the Creative Commons License, Attribution 4.0 Intl. (the + * "License"); you may not use this documentation except in compliance + * with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, + * documentation 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. + * + * ============LICENSE_END============================================ + * + * + */ +package org.akraino.validation.ui.conf; + +import org.onap.portalsdk.core.conf.AppInitializer; + +public class ExternalAppInitializer extends AppInitializer { + + @Override + protected Class[] getRootConfigClasses() { + return super.getRootConfigClasses(); + } + + @Override + protected Class[] getServletConfigClasses() { + Class appConfigClass = ExternalAppConfig.class; + return new Class[] {appConfigClass}; + } + + /* + * URL request will direct to the Spring dispatcher for processing + */ + @Override + protected String[] getServletMappings() { + return super.getServletMappings(); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/conf/HibernateMappingLocations.java b/ui/src/main/java/org/akraino/validation/ui/conf/HibernateMappingLocations.java new file mode 100644 index 0000000..d14646f --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/conf/HibernateMappingLocations.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.conf; + + +import org.onap.portalsdk.core.conf.HibernateMappingLocatable; +import org.springframework.context.annotation.Profile; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +@Component +@Profile("src") +public class HibernateMappingLocations implements HibernateMappingLocatable { + + @Override + public Resource[] getMappingLocations() { + return new Resource[] {new ClassPathResource("../fusion/orm/Fusion.hbm.xml"), + new ClassPathResource("../fusion/orm/Workflow.hbm.xml"), + new ClassPathResource("../fusion/orm/RNoteBookIntegration.hbm.xml"), + new ClassPathResource("../fusion/orm/Analytics.hbm.xml")}; + } + + @Override + public String[] getPackagesToScan() { + return new String[] {"org.onap", "org.akraino"}; + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/config/AppInitializer.java b/ui/src/main/java/org/akraino/validation/ui/conf/UiUtils.java similarity index 55% rename from ui/src/main/java/org/akraino/validation/ui/config/AppInitializer.java rename to ui/src/main/java/org/akraino/validation/ui/conf/UiUtils.java index d79b2ae..7ef8234 100644 --- a/ui/src/main/java/org/akraino/validation/ui/config/AppInitializer.java +++ b/ui/src/main/java/org/akraino/validation/ui/conf/UiUtils.java @@ -1,19 +1,19 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ -package org.akraino.validation.ui.config; +package org.akraino.validation.ui.conf; import java.lang.reflect.Field; import java.util.Comparator; @@ -22,15 +22,7 @@ import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; - -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -public class AppInitializer implements WebApplicationInitializer { +public class UiUtils { private static final int QUEUE_CAPACITY = 500; private static final int EXECUTOR_SIZE = 20; // the number of threads to keep in the pool, even if @@ -43,29 +35,15 @@ public class AppInitializer implements WebApplicationInitializer { // terminating. private static final PriorityBlockingQueue BLOCKING_QUEUE = new PriorityBlockingQueue(QUEUE_CAPACITY, new CFRunnableComparator()); - public static ExecutorService executorService = new ThreadPoolExecutor(EXECUTOR_SIZE, - EXECUTOR_MAX_SIZE, KEEPALIVE_TIME, TimeUnit.SECONDS, BLOCKING_QUEUE); - - @Override - public void onStartup(ServletContext container) throws ServletException { - - AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); - ctx.register(AppConfig.class); - ctx.setServletContext(container); + public static ExecutorService executorService = + new ThreadPoolExecutor(EXECUTOR_SIZE, EXECUTOR_MAX_SIZE, KEEPALIVE_TIME, TimeUnit.SECONDS, BLOCKING_QUEUE); - ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx)); - - servlet.setLoadOnStartup(1); - servlet.addMapping("/"); - - } + public static final String NEXUS_URL = "https://nexus.akraino.org/content/sites/logs"; private static class CFRunnableComparator implements Comparator { @Override @SuppressWarnings("unchecked") public int compare(Runnable runnable1, Runnable runnable2) { - // T might be AsyncSupply, UniApply, etc., but we want to - // compare our original Runnables. return ((Comparable) unwrap(runnable1)).compareTo(unwrap(runnable2)); } @@ -73,8 +51,6 @@ public class AppInitializer implements WebApplicationInitializer { try { Field field = runnable.getClass().getDeclaredField("fn"); field.setAccessible(true); - // NB: For performance-intensive contexts, you may want to - // cache these in a ConcurrentHashMap, Field>. return field.get(runnable); } catch (IllegalAccessException | NoSuchFieldException e) { throw new IllegalArgumentException("Couldn't unwrap " + runnable, e); diff --git a/ui/src/main/java/org/akraino/validation/ui/config/AppConfig.java b/ui/src/main/java/org/akraino/validation/ui/config/AppConfig.java deleted file mode 100644 index 6d55d42..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/config/AppConfig.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.config; - -import javax.sql.DataSource; - -import org.akraino.validation.ui.common.PropertyUtil; -import org.akraino.validation.ui.common.SessionManagerFilter; -import org.apache.commons.dbcp.BasicDataSource; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.multipart.commons.CommonsMultipartResolver; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -@ComponentScan(basePackages = "org.akraino.validation.ui") -public class AppConfig extends WebMvcConfigurerAdapter { - - @Bean - SessionManagerFilter getSessionManager() { - return new SessionManagerFilter(); - } - - @Override - public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(getSessionManager()).addPathPatterns("/**").excludePathPatterns("/login", "/logout"); - - } - - @Bean - public CommonsMultipartResolver multipartResolver() { - - CommonsMultipartResolver cmr = new CommonsMultipartResolver(); - cmr.setMaxUploadSize(1000000 * 2); - cmr.setMaxUploadSizePerFile(2000000); // bytes - return cmr; - - } - - @Bean(name = "dataSource") - public DataSource getDataSource() { - BasicDataSource dataSource = new BasicDataSource(); - dataSource.setDriverClassName("org.postgresql.Driver"); - dataSource.setUrl(PropertyUtil.getInstance().getProperty("postgres.db.url")); - dataSource.setUsername(PropertyUtil.getInstance().getProperty("postgres.db.user.name")); - dataSource.setPassword(System.getenv("postgres_db_user_pwd")); - - return dataSource; - } - -} diff --git a/ui/src/main/java/org/akraino/validation/ui/config/HibernateConfig.java b/ui/src/main/java/org/akraino/validation/ui/config/HibernateConfig.java deleted file mode 100644 index 03a91be..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/config/HibernateConfig.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.config; - -import java.util.Properties; - -import javax.sql.DataSource; - -import org.hibernate.SessionFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.orm.hibernate5.HibernateTransactionManager; -import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@EnableTransactionManagement -@PropertySource(value = {"classpath:hibernate.properties"}) -public class HibernateConfig { - - @Autowired - private Environment env; - - @Autowired - @Bean(name = "sessionFactory") - public SessionFactory getSessionFactory(DataSource dataSource) { - LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource); - - sessionBuilder.scanPackages("org.akraino.validation.ui.entity"); - sessionBuilder.addProperties(hibernateProperties()); - - return sessionBuilder.buildSessionFactory(); - - } - - @Autowired - @Bean(name = "transactionManager") - public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) { - - return new HibernateTransactionManager(sessionFactory); - - } - - private Properties hibernateProperties() { - - Properties properties = new Properties(); - - properties.put("hibernate.dialect", env.getProperty("hibernate.dialect")); - properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql")); - properties.put("hibernate.c3p0.min_size", env.getProperty("hibernate.c3p0.min_size")); - properties.put("hibernate.c3p0.max_size", env.getProperty("hibernate.c3p0.max_size")); - properties.put("hibernate.c3p0.max_statements", env.getProperty("hibernate.c3p0.max_statements")); - properties.put("hibernate.c3p0.acquire_increment", env.getProperty("hibernate.c3p0.acquire_increment")); - properties.put("hibernate.jdbc.use_streams_for_binary", - env.getProperty("hibernate.jdbc.use_streams_for_binary")); - - return properties; - } -} diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintController.java b/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintController.java index 22ae510..fdc6449 100644 --- a/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintController.java +++ b/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintController.java @@ -13,37 +13,44 @@ * implied. See the License for the specific language governing * permissions and limitations under the License. */ + package org.akraino.validation.ui.controller; import java.util.List; import org.akraino.validation.ui.entity.Blueprint; import org.akraino.validation.ui.service.BlueprintService; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; -@RestController +@Controller @RequestMapping("/api/blueprint") -public class BlueprintController { +public class BlueprintController extends RestrictedBaseController { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(BlueprintController.class); @Autowired BlueprintService service; - private static final Logger LOGGER = Logger.getLogger(BlueprintController.class); + public BlueprintController() { + super(); + } - @GetMapping("/") + @RequestMapping(value = {"/"}, method = RequestMethod.GET) public ResponseEntity> getBlueprints() { try { return new ResponseEntity<>(service.getBlueprints(), HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error when trying to get blueprints. " + UserUtils.getStackTrace(e)); } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } - } diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceController.java b/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceController.java deleted file mode 100644 index 6acdba8..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceController.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.controller; - -import java.util.List; - -import org.akraino.validation.ui.entity.BlueprintInstance; -import org.akraino.validation.ui.service.BlueprintInstanceService; -import org.apache.log4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/blueprintInstance") -public class BlueprintInstanceController { - - @Autowired - BlueprintInstanceService service; - - private static final Logger LOGGER = Logger.getLogger(BlueprintInstanceController.class); - - @GetMapping("/") - public ResponseEntity> getBlueprintInstances() { - try { - return new ResponseEntity<>(service.getBlueprintInstances(), HttpStatus.OK); - } catch (Exception e) { - LOGGER.error(e); - } - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); - } - -} diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceForValidationController.java b/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceForValidationController.java new file mode 100644 index 0000000..749fb75 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/controller/BlueprintInstanceForValidationController.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +package org.akraino.validation.ui.controller; + +import java.util.List; + +import org.akraino.validation.ui.entity.BlueprintInstanceForValidation; +import org.akraino.validation.ui.service.BlueprintInstanceForValidationService; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +@RequestMapping("/api/blueprintInstanceForValidation") +public class BlueprintInstanceForValidationController extends RestrictedBaseController { + + private static final EELFLoggerDelegate LOGGER = + EELFLoggerDelegate.getLogger(BlueprintInstanceForValidationController.class); + + @Autowired + BlueprintInstanceForValidationService service; + + public BlueprintInstanceForValidationController() { + super(); + } + + @RequestMapping(value = {"/"}, method = RequestMethod.GET) + public ResponseEntity> getBlueprintInstancesForValidation() { + try { + return new ResponseEntity<>(service.getBlueprintInstancesForValidation(), HttpStatus.OK); + } catch (Exception e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error when trying to get blueprint instances for validation. " + UserUtils.getStackTrace(e)); + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/JenkinsJobNotificationController.java b/ui/src/main/java/org/akraino/validation/ui/controller/JenkinsJobNotificationController.java index 1c0b3bc..79bedb1 100644 --- a/ui/src/main/java/org/akraino/validation/ui/controller/JenkinsJobNotificationController.java +++ b/ui/src/main/java/org/akraino/validation/ui/controller/JenkinsJobNotificationController.java @@ -1,47 +1,55 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.controller; import org.akraino.validation.ui.data.JnksJobNotify; import org.akraino.validation.ui.service.JenkinsJobNotificationService; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; -@RestController +@Controller @RequestMapping("/api/jenkinsJobNotification") -public class JenkinsJobNotificationController { +public class JenkinsJobNotificationController extends RestrictedBaseController { @Autowired JenkinsJobNotificationService service; - private static final Logger LOGGER = Logger.getLogger(JenkinsJobNotificationController.class); + private static final EELFLoggerDelegate LOGGER = + EELFLoggerDelegate.getLogger(JenkinsJobNotificationController.class); - @PostMapping("/") + public JenkinsJobNotificationController() { + super(); + } + + @RequestMapping(value = {"/"}, method = RequestMethod.POST) public ResponseEntity handle(@RequestBody JnksJobNotify jnksJobNotify) { try { service.handle(jnksJobNotify); return new ResponseEntity(HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error when trying to process Jenkins notification. " + UserUtils.getStackTrace(e)); } return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); } diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/ModelsViewsController.java b/ui/src/main/java/org/akraino/validation/ui/controller/ModelsViewsController.java new file mode 100644 index 0000000..430f169 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/controller/ModelsViewsController.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +package org.akraino.validation.ui.controller; + +import javax.servlet.http.HttpServletRequest; + +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +@Controller +@RequestMapping("/") +public class ModelsViewsController extends RestrictedBaseController { + + public ModelsViewsController() { + super(); + } + + @RequestMapping(value = {"/newSubmission"}, method = RequestMethod.GET) + public ModelAndView newSubmission(HttpServletRequest request) { + final String defaultViewName = null; + return new ModelAndView(defaultViewName); + } + + @RequestMapping(value = {"/committedSubmissions"}, method = RequestMethod.GET) + public ModelAndView committedSubmissions(HttpServletRequest request) { + final String defaultViewName = null; + return new ModelAndView(defaultViewName); + } + + @RequestMapping(value = {"/getBySubmissionId"}, method = RequestMethod.GET) + public ModelAndView getBySubmissionId(HttpServletRequest request) { + final String defaultViewName = null; + return new ModelAndView(defaultViewName); + } +} diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/OnapLoginController.java b/ui/src/main/java/org/akraino/validation/ui/controller/OnapLoginController.java new file mode 100644 index 0000000..09ee1a2 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/controller/OnapLoginController.java @@ -0,0 +1,76 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); you may not use + * this software 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. + * + * Unless otherwise specified, all documentation contained herein is + * licensed under the Creative Commons License, Attribution 4.0 Intl. (the + * "License"); you may not use this documentation except in compliance + * with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, + * documentation 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. + * + * ============LICENSE_END============================================ + * + * + */ + +package org.akraino.validation.ui.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.onap.portalsdk.core.auth.LoginStrategy; +import org.onap.portalsdk.core.controller.UnRestrictedBaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +@Controller +@RequestMapping("/") +public class OnapLoginController extends UnRestrictedBaseController { + + @Autowired + private LoginStrategy loginStrategy; + + private String viewName; + + @Override + public String getViewName() { + return viewName; + } + + @Override + public void setViewName(String viewName) { + this.viewName = viewName; + } + + @RequestMapping(value = {"/do_login_external"}, method = RequestMethod.POST) + public ModelAndView doexternalLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { + return loginStrategy.doLogin(request, response); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/ResultsController.java b/ui/src/main/java/org/akraino/validation/ui/controller/ResultsController.java index 3013948..a4b460d 100644 --- a/ui/src/main/java/org/akraino/validation/ui/controller/ResultsController.java +++ b/ui/src/main/java/org/akraino/validation/ui/controller/ResultsController.java @@ -1,47 +1,55 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.controller; import java.util.List; -import org.akraino.validation.ui.client.nexus.resources.RobotTestResult; +import org.akraino.validation.ui.client.nexus.resources.WrapperRobotTestResult; import org.akraino.validation.ui.service.ResultService; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; -@RestController +@Controller @RequestMapping("/api/results") -public class ResultsController { +public class ResultsController extends RestrictedBaseController { - private static final Logger LOGGER = Logger.getLogger(ResultsController.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(ResultsController.class); @Autowired ResultService service; - @RequestMapping(value = "/findBySubmissionId/{id}") - public ResponseEntity> findByBlueprintId(@PathVariable("id") String submissionId) { + public ResultsController() { + super(); + } + + @RequestMapping(value = {"/getBySubmissionId/{id}"}, method = RequestMethod.GET) + public ResponseEntity> getByBlueprintId(@PathVariable("id") String submissionId) { try { return new ResponseEntity<>(service.getRobotTestResults(submissionId), HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error when retrieving results. " + UserUtils.getStackTrace(e)); } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/SubmissionController.java b/ui/src/main/java/org/akraino/validation/ui/controller/SubmissionController.java index ca78b0d..bb898a9 100644 --- a/ui/src/main/java/org/akraino/validation/ui/controller/SubmissionController.java +++ b/ui/src/main/java/org/akraino/validation/ui/controller/SubmissionController.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.controller; @@ -19,55 +19,60 @@ import java.util.List; import org.akraino.validation.ui.entity.Submission; import org.akraino.validation.ui.service.SubmissionService; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; -@RestController +@Controller @RequestMapping("/api/submission") -public class SubmissionController { +public class SubmissionController extends RestrictedBaseController { @Autowired SubmissionService service; - private static final Logger LOGGER = Logger.getLogger(SubmissionController.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(SubmissionController.class); - @GetMapping("/") + public SubmissionController() { + super(); + } + + @RequestMapping(value = {"/"}, method = RequestMethod.GET) public ResponseEntity> getSubmissions() { try { return new ResponseEntity<>(service.getSubmissions(), HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, "Get of submissions failed. " + UserUtils.getStackTrace(e)); } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } - @PostMapping("/") + @RequestMapping(value = {"/"}, method = RequestMethod.POST) public ResponseEntity postSubmission(@RequestBody Submission newSubmission) { try { - return new ResponseEntity<>(service.saveSubmission(newSubmission), HttpStatus.CREATED); + return new ResponseEntity<>(service.saveSubmission(newSubmission), HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, "Post of submission failed. " + UserUtils.getStackTrace(e)); } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } - @DeleteMapping("/") + @RequestMapping(value = {"/"}, method = RequestMethod.DELETE) public ResponseEntity deleteSubmission(@RequestBody Submission submission) { try { service.deleteSubmission(submission.getSubmissionId()); return new ResponseEntity<>(true, HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Deletion of submission failed. " + UserUtils.getStackTrace(e)); } - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(false); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } diff --git a/ui/src/main/java/org/akraino/validation/ui/controller/TimeSlotsController.java b/ui/src/main/java/org/akraino/validation/ui/controller/TimeslotsController.java similarity index 51% rename from ui/src/main/java/org/akraino/validation/ui/controller/TimeSlotsController.java rename to ui/src/main/java/org/akraino/validation/ui/controller/TimeslotsController.java index d6da8a9..0f4f8d1 100644 --- a/ui/src/main/java/org/akraino/validation/ui/controller/TimeSlotsController.java +++ b/ui/src/main/java/org/akraino/validation/ui/controller/TimeslotsController.java @@ -1,49 +1,56 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ + package org.akraino.validation.ui.controller; import java.util.List; import org.akraino.validation.ui.entity.Timeslot; import org.akraino.validation.ui.service.TimeslotService; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; -@RestController +@Controller @RequestMapping("/api/timeslots") -public class TimeSlotsController { +public class TimeslotsController extends RestrictedBaseController { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(TimeslotsController.class); @Autowired TimeslotService service; - private static final Logger LOGGER = Logger.getLogger(TimeSlotsController.class); + public TimeslotsController() { + super(); + } - @GetMapping("/") + @RequestMapping(value = {"/"}, method = RequestMethod.GET) public ResponseEntity> getTimeSlots() { try { return new ResponseEntity<>(service.getTimeslots(), HttpStatus.OK); } catch (Exception e) { - LOGGER.error(e); + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error occured when trying to retrieve timeslots. " + UserUtils.getStackTrace(e)); } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } - } diff --git a/ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceForValidationDAO.java b/ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceForValidationDAO.java new file mode 100644 index 0000000..736d121 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceForValidationDAO.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.dao; + +import java.util.List; + +import org.akraino.validation.ui.entity.BlueprintInstanceForValidation; + +public interface BlueprintInstanceForValidationDAO { + + void saveOrUpdate(BlueprintInstanceForValidation blueprintInst); + + void merge(BlueprintInstanceForValidation blueprintInst); + + List getBlueprintInstancesForValidation(); + + BlueprintInstanceForValidation getBlueprintInstanceForValidation(Integer instId); + + void deleteBlueprintInstanceForValidation(BlueprintInstanceForValidation blueprintInst); + + void deleteAll(); + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceDAO.java b/ui/src/main/java/org/akraino/validation/ui/dao/LabDAO.java similarity index 64% rename from ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceDAO.java rename to ui/src/main/java/org/akraino/validation/ui/dao/LabDAO.java index 5093681..918c73f 100644 --- a/ui/src/main/java/org/akraino/validation/ui/dao/BlueprintInstanceDAO.java +++ b/ui/src/main/java/org/akraino/validation/ui/dao/LabDAO.java @@ -17,19 +17,19 @@ package org.akraino.validation.ui.dao; import java.util.List; -import org.akraino.validation.ui.entity.BlueprintInstance; +import org.akraino.validation.ui.entity.LabInfo; -public interface BlueprintInstanceDAO { +public interface LabDAO { - void saveOrUpdate(BlueprintInstance blueprintInstance); + void saveOrUpdate(LabInfo lab); - void merge(BlueprintInstance blueprintInstance); + void merge(LabInfo lab); - List getBlueprintInstances(); + List getLabs(); - BlueprintInstance getBlueprintInstance(Integer instId); + LabInfo getLab(Integer labId); - void deleteBlueprintInstance(BlueprintInstance blueprintInstance); + void deleteLab(LabInfo lab); void deleteAll(); diff --git a/ui/src/main/java/org/akraino/validation/ui/dao/SiloDAO.java b/ui/src/main/java/org/akraino/validation/ui/dao/SiloDAO.java new file mode 100644 index 0000000..883fa82 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/dao/SiloDAO.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.dao; + +import java.util.List; + +import org.akraino.validation.ui.entity.LabSilo; + +public interface SiloDAO { + + void saveOrUpdate(LabSilo silo); + + void merge(LabSilo silo); + + List getSilos(); + + LabSilo getSilo(Integer siloId); + + void deleteSilo(LabSilo silo); + + void deleteAll(); + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/dao/SubmissionDAO.java b/ui/src/main/java/org/akraino/validation/ui/dao/SubmissionDAO.java index fc5e84f..7e551d7 100644 --- a/ui/src/main/java/org/akraino/validation/ui/dao/SubmissionDAO.java +++ b/ui/src/main/java/org/akraino/validation/ui/dao/SubmissionDAO.java @@ -1,14 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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. + * 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. */ package org.akraino.validation.ui.dao; diff --git a/ui/src/main/java/org/akraino/validation/ui/dao/TimeslotDAO.java b/ui/src/main/java/org/akraino/validation/ui/dao/TimeslotDAO.java index c4dbbe1..a62d3b1 100644 --- a/ui/src/main/java/org/akraino/validation/ui/dao/TimeslotDAO.java +++ b/ui/src/main/java/org/akraino/validation/ui/dao/TimeslotDAO.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.dao; diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintDAOImpl.java index 5466c13..771c327 100644 --- a/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintDAOImpl.java +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintDAOImpl.java @@ -1,40 +1,36 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.daoimpl; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - import org.akraino.validation.ui.dao.BlueprintDAO; import org.akraino.validation.ui.entity.Blueprint; -import org.apache.log4j.Logger; +import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.query.Query; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class BlueprintDAOImpl implements BlueprintDAO { - private static final Logger LOGGER = Logger.getLogger(BlueprintDAOImpl.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(BlueprintDAOImpl.class); @Autowired private SessionFactory sessionFactory; @@ -45,54 +41,36 @@ public class BlueprintDAOImpl implements BlueprintDAO { @Override public List getBlueprints() { - - CriteriaBuilder builder = getSession().getCriteriaBuilder(); - CriteriaQuery criteria = builder.createQuery(Blueprint.class); - - Root root = criteria.from(Blueprint.class); - criteria.select(root); - - Query query = getSession().createQuery(criteria); - - return query.getResultList(); - + Criteria criteria = getSession().createCriteria(Blueprint.class); + return criteria.list(); } @Override public Blueprint getBlueprint(Integer blueprintId) { - - EntityManager entityManager = getSession().getEntityManagerFactory().createEntityManager(); - - return entityManager.find(Blueprint.class, blueprintId); + Criteria criteria = getSession().createCriteria(Blueprint.class); + criteria.add(Restrictions.eq("id", String.valueOf(blueprintId))); + return criteria.list() == null ? null : (Blueprint) criteria.list().get(0); } @Override public void saveOrUpdate(Blueprint blueprint) { getSession().saveOrUpdate(blueprint); - } @Override public void merge(Blueprint blueprint) { getSession().merge(blueprint); - } @Override public void deleteBlueprint(Blueprint blueprint) { getSession().delete(blueprint); - } @Override public void deleteAll() { - - Query query = getSession().createQuery("delete from Blueprint"); - - int result = query.executeUpdate(); - - if (result > 0) { - LOGGER.info("All blueprint entries are cleaned up"); + if (getSession().createQuery("delete from Blueprint").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, "All blueprint entries are cleaned up"); } } diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceDAOImpl.java deleted file mode 100644 index 4bacb14..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceDAOImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.daoimpl; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - -import org.akraino.validation.ui.dao.BlueprintInstanceDAO; -import org.akraino.validation.ui.entity.BlueprintInstance; -import org.apache.log4j.Logger; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.query.Query; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; - -@Repository -public class BlueprintInstanceDAOImpl implements BlueprintInstanceDAO { - - private static final Logger LOGGER = Logger.getLogger(BlueprintInstanceDAOImpl.class); - - @Autowired - private SessionFactory sessionFactory; - - protected Session getSession() { - return sessionFactory.getCurrentSession(); - } - - @Override - public List getBlueprintInstances() { - - CriteriaBuilder builder = getSession().getCriteriaBuilder(); - CriteriaQuery criteria = builder.createQuery(BlueprintInstance.class); - - Root root = criteria.from(BlueprintInstance.class); - criteria.select(root); - - Query query = getSession().createQuery(criteria); - - return query.getResultList(); - - } - - @Override - public BlueprintInstance getBlueprintInstance(Integer instId) { - - EntityManager entityManager = getSession().getEntityManagerFactory().createEntityManager(); - - return entityManager.find(BlueprintInstance.class, instId); - } - - @Override - public void saveOrUpdate(BlueprintInstance blueprintInstance) { - getSession().saveOrUpdate(blueprintInstance); - - } - - @Override - public void merge(BlueprintInstance blueprintInstance) { - getSession().merge(blueprintInstance); - - } - - @Override - public void deleteBlueprintInstance(BlueprintInstance blueprintInstance) { - getSession().delete(blueprintInstance); - - } - - @Override - public void deleteAll() { - - Query query = getSession().createQuery("delete from BlueprintInstance"); - - int result = query.executeUpdate(); - - if (result > 0) { - LOGGER.info("All blueprint instance entries are cleaned up"); - } - } - -} diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceForValidationDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceForValidationDAOImpl.java new file mode 100644 index 0000000..7c51b69 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/BlueprintInstanceForValidationDAOImpl.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.daoimpl; + +import java.util.List; + +import org.akraino.validation.ui.dao.BlueprintInstanceForValidationDAO; +import org.akraino.validation.ui.entity.BlueprintInstanceForValidation; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class BlueprintInstanceForValidationDAOImpl implements BlueprintInstanceForValidationDAO { + + private static final EELFLoggerDelegate LOGGER = + EELFLoggerDelegate.getLogger(BlueprintInstanceForValidationDAOImpl.class); + + @Autowired + private SessionFactory sessionFactory; + + protected Session getSession() { + return sessionFactory.getCurrentSession(); + } + + @Override + public List getBlueprintInstancesForValidation() { + Criteria criteria = getSession().createCriteria(BlueprintInstanceForValidation.class); + return criteria.list(); + } + + @Override + public BlueprintInstanceForValidation getBlueprintInstanceForValidation(Integer instId) { + Criteria criteria = getSession().createCriteria(BlueprintInstanceForValidation.class); + criteria.add(Restrictions.eq("id", String.valueOf(instId))); + return criteria.list() == null ? null : (BlueprintInstanceForValidation) criteria.list().get(0); + } + + @Override + public void saveOrUpdate(BlueprintInstanceForValidation blueprintInst) { + getSession().saveOrUpdate(blueprintInst); + } + + @Override + public void merge(BlueprintInstanceForValidation blueprintInst) { + getSession().merge(blueprintInst); + } + + @Override + public void deleteBlueprintInstanceForValidation(BlueprintInstanceForValidation blueprintInst) { + getSession().delete(blueprintInst); + } + + @Override + public void deleteAll() { + if (getSession().createQuery("delete from BlueprintInstanceForValidation").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, + "All blueprint instances for validation entries are cleaned up"); + } + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/LabDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/LabDAOImpl.java new file mode 100644 index 0000000..3a383da --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/LabDAOImpl.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.daoimpl; + +import java.util.List; + +import org.akraino.validation.ui.dao.LabDAO; +import org.akraino.validation.ui.entity.LabInfo; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class LabDAOImpl implements LabDAO { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(LabDAOImpl.class); + + @Autowired + private SessionFactory sessionFactory; + + protected Session getSession() { + return sessionFactory.getCurrentSession(); + } + + @Override + public List getLabs() { + Criteria criteria = getSession().createCriteria(LabInfo.class); + return criteria.list(); + } + + @Override + public LabInfo getLab(Integer labId) { + Criteria criteria = getSession().createCriteria(LabInfo.class); + criteria.add(Restrictions.eq("id", String.valueOf(labId))); + return criteria.list() == null ? null : (LabInfo) criteria.list().get(0); + } + + @Override + public void saveOrUpdate(LabInfo lab) { + getSession().saveOrUpdate(lab); + } + + @Override + public void merge(LabInfo lab) { + getSession().merge(lab); + } + + @Override + public void deleteLab(LabInfo lab) { + getSession().delete(lab); + } + + @Override + public void deleteAll() { + if (getSession().createQuery("delete from Lab").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, "All lab entries are cleaned up"); + } + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/SiloDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/SiloDAOImpl.java new file mode 100644 index 0000000..3a347bd --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/SiloDAOImpl.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.daoimpl; + +import java.util.List; + +import org.akraino.validation.ui.dao.SiloDAO; +import org.akraino.validation.ui.entity.LabSilo; +import org.hibernate.Criteria; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class SiloDAOImpl implements SiloDAO { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(SiloDAOImpl.class); + + @Autowired + private SessionFactory sessionFactory; + + protected Session getSession() { + return sessionFactory.getCurrentSession(); + } + + @Override + public List getSilos() { + Criteria criteria = getSession().createCriteria(LabSilo.class); + return criteria.list(); + } + + @Override + public LabSilo getSilo(Integer siloId) { + Criteria criteria = getSession().createCriteria(LabSilo.class); + criteria.add(Restrictions.eq("id", String.valueOf(siloId))); + return criteria.list() == null ? null : (LabSilo) criteria.list().get(0); + } + + @Override + public void saveOrUpdate(LabSilo silo) { + getSession().saveOrUpdate(silo); + } + + @Override + public void merge(LabSilo silo) { + getSession().merge(silo); + } + + @Override + public void deleteSilo(LabSilo silo) { + getSession().delete(silo); + } + + @Override + public void deleteAll() { + if (getSession().createQuery("delete from Silo").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, "All silo entries are cleaned up"); + } + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/SubmissionDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/SubmissionDAOImpl.java index fd4da86..7edab42 100644 --- a/ui/src/main/java/org/akraino/validation/ui/daoimpl/SubmissionDAOImpl.java +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/SubmissionDAOImpl.java @@ -1,40 +1,36 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.daoimpl; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - import org.akraino.validation.ui.dao.SubmissionDAO; import org.akraino.validation.ui.entity.Submission; -import org.apache.log4j.Logger; +import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.query.Query; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class SubmissionDAOImpl implements SubmissionDAO { - private static final Logger LOGGER = Logger.getLogger(SubmissionDAOImpl.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(SubmissionDAOImpl.class); @Autowired private SessionFactory sessionFactory; @@ -45,43 +41,30 @@ public class SubmissionDAOImpl implements SubmissionDAO { @Override public List getSubmissions() { - - CriteriaBuilder builder = getSession().getCriteriaBuilder(); - CriteriaQuery criteria = builder.createQuery(Submission.class); - - Root root = criteria.from(Submission.class); - criteria.select(root); - - Query query = getSession().createQuery(criteria); - - return query.getResultList(); - + Criteria criteria = getSession().createCriteria(Submission.class); + return criteria.list(); } @Override public Submission getSubmission(Integer submissionId) { - - EntityManager entityManager = getSession().getEntityManagerFactory().createEntityManager(); - - return entityManager.find(Submission.class, submissionId); + Criteria criteria = getSession().createCriteria(Submission.class); + criteria.add(Restrictions.eq("id", submissionId)); + return criteria.list() == null || criteria.list().size() < 1 ? null : (Submission) criteria.list().get(0); } @Override public void saveOrUpdate(Submission submission) { getSession().saveOrUpdate(submission); - } @Override public void merge(Submission submission) { getSession().merge(submission); - } @Override public void deleteSubmission(Submission submission) { getSession().delete(submission); - } @Override @@ -91,13 +74,8 @@ public class SubmissionDAOImpl implements SubmissionDAO { @Override public void deleteAll() { - - Query query = getSession().createQuery("delete from Submission"); - - int result = query.executeUpdate(); - - if (result > 0) { - LOGGER.info("All submission entries are cleaned up"); + if (getSession().createQuery("delete from Submission").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, "All submission entries are cleaned up"); } } diff --git a/ui/src/main/java/org/akraino/validation/ui/daoimpl/TimeslotDAOImpl.java b/ui/src/main/java/org/akraino/validation/ui/daoimpl/TimeslotDAOImpl.java index e49c37a..a6cd925 100644 --- a/ui/src/main/java/org/akraino/validation/ui/daoimpl/TimeslotDAOImpl.java +++ b/ui/src/main/java/org/akraino/validation/ui/daoimpl/TimeslotDAOImpl.java @@ -1,40 +1,36 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.daoimpl; import java.util.List; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - import org.akraino.validation.ui.dao.TimeslotDAO; import org.akraino.validation.ui.entity.Timeslot; -import org.apache.log4j.Logger; +import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.query.Query; +import org.hibernate.criterion.Restrictions; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class TimeslotDAOImpl implements TimeslotDAO { - private static final Logger LOGGER = Logger.getLogger(TimeslotDAOImpl.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(TimeslotDAOImpl.class); @Autowired private SessionFactory sessionFactory; @@ -45,54 +41,36 @@ public class TimeslotDAOImpl implements TimeslotDAO { @Override public List getTimeslots() { - - CriteriaBuilder builder = getSession().getCriteriaBuilder(); - CriteriaQuery criteria = builder.createQuery(Timeslot.class); - - Root root = criteria.from(Timeslot.class); - criteria.select(root); - - Query query = getSession().createQuery(criteria); - - return query.getResultList(); - + Criteria criteria = getSession().createCriteria(Timeslot.class); + return criteria.list(); } @Override public Timeslot getTimeslot(Integer timeslotId) { - - EntityManager entityManager = getSession().getEntityManagerFactory().createEntityManager(); - - return entityManager.find(Timeslot.class, timeslotId); + Criteria criteria = getSession().createCriteria(Timeslot.class); + criteria.add(Restrictions.eq("id", String.valueOf(timeslotId))); + return criteria.list() == null ? null : (Timeslot) criteria.list().get(0); } @Override public void saveOrUpdate(Timeslot timeslot) { getSession().saveOrUpdate(timeslot); - } @Override public void merge(Timeslot timeslot) { getSession().merge(timeslot); - } @Override public void deleteTimeslot(Timeslot timeslot) { getSession().delete(timeslot); - } @Override public void deleteAll() { - - Query query = getSession().createQuery("delete from Timeslot"); - - int result = query.executeUpdate(); - - if (result > 0) { - LOGGER.info("All timeslot entries are cleaned up"); + if (getSession().createQuery("delete from Timeslot").executeUpdate() > 0) { + LOGGER.info(EELFLoggerDelegate.applicationLogger, "All timeslot entries are cleaned up"); } } diff --git a/ui/src/main/java/org/akraino/validation/ui/data/BlueprintLayer.java b/ui/src/main/java/org/akraino/validation/ui/data/BlueprintLayer.java index 75278c2..9c57c04 100644 --- a/ui/src/main/java/org/akraino/validation/ui/data/BlueprintLayer.java +++ b/ui/src/main/java/org/akraino/validation/ui/data/BlueprintLayer.java @@ -16,5 +16,5 @@ package org.akraino.validation.ui.data; public enum BlueprintLayer { - Hardware, OS, K8s, Kubeless, OpenStack, VNF, Application + Hardware, Os, K8s, Kubeless, OpenStack, VNF, Application, All } diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/Blueprint.java b/ui/src/main/java/org/akraino/validation/ui/entity/Blueprint.java index 05a27cc..262eecd 100644 --- a/ui/src/main/java/org/akraino/validation/ui/entity/Blueprint.java +++ b/ui/src/main/java/org/akraino/validation/ui/entity/Blueprint.java @@ -22,11 +22,10 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.SequenceGenerator; import javax.persistence.Table; @Entity -@Table(name = "akraino.blueprint") +@Table(name = "blueprint") public class Blueprint implements Serializable { /** @@ -35,9 +34,8 @@ public class Blueprint implements Serializable { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "blueprint_id_generator") - @SequenceGenerator(name = "blueprint_id_generator", sequenceName = "akraino.seq_blueprint", allocationSize = 1) - @Column(name = "blueprint_id") + @GeneratedValue(strategy=GenerationType.IDENTITY) + @Column(name = "id") private int blueprintId; @Column(name = "blueprint_name") diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstance.java b/ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstanceForValidation.java similarity index 76% rename from ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstance.java rename to ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstanceForValidation.java index 93206db..1496e9e 100644 --- a/ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstance.java +++ b/ui/src/main/java/org/akraino/validation/ui/entity/BlueprintInstanceForValidation.java @@ -24,15 +24,13 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; -import javax.persistence.SequenceGenerator; import javax.persistence.Table; import org.akraino.validation.ui.data.BlueprintLayer; @Entity -@Table(name = "akraino.blueprint_instance") -public class BlueprintInstance implements Serializable { +@Table(name = "blueprint_instance_for_validation") +public class BlueprintInstanceForValidation implements Serializable { /** * @@ -40,10 +38,8 @@ public class BlueprintInstance implements Serializable { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "blueprint_instance_id_generator") - @SequenceGenerator(name = "blueprint_instance_id_generator", sequenceName = "akraino.seq_blueprint_instance", - allocationSize = 1) - @Column(name = "blueprint_instance_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private int blueprintInstId; @ManyToOne @@ -59,10 +55,6 @@ public class BlueprintInstance implements Serializable { @Column(name = "layer_description") private String layerDescription; - @OneToOne - @JoinColumn(name = "timeslot_id") - private Timeslot timeslot; - public int getBlueprintInstanceId() { return blueprintInstId; } @@ -102,13 +94,4 @@ public class BlueprintInstance implements Serializable { public String getLayerDescription() { return layerDescription; } - - public void setTimeslot(Timeslot timeslot) { - this.timeslot = timeslot; - } - - public Timeslot getTimeslot() { - return this.timeslot; - } - } diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/LabInfo.java b/ui/src/main/java/org/akraino/validation/ui/entity/LabInfo.java new file mode 100644 index 0000000..f046ce4 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/entity/LabInfo.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.entity; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "lab") +public class LabInfo implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int labId; + + @Column(name = "lab") + private org.akraino.validation.ui.data.Lab lab; + + public int getLabId() { + return labId; + } + + public void setLabId(int labId) { + this.labId = labId; + } + + public org.akraino.validation.ui.data.Lab getLab() { + return lab; + } + + public void setLab(org.akraino.validation.ui.data.Lab lab) { + this.lab = lab; + } +} diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/LabSilo.java b/ui/src/main/java/org/akraino/validation/ui/entity/LabSilo.java new file mode 100644 index 0000000..cd72fc7 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/entity/LabSilo.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.entity; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "silo") +public class LabSilo implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private int siloId; + + @Column(name = "silo") + private String silo; + + @ManyToOne + @JoinColumn(name = "lab_id") + private LabInfo lab; + + public void setSiloId(int siloId) { + this.siloId = siloId; + } + + public int getSiloId() { + return siloId; + } + + public void setSilo(String silo) { + this.silo = silo; + } + + public String getSilo() { + return silo; + } + + public void setLab(LabInfo lab) { + this.lab = lab; + } + + public LabInfo getLab() { + return lab; + } +} diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/Submission.java b/ui/src/main/java/org/akraino/validation/ui/entity/Submission.java index 1d5d157..797343f 100644 --- a/ui/src/main/java/org/akraino/validation/ui/entity/Submission.java +++ b/ui/src/main/java/org/akraino/validation/ui/entity/Submission.java @@ -15,6 +15,8 @@ */ package org.akraino.validation.ui.entity; +import java.io.Serializable; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -22,14 +24,13 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; -import javax.persistence.SequenceGenerator; import javax.persistence.Table; import org.akraino.validation.ui.data.SubmissionStatus; @Entity -@Table(name = "akraino.submission") -public class Submission { +@Table(name = "submission") +public class Submission implements Serializable { /** * @@ -37,9 +38,8 @@ public class Submission { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "submission_id_generator") - @SequenceGenerator(name = "submission_id_generator", sequenceName = "akraino.seq_submission", allocationSize = 1) - @Column(name = "submission_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private int submissionId; @Column(name = "status") @@ -52,8 +52,12 @@ public class Submission { private String nexusResultUrl; @ManyToOne - @JoinColumn(name = "blueprint_instance_id") - private BlueprintInstance blueprintInstance; + @JoinColumn(name = "blueprint_instance_for_validation_id") + private BlueprintInstanceForValidation blueprintInst; + + @ManyToOne + @JoinColumn(name = "timeslot_id") + private Timeslot timeslot; public void setSubmissionId(int submissionId) { this.submissionId = submissionId; @@ -87,12 +91,22 @@ public class Submission { this.nexusResultUrl = nexusResultUrl; } - public void setBlueprintInstance(BlueprintInstance blueprintInstance) { - this.blueprintInstance = blueprintInstance; + public void setBlueprintInstanceForValidation(BlueprintInstanceForValidation blueprintInst) { + this.blueprintInst = blueprintInst; } - public BlueprintInstance getBlueprintInstance() { - return this.blueprintInstance; + public BlueprintInstanceForValidation getBlueprintInstanceForValidation() { + return this.blueprintInst; } + + public void setTimeslot(Timeslot timeslot) { + this.timeslot = timeslot; + } + + public Timeslot getTimeslot() { + return this.timeslot; + } + + } diff --git a/ui/src/main/java/org/akraino/validation/ui/entity/Timeslot.java b/ui/src/main/java/org/akraino/validation/ui/entity/Timeslot.java index c53fa49..ee23efb 100644 --- a/ui/src/main/java/org/akraino/validation/ui/entity/Timeslot.java +++ b/ui/src/main/java/org/akraino/validation/ui/entity/Timeslot.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.entity; @@ -22,13 +22,12 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; -import javax.persistence.SequenceGenerator; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.Table; -import org.akraino.validation.ui.data.Lab; - @Entity -@Table(name = "akraino.timeslot") +@Table(name = "timeslot") public class Timeslot implements Serializable { /** @@ -37,19 +36,19 @@ public class Timeslot implements Serializable { private static final long serialVersionUID = 1L; @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "timeslot_id_generator") - @SequenceGenerator(name = "timeslot_id_generator", sequenceName = "akraino.seq_timeslot", allocationSize = 1) - @Column(name = "timeslot_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private int timeslotId; @Column(name = "start_date_time") private String startDateTime; @Column(name = "duration") - private int duration; + private String duration; - @Column(name = "lab") - private Lab lab; + @ManyToOne + @JoinColumn(name = "lab_id") + private LabInfo lab; public void setTimeslotId(int timeslotId) { this.timeslotId = timeslotId; @@ -67,19 +66,19 @@ public class Timeslot implements Serializable { return startDateTime; } - public void setDuration(int duration) { + public void setDuration(String duration) { this.duration = duration; } - public int getDuration() { + public String getDuration() { return duration; } - public void setLab(Lab lab) { + public void setLab(LabInfo lab) { this.lab = lab; } - public Lab getLab() { + public LabInfo getLab() { return lab; } } diff --git a/ui/src/main/java/org/akraino/validation/ui/filter/SecurityXssFilter.java b/ui/src/main/java/org/akraino/validation/ui/filter/SecurityXssFilter.java new file mode 100644 index 0000000..e9afd05 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/filter/SecurityXssFilter.java @@ -0,0 +1,178 @@ +/*- + * ============LICENSE_START========================================== + * ONAP Portal + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); + * you may not use this software 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. + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * 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. + * + * ============LICENSE_END============================================ + * + * + */ +package org.akraino.validation.ui.filter; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.FilterChain; +import javax.servlet.ReadListener; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpStatus; +import org.onap.portalapp.util.SecurityXssValidator; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.web.filter.OncePerRequestFilter; + +public class SecurityXssFilter extends OncePerRequestFilter { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(SecurityXssFilter.class); + + private static final String APPLICATION_JSON = "application/json"; + + private static final String ERROR_BAD_REQUEST = "{\"error\":\"BAD_REQUEST\"}"; + + private SecurityXssValidator validator = SecurityXssValidator.getInstance(); + + public class RequestWrapper extends HttpServletRequestWrapper { + + private ByteArrayOutputStream cachedBytes; + + private Map parameter = new HashMap(); + + @SuppressWarnings("unchecked") + public RequestWrapper(HttpServletRequest request) { + super(request); + Enumeration parameterNames = request.getParameterNames(); + while (parameterNames.hasMoreElements()) { + String paramName = parameterNames.nextElement(); + String paramValue = request.getParameter(paramName); + parameter.put(paramName, paramValue); + } + } + + @Override + public String getParameter(String name) { + if (parameter != null) { + return (String) parameter.get(name); + } + return null; + } + + @Override + public ServletInputStream getInputStream() throws IOException { + if (cachedBytes == null) + cacheInputStream(); + + return new CachedServletInputStream(); + } + + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + private void cacheInputStream() throws IOException { + cachedBytes = new ByteArrayOutputStream(); + IOUtils.copy(super.getInputStream(), cachedBytes); + } + + public class CachedServletInputStream extends ServletInputStream { + private ByteArrayInputStream input; + + public CachedServletInputStream() { + input = new ByteArrayInputStream(cachedBytes.toByteArray()); + } + + @Override + public int read() throws IOException { + return input.read(); + } + + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + + } + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + if (validateRequestType(request)) { + request = new RequestWrapper(request); + String requestData = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8.toString()); + try { + if (StringUtils.isNotBlank(requestData) && validator.denyXSS(requestData)) { + response.setContentType(APPLICATION_JSON); + response.setStatus(HttpStatus.SC_BAD_REQUEST); + response.getWriter().write(ERROR_BAD_REQUEST); + throw new SecurityException(ERROR_BAD_REQUEST); + } + } catch (Exception e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "doFilterInternal() failed due to BAD_REQUEST", e); + response.getWriter().close(); + return; + } + filterChain.doFilter(request, response); + + } else { + filterChain.doFilter(request, response); + } + + } + + private boolean validateRequestType(HttpServletRequest request) { + return (request.getMethod().equalsIgnoreCase("POST") || request.getMethod().equalsIgnoreCase("PUT") + || request.getMethod().equalsIgnoreCase("DELETE")); + } +} diff --git a/ui/src/main/java/org/akraino/validation/ui/login/LoginStrategyImpl.java b/ui/src/main/java/org/akraino/validation/ui/login/LoginStrategyImpl.java new file mode 100644 index 0000000..55960ac --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/login/LoginStrategyImpl.java @@ -0,0 +1,170 @@ +/*- + * ============LICENSE_START========================================== + * ONAP Portal + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); + * you may not use this software 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. + * + * Unless otherwise specified, all documentation contained herein is licensed + * under the Creative Commons License, Attribution 4.0 Intl. (the "License"); + * you may not use this documentation except in compliance with the License. + * You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation + * 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. + * + * ============LICENSE_END============================================ + * + * + */ + +package org.akraino.validation.ui.login; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.onap.portalsdk.core.auth.LoginStrategy; +import org.onap.portalsdk.core.command.LoginBean; +import org.onap.portalsdk.core.domain.RoleFunction; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.menu.MenuProperties; +import org.onap.portalsdk.core.onboarding.exception.CipherUtilException; +import org.onap.portalsdk.core.onboarding.exception.PortalAPIException; +import org.onap.portalsdk.core.onboarding.util.CipherUtil; +import org.onap.portalsdk.core.service.LoginService; +import org.onap.portalsdk.core.service.RoleService; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.portalsdk.core.web.support.UserUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.servlet.ModelAndView; + +/** + * Implements basic single-signon login strategy for open-source + * applications when users start at Portal. Extracts an encrypted user ID + * sent by Portal. + */ +public class LoginStrategyImpl extends LoginStrategy { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(LoginStrategyImpl.class); + + @Autowired + private RoleService roleService; + + @Autowired + private LoginService loginService; + + /** + * login for open source is same as external login in the non-open-source + * version. + */ + @Override + public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { + invalidateExistingSession(request); + + LoginBean commandBean = new LoginBean(); + String loginId = request.getParameter("loginId"); + String password = request.getParameter("password"); + commandBean.setLoginId(loginId); + commandBean.setLoginPwd(password); + commandBean.setUserid(loginId); + commandBean = loginService.findUser(commandBean, + (String) request.getAttribute(MenuProperties.MENU_PROPERTIES_FILENAME_KEY), new HashMap()); + List roleFunctionList = roleService.getRoleFunctions(loginId); + + if (commandBean.getUser() == null) { + String loginErrorMessage = (commandBean.getLoginErrorMessage() != null) ? commandBean.getLoginErrorMessage() + : "login.error.external.invalid"; + Map model = new HashMap<>(); + model.put("error", loginErrorMessage); + return new ModelAndView("login_external", "model", model); + } else { + // store the currently logged in user's information in the session + UserUtils.setUserSession(request, commandBean.getUser(), commandBean.getMenu(), + commandBean.getBusinessDirectMenu(), + SystemProperties.getProperty(SystemProperties.LOGIN_METHOD_BACKDOOR), roleFunctionList); + initateSessionMgtHandler(request); + // user has been authenticated, now take them to the welcome page + return new ModelAndView("redirect:welcome.htm"); + } + } + + @Override + public String getUserId(HttpServletRequest request) throws PortalAPIException { + // Check ECOMP Portal cookie + Cookie ep = getCookie(request, EP_SERVICE); + if (ep == null) { + LOGGER.debug(EELFLoggerDelegate.debugLogger, "getUserId: no EP_SERVICE cookie, returning null"); + return null; + } + + String userid = null; + try { + userid = getUserIdFromCookie(request); + } catch (Exception e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "getUserId failed", e); + } + return userid; + } + + /** + * Searches the request for the user-ID cookie and decrypts the value + * using a key configured in properties + * + * @param request HttpServletRequest + * @return User ID + * @throws CipherUtilException On any failure to decrypt + */ + private String getUserIdFromCookie(HttpServletRequest request) throws CipherUtilException { + String userId = ""; + Cookie userIdCookie = getCookie(request, USER_ID); + if (userIdCookie != null) { + final String cookieValue = userIdCookie.getValue(); + if (!SystemProperties.containsProperty(SystemProperties.Decryption_Key)) + throw new IllegalStateException("Failed to find property " + SystemProperties.Decryption_Key); + final String decryptionKey = SystemProperties.getProperty(SystemProperties.Decryption_Key); + userId = CipherUtil.decrypt(cookieValue, decryptionKey); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "getUserIdFromCookie: decrypted as {}", userId); + } + return userId; + } + + /** + * Searches the request for the named cookie. + * + * @param request HttpServletRequest + * @param cookieName Name of desired cookie + * @return Cookie if found; otherwise null. + */ + private Cookie getCookie(HttpServletRequest request, String cookieName) { + Cookie[] cookies = request.getCookies(); + if (cookies != null) + for (Cookie cookie : cookies) + if (cookie.getName().equals(cookieName)) + return cookie; + return null; + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/scheduler/Register.java b/ui/src/main/java/org/akraino/validation/ui/scheduler/Register.java new file mode 100644 index 0000000..633ef9e --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/scheduler/Register.java @@ -0,0 +1,87 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); you may not use + * this software 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. + * + * Unless otherwise specified, all documentation contained herein is + * licensed under the Creative Commons License, Attribution 4.0 Intl. (the + * "License"); you may not use this documentation except in compliance + * with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, + * documentation 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. + * + * ============LICENSE_END============================================ + * + * + */ +package org.akraino.validation.ui.scheduler; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.portalapp.scheduler.LogRegistry; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.scheduler.Registerable; +import org.onap.portalsdk.core.util.SystemProperties; +import org.quartz.Trigger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.DependsOn; +import org.springframework.stereotype.Component; + +@Component +@DependsOn({"logRegistry", "systemProperties"}) +public class Register implements Registerable { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(Register.class); + + private List scheduleTriggers = new ArrayList<>(); + Trigger[] trigger = new Trigger[1]; + + @Autowired + private LogRegistry logRegistry; + + @Override + public Trigger[] getTriggers() { + return getScheduleTriggers().toArray(trigger); + } + + @Override + public void registerTriggers() { + // if the property value is not available; the cron will not be added. + if (SystemProperties.containsProperty(SystemProperties.LOG_CRON)) { + LOGGER.debug(EELFLoggerDelegate.debugLogger, "Adding log registry for cron property {}", + SystemProperties.getProperty(SystemProperties.LOG_CRON)); + getScheduleTriggers().add(logRegistry.getTrigger()); + } + } + + public List getScheduleTriggers() { + return scheduleTriggers; + } + + public void setScheduleTriggers(List scheduleTriggers) { + this.scheduleTriggers = scheduleTriggers; + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/scheduler/RegistryAdapter.java b/ui/src/main/java/org/akraino/validation/ui/scheduler/RegistryAdapter.java new file mode 100644 index 0000000..27e94b4 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/scheduler/RegistryAdapter.java @@ -0,0 +1,105 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); you may not use + * this software 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. + * + * Unless otherwise specified, all documentation contained herein is + * licensed under the Creative Commons License, Attribution 4.0 Intl. (the + * "License"); you may not use this documentation except in compliance + * with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, + * documentation 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. + * + * ============LICENSE_END============================================ + * + * + */ +package org.akraino.validation.ui.scheduler; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.onap.portalsdk.core.scheduler.Registerable; +import org.onap.portalsdk.workflow.services.WorkflowScheduleService; +import org.quartz.Trigger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import org.springframework.stereotype.Component; + +@Component +public class RegistryAdapter { + + @Autowired + private Registerable registry; + + @Autowired + private WorkflowScheduleService workflowScheduleService; + + private SchedulerFactoryBean schedulerBean; + + Trigger[] trigger = new Trigger[1]; + + public Trigger[] getTriggers() { + registry.registerTriggers(); + List allTriggers = new ArrayList<>(); + List coreTriggers = addCoreTriggers(); + final Trigger[] extTriggerArray = registry.getTriggers(); + allTriggers.addAll(Arrays.asList(extTriggerArray)); + allTriggers.addAll(coreTriggers); + return allTriggers.toArray(trigger); + } + + public List addCoreTriggers() { + // On startup of the application after crash recovery, invoke workflow + // schedule trigger + List triggers = getWorkflowScheduleService().triggerWorkflowScheduling(); + return triggers; + } + + public void setSchedulerBean(final SchedulerFactoryBean schedulerBean) { + this.schedulerBean = schedulerBean; + } + + public SchedulerFactoryBean getSchedulerBean() { + return schedulerBean; + } + + public Registerable getRegistry() { + return registry; + } + + public void setRegistry(Registerable registry) { + this.registry = registry; + } + + public WorkflowScheduleService getWorkflowScheduleService() { + return workflowScheduleService; + } + + public void setWorkflowScheduleService(WorkflowScheduleService workflowScheduleService) { + this.workflowScheduleService = workflowScheduleService; + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/AdminAuthExtension.java b/ui/src/main/java/org/akraino/validation/ui/service/AdminAuthExtension.java new file mode 100644 index 0000000..b08bd40 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/service/AdminAuthExtension.java @@ -0,0 +1,74 @@ +/* + * ============LICENSE_START========================================== + * ONAP Portal SDK + * =================================================================== + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * =================================================================== + * + * Unless otherwise specified, all software contained herein is licensed + * under the Apache License, Version 2.0 (the "License"); you may not use + * this software 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. + * + * Unless otherwise specified, all documentation contained herein is + * licensed under the Creative Commons License, Attribution 4.0 Intl. (the + * "License"); you may not use this documentation except in compliance + * with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, + * documentation 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. + * + * ============LICENSE_END============================================ + * + * + */ +package org.akraino.validation.ui.service; + +import java.util.Set; + +import org.onap.portalapp.service.IAdminAuthExtension; +import org.onap.portalsdk.core.domain.Role; +import org.onap.portalsdk.core.domain.User; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +@Service("adminAuthExtension") +@Transactional +/** + * Provides empty implementations of the methods in IAdminAuthExtension. + */ +public class AdminAuthExtension implements IAdminAuthExtension { + + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AdminAuthExtension.class); + + @Override + public void saveUserExtension(User user) { + LOGGER.debug(EELFLoggerDelegate.debugLogger, "saveUserExtension"); + } + + @Override + public void editUserExtension(User user) { + LOGGER.debug(EELFLoggerDelegate.debugLogger, "editUserExtension"); + } + + @Override + public void saveUserRoleExtension(Set roles, User user) { + LOGGER.debug(EELFLoggerDelegate.debugLogger, "saveUserRoleExtension"); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceForValidationService.java b/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceForValidationService.java new file mode 100644 index 0000000..d786d09 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceForValidationService.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.service; + +import java.util.List; + +import org.akraino.validation.ui.dao.BlueprintInstanceForValidationDAO; +import org.akraino.validation.ui.entity.BlueprintInstanceForValidation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class BlueprintInstanceForValidationService { + + @Autowired + private BlueprintInstanceForValidationDAO dao; + + public void saveBlueprintInstance(BlueprintInstanceForValidation blueprintIns) { + + dao.saveOrUpdate(blueprintIns); + + } + + public List getBlueprintInstancesForValidation() { + + return dao.getBlueprintInstancesForValidation(); + + } + + public void deleteAll() { + dao.deleteAll(); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceService.java b/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceService.java deleted file mode 100644 index 33914a4..0000000 --- a/ui/src/main/java/org/akraino/validation/ui/service/BlueprintInstanceService.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -package org.akraino.validation.ui.service; - -import java.util.List; - -import org.akraino.validation.ui.dao.BlueprintInstanceDAO; -import org.akraino.validation.ui.entity.BlueprintInstance; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class BlueprintInstanceService { - - @Autowired - private BlueprintInstanceDAO blueprintInstDAO; - - public void saveBlueprintInstance(BlueprintInstance blueprintInstance) { - - blueprintInstDAO.saveOrUpdate(blueprintInstance); - - } - - public List getBlueprintInstances() { - - return blueprintInstDAO.getBlueprintInstances(); - - } - - public void deleteAll() { - blueprintInstDAO.deleteAll(); - } - -} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/BlueprintService.java b/ui/src/main/java/org/akraino/validation/ui/service/BlueprintService.java index 019802c..ddc0219 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/BlueprintService.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/BlueprintService.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.service; diff --git a/ui/src/main/java/org/akraino/validation/ui/service/JenkinsJobNotificationService.java b/ui/src/main/java/org/akraino/validation/ui/service/JenkinsJobNotificationService.java index 0a50ad8..c2482b2 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/JenkinsJobNotificationService.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/JenkinsJobNotificationService.java @@ -15,11 +15,14 @@ */ package org.akraino.validation.ui.service; +import org.akraino.validation.ui.conf.UiUtils; +import org.akraino.validation.ui.data.BlueprintLayer; import org.akraino.validation.ui.data.JnksJobNotify; import org.akraino.validation.ui.data.SubmissionStatus; +import org.akraino.validation.ui.entity.LabSilo; import org.akraino.validation.ui.entity.Submission; import org.akraino.validation.ui.service.utils.SubmissionHelper; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,28 +31,46 @@ import org.springframework.transaction.annotation.Transactional; @Transactional public class JenkinsJobNotificationService { + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(JenkinsJobNotificationService.class); + @Autowired private SubmissionHelper submissionHelper; @Autowired private SubmissionService submissionService; - private static final Logger LOGGER = Logger.getLogger(JenkinsJobNotificationService.class); + @Autowired + private SiloService siloService; - public void handle(JnksJobNotify jnksJobNotify) { - String jenkinsJobName = System.getenv("jenkins_job_name"); + public void handle(JnksJobNotify jnksJobNotify) throws Exception { + String jenkinsJobName = System.getenv("JENKINS_JOB_NAME"); if (!jenkinsJobName.equals(jnksJobNotify.getName())) { return; } Submission submission = submissionService.getSubmission(Integer.toString(jnksJobNotify.getSubmissionId())); if (submission == null) { - LOGGER.debug("No related submission was found."); + LOGGER.debug(EELFLoggerDelegate.debugLogger, "No related submission was found"); return; } - submission.setNexusResultUrl(System.getenv("nexus_results_url") + "/" - + submission.getBlueprintInstance().getTimeslot().getLab().name().toLowerCase() + "-blu-val" - + "/job/validation/" + String.valueOf(jnksJobNotify.getbuildNumber())); - LOGGER.info("Updating submission with id: " + submission.getSubmissionId()); + String siloText = null; + for (LabSilo silo : siloService.getSilos()) { + if (silo.getLab().getLab().equals(submission.getTimeslot().getLab().getLab())) { + siloText = silo.getSilo(); + } + } + if (siloText == null) { + throw new Exception("Could not retrieve silo of the selected lab : " + + submission.getTimeslot().getLab().getLab().toString()); + } + + String nexusUrl = UiUtils.NEXUS_URL + "/" + siloText + "/job/" + System.getenv("JENKINS_JOB_NAME") + "/" + + String.valueOf(jnksJobNotify.getbuildNumber() + "/results"); + if (!submission.getBlueprintInstanceForValidation().getLayer().equals(BlueprintLayer.All)) { + nexusUrl = nexusUrl + "/" + submission.getBlueprintInstanceForValidation().getLayer().name().toLowerCase(); + } + submission.setNexusResultUrl(nexusUrl); + LOGGER.info(EELFLoggerDelegate.applicationLogger, + "Updating submission with id: " + submission.getSubmissionId()); submission.setSubmissionStatus(SubmissionStatus.Completed); submissionHelper.saveSubmission(submission); } diff --git a/ui/src/main/java/org/akraino/validation/ui/service/LabService.java b/ui/src/main/java/org/akraino/validation/ui/service/LabService.java new file mode 100644 index 0000000..8dfc15e --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/service/LabService.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.service; + +import java.util.List; + +import org.akraino.validation.ui.dao.LabDAO; +import org.akraino.validation.ui.entity.LabInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class LabService { + + @Autowired + private LabDAO labDAO; + + public void saveLab(LabInfo lab) { + + labDAO.saveOrUpdate(lab); + + } + + public List getLabs() { + + return labDAO.getLabs(); + + } + + public void deleteAll() { + labDAO.deleteAll(); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/ResultService.java b/ui/src/main/java/org/akraino/validation/ui/service/ResultService.java index 1deffa0..b189dba 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/ResultService.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/ResultService.java @@ -16,7 +16,6 @@ package org.akraino.validation.ui.service; import java.io.IOException; -import java.net.MalformedURLException; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; @@ -26,10 +25,12 @@ import org.akraino.validation.ui.client.jenkins.JenkinsExecutorClient; import org.akraino.validation.ui.client.jenkins.resources.QueueJobItem; import org.akraino.validation.ui.client.jenkins.resources.QueueJobItem.Executable; import org.akraino.validation.ui.client.nexus.NexusExecutorClient; -import org.akraino.validation.ui.client.nexus.resources.RobotTestResult; +import org.akraino.validation.ui.client.nexus.resources.WrapperRobotTestResult; +import org.akraino.validation.ui.conf.UiUtils; +import org.akraino.validation.ui.data.BlueprintLayer; +import org.akraino.validation.ui.entity.LabSilo; import org.akraino.validation.ui.entity.Submission; -import org.apache.commons.httpclient.HttpException; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -41,19 +42,20 @@ import com.sun.jersey.api.client.UniformInterfaceException; @Service public class ResultService { - private static final Logger LOGGER = Logger.getLogger(ResultService.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(ResultService.class); @Autowired private SubmissionService submissionService; + @Autowired + private SiloService siloService; + @Deprecated - public URL getNexusResultUrl(Submission submission) - throws MalformedURLException, KeyManagementException, HttpException, ClientHandlerException, - UniformInterfaceException, NoSuchAlgorithmException, InterruptedException { + public URL getNexusResultUrl(Submission submission) throws Exception { - String url = System.getenv("jenkins_url"); - String userName = System.getenv("jenkins_user_name"); - String password = System.getenv("jenkins_user_pwd"); + String url = System.getenv("JENKINS_URL"); + String userName = System.getenv("JENKINS_USERNAME"); + String password = System.getenv("JENKINS_USER_PASSWORD"); Executable executable = null; while (executable == null) { @@ -63,22 +65,48 @@ public class ResultService { executable = queueJobItem.getExecutable(); Thread.sleep(2000); } - return new URL(System.getenv("nexus_results_url") + "/" - + submission.getBlueprintInstance().getTimeslot().getLab().name().toLowerCase() + "-blu-val" - + "/job/validation/" + String.valueOf(executable.getNumber())); + String siloText = null; + for (LabSilo silo : siloService.getSilos()) { + if (silo.getLab().getLab().equals(submission.getTimeslot().getLab().getLab())) { + siloText = silo.getSilo(); + } + } + if (siloText == null) { + throw new Exception("Could not retrieve silo of the selected lab : " + + submission.getTimeslot().getLab().getLab().toString()); + } + String nexusUrl = UiUtils.NEXUS_URL + "/" + siloText + "/job/" + System.getenv("JENKINS_JOB_NAME") + "/" + + String.valueOf(executable.getNumber() + "/results"); + if (!submission.getBlueprintInstanceForValidation().getLayer().equals(BlueprintLayer.All)) { + nexusUrl = nexusUrl + "/" + submission.getBlueprintInstanceForValidation().getLayer().name().toLowerCase(); + } + return new URL(nexusUrl); } - public List getRobotTestResults(String submissionId) + public List getRobotTestResults(String submissionId) throws JsonParseException, JsonMappingException, KeyManagementException, ClientHandlerException, UniformInterfaceException, NoSuchAlgorithmException, IOException { Submission submission = submissionService.getSubmission(submissionId); if (submission == null) { - LOGGER.info("Requested submission does not exist"); + LOGGER.info(EELFLoggerDelegate.applicationLogger, "Requested submission does not exist"); return null; } String nexusUrl = submission.getNexusResultUrl(); - NexusExecutorClient client = new NexusExecutorClient(nexusUrl + "/results"); + String urlLastpart = nexusUrl.substring(nexusUrl.lastIndexOf('/') + 1); + if (blueprintLayerContains(urlLastpart.substring(0, 1).toUpperCase() + urlLastpart.substring(1))) { + nexusUrl = nexusUrl.substring(0, nexusUrl.lastIndexOf(urlLastpart) - 1); + } + NexusExecutorClient client = new NexusExecutorClient(nexusUrl); return client.getRobotTestResults(); } + private boolean blueprintLayerContains(String layer) { + for (BlueprintLayer blueprintLayer : BlueprintLayer.values()) { + if (blueprintLayer.name().equals(layer)) { + return true; + } + } + return false; + } + } diff --git a/ui/src/main/java/org/akraino/validation/ui/service/SiloService.java b/ui/src/main/java/org/akraino/validation/ui/service/SiloService.java new file mode 100644 index 0000000..16ebe30 --- /dev/null +++ b/ui/src/main/java/org/akraino/validation/ui/service/SiloService.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ +package org.akraino.validation.ui.service; + +import java.util.List; + +import org.akraino.validation.ui.dao.SiloDAO; +import org.akraino.validation.ui.entity.LabSilo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class SiloService { + + @Autowired + private SiloDAO siloDAO; + + public void saveSilo(LabSilo silo) { + + siloDAO.saveOrUpdate(silo); + + } + + public List getSilos() { + + return siloDAO.getSilos(); + + } + + public void deleteAll() { + siloDAO.deleteAll(); + } + +} diff --git a/ui/src/main/java/org/akraino/validation/ui/service/SubmissionService.java b/ui/src/main/java/org/akraino/validation/ui/service/SubmissionService.java index a6b1fca..ccf4087 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/SubmissionService.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/SubmissionService.java @@ -30,14 +30,15 @@ import java.util.concurrent.CompletableFuture; import org.akraino.validation.ui.client.jenkins.JenkinsExecutorClient; import org.akraino.validation.ui.client.jenkins.resources.Parameter; import org.akraino.validation.ui.client.jenkins.resources.Parameters; -import org.akraino.validation.ui.config.AppInitializer; +import org.akraino.validation.ui.conf.UiUtils; import org.akraino.validation.ui.dao.SubmissionDAO; import org.akraino.validation.ui.data.SubmissionStatus; import org.akraino.validation.ui.entity.Submission; import org.akraino.validation.ui.service.utils.PrioritySupplier; import org.akraino.validation.ui.service.utils.SubmissionHelper; import org.apache.commons.httpclient.HttpException; -import org.apache.log4j.Logger; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -49,7 +50,7 @@ import com.sun.jersey.api.client.UniformInterfaceException; @Transactional public class SubmissionService { - private static final Logger LOGGER = Logger.getLogger(SubmissionService.class); + private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(SubmissionService.class); @Autowired private SubmissionDAO submissionDAO; @@ -63,7 +64,7 @@ public class SubmissionService { JenkinsTriggerSubmissionJob task = new JenkinsTriggerSubmissionJob(submission); CompletableFuture completableFuture = - CompletableFuture.supplyAsync(new PrioritySupplier<>(1, task::execute), AppInitializer.executorService); + CompletableFuture.supplyAsync(new PrioritySupplier<>(1, task::execute), UiUtils.executorService); completableFuture.thenAcceptAsync(result -> this.callbackNotify(result)); return submission; @@ -102,10 +103,10 @@ public class SubmissionService { } public Submission execute() { - String url = System.getenv("jenkins_url"); - String userName = System.getenv("jenkins_user_name"); - String userPassword = System.getenv("jenkins_user_pwd"); - String jobName = System.getenv("jenkins_job_name"); + String url = System.getenv("JENKINS_URL"); + String userName = System.getenv("JENKINS_USERNAME"); + String userPassword = System.getenv("JENKINS_USER_PASSWORD"); + String jobName = System.getenv("JENKINS_JOB_NAME"); List listOfParameters = new ArrayList(); Parameters parameters = new Parameters(); Parameter parameter = new Parameter(); @@ -114,11 +115,16 @@ public class SubmissionService { listOfParameters.add(parameter); parameter = new Parameter(); parameter.setName("BLUEPRINT"); - parameter.setValue(submission.getBlueprintInstance().getBlueprint().getBlueprintName()); + parameter.setValue( + submission.getBlueprintInstanceForValidation().getBlueprint().getBlueprintName().toLowerCase()); listOfParameters.add(parameter); parameter = new Parameter(); parameter.setName("LAYER"); - parameter.setValue(submission.getBlueprintInstance().getLayer().name()); + parameter.setValue(submission.getBlueprintInstanceForValidation().getLayer().name().toLowerCase()); + listOfParameters.add(parameter); + parameter = new Parameter(); + parameter.setName("VERSION"); + parameter.setValue(submission.getBlueprintInstanceForValidation().getVersion().toLowerCase()); listOfParameters.add(parameter); parameter = new Parameter(); parameter.setName("UI_IP"); @@ -128,23 +134,20 @@ public class SubmissionService { socket.connect(InetAddress.getByName(random.nextInt(256) + "." + random.nextInt(256) + "." + random.nextInt(256) + "." + random.nextInt(256)), 10002); localIP = socket.getLocalAddress().getHostAddress(); - } catch (SocketException | UnknownHostException e1) { - LOGGER.error(e1); - return null; - } - parameter.setValue(localIP); - listOfParameters.add(parameter); - parameters.setParameter(listOfParameters); - JenkinsExecutorClient client; - try { + parameter.setValue(localIP); + listOfParameters.add(parameter); + parameters.setParameter(listOfParameters); + JenkinsExecutorClient client; client = JenkinsExecutorClient.getInstance(userName, userPassword, url); submission.setJnksQueueJobItemUrl(client.postJobWithQueryParams(jobName, parameters).toString()); - } catch (MalformedURLException | KeyManagementException | HttpException | ClientHandlerException - | UniformInterfaceException | NoSuchAlgorithmException e) { - LOGGER.error(e); + return submission; + } catch (SocketException | UnknownHostException | KeyManagementException | HttpException + | ClientHandlerException | UniformInterfaceException | MalformedURLException + | NoSuchAlgorithmException e) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Error when triggering Jenkins job. " + UserUtils.getStackTrace(e)); return null; } - return submission; } } diff --git a/ui/src/main/java/org/akraino/validation/ui/service/TimeslotService.java b/ui/src/main/java/org/akraino/validation/ui/service/TimeslotService.java index 421c2b6..8df150d 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/TimeslotService.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/TimeslotService.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.service; diff --git a/ui/src/main/java/org/akraino/validation/ui/service/utils/SubmissionHelper.java b/ui/src/main/java/org/akraino/validation/ui/service/utils/SubmissionHelper.java index 7a36b23..8e45d73 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/utils/SubmissionHelper.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/utils/SubmissionHelper.java @@ -1,17 +1,17 @@ /* * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. * - * Licensed 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 + * Licensed 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 + * 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. + * 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. */ package org.akraino.validation.ui.service.utils; diff --git a/ui/src/main/resources/app.properties b/ui/src/main/resources/app.properties deleted file mode 100644 index 76281ca..0000000 --- a/ui/src/main/resources/app.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. -# -# Licensed 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. - -#LDAP details for authentication & authorization -apacheds.ldap.url = ldap://localhost:10389/dc=akraino,dc=org - -#DB connection properties -postgres.db.url = jdbc:postgresql://localhost:6432/admin -postgres.db.user.name = admin - diff --git a/ui/src/main/resources/hibernate.properties b/ui/src/main/resources/hibernate.properties deleted file mode 100644 index a66c68f..0000000 --- a/ui/src/main/resources/hibernate.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. -# -# Licensed 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. - -hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect -hibernate.show_sql = true -hibernate.c3p0.min_size = 5 -hibernate.c3p0.max_size = 20 -hibernate.c3p0.acquire_increment = 2 -hibernate.c3p0.max_statements = 150 -hibernate.jdbc.use_streams_for_binary = true \ No newline at end of file diff --git a/ui/src/main/resources/key.properties b/ui/src/main/resources/key.properties new file mode 100644 index 0000000..fa7598a --- /dev/null +++ b/ui/src/main/resources/key.properties @@ -0,0 +1,41 @@ +### +# ============LICENSE_START========================================== +# ONAP Portal SDK +# =================================================================== +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the “License”); +# you may not use this software 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. +# +# Unless otherwise specified, all documentation contained herein is licensed +# under the Creative Commons License, Attribution 4.0 Intl. (the “License”); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# +# https://creativecommons.org/licenses/by/4.0/ +# +# Unless required by applicable law or agreed to in writing, documentation +# 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. +# +# ============LICENSE_END============================================ +# +# +### + +# Properties read by the ECOMP Framework library (epsdk-fw) + +cipher.enc.key = AGLDdG4D04BKm2IxIWEr8o== \ No newline at end of file diff --git a/ui/src/main/resources/log4j.properties b/ui/src/main/resources/log4j.properties deleted file mode 100644 index 4484b3f..0000000 --- a/ui/src/main/resources/log4j.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. -# -# Licensed 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. - -# Direct log messages to a log file -log4j.rootLogger=INFO, stdout, file -log4j.logger.org.hibernate.SQL=TRACE, stdout - -# Redirect log messages to console -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Threshold=WARN -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n - -# Redirect log messages to a log file, support file rolling. -log4j.appender.file=org.apache.log4j.RollingFileAppender -log4j.appender.stdout.Threshold=DEBUG -#log4j.appender.file.File=C:\\Users\\ld261v\\Downloads\\ak1.log -log4j.appender.file.File=/usr/local/tomcat/logs/akraino.log -log4j.appender.file.MaxFileSize=5MB -log4j.appender.file.MaxBackupIndex=10 -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/ui/src/main/resources/logback.xml b/ui/src/main/resources/logback.xml new file mode 100644 index 0000000..9c7102e --- /dev/null +++ b/ui/src/main/resources/logback.xml @@ -0,0 +1,371 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${defaultLoggerPattern} + + + + + + + + + + + + ${logDirectory}/${generalLogName}.log + + + ${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip + + + 30 + 3GB + + + + ${applicationLoggerPattern} + + + + + + 256 + + true + + + + + + + + + + + + + + + + + + + ${logDirectory}/${auditLogName}.log + + + ${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip + + + 30 + 3GB + + + + ${auditLoggerPattern} + + + + 256 + + + + + ${logDirectory}/${metricsLogName}.log + + + ${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip + + + 30 + 3GB + + + + ${metricsLoggerPattern} + + + + + + 256 + + + + + ${logDirectory}/${errorLogName}.log + + + ${logDirectory}/${errorLogName}.%d{yyyy-MM-dd}.log.zip + + + 30 + 3GB + + + + ${errorLoggerPattern} + + + + + 256 + + + + + ${debugLogDirectory}/${debugLogName}.log + + + ${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip + + + 30 + 3GB + + + + ${defaultLoggerPattern} + + + + + 256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/src/main/resources/music.properties b/ui/src/main/resources/music.properties new file mode 100644 index 0000000..fa89354 --- /dev/null +++ b/ui/src/main/resources/music.properties @@ -0,0 +1,31 @@ +music.session.keyspace = test_session +music.session.attr.tables = spring_session_attributes +music.session.meta.tables = spring_session +#music.cache = false +music.serialize.compress = true +music.session.max.inactive.interval.seconds = 1800 +music.exclude.api = /portalApi/healthCheck,/portalApi/healthCheckSuspend,/portalApi/healthCheckResume,/auxapi/.* +#By default it's eventual +music.atomic.get = false +music.atomic.put = false +#how often the session clean up would happen (hour) +music.cleanup.frequency = 6 +#how old of session need to be cleaned up (hour) +music.cleanup.threshold = 10 +music.enable = false +cassandra.host=135.197.226.103 +zookeeper.host=135.197.226.103, 135.197.226.108, 135.197.226.119 +cassandra.user=cassandra +cassandra.password=cassandra + +#Music API +#music.endpoint = http://vm-ep-dev4.research.att.com/MUSIC/rest/ +#music.version = v2 +#music.keyspace = keyspaces +#music.x.minor.version = 3 +#music.x.patch.version = 0 +#music.ns = com.att.ecomp.portal.demeter +#music.user.id = m00468@portal.ecomp.att.com +#music.password = friedG33nS- +#music.consistency.info = type +#music.consistency.info.value = eventual \ No newline at end of file diff --git a/ui/src/main/resources/portal.properties b/ui/src/main/resources/portal.properties new file mode 100644 index 0000000..5434599 --- /dev/null +++ b/ui/src/main/resources/portal.properties @@ -0,0 +1,70 @@ +### +# ============LICENSE_START========================================== +# ONAP Portal SDK +# =================================================================== +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the â??Licenseâ?); +# you may not use this software 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. +# +# Unless otherwise specified, all documentation contained herein is licensed +# under the Creative Commons License, Attribution 4.0 Intl. (the â??Licenseâ?); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# +# https://creativecommons.org/licenses/by/4.0/ +# +# Unless required by applicable law or agreed to in writing, documentation +# 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. +# +# ============LICENSE_END============================================ +# +# +### +# Properties read by ECOMP Framework library, ecompFW.jar + +########################################################################## +# The following properties should NOT be changed by partner applications. +########################################################################## + +portal.api.prefix = /api +max.idle.time = 5 +user.attribute.name = user_attribute + +#Use REST API instead of UEB to fetch the functional menu data +use_rest_for_functional_menu=true + +########################################################################## +# The following properties MUST be changed by partner applications. +########################################################################## + +# Name of java class that implements the OnBoardingApiService interface. +portal.api.impl.class = org.onap.portalapp.service.OnBoardingApiServiceImpl + +# URL of the Portal where this app is onboarded +ecomp_redirect_url = https://portal.onap.org/ecompportal/process_csp + +# URL of the ECOMP Portal REST API +ecomp_rest_url = http://portal.onap.org:50580/ecompportal/auxapi + +# Applications do not need to run a UEB listener after 1607. +ueb_listeners_enable = false + +# UEB Configuration +# If key ueb_listeners_enable is set to false, +# then only the ueb_app_key is required. +ueb_app_key = REPLACE-ME-UEB-APP-KEY-EPSDK-APP-OS diff --git a/ui/src/main/webapp/.eslintrc b/ui/src/main/webapp/.eslintrc index d1e9531..8cc24f1 100644 --- a/ui/src/main/webapp/.eslintrc +++ b/ui/src/main/webapp/.eslintrc @@ -4,6 +4,7 @@ "console": 1, "confirm":1, "localStorage":1, - "window":1 + "window":1, + "appDS2":1 } } diff --git a/ui/src/main/webapp/WEB-INF/conf/system.properties b/ui/src/main/webapp/WEB-INF/conf/system.properties new file mode 100644 index 0000000..6276357 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/conf/system.properties @@ -0,0 +1,85 @@ +# +# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. +# +# Licensed 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. +# + +########################################################################## +# The following properties should NOT be changed by partner applications. +########################################################################## + +application_user_id = 30000 +post_default_role_id = 16 +clustered = true + +#Enable Fusion Mobile capabilities for the application +mobile_enable = false + +# Cache config file is needed on the classpath +cache_config_file_path = /WEB-INF/classes/cache.ccf +cache_switch = 199 +cache_load_on_startup = false + +user_name = fullName +decryption_key = AGLDdG4D04BKm2IxIWEr8o== + +########################################################################## +# The following properties REQUIRE changes by partner applications. +########################################################################## + +#Mysql +db.driver = org.mariadb.jdbc.Driver +db.userName = root +db.encrypt_flag = false +db.hib.dialect = org.hibernate.dialect.MySQLDialect +db.min_pool_size = 5 +db.max_pool_size = 10 +#db.test_connection_on_checkout = false +#db.preferred_test_query = SELECT 1 from FN_USER + +hb.dialect = org.hibernate.dialect.MySQLDialect +# SQL statements are logged to stdout +hb.show_sql = true +hb.idle_connection_test_period = 3600 + +app_display_name = Akraino Blueprint Validation UI +# license file area +files_path = /tmp + +#element map files +element_map_file_path = app/fusionapp/files/ +element_map_icon_path = app/fusionapp/icons/ + +#Cron Schedules have 6 required fields and 1 optional field: +# Seconds Minutes Hours Day-of-Month Month Day-of-Week Year +log_cron = 0 0/1 * * * ?; +#sessiontimeout_feed_cron = 0 * * * * ? * + +# Link shown in Help menu +contact_us_link = https://wiki.onap.org/display/DW/Portal + +# An Unique 128-bit value defined to identify a specific version +# of an application deployed on a specific virtual machine. +# This value must be generated and updated by the application +# which is using the ECOMP SDK at the time of its deployment. +# Online Unique UUID generator - https://www.uuidgenerator.net/ +instance_uuid=8da691c9-987d-43ed-a358-00ac2f35685d + +# Application base URL has the host and app context only; a proper prefix of the on-boarded URL. +# Only required for applications using FE/BE separation. For example: +# app_base_url = https://www.onap.org/app_context/ + +#authenticate user server +authenticate_user_server=http://todo_enter_auth_server_hostname:8383/openid-connect-server-webapp/allUsers +#cookie domain +cookie_domain = onap.org \ No newline at end of file diff --git a/ui/src/main/webapp/WEB-INF/defs/definitions.xml b/ui/src/main/webapp/WEB-INF/defs/definitions.xml new file mode 100644 index 0000000..ec0ec0d --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/defs/definitions.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + diff --git a/ui/src/main/webapp/WEB-INF/fusion/conf/fusion.properties b/ui/src/main/webapp/WEB-INF/fusion/conf/fusion.properties new file mode 100644 index 0000000..8ee0a95 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/conf/fusion.properties @@ -0,0 +1,35 @@ +# login settings +login_method_backdoor = backdoor +login_method_attribute_name = login_method + +# These properties will be removed after SingleSignOnController is cleaned +authentication_mechanism = BOTH +login_method_csp = csp +login_method_web_junction = web_junction + +#login message +login.error.hrid.empty = Login failed, please contact system administrator. +login.error.hrid.not-found = User not found, please contact system administrator. +login.error.user.inactive = Account is disabled, please contact system administrator. + +# User Session settings +user_attribute_name = user +roles_attribute_name = roles +role_function_list = role_function_list +role_functions_attribute_name = role_functions + +# Import-user LDAP settings +post_initial_context_factory = com.sun.jndi.ldap.LdapCtxFactory +post_provider_url = ldap://ldap.mycompany.com:389 +post_security_principal = ou=people,o=mycompany,c=us +post_max_result_size = 499 + +# menu settings +menu_query_name = menuData +application_menu_set_name = APP +application_menu_attribute_name = applicationMenuData +business_direct_menu_set_name = BD +business_direct_menu_attribute_name = businessDirectMenuData + +# Role settings +sys_admin_role_id = 1 diff --git a/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp new file mode 100644 index 0000000..1363d15 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/footer.jsp @@ -0,0 +1,17 @@ + + + + +
+
+ +
+
\ No newline at end of file diff --git a/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp new file mode 100644 index 0000000..94213a2 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/header.jsp @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/left-menu.jsp b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/left-menu.jsp new file mode 100644 index 0000000..66e7da3 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/jsp/ds2/left-menu.jsp @@ -0,0 +1,778 @@ +<%-- + ============LICENSE_START========================================== + ONAP Portal SDK + =================================================================== + Copyright © 2017 AT&T Intellectual Property. All rights reserved. + =================================================================== + + Unless otherwise specified, all software contained herein is licensed + under the Apache License, Version 2.0 (the “License”); + you may not use this software 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. + + Unless otherwise specified, all documentation contained herein is licensed + under the Creative Commons License, Attribution 4.0 Intl. (the “License”); + you may not use this documentation except in compliance with the License. + You may obtain a copy of the License at + + https://creativecommons.org/licenses/by/4.0/ + + Unless required by applicable law or agreed to in writing, documentation + 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. + + ============LICENSE_END============================================ + + + --%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page isELIgnored="false"%> +<%@ page import="org.onap.portalsdk.core.util.SystemProperties"%> +<%@ page import="org.onap.portalsdk.core.onboarding.util.PortalApiProperties"%> +<%@ page import="org.onap.portalsdk.core.onboarding.util.PortalApiConstants"%> +<%@ page import="org.onap.portalsdk.core.domain.MenuData"%> + + + + + + + + +" /> +" /> + +<% + String contactUsLink = SystemProperties.getProperty(SystemProperties.CONTACT_US_LINK); + String redirectUrl = PortalApiProperties.getProperty(PortalApiConstants.ECOMP_REDIRECT_URL); + String portalUrl = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/process_csp"; + String getAccessLink = redirectUrl.substring(0, redirectUrl.lastIndexOf('/')) + "/get_access"; +%> + + + + + + +<%@include file="/WEB-INF/fusion/jsp/ebz/loginSnippet.html" %> + +
+
+ +
+
+
+ + +
+
+
+
+
  • +
    +
  • +
    +
    + +
    +
    + + +
    + + +
    +
    +
    +
  • + Unable to load menus +
  • +
    + +
    +
  • +
    + + +
    +
  • +
  •  
  • +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + +     {{app_name}} + +
    +
    +
    +
    + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/ui/src/main/webapp/WEB-INF/fusion/orm/Analytics.hbm.xml b/ui/src/main/webapp/WEB-INF/fusion/orm/Analytics.hbm.xml new file mode 100644 index 0000000..95d1468 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/orm/Analytics.hbm.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + select repId, orderNo, roleId, userId, readOnlyYn from ReportUserRole where + repId = :report_id and userId is not null + + + + select repId, orderNo, roleId, userId, readOnlyYn from ReportUserRole where + repId = :report_id and roleId is not null + + + + delete from ReportUserRole where repId = :report_id and userId =:user_id + + + + delete from ReportUserRole where repId = :report_id and roleId =:role_id + + diff --git a/ui/src/main/webapp/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml b/ui/src/main/webapp/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml new file mode 100644 index 0000000..6966eec --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/fusion/orm/RNoteBookIntegration.hbm.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/src/main/webapp/WEB-INF/index.jsp b/ui/src/main/webapp/WEB-INF/index.jsp new file mode 100644 index 0000000..8f71b2a --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/index.jsp @@ -0,0 +1,40 @@ +<%-- +============LICENSE_START========================================== + 3 ONAP Portal SDK + 4 =================================================================== + 5 Copyright © 2017 AT&T Intellectual Property. All rights reserved. + 6 =================================================================== + 7 + 8 Unless otherwise specified, all software contained herein is licensed + 9 under the Apache License, Version 2.0 (the ?License?); + 10 you may not use this software except in compliance with the License. + 11 You may obtain a copy of the License at + 12 + 13 http://www.apache.org/licenses/LICENSE-2.0 + 14 + 15 Unless required by applicable law or agreed to in writing, software + 16 distributed under the License is distributed on an "AS IS" BASIS, + 17 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + 18 See the License for the specific language governing permissions and + 19 limitations under the License. + 20 + 21 Unless otherwise specified, all documentation contained herein is licensed + 22 under the Creative Commons License, Attribution 4.0 Intl. (the ?License?); + 23 you may not use this documentation except in compliance with the License. + 24 You may obtain a copy of the License at + 25 + 26 https://creativecommons.org/licenses/by/4.0/ + 27 + 28 Unless required by applicable law or agreed to in writing, documentation + 29 distributed under the License is distributed on an "AS IS" BASIS, + 30 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + 31 See the License for the specific language governing permissions and + 32 limitations under the License. + 33 + 34 ============LICENSE_END============================================. +--%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +<%-- Redirected because we can't set the welcome page to a virtual URL. --%> +<%-- Forward to the intended start page to reduce frustration for new users. --%> + diff --git a/ui/src/main/webapp/WEB-INF/jsp/login.jsp b/ui/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000..c5b43e0 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,114 @@ +<%-- +Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + +Licensed 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. +--%> +<%@ page import="org.onap.portalsdk.core.util.SystemProperties"%> + +<% + // Name is defined by app; do not throw if missing + final String appDisplayName = SystemProperties.containsProperty(SystemProperties.APP_DISPLAY_NAME) + ? SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + : SystemProperties.APP_DISPLAY_NAME; +%> + + + + + + + Login + + + + +
    +
    +
    ${model.error}
    +
    +
    +
    +
    +
    +
    + + + diff --git a/ui/src/main/webapp/WEB-INF/jsp/login_external.jsp b/ui/src/main/webapp/WEB-INF/jsp/login_external.jsp new file mode 100644 index 0000000..9d389d0 --- /dev/null +++ b/ui/src/main/webapp/WEB-INF/jsp/login_external.jsp @@ -0,0 +1,114 @@ +<%-- +Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + +Licensed 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. +--%> +<%@ page import="org.onap.portalsdk.core.util.SystemProperties"%> + +<% + // Name is defined by app; do not throw if missing + final String appDisplayName = SystemProperties.containsProperty(SystemProperties.APP_DISPLAY_NAME) + ? SystemProperties.getProperty(SystemProperties.APP_DISPLAY_NAME) + : SystemProperties.APP_DISPLAY_NAME; +%> + + + + + + + + + + + +
    +
    +
    ${model.error}
    +
    +
    +
    +
    +
    +
    + + + diff --git a/ui/src/main/webapp/WEB-INF/web.xml b/ui/src/main/webapp/WEB-INF/web.xml old mode 100755 new mode 100644 index 0ef6de8..92a2d59 --- a/ui/src/main/webapp/WEB-INF/web.xml +++ b/ui/src/main/webapp/WEB-INF/web.xml @@ -1,25 +1,48 @@ - + -Licensed 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 + AECBlueprintValidationUI - 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. ---> + + 30 + COOKIE + + + SecurityXssFilter + org.akraino.validation.ui.filter.SecurityXssFilter + + + + SecurityXssFilter + /* + + + springSessionRepositoryFilter + org.onap.portalapp.music.filter.MusicSessionRepositoryFilter + + + + springSessionRepositoryFilter + /* + REQUEST + ERROR + + + /WEB-INF/jsp/error.jsp + - - - - Archetype Created Web Application - - - + \ No newline at end of file diff --git a/ui/src/main/webapp/resources/js/App.Config.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/App.Config.js similarity index 93% rename from ui/src/main/webapp/resources/js/App.Config.js rename to ui/src/main/webapp/app/AECBlueprintValidationUI/App.Config.js index 8fb450a..6186a2b 100644 --- a/ui/src/main/webapp/resources/js/App.Config.js +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/App.Config.js @@ -14,6 +14,6 @@ * limitations under the License. */ -var config_module = angular.module('App.config', []); +var config_module = angular.module('App.Config', []); config_module.constant('appContext', '/AECBlueprintValidationUI'); config_module.constant('refreshPeriod', '5000'); // in msecs diff --git a/ui/src/main/webapp/resources/js/App.Services.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/App.Services.js similarity index 96% rename from ui/src/main/webapp/resources/js/App.Services.js rename to ui/src/main/webapp/app/AECBlueprintValidationUI/App.Services.js index f0887ad..8fa4ce6 100644 --- a/ui/src/main/webapp/resources/js/App.Services.js +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/App.Services.js @@ -14,10 +14,9 @@ * limitations under the License. */ -var AECBlueprintValidationUIApp = angular - .module('BlueprintValidationUIManagement'); +var services = angular.module('App.Services', [ 'App.Config' ]); -AECBlueprintValidationUIApp.factory('restAPISvc', [ +services.factory('restAPISvc', [ '$http', 'appContext', function($http, appContext) { diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissions.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissions.js new file mode 100644 index 0000000..9730d6c --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissions.js @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +var appDS2 = angular.module("AECCommittedSubmissions", [ 'ngRoute', + 'ngMessages', 'modalServices', 'ngCookies', 'b2b.att', 'gridster', + 'ui.bootstrap', 'ui.bootstrap.modal', 'App.Config', 'App.Services' ]); diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissionsController.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissionsController.js new file mode 100644 index 0000000..538793e --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/AECCommittedSubmissionsController.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +var app = angular.module('AECCommittedSubmissions'); + +app.controller('AECCommittedSubmissionsController', function($scope, + restAPISvc, $interval, refreshPeriod) { + + $scope.submissionIdList = []; + + restAPISvc.getRestAPI("/api/submission/", function(data) { + $scope.submissions = data; + }); + + $scope.refreshCommittedSubmissions = function() { + restAPISvc.getRestAPI("/api/submission/", function(data) { + $scope.submissions = data; + }); + } + + $scope.modifySubmissionIdList = function(id) { + if ($scope.submissionIdList.indexOf(id) === -1) { + $scope.submissionIdList.push(id); + } else { + $scope.submissionIdList.splice($scope.submissionIdList.indexOf(id), + 1); + } + } + + $scope.deleteSubmissions = function() { + var confirmation = confirm("Are you sure?"); + if (confirmation == true) { + angular.forEach($scope.submissionIdList, function(id) { + var submission = { + "submissionId" : id + }; + restAPISvc.deleteRestAPI("/api/submission/", submission); + }); + } + } + + $interval(function() { + $scope.refreshCommittedSubmissions(); + }, refreshPeriod); + +}); diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissions.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissions.html new file mode 100644 index 0000000..8886182 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissions.html @@ -0,0 +1,178 @@ + + + + + + + + + +Committed Submissions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissionsTemplate.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissionsTemplate.html new file mode 100644 index 0000000..784810b --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissionsTemplate.html @@ -0,0 +1,305 @@ + +
    + + + +

    Committed Submissions

    + +
    + +
    + +
    + +
    + + +
    + + +
    + +
    + + + +
    + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
     Id Status Blueprint VersionLayer Desired Timeslot Url of result 
    {{ + submission.submissionId }}{{ + submission.submissionStatus }}{{ + submission.blueprintInstanceForValidation.blueprint.blueprintName + }}{{ + submission.blueprintInstanceForValidation.version }}{{ + submission.blueprintInstanceForValidation.layer }}Lab: + {{ submission.timeslot.lab.lab }} Start date and time: {{ + submission.timeslot.startDateTime }} + {{ + submission.nexusResultUrl }}
    + +
    +
    + +
    + +
    + +
    +
    +
    + + + +
    \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/Route.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/Route.js new file mode 100644 index 0000000..48a9a5a --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/CommittedSubmissions/Route.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +appDS2 + .config(function($routeProvider) { + $routeProvider + .otherwise({ + templateUrl : 'app/AECBlueprintValidationUI/CommittedSubmissions/CommittedSubmissionsTemplate.html', + controller : "AECCommittedSubmissionsController" + }); + }); \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionId.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionId.js new file mode 100644 index 0000000..e4d0b89 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionId.js @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +var appDS2 = angular.module("AECGetBySubmissionId", [ 'ngRoute', 'ngMessages', + 'modalServices', 'ngCookies', 'b2b.att', 'gridster', 'ui.bootstrap', + 'ui.bootstrap.modal', 'App.Services' ]); \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionIdController.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionIdController.js new file mode 100644 index 0000000..d53bcc7 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/AECGetBySubmissionIdController.js @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +var app = angular.module('AECGetBySubmissionId'); +app + .controller( + 'AECGetBySubmissionIdController', + function($scope, restAPISvc) { + + initialize(); + + function initialize() { + $scope.results = []; + $scope.resultsLayers = []; + $scope.resultsLayerTestSuitesNames = []; + $scope.selectedRobotTestResult = []; + restAPISvc + .getRestAPI( + "/api/submission/", + function(data) { + $scope.submissions = data; + $scope.submissionsForDisplay = []; + angular + .forEach( + $scope.submissions, + function( + submissionData) { + var temp = "id: " + + submissionData.submissionId + + " blueprint: " + + submissionData.blueprintInstanceForValidation.blueprint.blueprintName + + " version: " + + submissionData.blueprintInstanceForValidation.version + + " layer: " + + submissionData.blueprintInstanceForValidation.layer + + " lab: " + + submissionData.timeslot.lab.lab + + " Start date and time: " + + submissionData.timeslot.startDateTime + /* + * + " duration: " + + * submissionData.blueprintInstanceForValidation.timeslot.duration + */; + $scope.submissionsForDisplay + .push(temp); + }); + }); + } + $scope.selectedSubmissionChange = function( + selectedSubmission) { + $scope.results = []; + $scope.resultsLayers = []; + $scope.resultsLayerTestSuitesNames = []; + $scope.selectedRobotTestResult = []; + var id = selectedSubmission.substring( + selectedSubmission.indexOf("id:") + 4, + selectedSubmission.indexOf("blueprint") - 1); + restAPISvc + .getRestAPI( + "/api/results/getBySubmissionId/" + id, + function(data) { + if (data !== undefined) { + $scope.results = data; + angular + .forEach( + $scope.results, + function(result) { + $scope.resultsLayers + .push(result.blueprintLayer); + }); + } else { + confirm("Error when committing the submission"); + } + }); + } + + $scope.selectedResultsLayerChange = function(selectedLayer) { + $scope.resultsLayerTestSuitesNames = []; + $scope.robotTestResults = []; + $scope.selectedRobotTestResult = []; + var selectedLayerResult = []; + angular.forEach($scope.results, function(result) { + if (result.blueprintLayer === selectedLayer) { + selectedLayerResult = result; + } + }); + $scope.robotTestResults = selectedLayerResult.robotTestResults; + angular.forEach($scope.robotTestResults, function( + robotTestResult) { + $scope.resultsLayerTestSuitesNames + .push(robotTestResult.name); + }); + } + + $scope.selectedTestSuitesNameChange = function( + selectedTestSuiteName) { + angular + .forEach( + $scope.robotTestResults, + function(robotTestResult) { + if (robotTestResult.name.trim() === selectedTestSuiteName + .trim()) { + $scope.selectedRobotTestResult = robotTestResult; + } + }); + } + + }); diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionId.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionId.html new file mode 100644 index 0000000..437c42f --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionId.html @@ -0,0 +1,178 @@ + + + + + + + + + +Get By Submission Id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionIdTemplate.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionIdTemplate.html new file mode 100644 index 0000000..3e86330 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionIdTemplate.html @@ -0,0 +1,206 @@ + + +
    + + +

    Get results by submission

    + +

    Select Submission:

    + +
    + +
    + +

    Select a blueprint layer of the selected + submission:

    +
    + +
    + +

    Select a test suite of the selected + (submission, layer) pair in order to be displayed:

    +
    + +
    + + +


    + +
    + +

    + Test info +

    + +

    +

    Name: {{selectedRobotTestResult.name}}

    +

    Generated: {{selectedRobotTestResult.robot.generated}}

    +

    Generator: {{selectedRobotTestResult.robot.generator}}

    +

    Errors: {{selectedRobotTestResult.robot.errors}}

    + +

    +

    + Test Statistics +

    +

    + + + + + + + + + + + + + + + + + + + +
    +

    +

     Total statistics 

    Total 

    Pass 

    Fail 

    Pass / Fail 

    {{ + stat.content }}{{ + (stat.fail * 1) + (stat.pass*1) }}{{ + stat.pass }}{{ + stat.fail}} +
    +
    +
    +
    +
    + +
    + +

    + + + + + + + + + + + + + + + + + + + +
    +

    +

     Statistics by Tag 

    Total 

    Pass 

    Fail 

    Pass / Fail 

    {{ + stat.content }}{{ + (stat.fail * 1) + (stat.pass*1) }}{{ + stat.pass }}{{ + stat.fail}} +
    +
    +
    +
    +
    + +
    + +

    + + + + + + + + + + + + + + + + + + + +
    +

    +

     Statistics by Suite 

    Total 

    Pass 

    Fail 

    Pass / Fail 

    {{ + stat.content }}{{ + (stat.fail * 1) + (stat.pass*1) }}{{ + stat.pass }}{{ + stat.fail}} +
    +
    +
    +
    +
    + +
    +
    \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/Route.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/Route.js new file mode 100644 index 0000000..58c09fd --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/GetBySubmissionId/Route.js @@ -0,0 +1,9 @@ +appDS2 + .config(function($routeProvider) { + $routeProvider + + .otherwise({ + templateUrl : 'app/AECBlueprintValidationUI/GetBySubmissionId/GetBySubmissionIdTemplate.html', + controller : "AECGetBySubmissionIdController" + }); + }); \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmission.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmission.js new file mode 100644 index 0000000..6d094b3 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmission.js @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. + * + * Licensed 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. + */ + +var appDS2 = angular.module("AECNewSubmission", [ 'ngRoute', 'ngMessages', + 'modalServices', 'ngCookies', 'b2b.att', 'gridster', 'ui.bootstrap', + 'ui.bootstrap.modal', 'App.Services' ]); \ No newline at end of file diff --git a/ui/src/main/webapp/resources/js/AECNewSubmissionController.js b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmissionController.js similarity index 62% rename from ui/src/main/webapp/resources/js/AECNewSubmissionController.js rename to ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmissionController.js index 1cfafc4..f7d0085 100644 --- a/ui/src/main/webapp/resources/js/AECNewSubmissionController.js +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/AECNewSubmissionController.js @@ -14,26 +14,24 @@ * limitations under the License. */ -var AECBlueprintValidationUIApp = angular - .module('BlueprintValidationUIManagement'); - -AECBlueprintValidationUIApp +var app = angular.module('AECNewSubmission'); +app .controller( 'AECNewSubmissionController', - function($scope, appContext, restAPISvc) { + function($scope, restAPISvc) { initialize(); function initialize() { restAPISvc .getRestAPI( - "/api/blueprintInstance/", + "/api/blueprintInstanceForValidation/", function(data) { - $scope.blueprintInstances = data; + $scope.blueprintInstancesForValidation = data; $scope.blueprintNames = []; angular .forEach( - $scope.blueprintInstances, + $scope.blueprintInstancesForValidation, function( blueprintInstance) { if ($scope.blueprintNames @@ -43,14 +41,30 @@ AECBlueprintValidationUIApp } }); }); + restAPISvc.getRestAPI("/api/timeslots/", + function(data) { + $scope.timeslots = data; + $scope.declerativeTimeslots = []; + angular.forEach($scope.timeslots, function( + timeslot) { + var temp = "id: " + timeslot.timeslotId + + " Start date and time: " + + timeslot.startDateTime + /* + * + " duration(in sec) :" + + * blueprintInstance["timeslot"].duration + */ + + " lab :" + timeslot.lab.lab; + $scope.declerativeTimeslots.push(temp); + }); + }); } $scope.selectedBluePrintNameChange = function() { $scope.blueprintVersions = []; $scope.blueprintLayers = []; - $scope.declerativeTimeslots = []; angular .forEach( - $scope.blueprintInstances, + $scope.blueprintInstancesForValidation, function(blueprintInstance) { if ($scope.selectedBlueprintName === blueprintInstance["blueprint"]["blueprintName"]) { if ($scope.blueprintVersions @@ -63,10 +77,9 @@ AECBlueprintValidationUIApp } $scope.selectedBluePrintVersionChange = function() { $scope.blueprintLayers = []; - $scope.declerativeTimeslots = []; angular .forEach( - $scope.blueprintInstances, + $scope.blueprintInstancesForValidation, function(blueprintInstance) { if ($scope.selectedBlueprintName === blueprintInstance["blueprint"]["blueprintName"]) { if ($scope.selectedBlueprintVersion === blueprintInstance["version"]) { @@ -79,61 +92,41 @@ AECBlueprintValidationUIApp } }); } - $scope.selectedBluePrintLayerChange = function() { - $scope.declerativeTimeslots = []; - angular - .forEach( - $scope.blueprintInstances, - function(blueprintInstance) { - if ($scope.selectedBlueprintName === blueprintInstance["blueprint"]["blueprintName"]) { - if ($scope.selectedBlueprintVersion === blueprintInstance["version"]) { - if ($scope.selectedBlueprintLayer === blueprintInstance["layer"]) { - var temp = "id: " - + blueprintInstance["timeslot"].timeslotId - + " Start date and time: " - + blueprintInstance["timeslot"].startDateTime - + " duration(in sec) :" - + blueprintInstance["timeslot"].duration - + " lab :" - + blueprintInstance["timeslot"].lab; - if ($scope.declerativeTimeslots - .indexOf(temp) === -1) { - $scope.declerativeTimeslots - .push(temp); - } - } - } - } - }); - } + $scope.submit = function() { var finalBlueprint; + var finalTimeslot; angular .forEach( - $scope.blueprintInstances, + $scope.blueprintInstancesForValidation, function(blueprintInstance) { if (blueprintInstance["blueprint"]["blueprintName"] === $scope.selectedBlueprintName) { if (blueprintInstance["version"] === $scope.selectedBlueprintVersion) { if (blueprintInstance["layer"] === $scope.selectedBlueprintLayer) { - var selectedDeclerativeTimeslotId = $scope.selectedDeclerativeTimeslot - .substring( - $scope.selectedDeclerativeTimeslot - .indexOf("id:") + 4, - $scope.selectedDeclerativeTimeslot - .indexOf("Start date and time:") - 1); - if (selectedDeclerativeTimeslotId - .toString() - .trim() === blueprintInstance["timeslot"]["timeslotId"] - .toString() - .trim()) { - finalBlueprint = blueprintInstance; - } + finalBlueprint = blueprintInstance; } } } }); + var selectedDeclerativeTimeslotId = $scope.selectedDeclerativeTimeslot + .substring( + $scope.selectedDeclerativeTimeslot + .indexOf("id:") + 4, + $scope.selectedDeclerativeTimeslot + .indexOf("Start date and time:") - 1); + angular + .forEach( + $scope.timeslots, + function(timeslot) { + if (selectedDeclerativeTimeslotId + .toString().trim() === timeslot.timeslotId + .toString().trim()) { + finalTimeslot = timeslot; + } + }); var submission = { - "blueprintInstance" : finalBlueprint + "blueprintInstanceForValidation" : finalBlueprint, + "timeslot" : finalTimeslot }; restAPISvc .postRestAPI( diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmission.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmission.html new file mode 100644 index 0000000..e551449 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmission.html @@ -0,0 +1,178 @@ + + + + + + + + + +New Submission + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + \ No newline at end of file diff --git a/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmissionTemplate.html b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmissionTemplate.html new file mode 100644 index 0000000..a84fa05 --- /dev/null +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/NewSubmissionTemplate.html @@ -0,0 +1,73 @@ + + +
    +
    +

    New Submission

    +

    Submission form

    + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    diff --git a/ui/src/main/java/org/akraino/validation/ui/common/ServiceInitializationListener.java b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/Route.js similarity index 60% rename from ui/src/main/java/org/akraino/validation/ui/common/ServiceInitializationListener.java rename to ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/Route.js index e4836ad..6f95fcc 100644 --- a/ui/src/main/java/org/akraino/validation/ui/common/ServiceInitializationListener.java +++ b/ui/src/main/webapp/app/AECBlueprintValidationUI/NewSubmission/Route.js @@ -13,18 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.akraino.validation.ui.common; -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.stereotype.Component; +appDS2 + .config(function($routeProvider) { + $routeProvider -@Component -public class ServiceInitializationListener implements ApplicationListener { - - @Override - public void onApplicationEvent(ContextRefreshedEvent event) { - - } - -} + .otherwise({ + templateUrl : 'app/AECBlueprintValidationUI/NewSubmission/NewSubmissionTemplate.html', + controller : "AECNewSubmissionController" + }); + }); \ No newline at end of file diff --git a/ui/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css b/ui/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css new file mode 100644 index 0000000..0aa5b85 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/external/b2b/css/b2b-angular/font_icons.css @@ -0,0 +1 @@ +/* font_icons.css is in open source - this empty file prevents 404 error in browser */ diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css b/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css new file mode 100644 index 0000000..f3b546d --- /dev/null +++ b/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ecomp-ionicons.css @@ -0,0 +1,288 @@ +@charset "UTF-8"; + +@font-face { + font-family: "Ionicons"; + src: url("../fonts/ionicons.eot?v=2.0.0"); + src: url("../fonts/ionicons.eot?v=2.0.0#iefix") + format("embedded-opentype"), + url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), + url("../fonts/ionicons.woff?v=2.0.0") format("woff"), + url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg"); + font-weight: normal; + font-style: normal; +} + +.ionicons, .icon-controls-upPRIMARY, .icon-arrows-download:before, + .icon-securityalerts-alertL:before, .icon-controls-add-maximize:before, + .icon-controls-add-maximize-circle:before, .icon-misc-time:before, + .icoSecurityalerts:before, .icon-apps-marketplace:before, + .icon-content-grid:before, .icon-documents-archive:before, + .icon-arrows-vertical-arrow-down:before, .icoArrows-download:before, + .icoArrows-incoming-call:before, .icon-arrows-outgoing-call:before, + .icon-arrows-upload:before, .icon-arrows-straight-arrow:before, + .icoArrows-vertical-arrow:before, .icon-people-userbookmark:before, + .icon-controls-check:before, .icon-chevron-down:before, + .icon-controls-down:before, .icon-controls-left:before, + .icon-controls-right:before, .icon-chevron-up:before, + .icoDocuments-report:before, .icon-edit:before, .icon-controls-up:before, + .icon-overview:before, .icon-settings:before, .icon-building-home:before, + .icon-documents-book:before, .icoDocuments-book-outline:before, + .icoDocuments-bookmarks:before, .icoDocuments-bookmarks-outline:before, + .icon-add-widget:before, .icon-documents-copy:before, + .icon-content-flag:before, .icon-primary-accordion-minus:before, + .icon-misc-piechart:before, .icon-misc-piechart-outline:before, + .icon-primary-accordion-plus:before, .icon-star:before, + .icon-building-door:before, .icon-content-gridguide:before, + .icon-user:before, .icon-people-oneperson:before, + .icon-people-oneperson-add:before, .icon-people-oneperson-stalker:before, + .icon-controls-pointer:before, .icon-arrows-replay-restart:before, + .icon-content-star:before, .icon-misc-trash:before, .icon-misc-pen:before, + .ion-navicon:before, .icon-primary-close:before, .close:before, + .reset-field:before, .icon-datanetwork-softwareasaservice:before, + .icon-datanetwork-messaging2:before, + .icon-controls-settingsconnectedactivity:before, .icon-arrows-upload:before + { + display: inline-block; + font-family: "Ionicons"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + text-rendering: auto; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icoSecurityalerts-alert:before { + content: "\f100"; +} + +.icon-arrows-download:before { + content: "\f41f"; +} + +.icon-controls-add-maximize:before { + content: "\f2c7"; +} + +.icon-controls-add-maximize-circle:before { + content: "\f359"; +} + +.icon-misc-time:before { + content: "\f35a"; +} + +.icoSecurityalerts:before { + content: "\f35b"; +} + +.icon-content-grid:before { + content: "\f35c"; +} + +.icon-documents-archive:before { + content: "\f2c9"; +} + +.icon-arrows-vertical-arrow-down:before { + content: "\f35d"; +} + +.icon-arrows-download:before { + content: "\f35e"; +} + +.icon-arrows-incoming-call:before { + content: "\f360"; +} + +.icoArrows-outgoing-call:before { + content: "\f362"; +} + +.icoArrows-upload:before { + content: "\f364"; +} + +.icoArrows-straight-arrow:before { + content: "\f30f"; +} + +.icon-arrows-vertical-arrow:before { + content: "\f366"; +} + +.icon-people-userbookmark:before { + content: "\f39f"; +} + +.icon-controls-check:before { + content: "\f121"; +} + +.icon-chevron-down:before { + content: "\f123"; +} + +.icon-controls-left:before { + content: "\f124"; +} + +.icon-controls-right:before { + content: "\f125"; +} + +.icon-chevron-up:before { + content: "\f126"; +} + +.icoDocuments-report:before { + content: "\f274"; +} + +.icon-overview:before { + content: "\f133"; +} + +.icon-controls-down:before { + content: "\f3d0"; +} + +.icon-controls-up:before { + content: "\f3d8"; +} + +.icon-documents-book:before { + content: "\f3e8"; +} + +.icoDocuments-book-outline:before { + content: "\f3e7"; +} + +.icoDocuments-bookmarks:before { + content: "\f3ea"; +} + +.icoDocuments-bookmarks-outline:before { + content: "\f3e9"; +} + +.icon-documents-copy:before { + content: "\f41c"; +} + +.icon-content-flag:before { + content: "\f42d"; +} + +.icon-primary-accordion-minus:before { + content: "\f463"; +} + +.icon-misc-piechart:before { + content: "\f484"; +} + +.icon-misc-piechart-outline:before { + content: "\f483"; +} + +.icon-primary-accordion-plus:before { + content: "\f48a"; +} + +.icon-building-door:before { + content: "\f29f"; +} + +.icon-content-gridguide:before { + content: "\f20d"; +} + +.icon-people-oneperson:before { + content: "\f213"; +} + +.icon-people-oneperson-add:before { + content: "\f211"; +} + +.icon-people-oneperson-stalker:before { + content: "\f212"; +} + +.icon-arrows-replay-restart:before { + content: "\f21c"; +} + +.icon-misc-trash:before { + content: "\f252"; +} + +.icon-arrows-upload:before { + content: "\f255"; +} + +.icon-user:before { + content: "\f213"; +} + +.icon-star:before { + content: "\f4b3"; +} + +.icon-edit:before { + content: "\f2bf"; +} + +.icon-settings:before { + content: "\f13d"; +} + +.icon-apps-marketplace:before { + content: "\f35c"; +} + +.icon-add-widget:before { + content: "\f3f0"; +} + +.icon-controls-upPRIMARY:before { + content: "\f3d8"; +} + +.icon-misc-pen:before { + content: "\f2bf"; +} + +.ion-navicon:before { + content: "\f20e"; +} + +.icon-building-home:before { + content: "\f144"; +} + +.icon-content-star:before { + content: "\f24e"; +} + +.icon-primary-close:before, .close:before, .reset-field:before { + content: "\f129"; +} + +.icon-datanetwork-softwareasaservice:before { + content: "\f40c"; +} + +.icon-datanetwork-messaging2:before { + content: "\f132"; +} + +.icon-controls-settingsconnectedactivity:before { + content: "\f411"; +} \ No newline at end of file diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css b/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css new file mode 100644 index 0000000..bf2665c --- /dev/null +++ b/ui/src/main/webapp/app/fusion/external/ds2/css/digital-ng-library/ionicons.css @@ -0,0 +1,3297 @@ +@charset "UTF-8"; +/*! + Ionicons, v2.0.0 + Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ + https://twitter.com/benjsperry https://twitter.com/ionicframework + MIT License: https://github.com/driftyco/ionicons + + Android-style icons originally built by Google’s + Material Design Icons: https://github.com/google/material-design-icons + used under CC BY http://creativecommons.org/licenses/by/4.0/ + Modified icons to fit ionicon’s grid from original. +*/ +@font-face { + font-family: "Ionicons"; + src: url("../fonts/ionicons.eot?v=2.0.0"); + src: url("../fonts/ionicons.eot?v=2.0.0#iefix") + format("embedded-opentype"), + url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"), + url("../fonts/ionicons.woff?v=2.0.0") format("woff"), + url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg"); + font-weight: normal; + font-style: normal; +} + +.ion, .ionicons, .ion-alert:before, .ion-alert-circled:before, + .ion-android-add:before, .ion-android-add-circle:before, + .ion-android-alarm-clock:before, .ion-android-alert:before, + .ion-android-apps:before, .ion-android-archive:before, + .ion-android-arrow-back:before, .ion-android-arrow-down:before, + .ion-android-arrow-dropdown:before, + .ion-android-arrow-dropdown-circle:before, + .ion-android-arrow-dropleft:before, + .ion-android-arrow-dropleft-circle:before, + .ion-android-arrow-dropright:before, + .ion-android-arrow-dropright-circle:before, + .ion-android-arrow-dropup:before, .ion-android-arrow-dropup-circle:before, + .ion-android-arrow-forward:before, .ion-android-arrow-up:before, + .ion-android-attach:before, .ion-android-bar:before, + .ion-android-bicycle:before, .ion-android-boat:before, + .ion-android-bookmark:before, .ion-android-bulb:before, + .ion-android-bus:before, .ion-android-calendar:before, + .ion-android-call:before, .ion-android-camera:before, + .ion-android-cancel:before, .ion-android-car:before, + .ion-android-cart:before, .ion-android-chat:before, + .ion-android-checkbox:before, .ion-android-checkbox-blank:before, + .ion-android-checkbox-outline:before, + .ion-android-checkbox-outline-blank:before, + .ion-android-checkmark-circle:before, .ion-android-clipboard:before, + .ion-android-close:before, .ion-android-cloud:before, + .ion-android-cloud-circle:before, .ion-android-cloud-done:before, + .ion-android-cloud-outline:before, .ion-android-color-palette:before, + .ion-android-compass:before, .ion-android-contact:before, + .ion-android-contacts:before, .ion-android-contract:before, + .ion-android-create:before, .ion-android-delete:before, + .ion-android-desktop:before, .ion-android-document:before, + .ion-android-done:before, .ion-android-done-all:before, + .ion-android-download:before, .ion-android-drafts:before, + .ion-android-exit:before, .ion-android-expand:before, + .ion-android-favorite:before, .ion-android-favorite-outline:before, + .ion-android-film:before, .ion-android-folder:before, + .ion-android-folder-open:before, .ion-android-funnel:before, + .ion-android-globe:before, .ion-android-hand:before, + .ion-android-hangout:before, .ion-android-happy:before, + .ion-android-home:before, .ion-android-image:before, + .ion-android-laptop:before, .ion-android-list:before, + .ion-android-locate:before, .ion-android-lock:before, + .ion-android-mail:before, .ion-android-map:before, .ion-android-menu:before, + .ion-android-microphone:before, .ion-android-microphone-off:before, + .ion-android-more-horizontal:before, .ion-android-more-vertical:before, + .ion-android-navigate:before, .ion-android-notifications:before, + .ion-android-notifications-none:before, + .ion-android-notifications-off:before, .ion-android-open:before, + .ion-android-options:before, .ion-android-people:before, + .ion-android-person:before, .ion-android-person-add:before, + .ion-android-phone-landscape:before, .ion-android-phone-portrait:before, + .ion-android-pin:before, .ion-android-plane:before, + .ion-android-playstore:before, .ion-android-print:before, + .ion-android-radio-button-off:before, .ion-android-radio-button-on:before, + .ion-android-refresh:before, .ion-android-remove:before, + .ion-android-remove-circle:before, .ion-android-restaurant:before, + .ion-android-sad:before, .ion-android-search:before, + .ion-android-send:before, .ion-android-settings:before, + .ion-android-share:before, .ion-android-share-alt:before, + .ion-android-star:before, .ion-android-star-half:before, + .ion-android-star-outline:before, .ion-android-stopwatch:before, + .ion-android-subway:before, .ion-android-sunny:before, + .ion-android-sync:before, .ion-android-textsms:before, + .ion-android-time:before, .ion-android-train:before, + .ion-android-unlock:before, .ion-android-upload:before, + .ion-android-volume-down:before, .ion-android-volume-mute:before, + .ion-android-volume-off:before, .ion-android-volume-up:before, + .ion-android-walk:before, .ion-android-warning:before, + .ion-android-watch:before, .ion-android-wifi:before, .ion-aperture:before, + .ion-archive:before, .ion-arrow-down-a:before, .ion-arrow-down-b:before, + .ion-arrow-down-c:before, .ion-arrow-expand:before, + .ion-arrow-graph-down-left:before, .ion-arrow-graph-down-right:before, + .ion-arrow-graph-up-left:before, .ion-arrow-graph-up-right:before, + .ion-arrow-left-a:before, .ion-arrow-left-b:before, + .ion-arrow-left-c:before, .ion-arrow-move:before, .ion-arrow-resize:before, + .ion-arrow-return-left:before, .ion-arrow-return-right:before, + .ion-arrow-right-a:before, .ion-arrow-right-b:before, + .ion-arrow-right-c:before, .ion-arrow-shrink:before, .ion-arrow-swap:before, + .ion-arrow-up-a:before, .ion-arrow-up-b:before, .ion-arrow-up-c:before, + .ion-asterisk:before, .ion-at:before, .ion-backspace:before, + .ion-backspace-outline:before, .ion-bag:before, + .ion-battery-charging:before, .ion-battery-empty:before, + .ion-battery-full:before, .ion-battery-half:before, .ion-battery-low:before, + .ion-beaker:before, .ion-beer:before, .ion-bluetooth:before, + .ion-bonfire:before, .ion-bookmark:before, .ion-bowtie:before, + .ion-briefcase:before, .ion-bug:before, .ion-calculator:before, + .ion-calendar:before, .ion-camera:before, .ion-card:before, + .ion-cash:before, .ion-chatbox:before, .ion-chatbox-working:before, + .ion-chatboxes:before, .ion-chatbubble:before, + .ion-chatbubble-working:before, .ion-chatbubbles:before, + .ion-checkmark:before, .ion-checkmark-circled:before, + .ion-checkmark-round:before, .ion-chevron-down:before, + .ion-chevron-left:before, .ion-chevron-right:before, .ion-chevron-up:before, + .ion-clipboard:before, .ion-clock:before, .ion-close:before, + .ion-close-circled:before, .ion-close-round:before, + .ion-closed-captioning:before, .ion-cloud:before, .ion-code:before, + .ion-code-download:before, .ion-code-working:before, .ion-coffee:before, + .ion-compass:before, .ion-compose:before, .ion-connection-bars:before, + .ion-contrast:before, .ion-crop:before, .ion-cube:before, .ion-disc:before, + .ion-document:before, .ion-document-text:before, .ion-drag:before, + .ion-earth:before, .ion-easel:before, .ion-edit:before, .ion-egg:before, + .ion-eject:before, .ion-email:before, .ion-email-unread:before, + .ion-erlenmeyer-flask:before, .ion-erlenmeyer-flask-bubbles:before, + .ion-eye:before, .ion-eye-disabled:before, .ion-female:before, + .ion-filing:before, .ion-film-marker:before, .ion-fireball:before, + .ion-flag:before, .ion-flame:before, .ion-flash:before, + .ion-flash-off:before, .ion-folder:before, .ion-fork:before, + .ion-fork-repo:before, .ion-forward:before, .ion-funnel:before, + .ion-gear-a:before, .ion-gear-b:before, .ion-grid:before, + .ion-hammer:before, .ion-happy:before, .ion-happy-outline:before, + .ion-headphone:before, .ion-heart:before, .ion-heart-broken:before, + .ion-help:before, .ion-help-buoy:before, .ion-help-circled:before, + .ion-home:before, .ion-icecream:before, .ion-image:before, + .ion-images:before, .ion-information:before, + .ion-information-circled:before, .ion-ionic:before, .ion-ios-alarm:before, + .ion-ios-alarm-outline:before, .ion-ios-albums:before, + .ion-ios-albums-outline:before, .ion-ios-americanfootball:before, + .ion-ios-americanfootball-outline:before, .ion-ios-analytics:before, + .ion-ios-analytics-outline:before, .ion-ios-arrow-back:before, + .ion-ios-arrow-down:before, .ion-ios-arrow-forward:before, + .ion-ios-arrow-left:before, .ion-ios-arrow-right:before, + .ion-ios-arrow-thin-down:before, .ion-ios-arrow-thin-left:before, + .ion-ios-arrow-thin-right:before, .ion-ios-arrow-thin-up:before, + .ion-ios-arrow-up:before, .ion-ios-at:before, .ion-ios-at-outline:before, + .ion-ios-barcode:before, .ion-ios-barcode-outline:before, + .ion-ios-baseball:before, .ion-ios-baseball-outline:before, + .ion-ios-basketball:before, .ion-ios-basketball-outline:before, + .ion-ios-bell:before, .ion-ios-bell-outline:before, .ion-ios-body:before, + .ion-ios-body-outline:before, .ion-ios-bolt:before, + .ion-ios-bolt-outline:before, .ion-ios-book:before, + .ion-ios-book-outline:before, .ion-ios-bookmarks:before, + .ion-ios-bookmarks-outline:before, .ion-ios-box:before, + .ion-ios-box-outline:before, .ion-ios-briefcase:before, + .ion-ios-briefcase-outline:before, .ion-ios-browsers:before, + .ion-ios-browsers-outline:before, .ion-ios-calculator:before, + .ion-ios-calculator-outline:before, .ion-ios-calendar:before, + .ion-ios-calendar-outline:before, .ion-ios-camera:before, + .ion-ios-camera-outline:before, .ion-ios-cart:before, + .ion-ios-cart-outline:before, .ion-ios-chatboxes:before, + .ion-ios-chatboxes-outline:before, .ion-ios-chatbubble:before, + .ion-ios-chatbubble-outline:before, .ion-ios-checkmark:before, + .ion-ios-checkmark-empty:before, .ion-ios-checkmark-outline:before, + .ion-ios-circle-filled:before, .ion-ios-circle-outline:before, + .ion-ios-clock:before, .ion-ios-clock-outline:before, .ion-ios-close:before, + .ion-ios-close-empty:before, .ion-ios-close-outline:before, + .ion-ios-cloud:before, .ion-ios-cloud-download:before, + .ion-ios-cloud-download-outline:before, .ion-ios-cloud-outline:before, + .ion-ios-cloud-upload:before, .ion-ios-cloud-upload-outline:before, + .ion-ios-cloudy:before, .ion-ios-cloudy-night:before, + .ion-ios-cloudy-night-outline:before, .ion-ios-cloudy-outline:before, + .ion-ios-cog:before, .ion-ios-cog-outline:before, + .ion-ios-color-filter:before, .ion-ios-color-filter-outline:before, + .ion-ios-color-wand:before, .ion-ios-color-wand-outline:before, + .ion-ios-compose:before, .ion-ios-compose-outline:before, + .ion-ios-contact:before, .ion-ios-contact-outline:before, + .ion-ios-copy:before, .ion-ios-copy-outline:before, .ion-ios-crop:before, + .ion-ios-crop-strong:before, .ion-ios-download:before, + .ion-ios-download-outline:before, .ion-ios-drag:before, + .ion-ios-email:before, .ion-ios-email-outline:before, .ion-ios-eye:before, + .ion-ios-eye-outline:before, .ion-ios-fastforward:before, + .ion-ios-fastforward-outline:before, .ion-ios-filing:before, + .ion-ios-filing-outline:before, .ion-ios-film:before, + .ion-ios-film-outline:before, .ion-ios-flag:before, + .ion-ios-flag-outline:before, .ion-ios-flame:before, + .ion-ios-flame-outline:before, .ion-ios-flask:before, + .ion-ios-flask-outline:before, .ion-ios-flower:before, + .ion-ios-flower-outline:before, .ion-ios-folder:before, + .ion-ios-folder-outline:before, .ion-ios-football:before, + .ion-ios-football-outline:before, .ion-ios-game-controller-a:before, + .ion-ios-game-controller-a-outline:before, + .ion-ios-game-controller-b:before, + .ion-ios-game-controller-b-outline:before, .ion-ios-gear:before, + .ion-ios-gear-outline:before, .ion-ios-glasses:before, + .ion-ios-glasses-outline:before, .ion-ios-grid-view:before, + .ion-ios-grid-view-outline:before, .ion-ios-heart:before, + .ion-ios-heart-outline:before, .ion-ios-help:before, + .ion-ios-help-empty:before, .ion-ios-help-outline:before, + .ion-ios-home:before, .ion-ios-home-outline:before, + .ion-ios-infinite:before, .ion-ios-infinite-outline:before, + .ion-ios-information:before, .ion-ios-information-empty:before, + .ion-ios-information-outline:before, .ion-ios-ionic-outline:before, + .ion-ios-keypad:before, .ion-ios-keypad-outline:before, + .ion-ios-lightbulb:before, .ion-ios-lightbulb-outline:before, + .ion-ios-list:before, .ion-ios-list-outline:before, + .ion-ios-location:before, .ion-ios-location-outline:before, + .ion-ios-locked:before, .ion-ios-locked-outline:before, + .ion-ios-loop:before, .ion-ios-loop-strong:before, .ion-ios-medical:before, + .ion-ios-medical-outline:before, .ion-ios-medkit:before, + .ion-ios-medkit-outline:before, .ion-ios-mic:before, + .ion-ios-mic-off:before, .ion-ios-mic-outline:before, .ion-ios-minus:before, + .ion-ios-minus-empty:before, .ion-ios-minus-outline:before, + .ion-ios-monitor:before, .ion-ios-monitor-outline:before, + .ion-ios-moon:before, .ion-ios-moon-outline:before, .ion-ios-more:before, + .ion-ios-more-outline:before, .ion-ios-musical-note:before, + .ion-ios-musical-notes:before, .ion-ios-navigate:before, + .ion-ios-navigate-outline:before, .ion-ios-nutrition:before, + .ion-ios-nutrition-outline:before, .ion-ios-paper:before, + .ion-ios-paper-outline:before, .ion-ios-paperplane:before, + .ion-ios-paperplane-outline:before, .ion-ios-partlysunny:before, + .ion-ios-partlysunny-outline:before, .ion-ios-pause:before, + .ion-ios-pause-outline:before, .ion-ios-paw:before, + .ion-ios-paw-outline:before, .ion-ios-people:before, + .ion-ios-people-outline:before, .ion-ios-person:before, + .ion-ios-person-outline:before, .ion-ios-personadd:before, + .ion-ios-personadd-outline:before, .ion-ios-photos:before, + .ion-ios-photos-outline:before, .ion-ios-pie:before, + .ion-ios-pie-outline:before, .ion-ios-pint:before, + .ion-ios-pint-outline:before, .ion-ios-play:before, + .ion-ios-play-outline:before, .ion-ios-plus:before, + .ion-ios-plus-empty:before, .ion-ios-plus-outline:before, + .ion-ios-pricetag:before, .ion-ios-pricetag-outline:before, + .ion-ios-pricetags:before, .ion-ios-pricetags-outline:before, + .ion-ios-printer:before, .ion-ios-printer-outline:before, + .ion-ios-pulse:before, .ion-ios-pulse-strong:before, .ion-ios-rainy:before, + .ion-ios-rainy-outline:before, .ion-ios-recording:before, + .ion-ios-recording-outline:before, .ion-ios-redo:before, + .ion-ios-redo-outline:before, .ion-ios-refresh:before, + .ion-ios-refresh-empty:before, .ion-ios-refresh-outline:before, + .ion-ios-reload:before, .ion-ios-reverse-camera:before, + .ion-ios-reverse-camera-outline:before, .ion-ios-rewind:before, + .ion-ios-rewind-outline:before, .ion-ios-rose:before, + .ion-ios-rose-outline:before, .ion-ios-search:before, + .ion-ios-search-strong:before, .ion-ios-settings:before, + .ion-ios-settings-strong:before, .ion-ios-shuffle:before, + .ion-ios-shuffle-strong:before, .ion-ios-skipbackward:before, + .ion-ios-skipbackward-outline:before, .ion-ios-skipforward:before, + .ion-ios-skipforward-outline:before, .ion-ios-snowy:before, + .ion-ios-speedometer:before, .ion-ios-speedometer-outline:before, + .ion-ios-star:before, .ion-ios-star-half:before, + .ion-ios-star-outline:before, .ion-ios-stopwatch:before, + .ion-ios-stopwatch-outline:before, .ion-ios-sunny:before, + .ion-ios-sunny-outline:before, .ion-ios-telephone:before, + .ion-ios-telephone-outline:before, .ion-ios-tennisball:before, + .ion-ios-tennisball-outline:before, .ion-ios-thunderstorm:before, + .ion-ios-thunderstorm-outline:before, .ion-ios-time:before, + .ion-ios-time-outline:before, .ion-ios-timer:before, + .ion-ios-timer-outline:before, .ion-ios-toggle:before, + .ion-ios-toggle-outline:before, .ion-ios-trash:before, + .ion-ios-trash-outline:before, .ion-ios-undo:before, + .ion-ios-undo-outline:before, .ion-ios-unlocked:before, + .ion-ios-unlocked-outline:before, .ion-ios-upload:before, + .ion-ios-upload-outline:before, .ion-ios-videocam:before, + .ion-ios-videocam-outline:before, .ion-ios-volume-high:before, + .ion-ios-volume-low:before, .ion-ios-wineglass:before, + .ion-ios-wineglass-outline:before, .ion-ios-world:before, + .ion-ios-world-outline:before, .ion-ipad:before, .ion-iphone:before, + .ion-ipod:before, .ion-jet:before, .ion-key:before, .ion-knife:before, + .ion-laptop:before, .ion-leaf:before, .ion-levels:before, + .ion-lightbulb:before, .ion-link:before, .ion-load-a:before, + .ion-load-b:before, .ion-load-c:before, .ion-load-d:before, + .ion-location:before, .ion-lock-combination:before, .ion-locked:before, + .ion-log-in:before, .ion-log-out:before, .ion-loop:before, + .ion-magnet:before, .ion-male:before, .ion-man:before, .ion-map:before, + .ion-medkit:before, .ion-merge:before, .ion-mic-a:before, .ion-mic-b:before, + .ion-mic-c:before, .ion-minus:before, .ion-minus-circled:before, + .ion-minus-round:before, .ion-model-s:before, .ion-monitor:before, + .ion-more:before, .ion-mouse:before, .ion-music-note:before, + .ion-navicon:before, .ion-navicon-round:before, .ion-navigate:before, + .ion-network:before, .ion-no-smoking:before, .ion-nuclear:before, + .ion-outlet:before, .ion-paintbrush:before, .ion-paintbucket:before, + .ion-paper-airplane:before, .ion-paperclip:before, .ion-pause:before, + .ion-person:before, .ion-person-add:before, .ion-person-stalker:before, + .ion-pie-graph:before, .ion-pin:before, .ion-pinpoint:before, + .ion-pizza:before, .ion-plane:before, .ion-planet:before, .ion-play:before, + .ion-playstation:before, .ion-plus:before, .ion-plus-circled:before, + .ion-plus-round:before, .ion-podium:before, .ion-pound:before, + .ion-power:before, .ion-pricetag:before, .ion-pricetags:before, + .ion-printer:before, .ion-pull-request:before, .ion-qr-scanner:before, + .ion-quote:before, .ion-radio-waves:before, .ion-record:before, + .ion-refresh:before, .ion-reply:before, .ion-reply-all:before, + .ion-ribbon-a:before, .ion-ribbon-b:before, .ion-sad:before, + .ion-sad-outline:before, .ion-scissors:before, .ion-search:before, + .ion-settings:before, .ion-share:before, .ion-shuffle:before, + .ion-skip-backward:before, .ion-skip-forward:before, + .ion-social-android:before, .ion-social-android-outline:before, + .ion-social-angular:before, .ion-social-angular-outline:before, + .ion-social-apple:before, .ion-social-apple-outline:before, + .ion-social-bitcoin:before, .ion-social-bitcoin-outline:before, + .ion-social-buffer:before, .ion-social-buffer-outline:before, + .ion-social-chrome:before, .ion-social-chrome-outline:before, + .ion-social-codepen:before, .ion-social-codepen-outline:before, + .ion-social-css3:before, .ion-social-css3-outline:before, + .ion-social-designernews:before, .ion-social-designernews-outline:before, + .ion-social-dribbble:before, .ion-social-dribbble-outline:before, + .ion-social-dropbox:before, .ion-social-dropbox-outline:before, + .ion-social-euro:before, .ion-social-euro-outline:before, + .ion-social-facebook:before, .ion-social-facebook-outline:before, + .ion-social-foursquare:before, .ion-social-foursquare-outline:before, + .ion-social-freebsd-devil:before, .ion-social-github:before, + .ion-social-github-outline:before, .ion-social-google:before, + .ion-social-google-outline:before, .ion-social-googleplus:before, + .ion-social-googleplus-outline:before, .ion-social-hackernews:before, + .ion-social-hackernews-outline:before, .ion-social-html5:before, + .ion-social-html5-outline:before, .ion-social-instagram:before, + .ion-social-instagram-outline:before, .ion-social-javascript:before, + .ion-social-javascript-outline:before, .ion-social-linkedin:before, + .ion-social-linkedin-outline:before, .ion-social-markdown:before, + .ion-social-nodejs:before, .ion-social-octocat:before, + .ion-social-pinterest:before, .ion-social-pinterest-outline:before, + .ion-social-python:before, .ion-social-reddit:before, + .ion-social-reddit-outline:before, .ion-social-rss:before, + .ion-social-rss-outline:before, .ion-social-sass:before, + .ion-social-skype:before, .ion-social-skype-outline:before, + .ion-social-snapchat:before, .ion-social-snapchat-outline:before, + .ion-social-tumblr:before, .ion-social-tumblr-outline:before, + .ion-social-tux:before, .ion-social-twitch:before, + .ion-social-twitch-outline:before, .ion-social-twitter:before, + .ion-social-twitter-outline:before, .ion-social-usd:before, + .ion-social-usd-outline:before, .ion-social-vimeo:before, + .ion-social-vimeo-outline:before, .ion-social-whatsapp:before, + .ion-social-whatsapp-outline:before, .ion-social-windows:before, + .ion-social-windows-outline:before, .ion-social-wordpress:before, + .ion-social-wordpress-outline:before, .ion-social-yahoo:before, + .ion-social-yahoo-outline:before, .ion-social-yen:before, + .ion-social-yen-outline:before, .ion-social-youtube:before, + .ion-social-youtube-outline:before, .ion-soup-can:before, + .ion-soup-can-outline:before, .ion-speakerphone:before, + .ion-speedometer:before, .ion-spoon:before, .ion-star:before, + .ion-stats-bars:before, .ion-steam:before, .ion-stop:before, + .ion-thermometer:before, .ion-thumbsdown:before, .ion-thumbsup:before, + .ion-toggle:before, .ion-toggle-filled:before, .ion-transgender:before, + .ion-trash-a:before, .ion-trash-b:before, .ion-trophy:before, + .ion-tshirt:before, .ion-tshirt-outline:before, .ion-umbrella:before, + .ion-university:before, .ion-unlocked:before, .ion-upload:before, + .ion-usb:before, .ion-videocamera:before, .ion-volume-high:before, + .ion-volume-low:before, .ion-volume-medium:before, .ion-volume-mute:before, + .ion-wand:before, .ion-waterdrop:before, .ion-wifi:before, + .ion-wineglass:before, .ion-woman:before, .ion-wrench:before, + .ion-xbox:before { + display: inline-block; + font-family: "Ionicons"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + text-rendering: auto; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ion-alert:before { + content: "\f101"; +} + +.ion-alert-circled:before { + content: "\f100"; +} + +.ion-android-add:before { + content: "\f2c7"; +} + +.ion-android-add-circle:before { + content: "\f359"; +} + +.ion-android-alarm-clock:before { + content: "\f35a"; +} + +.ion-android-alert:before { + content: "\f35b"; +} + +.ion-android-apps:before { + content: "\f35c"; +} + +.ion-android-archive:before { + content: "\f2c9"; +} + +.ion-android-arrow-back:before { + content: "\f2ca"; +} + +.ion-android-arrow-down:before { + content: "\f35d"; +} + +.ion-android-arrow-dropdown:before { + content: "\f35f"; +} + +.ion-android-arrow-dropdown-circle:before { + content: "\f35e"; +} + +.ion-android-arrow-dropleft:before { + content: "\f361"; +} + +.ion-android-arrow-dropleft-circle:before { + content: "\f360"; +} + +.ion-android-arrow-dropright:before { + content: "\f363"; +} + +.ion-android-arrow-dropright-circle:before { + content: "\f362"; +} + +.ion-android-arrow-dropup:before { + content: "\f365"; +} + +.ion-android-arrow-dropup-circle:before { + content: "\f364"; +} + +.ion-android-arrow-forward:before { + content: "\f30f"; +} + +.ion-android-arrow-up:before { + content: "\f366"; +} + +.ion-android-attach:before { + content: "\f367"; +} + +.ion-android-bar:before { + content: "\f368"; +} + +.ion-android-bicycle:before { + content: "\f369"; +} + +.ion-android-boat:before { + content: "\f36a"; +} + +.ion-android-bookmark:before { + content: "\f36b"; +} + +.ion-android-bulb:before { + content: "\f36c"; +} + +.ion-android-bus:before { + content: "\f36d"; +} + +.ion-android-calendar:before { + content: "\f2d1"; +} + +.ion-android-call:before { + content: "\f2d2"; +} + +.ion-android-camera:before { + content: "\f2d3"; +} + +.ion-android-cancel:before { + content: "\f36e"; +} + +.ion-android-car:before { + content: "\f36f"; +} + +.ion-android-cart:before { + content: "\f370"; +} + +.ion-android-chat:before { + content: "\f2d4"; +} + +.ion-android-checkbox:before { + content: "\f374"; +} + +.ion-android-checkbox-blank:before { + content: "\f371"; +} + +.ion-android-checkbox-outline:before { + content: "\f373"; +} + +.ion-android-checkbox-outline-blank:before { + content: "\f372"; +} + +.ion-android-checkmark-circle:before { + content: "\f375"; +} + +.ion-android-clipboard:before { + content: "\f376"; +} + +.ion-android-close:before { + content: "\f2d7"; +} + +.ion-android-cloud:before { + content: "\f37a"; +} + +.ion-android-cloud-circle:before { + content: "\f377"; +} + +.ion-android-cloud-done:before { + content: "\f378"; +} + +.ion-android-cloud-outline:before { + content: "\f379"; +} + +.ion-android-color-palette:before { + content: "\f37b"; +} + +.ion-android-compass:before { + content: "\f37c"; +} + +.ion-android-contact:before { + content: "\f2d8"; +} + +.ion-android-contacts:before { + content: "\f2d9"; +} + +.ion-android-contract:before { + content: "\f37d"; +} + +.ion-android-create:before { + content: "\f37e"; +} + +.ion-android-delete:before { + content: "\f37f"; +} + +.ion-android-desktop:before { + content: "\f380"; +} + +.ion-android-document:before { + content: "\f381"; +} + +.ion-android-done:before { + content: "\f383"; +} + +.ion-android-done-all:before { + content: "\f382"; +} + +.ion-android-download:before { + content: "\f2dd"; +} + +.ion-android-drafts:before { + content: "\f384"; +} + +.ion-android-exit:before { + content: "\f385"; +} + +.ion-android-expand:before { + content: "\f386"; +} + +.ion-android-favorite:before { + content: "\f388"; +} + +.ion-android-favorite-outline:before { + content: "\f387"; +} + +.ion-android-film:before { + content: "\f389"; +} + +.ion-android-folder:before { + content: "\f2e0"; +} + +.ion-android-folder-open:before { + content: "\f38a"; +} + +.ion-android-funnel:before { + content: "\f38b"; +} + +.ion-android-globe:before { + content: "\f38c"; +} + +.ion-android-hand:before { + content: "\f2e3"; +} + +.ion-android-hangout:before { + content: "\f38d"; +} + +.ion-android-happy:before { + content: "\f38e"; +} + +.ion-android-home:before { + content: "\f38f"; +} + +.ion-android-image:before { + content: "\f2e4"; +} + +.ion-android-laptop:before { + content: "\f390"; +} + +.ion-android-list:before { + content: "\f391"; +} + +.ion-android-locate:before { + content: "\f2e9"; +} + +.ion-android-lock:before { + content: "\f392"; +} + +.ion-android-mail:before { + content: "\f2eb"; +} + +.ion-android-map:before { + content: "\f393"; +} + +.ion-android-menu:before { + content: "\f394"; +} + +.ion-android-microphone:before { + content: "\f2ec"; +} + +.ion-android-microphone-off:before { + content: "\f395"; +} + +.ion-android-more-horizontal:before { + content: "\f396"; +} + +.ion-android-more-vertical:before { + content: "\f397"; +} + +.ion-android-navigate:before { + content: "\f398"; +} + +.ion-android-notifications:before { + content: "\f39b"; +} + +.ion-android-notifications-none:before { + content: "\f399"; +} + +.ion-android-notifications-off:before { + content: "\f39a"; +} + +.ion-android-open:before { + content: "\f39c"; +} + +.ion-android-options:before { + content: "\f39d"; +} + +.ion-android-people:before { + content: "\f39e"; +} + +.ion-android-person:before { + content: "\f3a0"; +} + +.ion-android-person-add:before { + content: "\f39f"; +} + +.ion-android-phone-landscape:before { + content: "\f3a1"; +} + +.ion-android-phone-portrait:before { + content: "\f3a2"; +} + +.ion-android-pin:before { + content: "\f3a3"; +} + +.ion-android-plane:before { + content: "\f3a4"; +} + +.ion-android-playstore:before { + content: "\f2f0"; +} + +.ion-android-print:before { + content: "\f3a5"; +} + +.ion-android-radio-button-off:before { + content: "\f3a6"; +} + +.ion-android-radio-button-on:before { + content: "\f3a7"; +} + +.ion-android-refresh:before { + content: "\f3a8"; +} + +.ion-android-remove:before { + content: "\f2f4"; +} + +.ion-android-remove-circle:before { + content: "\f3a9"; +} + +.ion-android-restaurant:before { + content: "\f3aa"; +} + +.ion-android-sad:before { + content: "\f3ab"; +} + +.ion-android-search:before { + content: "\f2f5"; +} + +.ion-android-send:before { + content: "\f2f6"; +} + +.ion-android-settings:before { + content: "\f2f7"; +} + +.ion-android-share:before { + content: "\f2f8"; +} + +.ion-android-share-alt:before { + content: "\f3ac"; +} + +.ion-android-star:before { + content: "\f2fc"; +} + +.ion-android-star-half:before { + content: "\f3ad"; +} + +.ion-android-star-outline:before { + content: "\f3ae"; +} + +.ion-android-stopwatch:before { + content: "\f2fd"; +} + +.ion-android-subway:before { + content: "\f3af"; +} + +.ion-android-sunny:before { + content: "\f3b0"; +} + +.ion-android-sync:before { + content: "\f3b1"; +} + +.ion-android-textsms:before { + content: "\f3b2"; +} + +.ion-android-time:before { + content: "\f3b3"; +} + +.ion-android-train:before { + content: "\f3b4"; +} + +.ion-android-unlock:before { + content: "\f3b5"; +} + +.ion-android-upload:before { + content: "\f3b6"; +} + +.ion-android-volume-down:before { + content: "\f3b7"; +} + +.ion-android-volume-mute:before { + content: "\f3b8"; +} + +.ion-android-volume-off:before { + content: "\f3b9"; +} + +.ion-android-volume-up:before { + content: "\f3ba"; +} + +.ion-android-walk:before { + content: "\f3bb"; +} + +.ion-android-warning:before { + content: "\f3bc"; +} + +.ion-android-watch:before { + content: "\f3bd"; +} + +.ion-android-wifi:before { + content: "\f305"; +} + +.ion-aperture:before { + content: "\f313"; +} + +.ion-archive:before { + content: "\f102"; +} + +.ion-arrow-down-a:before { + content: "\f103"; +} + +.ion-arrow-down-b:before { + content: "\f104"; +} + +.ion-arrow-down-c:before { + content: "\f105"; +} + +.ion-arrow-expand:before { + content: "\f25e"; +} + +.ion-arrow-graph-down-left:before { + content: "\f25f"; +} + +.ion-arrow-graph-down-right:before { + content: "\f260"; +} + +.ion-arrow-graph-up-left:before { + content: "\f261"; +} + +.ion-arrow-graph-up-right:before { + content: "\f262"; +} + +.ion-arrow-left-a:before { + content: "\f106"; +} + +.ion-arrow-left-b:before { + content: "\f107"; +} + +.ion-arrow-left-c:before { + content: "\f108"; +} + +.ion-arrow-move:before { + content: "\f263"; +} + +.ion-arrow-resize:before { + content: "\f264"; +} + +.ion-arrow-return-left:before { + content: "\f265"; +} + +.ion-arrow-return-right:before { + content: "\f266"; +} + +.ion-arrow-right-a:before { + content: "\f109"; +} + +.ion-arrow-right-b:before { + content: "\f10a"; +} + +.ion-arrow-right-c:before { + content: "\f10b"; +} + +.ion-arrow-shrink:before { + content: "\f267"; +} + +.ion-arrow-swap:before { + content: "\f268"; +} + +.ion-arrow-up-a:before { + content: "\f10c"; +} + +.ion-arrow-up-b:before { + content: "\f10d"; +} + +.ion-arrow-up-c:before { + content: "\f10e"; +} + +.ion-asterisk:before { + content: "\f314"; +} + +.ion-at:before { + content: "\f10f"; +} + +.ion-backspace:before { + content: "\f3bf"; +} + +.ion-backspace-outline:before { + content: "\f3be"; +} + +.ion-bag:before { + content: "\f110"; +} + +.ion-battery-charging:before { + content: "\f111"; +} + +.ion-battery-empty:before { + content: "\f112"; +} + +.ion-battery-full:before { + content: "\f113"; +} + +.ion-battery-half:before { + content: "\f114"; +} + +.ion-battery-low:before { + content: "\f115"; +} + +.ion-beaker:before { + content: "\f269"; +} + +.ion-beer:before { + content: "\f26a"; +} + +.ion-bluetooth:before { + content: "\f116"; +} + +.ion-bonfire:before { + content: "\f315"; +} + +.ion-bookmark:before { + content: "\f26b"; +} + +.ion-bowtie:before { + content: "\f3c0"; +} + +.ion-briefcase:before { + content: "\f26c"; +} + +.ion-bug:before { + content: "\f2be"; +} + +.ion-calculator:before { + content: "\f26d"; +} + +.ion-calendar:before { + content: "\f117"; +} + +.ion-camera:before { + content: "\f118"; +} + +.ion-card:before { + content: "\f119"; +} + +.ion-cash:before { + content: "\f316"; +} + +.ion-chatbox:before { + content: "\f11b"; +} + +.ion-chatbox-working:before { + content: "\f11a"; +} + +.ion-chatboxes:before { + content: "\f11c"; +} + +.ion-chatbubble:before { + content: "\f11e"; +} + +.ion-chatbubble-working:before { + content: "\f11d"; +} + +.ion-chatbubbles:before { + content: "\f11f"; +} + +.ion-checkmark:before { + content: "\f122"; +} + +.ion-checkmark-circled:before { + content: "\f120"; +} + +.ion-checkmark-round:before { + content: "\f121"; +} + +.ion-chevron-down:before { + content: "\f123"; +} + +.ion-chevron-left:before { + content: "\f124"; +} + +.ion-chevron-right:before { + content: "\f125"; +} + +.ion-chevron-up:before { + content: "\f126"; +} + +.ion-clipboard:before { + content: "\f127"; +} + +.ion-clock:before { + content: "\f26e"; +} + +.ion-close:before { + content: "\f12a"; +} + +.ion-close-circled:before { + content: "\f128"; +} + +.ion-close-round:before { + content: "\f129"; +} + +.ion-closed-captioning:before { + content: "\f317"; +} + +.ion-cloud:before { + content: "\f12b"; +} + +.ion-code:before { + content: "\f271"; +} + +.ion-code-download:before { + content: "\f26f"; +} + +.ion-code-working:before { + content: "\f270"; +} + +.ion-coffee:before { + content: "\f272"; +} + +.ion-compass:before { + content: "\f273"; +} + +.ion-compose:before { + content: "\f12c"; +} + +.ion-connection-bars:before { + content: "\f274"; +} + +.ion-contrast:before { + content: "\f275"; +} + +.ion-crop:before { + content: "\f3c1"; +} + +.ion-cube:before { + content: "\f318"; +} + +.ion-disc:before { + content: "\f12d"; +} + +.ion-document:before { + content: "\f12f"; +} + +.ion-document-text:before { + content: "\f12e"; +} + +.ion-drag:before { + content: "\f130"; +} + +.ion-earth:before { + content: "\f276"; +} + +.ion-easel:before { + content: "\f3c2"; +} + +.ion-edit:before { + content: "\f2bf"; +} + +.ion-egg:before { + content: "\f277"; +} + +.ion-eject:before { + content: "\f131"; +} + +.ion-email:before { + content: "\f132"; +} + +.ion-email-unread:before { + content: "\f3c3"; +} + +.ion-erlenmeyer-flask:before { + content: "\f3c5"; +} + +.ion-erlenmeyer-flask-bubbles:before { + content: "\f3c4"; +} + +.ion-eye:before { + content: "\f133"; +} + +.ion-eye-disabled:before { + content: "\f306"; +} + +.ion-female:before { + content: "\f278"; +} + +.ion-filing:before { + content: "\f134"; +} + +.ion-film-marker:before { + content: "\f135"; +} + +.ion-fireball:before { + content: "\f319"; +} + +.ion-flag:before { + content: "\f279"; +} + +.ion-flame:before { + content: "\f31a"; +} + +.ion-flash:before { + content: "\f137"; +} + +.ion-flash-off:before { + content: "\f136"; +} + +.ion-folder:before { + content: "\f139"; +} + +.ion-fork:before { + content: "\f27a"; +} + +.ion-fork-repo:before { + content: "\f2c0"; +} + +.ion-forward:before { + content: "\f13a"; +} + +.ion-funnel:before { + content: "\f31b"; +} + +.ion-gear-a:before { + content: "\f13d"; +} + +.ion-gear-b:before { + content: "\f13e"; +} + +.ion-grid:before { + content: "\f13f"; +} + +.ion-hammer:before { + content: "\f27b"; +} + +.ion-happy:before { + content: "\f31c"; +} + +.ion-happy-outline:before { + content: "\f3c6"; +} + +.ion-headphone:before { + content: "\f140"; +} + +.ion-heart:before { + content: "\f141"; +} + +.ion-heart-broken:before { + content: "\f31d"; +} + +.ion-help:before { + content: "\f143"; +} + +.ion-help-buoy:before { + content: "\f27c"; +} + +.ion-help-circled:before { + content: "\f142"; +} + +.ion-home:before { + content: "\f144"; +} + +.ion-icecream:before { + content: "\f27d"; +} + +.ion-image:before { + content: "\f147"; +} + +.ion-images:before { + content: "\f148"; +} + +.ion-information:before { + content: "\f14a"; +} + +.ion-information-circled:before { + content: "\f149"; +} + +.ion-ionic:before { + content: "\f14b"; +} + +.ion-ios-alarm:before { + content: "\f3c8"; +} + +.ion-ios-alarm-outline:before { + content: "\f3c7"; +} + +.ion-ios-albums:before { + content: "\f3ca"; +} + +.ion-ios-albums-outline:before { + content: "\f3c9"; +} + +.ion-ios-americanfootball:before { + content: "\f3cc"; +} + +.ion-ios-americanfootball-outline:before { + content: "\f3cb"; +} + +.ion-ios-analytics:before { + content: "\f3ce"; +} + +.ion-ios-analytics-outline:before { + content: "\f3cd"; +} + +.ion-ios-arrow-back:before { + content: "\f3cf"; +} + +.ion-ios-arrow-down:before { + content: "\f3d0"; +} + +.ion-ios-arrow-forward:before { + content: "\f3d1"; +} + +.ion-ios-arrow-left:before { + content: "\f3d2"; +} + +.ion-ios-arrow-right:before { + content: "\f3d3"; +} + +.ion-ios-arrow-thin-down:before { + content: "\f3d4"; +} + +.ion-ios-arrow-thin-left:before { + content: "\f3d5"; +} + +.ion-ios-arrow-thin-right:before { + content: "\f3d6"; +} + +.ion-ios-arrow-thin-up:before { + content: "\f3d7"; +} + +.ion-ios-arrow-up:before { + content: "\f3d8"; +} + +.ion-ios-at:before { + content: "\f3da"; +} + +.ion-ios-at-outline:before { + content: "\f3d9"; +} + +.ion-ios-barcode:before { + content: "\f3dc"; +} + +.ion-ios-barcode-outline:before { + content: "\f3db"; +} + +.ion-ios-baseball:before { + content: "\f3de"; +} + +.ion-ios-baseball-outline:before { + content: "\f3dd"; +} + +.ion-ios-basketball:before { + content: "\f3e0"; +} + +.ion-ios-basketball-outline:before { + content: "\f3df"; +} + +.ion-ios-bell:before { + content: "\f3e2"; +} + +.ion-ios-bell-outline:before { + content: "\f3e1"; +} + +.ion-ios-body:before { + content: "\f3e4"; +} + +.ion-ios-body-outline:before { + content: "\f3e3"; +} + +.ion-ios-bolt:before { + content: "\f3e6"; +} + +.ion-ios-bolt-outline:before { + content: "\f3e5"; +} + +.ion-ios-book:before { + content: "\f3e8"; +} + +.ion-ios-book-outline:before { + content: "\f3e7"; +} + +.ion-ios-bookmarks:before { + content: "\f3ea"; +} + +.ion-ios-bookmarks-outline:before { + content: "\f3e9"; +} + +.ion-ios-box:before { + content: "\f3ec"; +} + +.ion-ios-box-outline:before { + content: "\f3eb"; +} + +.ion-ios-briefcase:before { + content: "\f3ee"; +} + +.ion-ios-briefcase-outline:before { + content: "\f3ed"; +} + +.ion-ios-browsers:before { + content: "\f3f0"; +} + +.ion-ios-browsers-outline:before { + content: "\f3ef"; +} + +.ion-ios-calculator:before { + content: "\f3f2"; +} + +.ion-ios-calculator-outline:before { + content: "\f3f1"; +} + +.ion-ios-calendar:before { + content: "\f3f4"; +} + +.ion-ios-calendar-outline:before { + content: "\f3f3"; +} + +.ion-ios-camera:before { + content: "\f3f6"; +} + +.ion-ios-camera-outline:before { + content: "\f3f5"; +} + +.ion-ios-cart:before { + content: "\f3f8"; +} + +.ion-ios-cart-outline:before { + content: "\f3f7"; +} + +.ion-ios-chatboxes:before { + content: "\f3fa"; +} + +.ion-ios-chatboxes-outline:before { + content: "\f3f9"; +} + +.ion-ios-chatbubble:before { + content: "\f3fc"; +} + +.ion-ios-chatbubble-outline:before { + content: "\f3fb"; +} + +.ion-ios-checkmark:before { + content: "\f3ff"; +} + +.ion-ios-checkmark-empty:before { + content: "\f3fd"; +} + +.ion-ios-checkmark-outline:before { + content: "\f3fe"; +} + +.ion-ios-circle-filled:before { + content: "\f400"; +} + +.ion-ios-circle-outline:before { + content: "\f401"; +} + +.ion-ios-clock:before { + content: "\f403"; +} + +.ion-ios-clock-outline:before { + content: "\f402"; +} + +.ion-ios-close:before { + content: "\f406"; +} + +.ion-ios-close-empty:before { + content: "\f404"; +} + +.ion-ios-close-outline:before { + content: "\f405"; +} + +.ion-ios-cloud:before { + content: "\f40c"; +} + +.ion-ios-cloud-download:before { + content: "\f408"; +} + +.ion-ios-cloud-download-outline:before { + content: "\f407"; +} + +.ion-ios-cloud-outline:before { + content: "\f409"; +} + +.ion-ios-cloud-upload:before { + content: "\f40b"; +} + +.ion-ios-cloud-upload-outline:before { + content: "\f40a"; +} + +.ion-ios-cloudy:before { + content: "\f410"; +} + +.ion-ios-cloudy-night:before { + content: "\f40e"; +} + +.ion-ios-cloudy-night-outline:before { + content: "\f40d"; +} + +.ion-ios-cloudy-outline:before { + content: "\f40f"; +} + +.ion-ios-cog:before { + content: "\f412"; +} + +.ion-ios-cog-outline:before { + content: "\f411"; +} + +.ion-ios-color-filter:before { + content: "\f414"; +} + +.ion-ios-color-filter-outline:before { + content: "\f413"; +} + +.ion-ios-color-wand:before { + content: "\f416"; +} + +.ion-ios-color-wand-outline:before { + content: "\f415"; +} + +.ion-ios-compose:before { + content: "\f418"; +} + +.ion-ios-compose-outline:before { + content: "\f417"; +} + +.ion-ios-contact:before { + content: "\f41a"; +} + +.ion-ios-contact-outline:before { + content: "\f419"; +} + +.ion-ios-copy:before { + content: "\f41c"; +} + +.ion-ios-copy-outline:before { + content: "\f41b"; +} + +.ion-ios-crop:before { + content: "\f41e"; +} + +.ion-ios-crop-strong:before { + content: "\f41d"; +} + +.ion-ios-download:before { + content: "\f420"; +} + +.ion-ios-download-outline:before { + content: "\f41f"; +} + +.ion-ios-drag:before { + content: "\f421"; +} + +.ion-ios-email:before { + content: "\f423"; +} + +.ion-ios-email-outline:before { + content: "\f422"; +} + +.ion-ios-eye:before { + content: "\f425"; +} + +.ion-ios-eye-outline:before { + content: "\f424"; +} + +.ion-ios-fastforward:before { + content: "\f427"; +} + +.ion-ios-fastforward-outline:before { + content: "\f426"; +} + +.ion-ios-filing:before { + content: "\f429"; +} + +.ion-ios-filing-outline:before { + content: "\f428"; +} + +.ion-ios-film:before { + content: "\f42b"; +} + +.ion-ios-film-outline:before { + content: "\f42a"; +} + +.ion-ios-flag:before { + content: "\f42d"; +} + +.ion-ios-flag-outline:before { + content: "\f42c"; +} + +.ion-ios-flame:before { + content: "\f42f"; +} + +.ion-ios-flame-outline:before { + content: "\f42e"; +} + +.ion-ios-flask:before { + content: "\f431"; +} + +.ion-ios-flask-outline:before { + content: "\f430"; +} + +.ion-ios-flower:before { + content: "\f433"; +} + +.ion-ios-flower-outline:before { + content: "\f432"; +} + +.ion-ios-folder:before { + content: "\f435"; +} + +.ion-ios-folder-outline:before { + content: "\f434"; +} + +.ion-ios-football:before { + content: "\f437"; +} + +.ion-ios-football-outline:before { + content: "\f436"; +} + +.ion-ios-game-controller-a:before { + content: "\f439"; +} + +.ion-ios-game-controller-a-outline:before { + content: "\f438"; +} + +.ion-ios-game-controller-b:before { + content: "\f43b"; +} + +.ion-ios-game-controller-b-outline:before { + content: "\f43a"; +} + +.ion-ios-gear:before { + content: "\f43d"; +} + +.ion-ios-gear-outline:before { + content: "\f43c"; +} + +.ion-ios-glasses:before { + content: "\f43f"; +} + +.ion-ios-glasses-outline:before { + content: "\f43e"; +} + +.ion-ios-grid-view:before { + content: "\f441"; +} + +.ion-ios-grid-view-outline:before { + content: "\f440"; +} + +.ion-ios-heart:before { + content: "\f443"; +} + +.ion-ios-heart-outline:before { + content: "\f442"; +} + +.ion-ios-help:before { + content: "\f446"; +} + +.ion-ios-help-empty:before { + content: "\f444"; +} + +.ion-ios-help-outline:before { + content: "\f445"; +} + +.ion-ios-home:before { + content: "\f448"; +} + +.ion-ios-home-outline:before { + content: "\f447"; +} + +.ion-ios-infinite:before { + content: "\f44a"; +} + +.ion-ios-infinite-outline:before { + content: "\f449"; +} + +.ion-ios-information:before { + content: "\f44d"; +} + +.ion-ios-information-empty:before { + content: "\f44b"; +} + +.ion-ios-information-outline:before { + content: "\f44c"; +} + +.ion-ios-ionic-outline:before { + content: "\f44e"; +} + +.ion-ios-keypad:before { + content: "\f450"; +} + +.ion-ios-keypad-outline:before { + content: "\f44f"; +} + +.ion-ios-lightbulb:before { + content: "\f452"; +} + +.ion-ios-lightbulb-outline:before { + content: "\f451"; +} + +.ion-ios-list:before { + content: "\f454"; +} + +.ion-ios-list-outline:before { + content: "\f453"; +} + +.ion-ios-location:before { + content: "\f456"; +} + +.ion-ios-location-outline:before { + content: "\f455"; +} + +.ion-ios-locked:before { + content: "\f458"; +} + +.ion-ios-locked-outline:before { + content: "\f457"; +} + +.ion-ios-loop:before { + content: "\f45a"; +} + +.ion-ios-loop-strong:before { + content: "\f459"; +} + +.ion-ios-medical:before { + content: "\f45c"; +} + +.ion-ios-medical-outline:before { + content: "\f45b"; +} + +.ion-ios-medkit:before { + content: "\f45e"; +} + +.ion-ios-medkit-outline:before { + content: "\f45d"; +} + +.ion-ios-mic:before { + content: "\f461"; +} + +.ion-ios-mic-off:before { + content: "\f45f"; +} + +.ion-ios-mic-outline:before { + content: "\f460"; +} + +.ion-ios-minus:before { + content: "\f464"; +} + +.ion-ios-minus-empty:before { + content: "\f462"; +} + +.ion-ios-minus-outline:before { + content: "\f463"; +} + +.ion-ios-monitor:before { + content: "\f466"; +} + +.ion-ios-monitor-outline:before { + content: "\f465"; +} + +.ion-ios-moon:before { + content: "\f468"; +} + +.ion-ios-moon-outline:before { + content: "\f467"; +} + +.ion-ios-more:before { + content: "\f46a"; +} + +.ion-ios-more-outline:before { + content: "\f469"; +} + +.ion-ios-musical-note:before { + content: "\f46b"; +} + +.ion-ios-musical-notes:before { + content: "\f46c"; +} + +.ion-ios-navigate:before { + content: "\f46e"; +} + +.ion-ios-navigate-outline:before { + content: "\f46d"; +} + +.ion-ios-nutrition:before { + content: "\f470"; +} + +.ion-ios-nutrition-outline:before { + content: "\f46f"; +} + +.ion-ios-paper:before { + content: "\f472"; +} + +.ion-ios-paper-outline:before { + content: "\f471"; +} + +.ion-ios-paperplane:before { + content: "\f474"; +} + +.ion-ios-paperplane-outline:before { + content: "\f473"; +} + +.ion-ios-partlysunny:before { + content: "\f476"; +} + +.ion-ios-partlysunny-outline:before { + content: "\f475"; +} + +.ion-ios-pause:before { + content: "\f478"; +} + +.ion-ios-pause-outline:before { + content: "\f477"; +} + +.ion-ios-paw:before { + content: "\f47a"; +} + +.ion-ios-paw-outline:before { + content: "\f479"; +} + +.ion-ios-people:before { + content: "\f47c"; +} + +.ion-ios-people-outline:before { + content: "\f47b"; +} + +.ion-ios-person:before { + content: "\f47e"; +} + +.ion-ios-person-outline:before { + content: "\f47d"; +} + +.ion-ios-personadd:before { + content: "\f480"; +} + +.ion-ios-personadd-outline:before { + content: "\f47f"; +} + +.ion-ios-photos:before { + content: "\f482"; +} + +.ion-ios-photos-outline:before { + content: "\f481"; +} + +.ion-ios-pie:before { + content: "\f484"; +} + +.ion-ios-pie-outline:before { + content: "\f483"; +} + +.ion-ios-pint:before { + content: "\f486"; +} + +.ion-ios-pint-outline:before { + content: "\f485"; +} + +.ion-ios-play:before { + content: "\f488"; +} + +.ion-ios-play-outline:before { + content: "\f487"; +} + +.ion-ios-plus:before { + content: "\f48b"; +} + +.ion-ios-plus-empty:before { + content: "\f489"; +} + +.ion-ios-plus-outline:before { + content: "\f48a"; +} + +.ion-ios-pricetag:before { + content: "\f48d"; +} + +.ion-ios-pricetag-outline:before { + content: "\f48c"; +} + +.ion-ios-pricetags:before { + content: "\f48f"; +} + +.ion-ios-pricetags-outline:before { + content: "\f48e"; +} + +.ion-ios-printer:before { + content: "\f491"; +} + +.ion-ios-printer-outline:before { + content: "\f490"; +} + +.ion-ios-pulse:before { + content: "\f493"; +} + +.ion-ios-pulse-strong:before { + content: "\f492"; +} + +.ion-ios-rainy:before { + content: "\f495"; +} + +.ion-ios-rainy-outline:before { + content: "\f494"; +} + +.ion-ios-recording:before { + content: "\f497"; +} + +.ion-ios-recording-outline:before { + content: "\f496"; +} + +.ion-ios-redo:before { + content: "\f499"; +} + +.ion-ios-redo-outline:before { + content: "\f498"; +} + +.ion-ios-refresh:before { + content: "\f49c"; +} + +.ion-ios-refresh-empty:before { + content: "\f49a"; +} + +.ion-ios-refresh-outline:before { + content: "\f49b"; +} + +.ion-ios-reload:before { + content: "\f49d"; +} + +.ion-ios-reverse-camera:before { + content: "\f49f"; +} + +.ion-ios-reverse-camera-outline:before { + content: "\f49e"; +} + +.ion-ios-rewind:before { + content: "\f4a1"; +} + +.ion-ios-rewind-outline:before { + content: "\f4a0"; +} + +.ion-ios-rose:before { + content: "\f4a3"; +} + +.ion-ios-rose-outline:before { + content: "\f4a2"; +} + +.ion-ios-search:before { + content: "\f4a5"; +} + +.ion-ios-search-strong:before { + content: "\f4a4"; +} + +.ion-ios-settings:before { + content: "\f4a7"; +} + +.ion-ios-settings-strong:before { + content: "\f4a6"; +} + +.ion-ios-shuffle:before { + content: "\f4a9"; +} + +.ion-ios-shuffle-strong:before { + content: "\f4a8"; +} + +.ion-ios-skipbackward:before { + content: "\f4ab"; +} + +.ion-ios-skipbackward-outline:before { + content: "\f4aa"; +} + +.ion-ios-skipforward:before { + content: "\f4ad"; +} + +.ion-ios-skipforward-outline:before { + content: "\f4ac"; +} + +.ion-ios-snowy:before { + content: "\f4ae"; +} + +.ion-ios-speedometer:before { + content: "\f4b0"; +} + +.ion-ios-speedometer-outline:before { + content: "\f4af"; +} + +.ion-ios-star:before { + content: "\f4b3"; +} + +.ion-ios-star-half:before { + content: "\f4b1"; +} + +.ion-ios-star-outline:before { + content: "\f4b2"; +} + +.ion-ios-stopwatch:before { + content: "\f4b5"; +} + +.ion-ios-stopwatch-outline:before { + content: "\f4b4"; +} + +.ion-ios-sunny:before { + content: "\f4b7"; +} + +.ion-ios-sunny-outline:before { + content: "\f4b6"; +} + +.ion-ios-telephone:before { + content: "\f4b9"; +} + +.ion-ios-telephone-outline:before { + content: "\f4b8"; +} + +.ion-ios-tennisball:before { + content: "\f4bb"; +} + +.ion-ios-tennisball-outline:before { + content: "\f4ba"; +} + +.ion-ios-thunderstorm:before { + content: "\f4bd"; +} + +.ion-ios-thunderstorm-outline:before { + content: "\f4bc"; +} + +.ion-ios-time:before { + content: "\f4bf"; +} + +.ion-ios-time-outline:before { + content: "\f4be"; +} + +.ion-ios-timer:before { + content: "\f4c1"; +} + +.ion-ios-timer-outline:before { + content: "\f4c0"; +} + +.ion-ios-toggle:before { + content: "\f4c3"; +} + +.ion-ios-toggle-outline:before { + content: "\f4c2"; +} + +.ion-ios-trash:before { + content: "\f4c5"; +} + +.ion-ios-trash-outline:before { + content: "\f4c4"; +} + +.ion-ios-undo:before { + content: "\f4c7"; +} + +.ion-ios-undo-outline:before { + content: "\f4c6"; +} + +.ion-ios-unlocked:before { + content: "\f4c9"; +} + +.ion-ios-unlocked-outline:before { + content: "\f4c8"; +} + +.ion-ios-upload:before { + content: "\f4cb"; +} + +.ion-ios-upload-outline:before { + content: "\f4ca"; +} + +.ion-ios-videocam:before { + content: "\f4cd"; +} + +.ion-ios-videocam-outline:before { + content: "\f4cc"; +} + +.ion-ios-volume-high:before { + content: "\f4ce"; +} + +.ion-ios-volume-low:before { + content: "\f4cf"; +} + +.ion-ios-wineglass:before { + content: "\f4d1"; +} + +.ion-ios-wineglass-outline:before { + content: "\f4d0"; +} + +.ion-ios-world:before { + content: "\f4d3"; +} + +.ion-ios-world-outline:before { + content: "\f4d2"; +} + +.ion-ipad:before { + content: "\f1f9"; +} + +.ion-iphone:before { + content: "\f1fa"; +} + +.ion-ipod:before { + content: "\f1fb"; +} + +.ion-jet:before { + content: "\f295"; +} + +.ion-key:before { + content: "\f296"; +} + +.ion-knife:before { + content: "\f297"; +} + +.ion-laptop:before { + content: "\f1fc"; +} + +.ion-leaf:before { + content: "\f1fd"; +} + +.ion-levels:before { + content: "\f298"; +} + +.ion-lightbulb:before { + content: "\f299"; +} + +.ion-link:before { + content: "\f1fe"; +} + +.ion-load-a:before { + content: "\f29a"; +} + +.ion-load-b:before { + content: "\f29b"; +} + +.ion-load-c:before { + content: "\f29c"; +} + +.ion-load-d:before { + content: "\f29d"; +} + +.ion-location:before { + content: "\f1ff"; +} + +.ion-lock-combination:before { + content: "\f4d4"; +} + +.ion-locked:before { + content: "\f200"; +} + +.ion-log-in:before { + content: "\f29e"; +} + +.ion-log-out:before { + content: "\f29f"; +} + +.ion-loop:before { + content: "\f201"; +} + +.ion-magnet:before { + content: "\f2a0"; +} + +.ion-male:before { + content: "\f2a1"; +} + +.ion-man:before { + content: "\f202"; +} + +.ion-map:before { + content: "\f203"; +} + +.ion-medkit:before { + content: "\f2a2"; +} + +.ion-merge:before { + content: "\f33f"; +} + +.ion-mic-a:before { + content: "\f204"; +} + +.ion-mic-b:before { + content: "\f205"; +} + +.ion-mic-c:before { + content: "\f206"; +} + +.ion-minus:before { + content: "\f209"; +} + +.ion-minus-circled:before { + content: "\f207"; +} + +.ion-minus-round:before { + content: "\f208"; +} + +.ion-model-s:before { + content: "\f2c1"; +} + +.ion-monitor:before { + content: "\f20a"; +} + +.ion-more:before { + content: "\f20b"; +} + +.ion-mouse:before { + content: "\f340"; +} + +.ion-music-note:before { + content: "\f20c"; +} + +.ion-navicon:before { + content: "\f20e"; +} + +.ion-navicon-round:before { + content: "\f20d"; +} + +.ion-navigate:before { + content: "\f2a3"; +} + +.ion-network:before { + content: "\f341"; +} + +.ion-no-smoking:before { + content: "\f2c2"; +} + +.ion-nuclear:before { + content: "\f2a4"; +} + +.ion-outlet:before { + content: "\f342"; +} + +.ion-paintbrush:before { + content: "\f4d5"; +} + +.ion-paintbucket:before { + content: "\f4d6"; +} + +.ion-paper-airplane:before { + content: "\f2c3"; +} + +.ion-paperclip:before { + content: "\f20f"; +} + +.ion-pause:before { + content: "\f210"; +} + +.ion-person:before { + content: "\f213"; +} + +.ion-person-add:before { + content: "\f211"; +} + +.ion-person-stalker:before { + content: "\f212"; +} + +.ion-pie-graph:before { + content: "\f2a5"; +} + +.ion-pin:before { + content: "\f2a6"; +} + +.ion-pinpoint:before { + content: "\f2a7"; +} + +.ion-pizza:before { + content: "\f2a8"; +} + +.ion-plane:before { + content: "\f214"; +} + +.ion-planet:before { + content: "\f343"; +} + +.ion-play:before { + content: "\f215"; +} + +.ion-playstation:before { + content: "\f30a"; +} + +.ion-plus:before { + content: "\f218"; +} + +.ion-plus-circled:before { + content: "\f216"; +} + +.ion-plus-round:before { + content: "\f217"; +} + +.ion-podium:before { + content: "\f344"; +} + +.ion-pound:before { + content: "\f219"; +} + +.ion-power:before { + content: "\f2a9"; +} + +.ion-pricetag:before { + content: "\f2aa"; +} + +.ion-pricetags:before { + content: "\f2ab"; +} + +.ion-printer:before { + content: "\f21a"; +} + +.ion-pull-request:before { + content: "\f345"; +} + +.ion-qr-scanner:before { + content: "\f346"; +} + +.ion-quote:before { + content: "\f347"; +} + +.ion-radio-waves:before { + content: "\f2ac"; +} + +.ion-record:before { + content: "\f21b"; +} + +.ion-refresh:before { + content: "\f21c"; +} + +.ion-reply:before { + content: "\f21e"; +} + +.ion-reply-all:before { + content: "\f21d"; +} + +.ion-ribbon-a:before { + content: "\f348"; +} + +.ion-ribbon-b:before { + content: "\f349"; +} + +.ion-sad:before { + content: "\f34a"; +} + +.ion-sad-outline:before { + content: "\f4d7"; +} + +.ion-scissors:before { + content: "\f34b"; +} + +.ion-search:before { + content: "\f21f"; +} + +.ion-settings:before { + content: "\f2ad"; +} + +.ion-share:before { + content: "\f220"; +} + +.ion-shuffle:before { + content: "\f221"; +} + +.ion-skip-backward:before { + content: "\f222"; +} + +.ion-skip-forward:before { + content: "\f223"; +} + +.ion-social-android:before { + content: "\f225"; +} + +.ion-social-android-outline:before { + content: "\f224"; +} + +.ion-social-angular:before { + content: "\f4d9"; +} + +.ion-social-angular-outline:before { + content: "\f4d8"; +} + +.ion-social-apple:before { + content: "\f227"; +} + +.ion-social-apple-outline:before { + content: "\f226"; +} + +.ion-social-bitcoin:before { + content: "\f2af"; +} + +.ion-social-bitcoin-outline:before { + content: "\f2ae"; +} + +.ion-social-buffer:before { + content: "\f229"; +} + +.ion-social-buffer-outline:before { + content: "\f228"; +} + +.ion-social-chrome:before { + content: "\f4db"; +} + +.ion-social-chrome-outline:before { + content: "\f4da"; +} + +.ion-social-codepen:before { + content: "\f4dd"; +} + +.ion-social-codepen-outline:before { + content: "\f4dc"; +} + +.ion-social-css3:before { + content: "\f4df"; +} + +.ion-social-css3-outline:before { + content: "\f4de"; +} + +.ion-social-designernews:before { + content: "\f22b"; +} + +.ion-social-designernews-outline:before { + content: "\f22a"; +} + +.ion-social-dribbble:before { + content: "\f22d"; +} + +.ion-social-dribbble-outline:before { + content: "\f22c"; +} + +.ion-social-dropbox:before { + content: "\f22f"; +} + +.ion-social-dropbox-outline:before { + content: "\f22e"; +} + +.ion-social-euro:before { + content: "\f4e1"; +} + +.ion-social-euro-outline:before { + content: "\f4e0"; +} + +.ion-social-facebook:before { + content: "\f231"; +} + +.ion-social-facebook-outline:before { + content: "\f230"; +} + +.ion-social-foursquare:before { + content: "\f34d"; +} + +.ion-social-foursquare-outline:before { + content: "\f34c"; +} + +.ion-social-freebsd-devil:before { + content: "\f2c4"; +} + +.ion-social-github:before { + content: "\f233"; +} + +.ion-social-github-outline:before { + content: "\f232"; +} + +.ion-social-google:before { + content: "\f34f"; +} + +.ion-social-google-outline:before { + content: "\f34e"; +} + +.ion-social-googleplus:before { + content: "\f235"; +} + +.ion-social-googleplus-outline:before { + content: "\f234"; +} + +.ion-social-hackernews:before { + content: "\f237"; +} + +.ion-social-hackernews-outline:before { + content: "\f236"; +} + +.ion-social-html5:before { + content: "\f4e3"; +} + +.ion-social-html5-outline:before { + content: "\f4e2"; +} + +.ion-social-instagram:before { + content: "\f351"; +} + +.ion-social-instagram-outline:before { + content: "\f350"; +} + +.ion-social-javascript:before { + content: "\f4e5"; +} + +.ion-social-javascript-outline:before { + content: "\f4e4"; +} + +.ion-social-linkedin:before { + content: "\f239"; +} + +.ion-social-linkedin-outline:before { + content: "\f238"; +} + +.ion-social-markdown:before { + content: "\f4e6"; +} + +.ion-social-nodejs:before { + content: "\f4e7"; +} + +.ion-social-octocat:before { + content: "\f4e8"; +} + +.ion-social-pinterest:before { + content: "\f2b1"; +} + +.ion-social-pinterest-outline:before { + content: "\f2b0"; +} + +.ion-social-python:before { + content: "\f4e9"; +} + +.ion-social-reddit:before { + content: "\f23b"; +} + +.ion-social-reddit-outline:before { + content: "\f23a"; +} + +.ion-social-rss:before { + content: "\f23d"; +} + +.ion-social-rss-outline:before { + content: "\f23c"; +} + +.ion-social-sass:before { + content: "\f4ea"; +} + +.ion-social-skype:before { + content: "\f23f"; +} + +.ion-social-skype-outline:before { + content: "\f23e"; +} + +.ion-social-snapchat:before { + content: "\f4ec"; +} + +.ion-social-snapchat-outline:before { + content: "\f4eb"; +} + +.ion-social-tumblr:before { + content: "\f241"; +} + +.ion-social-tumblr-outline:before { + content: "\f240"; +} + +.ion-social-tux:before { + content: "\f2c5"; +} + +.ion-social-twitch:before { + content: "\f4ee"; +} + +.ion-social-twitch-outline:before { + content: "\f4ed"; +} + +.ion-social-twitter:before { + content: "\f243"; +} + +.ion-social-twitter-outline:before { + content: "\f242"; +} + +.ion-social-usd:before { + content: "\f353"; +} + +.ion-social-usd-outline:before { + content: "\f352"; +} + +.ion-social-vimeo:before { + content: "\f245"; +} + +.ion-social-vimeo-outline:before { + content: "\f244"; +} + +.ion-social-whatsapp:before { + content: "\f4f0"; +} + +.ion-social-whatsapp-outline:before { + content: "\f4ef"; +} + +.ion-social-windows:before { + content: "\f247"; +} + +.ion-social-windows-outline:before { + content: "\f246"; +} + +.ion-social-wordpress:before { + content: "\f249"; +} + +.ion-social-wordpress-outline:before { + content: "\f248"; +} + +.ion-social-yahoo:before { + content: "\f24b"; +} + +.ion-social-yahoo-outline:before { + content: "\f24a"; +} + +.ion-social-yen:before { + content: "\f4f2"; +} + +.ion-social-yen-outline:before { + content: "\f4f1"; +} + +.ion-social-youtube:before { + content: "\f24d"; +} + +.ion-social-youtube-outline:before { + content: "\f24c"; +} + +.ion-soup-can:before { + content: "\f4f4"; +} + +.ion-soup-can-outline:before { + content: "\f4f3"; +} + +.ion-speakerphone:before { + content: "\f2b2"; +} + +.ion-speedometer:before { + content: "\f2b3"; +} + +.ion-spoon:before { + content: "\f2b4"; +} + +.ion-star:before { + content: "\f24e"; +} + +.ion-stats-bars:before { + content: "\f2b5"; +} + +.ion-steam:before { + content: "\f30b"; +} + +.ion-stop:before { + content: "\f24f"; +} + +.ion-thermometer:before { + content: "\f2b6"; +} + +.ion-thumbsdown:before { + content: "\f250"; +} + +.ion-thumbsup:before { + content: "\f251"; +} + +.ion-toggle:before { + content: "\f355"; +} + +.ion-toggle-filled:before { + content: "\f354"; +} + +.ion-transgender:before { + content: "\f4f5"; +} + +.ion-trash-a:before { + content: "\f252"; +} + +.ion-trash-b:before { + content: "\f253"; +} + +.ion-trophy:before { + content: "\f356"; +} + +.ion-tshirt:before { + content: "\f4f7"; +} + +.ion-tshirt-outline:before { + content: "\f4f6"; +} + +.ion-umbrella:before { + content: "\f2b7"; +} + +.ion-university:before { + content: "\f357"; +} + +.ion-unlocked:before { + content: "\f254"; +} + +.ion-upload:before { + content: "\f255"; +} + +.ion-usb:before { + content: "\f2b8"; +} + +.ion-videocamera:before { + content: "\f256"; +} + +.ion-volume-high:before { + content: "\f257"; +} + +.ion-volume-low:before { + content: "\f258"; +} + +.ion-volume-medium:before { + content: "\f259"; +} + +.ion-volume-mute:before { + content: "\f25a"; +} + +.ion-wand:before { + content: "\f358"; +} + +.ion-waterdrop:before { + content: "\f25b"; +} + +.ion-wifi:before { + content: "\f25c"; +} + +.ion-wineglass:before { + content: "\f2b9"; +} + +.ion-woman:before { + content: "\f25d"; +} + +.ion-wrench:before { + content: "\f2ba"; +} + +.ion-xbox:before { + content: "\f30c"; +} \ No newline at end of file diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot new file mode 100644 index 0000000..92a3f20 Binary files /dev/null and b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.eot differ diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.svg b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.svg new file mode 100644 index 0000000..49fc8f3 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.svg @@ -0,0 +1,2230 @@ + + + + + +Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014 + By Adam Bradley +Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf new file mode 100644 index 0000000..c4e4632 Binary files /dev/null and b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.ttf differ diff --git a/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff new file mode 100644 index 0000000..5f3a14e Binary files /dev/null and b/ui/src/main/webapp/app/fusion/external/ds2/css/fonts/ionicons.woff differ diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js b/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js new file mode 100644 index 0000000..73934f7 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/ds-profile/post-controller.js @@ -0,0 +1,4 @@ +appDS2.controller('postController', function($scope, $http, $modal, + $routeParams, $rootScope, PostService) { + +}); diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js b/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js new file mode 100644 index 0000000..d8faae6 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-controllers/samplePage-route.js @@ -0,0 +1,27 @@ +appDS2 + .config(function($routeProvider) { + $routeProvider + .when( + '/collaborate_list', + { + templateUrl : 'app/fusion/scripts/DS2-view-models/ds2-admin/collaborate-list.html', + controller : 'collaborateListControllerDS2' + }) + .when( + '/drools/:filename', + { + templateUrl : 'app/fusion/scripts/DS2-view-models/ds2-samplePages/drools.html', + controller : 'droolsController' + }) + .when( + '/droolsList', + { + templateUrl : 'app/fusion/scripts/DS2-view-models/ds2-samplePages/drools-list.html', + controller : 'droolsListController' + }) + .otherwise( + { + templateUrl : 'app/fusion/scripts/DS2-view-models/ds2-samplePages/net_map.html', + controller : 'netMapController' + }); + }); diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js b/ui/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js new file mode 100644 index 0000000..d3dac85 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-services/postSearch.js @@ -0,0 +1,5 @@ +appDS2.factory('PostService', function($http, $q) { + return { + + }; +}); diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html new file mode 100644 index 0000000..ce4bacf --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/post.html @@ -0,0 +1,3 @@ +
    +

    User Search

    +
    diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html new file mode 100644 index 0000000..6b50b74 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/profile_searchDS2.html @@ -0,0 +1,60 @@ +
    +
    +

    Profile Search

    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    User IDLast NameFirst NameEmailUser IDManager User IDEditActive?
    {{rowData.id}}{{rowData.lastName}}{{rowData.firstName}}{{rowData.email}}{{rowData.orgUserId}}{{rowData.orgManagerUserId}} +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html new file mode 100644 index 0000000..da9ca15 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-profile/self_profile.html @@ -0,0 +1,227 @@ +
    +
    +

    {{pageTitle}}

    +
    + +
    +
    +

    Please use Portal for access management

    +

    Please + edit the profile details below:

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + +
    + +
    +
    +
    + Role +
    + +
    + + + + + + + + + + + + + + +
    NameDelete
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html new file mode 100644 index 0000000..b6a4107 --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/ds2-samplePages/samplePage.html @@ -0,0 +1,78 @@ + + + + + + +Sample Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html new file mode 100644 index 0000000..69d63cb --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/footer.html @@ -0,0 +1,29 @@ + + +
    +
    + +
    +
    diff --git a/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html new file mode 100644 index 0000000..630767f --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/header-logo.html @@ -0,0 +1,19 @@ + + + +Blueprint Validation UI \ No newline at end of file diff --git a/ui/src/main/webapp/WEB-INF/views/welcome.jsp b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html old mode 100755 new mode 100644 similarity index 64% rename from ui/src/main/webapp/WEB-INF/views/welcome.jsp rename to ui/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html index 0f3d695..0d85329 --- a/ui/src/main/webapp/WEB-INF/views/welcome.jsp +++ b/ui/src/main/webapp/app/fusion/scripts/DS2-view-models/welcome-content.html @@ -13,16 +13,16 @@ 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. --> -<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> - - + + + - Spring 4 MVC Hello World Example with Maven Eclipse - + + + +Page Redirection - -

    Hello World, Spring MVC

    - -

    Welcome, ${name}

    - \ No newline at end of file diff --git a/ui/src/main/webapp/app/fusion/scripts/view-models/footer.html b/ui/src/main/webapp/app/fusion/scripts/view-models/footer.html new file mode 100644 index 0000000..b0bd26e --- /dev/null +++ b/ui/src/main/webapp/app/fusion/scripts/view-models/footer.html @@ -0,0 +1,17 @@ + + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/ui/src/main/webapp/index.html b/ui/src/main/webapp/index.html deleted file mode 100755 index cb23409..0000000 --- a/ui/src/main/webapp/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -AKRAINO Blueprint Validation UI - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - \ No newline at end of file diff --git a/ui/src/main/webapp/resources/css/ngDialog-theme-default.css b/ui/src/main/webapp/resources/css/ngDialog-theme-default.css deleted file mode 100644 index 5845704..0000000 --- a/ui/src/main/webapp/resources/css/ngDialog-theme-default.css +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ -@-webkit-keyframes ngdialog-flyin { - 0% { - opacity: 0; - -webkit-transform: translateY(-40px); - transform: translateY(-40px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } -} - -@keyframes ngdialog-flyin { - 0% { - opacity: 0; - -webkit-transform: translateY(-40px); - -ms-transform: translateY(-40px); - transform: translateY(-40px); - } - - 100% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } -} - -@-webkit-keyframes ngdialog-flyout { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-40px); - transform: translateY(-40px); - } -} - -@keyframes ngdialog-flyout { - 0% { - opacity: 1; - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - transform: translateY(0); - } - - 100% { - opacity: 0; - -webkit-transform: translateY(-40px); - -ms-transform: translateY(-40px); - transform: translateY(-40px); - } -} - -.ngdialog.ngdialog-theme-default { - padding-bottom: 160px; - padding-top: 160px; -} - -.ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content { - -webkit-animation: ngdialog-flyout .5s; - animation: ngdialog-flyout .5s; -} - -.ngdialog.ngdialog-theme-default .ngdialog-content { - -webkit-animation: ngdialog-flyin .5s; - animation: ngdialog-flyin .5s; - background: #F9F4E5; - border-radius: 5px; - color: #444; - font-family: 'Helvetica',sans-serif; - font-size: 1.1em; - line-height: 1.5em; - margin: 0 auto; - max-width: 100%; - padding: 1em; - position: relative; - width: 450px; -} - -.ngdialog.ngdialog-theme-default .ngdialog-close { - border-radius: 5px; - cursor: pointer; - position: absolute; - right: 0; - top: 0; -} - -.ngdialog.ngdialog-theme-default .ngdialog-close:before { - background: transparent; - border-radius: 3px; - color: #bbb; - content: '\00D7'; - font-size: 26px; - font-weight: 400; - height: 30px; - line-height: 26px; - position: absolute; - right: 3px; - text-align: center; - top: 3px; - width: 30px; -} - -.ngdialog.ngdialog-theme-default .ngdialog-close:hover:before, -.ngdialog.ngdialog-theme-default .ngdialog-close:active:before { - color: #777; -} - -.ngdialog.ngdialog-theme-default .ngdialog-message { - margin-bottom: .5em; -} - -.ngdialog.ngdialog-theme-default .ngdialog-input { - margin-bottom: 1em; -} - -.ngdialog.ngdialog-theme-default .ngdialog-input textarea, -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"], -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"], -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"], -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"] { - background: #fff; - border: 0; - border-radius: 3px; - font-family: inherit; - font-size: inherit; - font-weight: inherit; - margin: 0 0 .25em; - min-height: 2.5em; - padding: .25em .67em; - width: 100%; -} - -.ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus, -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"]:focus, -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"]:focus, -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"]:focus, -.ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"]:focus { - -webkit-box-shadow: inset 0 0 0 2px #8dbdf1; - box-shadow: inset 0 0 0 2px #8dbdf1; - outline: none; -} - -.ngdialog.ngdialog-theme-default .ngdialog-buttons { - *zoom: 1; -} - -.ngdialog.ngdialog-theme-default .ngdialog-buttons:after { - content: ''; - display: table; - clear: both; -} - -.ngdialog.ngdialog-theme-default .ngdialog-button { - border: 0; - border-radius: 3px; - cursor: pointer; - float: right; - font-family: inherit; - font-size: .8em; - letter-spacing: .1em; - line-height: 1em; - margin: 0 0 0 .5em; - padding: .75em 2em; - text-transform: uppercase; -} - -.ngdialog.ngdialog-theme-default .ngdialog-button:focus { - -webkit-animation: ngdialog-pulse 1.1s infinite; - animation: ngdialog-pulse 1.1s infinite; - outline: none; -} - -@media (max-width: 568px) { - .ngdialog.ngdialog-theme-default .ngdialog-button:focus { - -webkit-animation: none; - animation: none; - } -} - -.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary { - background: #3288e6; - color: #fff; -} - -.ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary { - background: #e0e0e0; - color: #777; -} \ No newline at end of file diff --git a/ui/src/main/webapp/resources/css/style.css b/ui/src/main/webapp/resources/css/style.css deleted file mode 100755 index 7680da0..0000000 --- a/ui/src/main/webapp/resources/css/style.css +++ /dev/null @@ -1,611 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -.img-arredondadaSide { - border-radius: 100%; - w overflow: hidden; - height: 100px; - width:100px; - background:#6495ED; - margin-top:10px; - margin-left: 5px; -} - .img-arredondadaChat { - border-radius: 100%; - overflow: hidden; - height: 50px; - width:50px; - background: black; -} - .tema{ - color:red; -} - .chat-container { - width: 400px; - height: 100%; - margin: 0 auto; -} - .corStatusFinalizado{ - color:green; -} - .corNormal{ - color:#3366FF; -} - .corStatusNaoFinalizado{ - color:red; -} - .alinharCentro{ - text-align: center; -} - .user-panel { - padding: 10px; -} - .user-panel:before, .user-panel:after { - display: table; - content: " "; -} - .user-panel:after { - clear: both; -} - .user-panel > .image > img { - width: 45px; - height: 45px; -} - .user-panel > .info { - font-weight: 600; - padding: 5px 5px 5px 15px; - font-size: 14px; - line-height: 1; -} - .user-panel > .info > p { - margin-bottom: 9px; -} - .user-panel > .info > a { - text-decoration: none; - padding-right: 5px; - margin-top: 3px; - font-size: 11px; - font-weight: normal; -} - .user-panel > .info > a > .fa, .user-panel > .info > a > .ion, .user-panel > .info > a > .glyphicon { - margin-right: 3px; -} - #wrapper { - padding-left: 0; - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; - margin-top: -20px; -} - #wrapper.toggled { - padding-left: 250px; -} - #sidebar-wrapper { - z-index: 1000; - position: absolute; - left: 250px; - width: 0; - height:100vh; - margin-left: -250px; - overflow-y: auto; - background: #cccccc; - -webkit-transition: all 0.5s ease; - -moz-transition: all 0.5s ease; - -o-transition: all 0.5s ease; - transition: all 0.5s ease; -} - #wrapper.toggled #sidebar-wrapper { - width: 250px; -} - #page-content-wrapper { - width: 100%; -} - #wrapper.toggled #page-content-wrapper { - position: absolute; - margin-right: -250px; -} -/* Sidebar Styles */ - .sidebar-nav { - position: absolute; - top: 0; - width: 250px; - margin: 0; - padding: 0; - list-style: none; -} - .sidebar-nav li { - text-indent: 20px; - line-height: 40px; - margin-left: -25px; - color: #000000; -} - .logo{ - color: rgb(105, 183, 105); - font-size: 36px; - font-weight: 700; - line-height: 39.6px; - margin-left:20px; - margin-top:10px -} - .fa { - display: inline-block; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - font-size-adjust: none; - font-stretch: normal; - font-feature-settings: normal; - font-language-override: normal; - font-kerning: auto; - font-synthesis: weight style; - font-variant: normal; - font-size: inherit; - text-rendering: auto; - padding-right: 10px; -} - .containerLogin{ - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-top: 100px; - margin-left: auto; - width: 30%; -} - .sidebar-nav li a { - display: block; - text-decoration: none; - color: #000000; -} - - .sidebar-nav li a:hover { - text-decoration: none; - color: #fff; - background: rgba(255,255,255,0.2); -} - - .sidebar-nav li a.example{ - text-decoration: none; - color: #fff; - background: #999999; -} -sidebar-nav > .sidebar-brand { - height: 65px; - font-size: 18px; - line-height: 60px; -} - .sidebar-nav > .sidebar-brand a { - color: #999999; -} - .sidebar-nav > .sidebar-brand a:hover { - color: #fff; - background: none; -} - .sidebar-nav > .sidebar-brand a:active { - color: #fff; - background: none; -} - @media only screen and (max-height: 650px) and (min-width:768px){ - #sidebar-wrapper { - width: 250px; - position: absolute; - height:200%; - } -} - @media only screen and (max-height: 450px) and (min-width:768px){ - #sidebar-wrapper { - width: 250px; - position: absolute; - height:160%; - } -} - @media only screen and (max-height: 1200px) and (min-width:1366px){ - #sidebar-wrapper { - width: 250px; - position: absolute; - height:100%; - } -} - @media(min-width:768px) { - #wrapper { - padding-left: 120px; - } - #wrapper.toggled { - padding-left: 0; - } - #sidebar-wrapper { - width: 250px; - } - #wrapper.toggled #sidebar-wrapper { - width: 0; - } - #page-content-wrapper { - position: relative; - } - #wrapper.toggled #page-content-wrapper { - position: relative; - margin-right: 0; - } -} - - * { - box-sizing: border-box; -} - body { - margin: 0; - padding:0; - - font-family: Arial; - height:calc(100% - 70px); - height:-moz-calc(100% - 70px); - height:-webkit-calc(100% - 70px); - -} -html{margin:0;padding:0;} - - .header { - overflow: hidden; - background-color: #000000; - padding: 8px 10px; -} - .header a { - float: left; - color: white; - text-align: center; - padding: 12px; - text-decoration: none; - font-size: 18px; - line-height: 25px; - border-radius: 4px; -} - .header a.logo { - font-size: 25px; - font-weight: bold; -} - .header-right { - float: right; -} - .akrbutton { - background-color: #4d4d4d; - border: none; - color: white; - padding: 8px 15px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 12px; - margin: 3% 2%; - cursor: pointer; - border-radius: 5px; -} - .refreshbutton { - background-color: #4d4d4d; - border: none; - color: white; - padding: 7px 14px; - text-align: center; - text-decoration: none; - display: inline-block; - cursor: pointer; - border-radius: 5px; - -} - .akrtheader { - padding-top: 12px; - padding-bottom: 12px; - text-align: left; - background-color: #4CAF50 -} - table, td { - border: 1px solid #ddd; -} - table { - border-collapse: collapse; - width: 100%;} - - .siteStatusTable th { - padding: 5px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .siteStatusTable td { - padding-top: 5px; - padding-bottom:5px; -} -.nodeTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 0px solid #ddd; -} - .nodeTable td { - padding-top: 5px; - padding-bottom:5px; -} - .siteaddOnsTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .siteaddOnsTable td { - padding-top: 5px; - padding-bottom:5px; -} - - - .sitetempestsTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .sitetempestsTable td { - padding-top: 5px; - padding-bottom:5px; -} - - -.shardwareTable th { - padding: 5px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .shardwareTable td { - padding-top: 3px; - padding-bottom:3px; -} -.rackTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .rackTable td { - padding-top: 5px; - padding-bottom:5px; -} - -.sitebuildTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .sitebuildTable td { - padding-top: 5px; - padding-bottom:5px; -} - - .softwareTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .softwareTable td { - padding-top: 5px; - padding-bottom:5px; -} -.popUpTable th { - padding: 10px; - text-align: left; - background-color: #cccccc; - border: 1px solid #ddd; -} - .popUpTable td { - padding-top: 5px; - padding-bottom:5px; -} -/*.pagination { - display: inline-block; - float:right; -} - .pagination li { - list-style-type:none; - color: white; - float: left; - padding: 8px 16px; - text-decoration: none; - transition: background-color .3s; - border: 1px solid #ddd; -} - .pagination li.active { - background-color: #DCDCDC; - color: white; - border: 1px solid #ddd; -}*/ - button:disabled { - background: #dddddd; -} - .select-style { - border: 1px solid #ccc; - width: 240px; - height: 40px; - border-radius: 3px; - overflow: hidden; - background-position: right; -} - .select-style select { - - width: 100%; - border: 0px; - box-shadow: none; - background:none; - background-image: none; - -webkit-appearance: none; - outline: 0px; - -} -.selectStyle select option{ - height:30px; - padding-top:5px; -} -@-moz-document url-prefix() { - select.example { - padding-right: 25px; - - height:40px; - - background-image: url("data:image/svg+xml,\ - \ - \ - "); - background-repeat: no-repeat; - background-position: calc(100% - 7px) 50%; - -moz-appearance: none; - appearance: none; - - } -} -@-moz-document url-prefix() { - select.exampleTable { - - - height:25px; - - background-image: url("data:image/svg+xml,\ - \ - \ - "); - background-repeat: no-repeat; - background-position: calc(100% - 7px) 50%; - -moz-appearance: none; - appearance: none; - - } -} - .select-style select:focus { - outline: none; -} - .child_div_1{ - float:left; - margin-right:50px; -} - .child_div_2{ - float:right; - margin-right:50%; -} - .ngdialog { - margin-top:-100px; - padding-top:10px; - overflow-y: auto; -} - .addOnForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} - .tempestclassForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.hardwareForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.podForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.uploadForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.vnfForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.siteForm input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} -.siteForm li input[type=text], select, textarea { - width: 40%; - padding: 3px; - border: 0.5px solid #ccc; - border-radius: 4px; - box-sizing: border-box; - margin-top: 3px; - margin-bottom: 3px; - resize: vertical; -} - - label { - font-weight: normal !important; -} -.ngdialog-custom{ - background: #e6e6e6; -} -#footerlogo{ - position:absolute; - display:inline-block; - bottom:0; - width: 250px; -} -.borderFrame{ - margin-top:2px; - border:2px solid #cdcdcd; - /*border-radius: 0.1px; - /*-moz-border-radius: 0.1px; - -webkit-border-radius:0.1px;*/ -} diff --git a/ui/src/main/webapp/resources/images/logo_akraino_edge_stack.png b/ui/src/main/webapp/resources/images/logo_akraino_edge_stack.png deleted file mode 100755 index c81bb53..0000000 Binary files a/ui/src/main/webapp/resources/images/logo_akraino_edge_stack.png and /dev/null differ diff --git a/ui/src/main/webapp/resources/js/AECCommittedSubmissionsController.js b/ui/src/main/webapp/resources/js/AECCommittedSubmissionsController.js deleted file mode 100644 index 9690793..0000000 --- a/ui/src/main/webapp/resources/js/AECCommittedSubmissionsController.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -var AECBlueprintValidationUIApp = angular - .module('BlueprintValidationUIManagement'); - -AECBlueprintValidationUIApp.controller('AECCommittedSubmissionsController', - function($scope, restAPISvc, $interval, refreshPeriod) { - - $scope.submissionIdList = []; - - restAPISvc.getRestAPI("/api/submission/", function(data) { - $scope.submissions = data; - }); - - $scope.refreshCommittedSubmissions = function() { - restAPISvc.getRestAPI("/api/submission/", function(data) { - $scope.submissions = data; - }); - } - - $scope.modifySubmissionIdList = function(id) { - if ($scope.submissionIdList.indexOf(id) === -1) { - $scope.submissionIdList.push(id); - } else { - $scope.submissionIdList.splice($scope.submissionIdList - .indexOf(id), 1); - } - } - - $scope.deleteSubmissions = function() { - var confirmation = confirm("Are you sure?"); - if (confirmation == true) { - angular.forEach($scope.submissionIdList, function(id) { - var submission = { - "submissionId" : id - }; - restAPISvc - .deleteRestAPI("/api/submission/", submission); - }); - } - } - - $interval(function() { - $scope.refreshCommittedSubmissions(); - }, refreshPeriod); - - }); diff --git a/ui/src/main/webapp/resources/js/AECFindBySubmissionIdController.js b/ui/src/main/webapp/resources/js/AECFindBySubmissionIdController.js deleted file mode 100644 index 2d1a99c..0000000 --- a/ui/src/main/webapp/resources/js/AECFindBySubmissionIdController.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -var AECBlueprintValidationUIApp = angular - .module('BlueprintValidationUIManagement'); - -AECBlueprintValidationUIApp - .controller( - 'AECFindBySubmissionIdController', - function($scope, restAPISvc) { - - initialize(); - - function initialize() { - $scope.results = []; - restAPISvc - .getRestAPI( - "/api/submission/", - function(data) { - $scope.submissions = data; - $scope.submissionsForDisplay = []; - angular - .forEach( - $scope.submissions, - function( - submissionData) { - var temp = "id: " - + submissionData.submissionId - + " blueprint: " - + submissionData.blueprintInstance.blueprint.blueprintName - + " version: " - + submissionData.blueprintInstance.version - + " layer: " - + submissionData.blueprintInstance.layer - + " lab: " - + submissionData.blueprintInstance.timeslot.lab - + " Start date and time: " - + submissionData.blueprintInstance.timeslot.startDateTime - + " duration: " - + submissionData.blueprintInstance.timeslot.duration; - $scope.submissionsForDisplay - .push(temp); - }); - }); - } - $scope.selectedSubmissionChange = function( - selectedSubmission) { - $scope.results = []; - var id = selectedSubmission.substring( - selectedSubmission.indexOf("id:") + 4, - selectedSubmission.indexOf("blueprint") - 1); - restAPISvc.getRestAPI( - "/api/results/findBySubmissionId/" + id, - function(data) { - $scope.results = data; - }); - } - - }); \ No newline at end of file diff --git a/ui/src/main/webapp/resources/js/App.js b/ui/src/main/webapp/resources/js/App.js deleted file mode 100755 index 1bc514c..0000000 --- a/ui/src/main/webapp/resources/js/App.js +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -var AECBlueprintValidationUIApp = angular.module('BlueprintValidationUIManagement', ['ngDialog', 'ui.router', 'base64','App.config','ngStorage','ui.bootstrap', 'ngResource','ngFileUpload','ngMaterial']); - -AECBlueprintValidationUIApp.config(function($stateProvider, $urlRouterProvider) { - $urlRouterProvider.otherwise('/login') - $stateProvider - .state('common', { - templateUrl: 'views/indexMain.html', - abstract: true - }) - .state('login', { - url: "/login", - controller: 'Login', - templateUrl: 'views/login.html' - }) - .state('newSubmission', { - url: "/newSubmission", - parent: "common", - views: { - "main": { - controller: 'AECNewSubmissionController', - templateUrl: 'views/newSubmission.html' - } - } - }) - .state('committedSubmissions', { - url: "/committedSubmissions", - parent: "common", - views: { - "main": { - controller: 'AECCommittedSubmissionsController', - templateUrl: 'views/committedSubmissions.html' - } - } - }) - .state('findBySubmissionId', { - url: "/findBySubmissionId", - parent: "common", - views: { - "main": { - controller: 'AECFindBySubmissionIdController', - templateUrl: 'views/findBySubmissionId.html' - } - } - }) -}); - -AECBlueprintValidationUIApp.controller('Login',function($scope, $http, $filter, filterFilter, $state, $base64,$rootScope,$controller,appContext) { - $rootScope.tokenId =""; - $scope.usernameVal = ''; - $scope.passwordVal = ''; - $rootScope.message = "Please enter credentials"; - $scope.$state = $state; - - var baseURL = window.location.protocol + '//' + window.location.host; - /* eslint-disable no-console */ - console.log('Base URL for current frame is: ' + baseURL); - /* eslint-enable no-console */ - $scope.goLogin = function() { - var arr = $scope.passwordVal; - if ($scope.usernameVal == '' && $scope.passwordVal == '') { - $scope.userMessage = 'Please enter a username.'; - $scope.passwordMessage = 'Please enter a password.'; - } else if ($scope.usernameVal == '') { - $scope.userMessage = 'Please enter a username.'; - $scope.passwordMessage = ''; - } else if ($scope.passwordVal == '') { - $scope.passwordMessage = 'Please enter a password.'; - $scope.userMessage = ''; - } else if (arr.length < 6) { - $scope.passwordMessage = 'Please enter a valid password.'; - $scope.userMessage = ''; - } - else { - $scope.passwordMessage = ''; - $scope.userMessage =''; - // var userPwd = $scope.usernameVal + ":" + $scope.passwordVal; - // var auth = $base64.encode(userPwd); - /* - * $http({ method: 'POST', url: appContext+'/login', //url: - * 'http://'+hostUrl+'/AECPortalMgmt/login', headers: { - * 'Authorization': "Basic " + auth, 'Content-Type': - * "application/json", 'Accept': "application/json" }, data: { } }). - * then(function(response) { if (response.data.statusCode == 200) { - * $rootScope.tokenId = response.data.tokenId; - * localStorage.setItem("tokenId",response.data.tokenId); - * $state.transitionTo('sites'); } else if (response.data.statusCode == - * 401){ $scope.passwordVal= null; $scope.passwordMessage = 'Invalid - * Credentials, please try again...'; - * - * localStorage.removeItem("tokenId"); } }, function(error) { if - * (error.status == 401) { $scope.passwordMessage = 'Invalid - * Credentials, please try again...'; $scope.passwordVal =""; - * localStorage.removeItem("tokenId"); } else if (error.status == - * 400) { $scope.passwordMessage = 'Session Invalid, please login - * again...'; $scope.passwordVal =""; - * localStorage.removeItem("tokenId"); } else if (error.status == - * 307) { $scope.passwordMessage = 'Session expired,Please try - * again...'; $scope.passwordVal =""; - * localStorage.removeItem("tokenId"); } }); - */ - $state.transitionTo('committedSubmissions'); - } - } - $scope.goLogout = function() { - $http({ - method: 'POST', - url: appContext+'/logout', - headers: { - 'Content-Type': "application/json", - 'Accept': "application/json", - 'tokenId' : $rootScope.tokenId - }, - data:{ - } - /* - * data: { 'username': $scope.usernameVal, 'passowrd': - * $scope.passwordVal } - */ - }).then(function(response) { - if (response.data.statusCode == 200) { - $rootScope.tokenId =""; - localStorage.removeItem("tokenId"); - $state.transitionTo('login'); - $rootScope.message = 'User logged out, please login again...'; - } - }, function(response) { - $scope.message = 'Unknown error,Try again later' + response.status; - }); - } -}); - diff --git a/ui/src/main/webapp/resources/js/CommonController.js b/ui/src/main/webapp/resources/js/CommonController.js deleted file mode 100644 index dda7718..0000000 --- a/ui/src/main/webapp/resources/js/CommonController.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2019 AT&T Intellectual Property. All rights reserved. - * - * Licensed 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. - */ - -var AECBlueprintValidationUIApp = angular - .module('BlueprintValidationUIManagement'); - -AECBlueprintValidationUIApp.controller('CommonController', function($scope, - $http, $sce, ngDialog, $filter, $rootScope, $state, $templateCache) { - $scope.errorHandle = function(error) { - if (error.status == 400) { - localStorage.removeItem("tokenId"); - $state.transitionTo('login'); - localStorage.removeItem("tokenId"); - $rootScope.message = 'Session Invalid, please login again...'; - } else if (error.status == 401) { - localStorage.removeItem("tokenId"); - $state.transitionTo('login'); - $rootScope.message = 'Invalid Credentials, please try again...'; - } else if (error.status == 307) { - localStorage.removeItem("tokenId"); - $state.transitionTo('login'); - $rootScope.message = 'Session expired,Please try again...'; - } - } - - $scope.$on('onBeforeUnload', function(e, confirmation) { - var e2 = e || window.event; - if (e2) { - confirmation.message = "All data willl be lost."; - e2.preventDefault(); - } - }); - $scope.$on('onUnload', function() { - $templateCache.removeAll(); - }); - - $scope.cmp = function(x, y) { - return x > y ? 1 : x < y ? -1 : 0; - }; - -}); \ No newline at end of file diff --git a/ui/src/main/webapp/reusable_chart.js b/ui/src/main/webapp/reusable_chart.js deleted file mode 100644 index 01ab32d..0000000 --- a/ui/src/main/webapp/reusable_chart.js +++ /dev/null @@ -1,127 +0,0 @@ -d3.custom = {}; - -d3.custom.barChart = function module() { - var margin = { - top : 20, - right : 20, - bottom : 40, - left : 40 - }, width = 500, height = 500, gap = 0, ease = 'cubic-in-out'; - var svg, duration = 500; - - var dispatch = d3.dispatch('customHover'); - function exports(_selection) { - _selection - .each(function(_data) { - - var chartW = width - margin.left - margin.right, chartH = height - - margin.top - margin.bottom; - - var x1 = d3.scale.ordinal().domain( - _data.map(function(d, i) { - return i; - })).rangeRoundBands([ 0, chartW ], .1); - - var y1 = d3.scale.linear().domain( - [ 0, d3.max(_data, function(d, i) { - return d; - }) ]).range([ chartH, 0 ]); - - var xAxis = d3.svg.axis().scale(x1).orient('bottom'); - - var yAxis = d3.svg.axis().scale(y1).orient('left'); - - var barW = chartW / _data.length; - - if (!svg) { - svg = d3.select(this).append('svg').classed('chart', - true); - var container = svg.append('g').classed( - 'container-group', true); - container.append('g').classed('chart-group', true); - container.append('g') - .classed('x-axis-group axis', true); - container.append('g') - .classed('y-axis-group axis', true); - } - - svg.transition().duration(duration).attr({ - width : width, - height : height - }) - svg.select('.container-group').attr( - { - transform : 'translate(' + margin.left + ',' - + margin.top + ')' - }); - - svg.select('.x-axis-group.axis').transition().duration( - duration).ease(ease).attr({ - transform : 'translate(0,' + (chartH) + ')' - }).call(xAxis); - - svg.select('.y-axis-group.axis').transition().duration( - duration).ease(ease).call(yAxis); - - var gapSize = x1.rangeBand() / 100 * gap; - var barW = x1.rangeBand() - gapSize; - var bars = svg.select('.chart-group').selectAll('.bar') - .data(_data); - bars.enter().append('rect').classed('bar', true).attr({ - x : chartW, - width : barW, - y : function(d, i) { - return y1(d); - }, - height : function(d, i) { - return chartH - y1(d); - } - }).on('mouseover', dispatch.customHover); - bars.transition().duration(duration).ease(ease).attr({ - width : barW, - x : function(d, i) { - return x1(i) + gapSize / 2; - }, - y : function(d, i) { - return y1(d); - }, - height : function(d, i) { - return chartH - y1(d); - } - }); - bars.exit().transition().style({ - opacity : 0 - }).remove(); - - duration = 500; - - }); - } - exports.width = function(_x) { - if (!arguments.length) - return width; - width = parseInt(_x); - return this; - }; - exports.height = function(_x) { - if (!arguments.length) - return height; - height = parseInt(_x); - duration = 0; - return this; - }; - exports.gap = function(_x) { - if (!arguments.length) - return gap; - gap = _x; - return this; - }; - exports.ease = function(_x) { - if (!arguments.length) - return ease; - ease = _x; - return this; - }; - d3.rebind(exports, dispatch, 'on'); - return exports; -}; \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css b/ui/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css new file mode 100644 index 0000000..1b256ba --- /dev/null +++ b/ui/src/main/webapp/static/fusion/css/att_angular_gridster/sandbox-gridster.css @@ -0,0 +1,175 @@ +.gridster { + position: relative; + margin: auto; + /* height: 0 + */ +} + +.gridster>ul { + margin: 0; + list-style: none; + padding: 0 +} + +.gridster-item { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + list-style: none; + z-index: 2; + position: absolute; + display: none +} + +.gridster-loaded { + -webkit-transition: height .3s; + -moz-transition: height .3s; + -o-transition: height .3s; + transition: height .3s +} + +.gridster-loaded .gridster-item { + display: block; + position: absolute; + -webkit-transition: opacity .3s, left .3s, top .3s, width .3s, height + .3s; + -moz-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; + -o-transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; + transition: opacity .3s, left .3s, top .3s, width .3s, height .3s; + -webkit-transition-delay: 50ms; + -moz-transition-delay: 50ms; + -o-transition-delay: 50ms; + transition-delay: 50ms +} + +.gridster-loaded .gridster-preview-holder { + display: none; + z-index: 1; + position: absolute; + background-color: #067ab4; + /* + background-color: rgb(6, 122, 180); + -ms-filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#067ab4', endColorstr='#067ab4'); IE + opacity: 0.2; + */ + border-color: #fff; + -webkit-transition: width .2s, height .3s; + -moz-transition: width .2s, height .3s; + -o-transition: width .2s, height .3s; + transition: width .2s, height .3s; + -webkit-transition-delay: 50ms; + -moz-transition-delay: 50ms; + -o-transition-delay: 50ms; + transition-delay: 50ms +} + +.gridster-loaded .gridster-item.gridster-item-moving { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + opacity: 0.9; +} + +.gridster-mobile { + height: auto !important +} + +.gridster-mobile .gridster-item { + height: auto; + position: static; + float: none +} + +.gridster-item.ng-leave.ng-leave-active { + opacity: 0 +} + +.gridster-item.ng-enter { + opacity: 1 +} + +.gridster-item-moving { + z-index: 3 +} + +.gridster-item-resizable-handler { + position: absolute; + font-size: 1px; + display: block +} + +.handle-se { + cursor: se-resize; + width: 0; + height: 0; + right: 1px; + bottom: 1px; + border-style: solid; + border-width: 0 0 12px 12px; + border-color: transparent +} + +.handle-ne { + cursor: ne-resize; + width: 12px; + height: 12px; + right: 1px; + top: 1px +} + +.handle-nw { + cursor: nw-resize; + width: 12px; + height: 12px; + left: 1px; + top: 1px +} + +.handle-sw { + cursor: sw-resize; + width: 12px; + height: 12px; + left: 1px; + bottom: 1px +} + +.handle-e { + cursor: e-resize; + width: 12px; + bottom: 0; + right: 1px; + top: 0 +} + +.handle-s { + cursor: s-resize; + height: 12px; + right: 0; + bottom: 1px; + left: 0 +} + +.handle-n { + cursor: n-resize; + height: 12px; + right: 0; + top: 1px; + left: 0 +} + +.handle-w { + cursor: w-resize; + width: 12px; + left: 1px; + top: 0; + bottom: 0 +} + +.gridster .gridster-item:hover .gridster-box { + border: 1.5px solid #B3B2B3 +} + +.gridster .gridster-item:hover .handle-se { + border-color: transparent transparent #ccc +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css b/ui/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css new file mode 100644 index 0000000..54bbd89 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/css/att_angular_gridster/ui-gridster.css @@ -0,0 +1,143 @@ +/* ui-gridster.css */ +.gridster-container { + background-color: #EFEFEF; + color: #fff; + border: 1px dashed; + overflow-y: auto; + overflow-x: hidden; +} + +/* app css for attGridtser */ +.gridster-item-container { + background-color: #FFFFFF; + position: relative; + margin-left: auto; + margin-right: auto; + min-height: 79px; + height: 100%; +} + +.gridster-item-container .gridster-item-header { + /* gridster-item Header */ + position: relative; + height: 50px !important; + border: 1px solid #d3d3d3; + border-bottom: 0; + background-color: #E5E5E5; + white-space: nowrap; + text-overflow: ellipsis; + z-index: 1; + -webkit-border-radius: 2px 2px 0 0; + -moz-border-radius: 2px 2px 0 0; + -ms-border-radius: 2px 2px 0 0; + -o-border-radius: 2px 2px 0 0; + border-radius: 2px 2px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + overflow: hidden; + /* IE6-8 */ +} + +.gridster-item-container .gridster-item-header .gridster-item-handle { + cursor: move; + margin: 12px; + position: absolute; + top: 0; + left: 0; + border: 0; + vertical-align: middle; + -ms-interpolation-mode: bicubic; + display: block; +} + +.gridster-item-container .gridster-item-header .gridster-item-header-content + { + line-height: 44px; + margin-left: 26px; + font-family: "Omnes-ECOMP-W02", Arial; + font-size: 18px; + color: #444444; + float: left; +} + +.gridster-item-container .gridster-item-header .gridster-item-sub-header-content + { + position: absolute; + top: 29.5px; + left: 26px; + font-family: "Omnes-ECOMP-W02", Arial; + font-size: 12px; + color: #444444; +} + +.gridster-item-container .gridster-item-header .gridster-item-header-buttons-container + { + position: absolute; + right: 10px; + top: 10px; + overflow: hidden; + text-align: right; + height: 30px; + color: #444444; +} + +.gridster-item-container .gridster-item-body { + /* gridster-item Body */ + position: absolute; + width: 100%; + top: 50px; + left: 0; + right: 0; + bottom: 29px; + border: 1px solid #d3d3d3; + box-sizing: border-box; + overflow: auto; + color: #444444; + /* text-align: center; */ +} + +.gridster-item-container .gridster-item-footer { + /* gridster-item Footer */ + position: absolute; + bottom: 0; + width: 100%; + height: 29px !important; + text-align: left; + cursor: pointer; + border: 1px solid #d3d3d3; + border-top: 0; + background-color: #F2F2F2; + -webkit-border-radius: 0 0 2px 2px; + -moz-border-radius: 0 0 2px 2px; + -ms-border-radius: 0 0 2px 2px; + -o-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + text-decoration: none; + /* IE6-8 */ +} + +.gridster-item-container .gridster-item-footer:hover { + background-color: #E5E5E5; + color: #565656; + text-decoration: underline; +} + +.gridster-item-container .gridster-item-footer .gridster-item-footer-content + { + line-height: 30px; + font-family: "Omnes-ECOMP-W02", Arial; + font-size: 12px; + color: #565656; + margin: 20px; + text-decoration: none; +} + +.gridster-item-container .gridster-item-footer .gridster-item-footer-content:hover + { + color: #199ddf; + text-decoration: underline; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/css/fusion-sunny.css b/ui/src/main/webapp/static/fusion/css/fusion-sunny.css new file mode 100644 index 0000000..243a7e7 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/css/fusion-sunny.css @@ -0,0 +1,399 @@ +input, textarea, select, div { + font-family: Arial; + font-size: 11px; + font-weight: normal; +} + +form { + margin-top: 5px; +} + +.applicationWindow { + border-width: 0px 0px 1px 0px; + border-style: solid; + border-color: #959595; + box-shadow: inset 0 0 10px #000000; + margin-top: 10px; + margin-bottom: 10px; + margin-left: 10px; + margin-right: 10px; +} + +.feedbackMessage { + width: 99%; + font-family: Arial; + font-size: 11px; + color: #1f1f1f; + padding: 3px; + border: 1px #eeb420 solid; + margin: 3px; + background: #fff9e5; +} + +.menubar { + border-width: 0px 0px 0px 1px; + border-style: solid; + border-color: #959595; +} + +.footer { + /*clear: both;*/ + border-width: 0px 1px 0px 1px; + border-style: solid; + border-color: #959595; + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 9px; + padding: 10px 10px 30px 10px; + background: white; +} + +.pageTitle { + font-family: Arial; + font-size: 18px; + font-weight: bold; + margin-top: 5px; +} + +.content { + border-width: 0px 1px 0px 1px; + border-style: solid; + border-color: #959595; + font-family: Arial; + font-size: 11px; + padding: 5px; + background: white; + /*height: 600px;*/ +} + +.popupContent { + font-family: Arial; + font-size: 11px; + padding: 3px; +} + +.logo { + border-width: 0px 1px 0px 1px; + border-style: solid; + border-color: #959595; + text-align: right; +} + +.sep { + border: 1px solid black +} + +.logo { /*position: relative;*/ + float: left; + padding-top: 25px; + padding-left: 25px; +} + +.applicationLogo { + float: right; + padding-top: 25px; + padding-right: 25px; +} + +.applinkWhite { + font-family: Arial; + font-size: 13px; + font-weight: 900; + color: #FFFFFF; + text-decoration: none; +} + +.terms { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 9px; +} + +.broadcastMessage { + color: red; +} + +.broadcastMessageList { + color: red; +} + +.button { + margin: 5px 1px 5px 1px; + padding: 3px; +} + +.toolbarbutton:hover { + color: #005491; +} + +.headerText { + font-family: Arial; + font-size: 15px; + font-weight: 700; + color: #000000; +} + +.headerBackground { + background: #336699; +} + +.errorMessageText { + font-family: Arial; + font-size: 11px; + font-weight: bold; + color: red; +} + +.normalText { + font-family: Arial; + font-size: 11px; + color: #000000; +} + +.normalTextRed { + font-family: Arial; + font-size: 11px; + color: red; +} + +.smallNormalText { + font-family: Arial; + font-size: 9px; + color: #000000; +} + +.tableBorder { + border: 1px outset teal +} + +.validationError { + background: #b9eaff; +} + +.templatebody { + background: url(../images/body_graphic.jpg) repeat-x; + /*margin: 40px 80px 40px 80px;*/ +} + +/*--------------------- General Content ------------------------------------*/ +.relative { + position: relative; +} + +.clear { + clear: both; +} + +.left { + float: left; +} + +.leftCentered { + float: left; + text-align: center; +} + +.right { + float: right; +} + +.rightAligned { + text-align: right; +} + +.centered { + text-align: center; + align: center; +} + +.noWrap { + white-space: nowrap; +} + +.disabled { + color: gray; + cursor: hand; +} + +/*--------------------- Tab styles -------------------------------------*/ +.current { + font-weight: bold; + border-width: 1px 1px 1px 1px; + border-color: silver; + border-style: solid; +} + +.subTab { + font-weight: bold; + font-family: Arial; + font-size: 11px; + color: #0F3B82; +} + +/*--------------------- Grid styles ------------------------------------*/ + +/* Grid navigation and header styles */ +.gridFilterLabel { + font-size: 7pt; + font-align: justify; + font-weight: bold; + display: block; +} + +.gridFilterText { + height: 17px; + font-size: 8pt; + width: 60%; + font-align: justify; +} + +.gridNavigationBar { + font-family: Arial, Verdana; + font-size: 11px; + font-weight: normal; + color: #000; + margin: 0px; + width: 100%; + vertical-align: middle; +} + +.gridNavigationBar .navLinks { + float: left; + margin-right: 15px; + padding-top: 2px; + height: 19px; + line-height: 19px; +} + +.gridNavigationBar .pageControls { + float: left; + margin-right: 15px; + height: 19px; + line-height: 19px; +} + +.gridNavigationBar .pageControls input { + font-size: 8pt; + height: 17px; + vertical-align: middle; +} + +.gridNavigationBar .pageInfo { + float: right; + vertical-align: middle; + height: 19px; + line-height: 19px; +} + +.gridNavigationBar .pageInfo input { + font-size: 8pt; + height: 17px; + vertical-align: middle; +} + +.gridNavigationBar span { + padding: 3px; +} + +.gridNavigationBar a { + text-decoration: underline; + color: #000; + font-weight: normal; +} + +.gridNavigationBar img { + vertical-align: middle; +} + +.gridBulkUpdateRow { + height: 35px; + line-height: 35px; +} + +.gridBulkUpdateRow input { + vertical-align: middle; +} + +/* dummy class used to lock the form elements of a grid - ex. bulk transaction processing */ +.alwaysEnabled { + +} + +.hidden { + display: none; +} + +.selectedPage { + background-color: #C4DFFB; + color: white; + border-style: solid; + border-width: 1px; + border-color: gray; + padding-left: 3px; + padding-right: 3px; + vertical-align: middle; +} + +.selectedRow { + /*background-color:#C4DFFB;*/ + +} + +/* Action Item styles */ +.actionList { + margin-left: -20px; + margin-right: -10px; + padding-left: 5px; +} + +.actionList li { + float: left; + padding-left: 3px; + padding-right: 3px; +} + +.actionList li a { + text-decoration: none; + color: #000; +} + +/* Filter Operator List styles */ +.filterList { + margin: 0px; +} + +.filterList li { + list-style-type: none; + padding: 3px 3px 3px 2px; + cursor: hand; + font-size: 11px; +} + +.filterList li:hover { + background: #404040; +} + +.filterList li a { + color: #000; + text-decoration: none; +} + +.filterList li:hover a { + color: white; +} + +.filterList li a:hover { + text-decoration: none; + color: white; +} + +.filterListItem a { + text-decoration: none; + padding: 3px 2px 3px 2px; +} + +/*---------------------- Customized ZK Styles ------------------------------*/ +.z-datebox input, .z-timebox input { + font-family: Arial; + font-size: 11px; + height: 15px; + margin-top: 1px; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png b/ui/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png new file mode 100644 index 0000000..29b92cc Binary files /dev/null and b/ui/src/main/webapp/static/fusion/images/att_angular_gridster/grips.png differ diff --git a/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack.png b/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack.png new file mode 100644 index 0000000..af81b31 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack.png differ diff --git a/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack2.png b/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack2.png new file mode 100644 index 0000000..b8e3688 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/images/logo_akraino_edge_stack2.png differ diff --git a/ui/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js b/ui/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js new file mode 100644 index 0000000..0c9d0ad --- /dev/null +++ b/ui/src/main/webapp/static/fusion/js/att_angular_gridster/angular-gridster.js @@ -0,0 +1,2377 @@ +/*global define:true*/ +(function(root, factory) { + + 'use strict'; + + if (typeof define === 'function' && define.amd) { + // AMD + define(['angular'], factory); + } else if (typeof exports === 'object') { + // CommonJS + module.exports = factory(require('angular')); + } else { + // Browser, nothing "exported". Only registered as a module with + // angular. + factory(root.angular); + } +}(this, function(angular) { + + 'use strict'; + + var ie8 = false; + + var getInternetExplorerVersion = function () + // Returns the version of Internet Explorer >4 or + // undefined(indicating the use of another browser). + { + var isIE10 = (eval("/*@cc_on!@*/false") && document.documentMode === 10); + if (isIE10) { + return 10; + } + var v = 3, + div = document.createElement('div'), + all = div.getElementsByTagName('i'); + do { + div.innerHTML = ''; + } while (all[0]); + return v > 4 ? v : undefined; + }; + + var browserVersion = getInternetExplorerVersion(); + + if (browserVersion && browserVersion < 9) { + ie8 = true; + } + + // This returned angular module 'gridster' is what is exported. + return angular.module('attGridsterLib', []) + + .constant('gridsterConfig', { + columns: 6, // number of columns in the grid + pushing: true, // whether to push other items out of the way + floating: true, // whether to automatically float items up so they stack + swapping: true, // whether or not to have items switch places instead of + // push down if they are the same size + width: 'auto', // width of the grid. "auto" will expand the grid to its + // parent container + colWidth: 'auto', // width of grid columns. "auto" will divide the + // width of the grid evenly among the columns + rowHeight: 'match', // height of grid rows. 'match' will make it the + // same as the column width, a numeric value will be + // interpreted as pixels, '/2' is half the column + // width, '*5' is five times the column width, etc. + margins: [10, 10], // margins in between grid items + outerMargin: false, + isMobile: false, // toggle mobile view + mobileBreakPoint: 100, // width threshold to toggle mobile mode + mobileModeEnabled: true, // whether or not to toggle mobile mode when + // screen width is less than + // mobileBreakPoint + minColumns: 1, // minimum amount of columns the grid can scale down to + minRows: 1, // minimum amount of rows to show if the grid is empty + maxRows: 100, // maximum amount of rows in the grid + defaultSizeX: 1, // default width of an item in columns + defaultSizeY: 1, // default height of an item in rows + minSizeX: 1, // minimum column width of an item + maxSizeX: null, // maximum column width of an item + minSizeY: 1, // minumum row height of an item + maxSizeY: null, // maximum row height of an item + saveGridItemCalculatedHeightInMobile: false, // grid item height in + // mobile display. true- + // to use the calculated + // height by sizeY given + resizable: { // options to pass to resizable handler + enabled: false, + handles: ['s', 'e', 'n', 'w', 'se', 'ne', 'sw', 'nw'] + }, + draggable: { // options to pass to draggable handler + enabled: true, + scrollSensitivity: 20, // Distance in pixels from the edge of the + // viewport after which the viewport should + // scroll, relative to pointer + scrollSpeed: 15 // Speed at which the window should scroll once the + // mouse pointer gets within scrollSensitivity + // distance + } + }) + + .controller('GridsterCtrl', ['gridsterConfig', '$timeout', + function(gridsterConfig, $timeout) { + + var gridster = this; + + /** + * Create options from gridsterConfig constant + */ + angular.extend(this, gridsterConfig); + + this.resizable = angular.extend({}, gridsterConfig.resizable || {}); + this.draggable = angular.extend({}, gridsterConfig.draggable || {}); + + var flag = false; + this.layoutChanged = function() { + if (flag) { + return; + } + flag = true; + $timeout(function() { + flag = false; + if (gridster.loaded) { + gridster.floatItemsUp(); + } + gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); + }, 30); + }; + + /** + * A positional array of the items in the grid + */ + this.grid = []; + + /** + * Clean up after yourself + */ + this.destroy = function() { + // empty the grid to cut back on the possibility + // of circular references + if (this.grid) { + this.grid = []; + } + this.$element = null; + }; + + /** + * Overrides default options + * + * @param {Object} + * options The options to override + */ + this.setOptions = function(options) { + if (!options) { + return; + } + + options = angular.extend({}, options); + + // all this to avoid using jQuery... + if (options.draggable) { + angular.extend(this.draggable, options.draggable); + delete(options.draggable); + } + if (options.resizable) { + angular.extend(this.resizable, options.resizable); + delete(options.resizable); + } + + angular.extend(this, options); + + if (!this.margins || this.margins.length !== 2) { + this.margins = [0, 0]; + } else { + for (var x = 0, l = this.margins.length; x < l; ++x) { + this.margins[x] = parseInt(this.margins[x], 10); + if (isNaN(this.margins[x])) { + this.margins[x] = 0; + } + } + } + }; + + /** + * Check if item can occupy a specified position in the grid + * + * @param {Object} + * item The item in question + * @param {Number} + * row The row index + * @param {Number} + * column The column index + * @returns {Boolean} True if if item fits + */ + this.canItemOccupy = function(item, row, column) { + return row > -1 && column > -1 && item.sizeX + column <= this.columns && item.sizeY + row <= this.maxRows; + }; + + /** + * Set the item in the first suitable position + * + * @param {Object} + * item The item to insert + */ + this.autoSetItemPosition = function(item) { + // walk through each row and column looking for a place it will + // fit + for (var rowIndex = 0; rowIndex < this.maxRows; ++rowIndex) { + for (var colIndex = 0; colIndex < this.columns; ++colIndex) { + // only insert if position is not already taken and it + // can fit + var items = this.getItems(rowIndex, colIndex, item.sizeX, item.sizeY, item); + if (items.length === 0 && this.canItemOccupy(item, rowIndex, colIndex)) { + this.putItem(item, rowIndex, colIndex); + return; + } + } + } + throw new Error('Unable to place item!'); + }; + + /** + * Gets items at a specific coordinate + * + * @param {Number} + * row + * @param {Number} + * column + * @param {Number} + * sizeX + * @param {Number} + * sizeY + * @param {Array} + * excludeItems An array of items to exclude from + * selection + * @returns {Array} Items that match the criteria + */ + this.getItems = function(row, column, sizeX, sizeY, excludeItems) { + var items = []; + if (!sizeX || !sizeY) { + sizeX = sizeY = 1; + } + if (excludeItems && !(excludeItems instanceof Array)) { + excludeItems = [excludeItems]; + } + for (var h = 0; h < sizeY; ++h) { + for (var w = 0; w < sizeX; ++w) { + var item = this.getItem(row + h, column + w, excludeItems); + if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && items.indexOf(item) === -1) { + items.push(item); + } + } + } + return items; + }; + + /** + * @param {Array} + * items + * @returns {Object} An item that represents the bounding box of the + * items + */ + this.getBoundingBox = function(items) { + + if (items.length === 0) { + return null; + } + if (items.length === 1) { + return { + row: items[0].row, + col: items[0].col, + sizeY: items[0].sizeY, + sizeX: items[0].sizeX + }; + } + + var maxRow = 0; + var maxCol = 0; + var minRow = 9999; + var minCol = 9999; + + for (var i = 0, l = items.length; i < l; ++i) { + var item = items[i]; + minRow = Math.min(item.row, minRow); + minCol = Math.min(item.col, minCol); + maxRow = Math.max(item.row + item.sizeY, maxRow); + maxCol = Math.max(item.col + item.sizeX, maxCol); + } + + return { + row: minRow, + col: minCol, + sizeY: maxRow - minRow, + sizeX: maxCol - minCol + }; + }; + + + /** + * Removes an item from the grid + * + * @param {Object} + * item + */ + this.removeItem = function(item) { + for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { + var columns = this.grid[rowIndex]; + if (!columns) { + continue; + } + var index = columns.indexOf(item); + if (index !== -1) { + columns[index] = null; + break; + } + } + this.layoutChanged(); + }; + + /** + * Returns the item at a specified coordinate + * + * @param {Number} + * row + * @param {Number} + * column + * @param {Array} + * excludeItems Items to exclude from selection + * @returns {Object} The matched item or null + */ + this.getItem = function(row, column, excludeItems) { + if (excludeItems && !(excludeItems instanceof Array)) { + excludeItems = [excludeItems]; + } + var sizeY = 1; + while (row > -1) { + var sizeX = 1, + col = column; + while (col > -1) { + var items = this.grid[row]; + if (items) { + var item = items[col]; + if (item && (!excludeItems || excludeItems.indexOf(item) === -1) && item.sizeX >= sizeX && item.sizeY >= sizeY) { + return item; + } + } + ++sizeX; + --col; + } + --row; + ++sizeY; + } + return null; + }; + + /** + * Insert an array of items into the grid + * + * @param {Array} + * items An array of items to insert + */ + this.putItems = function(items) { + for (var i = 0, l = items.length; i < l; ++i) { + this.putItem(items[i]); + } + }; + + /** + * Insert a single item into the grid + * + * @param {Object} + * item The item to insert + * @param {Number} + * row (Optional) Specifies the items row index + * @param {Number} + * column (Optional) Specifies the items column index + * @param {Array} + * ignoreItems + */ + this.putItem = function(item, row, column, ignoreItems) { + // auto place item if no row specified + if (typeof row === 'undefined' || row === null) { + row = item.row; + column = item.col; + if (typeof row === 'undefined' || row === null) { + this.autoSetItemPosition(item); + return; + } + } + + // keep item within allowed bounds + if (!this.canItemOccupy(item, row, column)) { + column = Math.min(this.columns - item.sizeX, Math.max(0, column)); + row = Math.min(this.maxRows - item.sizeY, Math.max(0, row)); + } + + // check if item is already in grid + if (item.oldRow !== null && typeof item.oldRow !== 'undefined') { + var samePosition = item.oldRow === row && item.oldColumn === column; + var inGrid = this.grid[row] && this.grid[row][column] === item; + if (samePosition && inGrid) { + item.row = row; + item.col = column; + return; + } else { + // remove from old position + var oldRow = this.grid[item.oldRow]; + if (oldRow && oldRow[item.oldColumn] === item) { + delete oldRow[item.oldColumn]; + } + } + } + + item.oldRow = item.row = row; + item.oldColumn = item.col = column; + + this.moveOverlappingItems(item, ignoreItems); + + if (!this.grid[row]) { + this.grid[row] = []; + } + this.grid[row][column] = item; + + if (this.movingItem === item) { + this.floatItemUp(item); + } + this.layoutChanged(); + }; + + /** + * Trade row and column if item1 with item2 + * + * @param {Object} + * item1 + * @param {Object} + * item2 + */ + this.swapItems = function(item1, item2) { + this.grid[item1.row][item1.col] = item2; + this.grid[item2.row][item2.col] = item1; + + var item1Row = item1.row; + var item1Col = item1.col; + item1.row = item2.row; + item1.col = item2.col; + item2.row = item1Row; + item2.col = item1Col; + }; + + /** + * Prevents items from being overlapped + * + * @param {Object} + * item The item that should remain + * @param {Array} + * ignoreItems + */ + this.moveOverlappingItems = function(item, ignoreItems) { + // don't move item, so ignore it + if (!ignoreItems) { + ignoreItems = [item]; + } else if (ignoreItems.indexOf(item) === -1) { + ignoreItems = ignoreItems.slice(0); + ignoreItems.push(item); + } + + // get the items in the space occupied by the item's coordinates + var overlappingItems = this.getItems( + item.row, + item.col, + item.sizeX, + item.sizeY, + ignoreItems + ); + this.moveItemsDown(overlappingItems, item.row + item.sizeY, ignoreItems); + }; + + /** + * Moves an array of items to a specified row + * + * @param {Array} + * items The items to move + * @param {Number} + * newRow The target row + * @param {Array} + * ignoreItems + */ + this.moveItemsDown = function(items, newRow, ignoreItems) { + if (!items || items.length === 0) { + return; + } + items.sort(function(a, b) { + return a.row - b.row; + }); + + ignoreItems = ignoreItems ? ignoreItems.slice(0) : []; + var topRows = {}, + item, i, l; + + // calculate the top rows in each column + for (i = 0, l = items.length; i < l; ++i) { + item = items[i]; + var topRow = topRows[item.col]; + if (typeof topRow === 'undefined' || item.row < topRow) { + topRows[item.col] = item.row; + } + } + + // move each item down from the top row in its column to the row + for (i = 0, l = items.length; i < l; ++i) { + item = items[i]; + var rowsToMove = newRow - topRows[item.col]; + this.moveItemDown(item, item.row + rowsToMove, ignoreItems); + ignoreItems.push(item); + } + }; + + /** + * Moves an item down to a specified row + * + * @param {Object} + * item The item to move + * @param {Number} + * newRow The target row + * @param {Array} + * ignoreItems + */ + this.moveItemDown = function(item, newRow, ignoreItems) { + if (item.row >= newRow) { + return; + } + while (item.row < newRow) { + ++item.row; + this.moveOverlappingItems(item, ignoreItems); + } + this.putItem(item, item.row, item.col, ignoreItems); + }; + + /** + * Moves all items up as much as possible + */ + this.floatItemsUp = function() { + if (this.floating === false) { + return; + } + for (var rowIndex = 0, l = this.grid.length; rowIndex < l; ++rowIndex) { + var columns = this.grid[rowIndex]; + if (!columns) { + continue; + } + for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { + var item = columns[colIndex]; + if (item) { + this.floatItemUp(item); + } + } + } + }; + + /** + * Float an item up to the most suitable row + * + * @param {Object} + * item The item to move + */ + this.floatItemUp = function(item) { + if (this.floating === false) { + return; + } + var colIndex = item.col, + sizeY = item.sizeY, + sizeX = item.sizeX, + bestRow = null, + bestColumn = null, + rowIndex = item.row - 1; + + while (rowIndex > -1) { + var items = this.getItems(rowIndex, colIndex, sizeX, sizeY, item); + if (items.length !== 0) { + break; + } + bestRow = rowIndex; + bestColumn = colIndex; + --rowIndex; + } + if (bestRow !== null) { + this.putItem(item, bestRow, bestColumn); + } + }; + + /** + * Update gridsters height + * + * @param {Number} + * plus (Optional) Additional height to add + */ + this.updateHeight = function(plus) { + var maxHeight = this.minRows; + plus = plus || 0; + for (var rowIndex = this.grid.length; rowIndex >= 0; --rowIndex) { + var columns = this.grid[rowIndex]; + if (!columns) { + continue; + } + for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { + if (columns[colIndex]) { + maxHeight = Math.max(maxHeight, rowIndex + plus + columns[colIndex].sizeY); + } + } + } + this.gridHeight = this.maxRows - maxHeight > 0 ? Math.min(this.maxRows, maxHeight) : Math.max(this.maxRows, maxHeight); + }; + + /** + * Returns the number of rows that will fit in given amount of + * pixels + * + * @param {Number} + * pixels + * @param {Boolean} + * ceilOrFloor (Optional) Determines rounding method + */ + this.pixelsToRows = function(pixels, ceilOrFloor) { + if (ceilOrFloor === true) { + return Math.ceil(pixels / this.curRowHeight); + } else if (ceilOrFloor === false) { + return Math.floor(pixels / this.curRowHeight); + } + + return Math.round(pixels / this.curRowHeight); + }; + + /** + * Returns the number of columns that will fit in a given amount of + * pixels + * + * @param {Number} + * pixels + * @param {Boolean} + * ceilOrFloor (Optional) Determines rounding method + * @returns {Number} The number of columns + */ + this.pixelsToColumns = function(pixels, ceilOrFloor) { + if (ceilOrFloor === true) { + return Math.ceil(pixels / this.curColWidth); + } else if (ceilOrFloor === false) { + return Math.floor(pixels / this.curColWidth); + } + + return Math.round(pixels / this.curColWidth); + }; + } + ]) + + .directive('gridsterPreview', function() { + return { + replace: true, + scope: true, + require: '^gridster', + template: '
    ', + link: function(scope, $el, attrs, gridster) { + + /** + * @returns {Object} style object for preview element + */ + scope.previewStyle = function() { + + if (!gridster.movingItem) { + return { + display: 'none' + }; + } + + return { + display: 'block', + height: (gridster.movingItem.sizeY * gridster.curRowHeight - gridster.margins[0]) + 'px', + width: (gridster.movingItem.sizeX * gridster.curColWidth - gridster.margins[1]) + 'px', + top: (gridster.movingItem.row * gridster.curRowHeight + (gridster.outerMargin ? gridster.margins[0] : 0)) + 'px', + left: (gridster.movingItem.col * gridster.curColWidth + (gridster.outerMargin ? gridster.margins[1] : 0)) + 'px' + }; + }; + } + }; + }) + + /** + * The gridster directive + * + * @param {Function} + * $timeout + * @param {Object} + * $window + * @param {Object} + * $rootScope + * @param {Function} + * gridsterDebounce + */ + .directive('gridster', ['$timeout', '$window', '$rootScope', 'gridsterDebounce', + function($timeout, $window, $rootScope, gridsterDebounce) { + return { + scope: true, + restrict: 'EAC', + controller: 'GridsterCtrl', + controllerAs: 'gridster', + compile: function($tplElem) { + + $tplElem.prepend('
    '); + + return function(scope, $elem, attrs, gridster) { + gridster.loaded = false; + + gridster.$element = $elem; + + scope.gridster = gridster; + + $elem.addClass('gridster'); + + var isVisible = function(ele) { + return ele.style.visibility !== 'hidden' && ele.style.display !== 'none'; + }; + + function refresh(config) { + gridster.setOptions(config); + + if (!isVisible($elem[0])) { + return; + } + + // resolve "auto" & "match" values + if (gridster.width === 'auto') { + gridster.curWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); + } else { + gridster.curWidth = gridster.width; + } + + if (gridster.colWidth === 'auto') { + gridster.curColWidth = (gridster.curWidth + (gridster.outerMargin ? -gridster.margins[1] : gridster.margins[1])) / gridster.columns; + } else { + gridster.curColWidth = gridster.colWidth; + } + + gridster.curRowHeight = gridster.rowHeight; + if (typeof gridster.rowHeight === 'string') { + if (gridster.rowHeight === 'match') { + gridster.curRowHeight = Math.round(gridster.curColWidth); + } else if (gridster.rowHeight.indexOf('*') !== -1) { + gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', '')); + } else if (gridster.rowHeight.indexOf('/') !== -1) { + gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', '')); + } + } + + gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint; + + // loop through all items and reset their CSS + for (var rowIndex = 0, l = gridster.grid.length; rowIndex < l; ++rowIndex) { + var columns = gridster.grid[rowIndex]; + if (!columns) { + continue; + } + + for (var colIndex = 0, len = columns.length; colIndex < len; ++colIndex) { + if (columns[colIndex]) { + var item = columns[colIndex]; + item.setElementPosition(); + item.setElementSizeY(); + item.setElementSizeX(); + } + } + } + + updateHeight(); + } + + var optionsKey = attrs.gridster; + if (optionsKey) { + scope.$parent.$watch(optionsKey, function(newConfig) { + refresh(newConfig); + }, true); + } else { + refresh({}); + } + + scope.$watch(function() { + return gridster.loaded; + }, function() { + if (gridster.loaded) { + $elem.addClass('gridster-loaded'); + } else { + $elem.removeClass('gridster-loaded'); + } + }); + + scope.$watch(function() { + return gridster.isMobile; + }, function() { + if (gridster.isMobile) { + $elem.addClass('gridster-mobile').removeClass('gridster-desktop'); + } else { + $elem.removeClass('gridster-mobile').addClass('gridster-desktop'); + } + $rootScope.$broadcast('gridster-mobile-changed', gridster); + }); + + scope.$watch(function() { + return gridster.draggable; + }, function() { + $rootScope.$broadcast('gridster-draggable-changed', gridster); + }, true); + + scope.$watch(function() { + return gridster.resizable; + }, function() { + $rootScope.$broadcast('gridster-resizable-changed', gridster); + }, true); + + function updateHeight() { + if(gridster.gridHeight){ // need + // to + // put + // this + // check, + // otherwise + // fail + // in + // IE8 + $elem.css('height', (gridster.gridHeight * gridster.curRowHeight) + (gridster.outerMargin ? gridster.margins[0] : -gridster.margins[0]) + 'px'); + } + } + + scope.$watch(function() { + return gridster.gridHeight; + }, updateHeight); + + scope.$watch(function() { + return gridster.movingItem; + }, function() { + gridster.updateHeight(gridster.movingItem ? gridster.movingItem.sizeY : 0); + }); + + var prevWidth = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); + + var resize = function() { + var width = $elem[0].offsetWidth || parseInt($elem.css('width'), 10); + + if (!width || width === prevWidth || gridster.movingItem) { + return; + } + prevWidth = width; + + if (gridster.loaded) { + $elem.removeClass('gridster-loaded'); + } + + refresh(); + + if (gridster.loaded) { + $elem.addClass('gridster-loaded'); + } + + $rootScope.$broadcast('gridster-resized', [width, $elem[0].offsetHeight], gridster); + }; + + // track element width changes any way we can + var onResize = gridsterDebounce(function onResize() { + resize(); + $timeout(function() { + scope.$apply(); + }); + }, 100); + + scope.$watch(function() { + return isVisible($elem[0]); + }, onResize); + + // see + // https://github.com/sdecima/javascript-detect-element-resize + if (typeof window.addResizeListener === 'function') { + window.addResizeListener($elem[0], onResize); + } else { + scope.$watch(function() { + return $elem[0].offsetWidth || parseInt($elem.css('width'), 10); + }, resize); + } + var $win = angular.element($window); + $win.on('resize', onResize); + + // be sure to cleanup + scope.$on('$destroy', function() { + gridster.destroy(); + $win.off('resize', onResize); + if (typeof window.removeResizeListener === 'function') { + window.removeResizeListener($elem[0], onResize); + } + }); + + // allow a little time to place items before floating up + $timeout(function() { + scope.$watch('gridster.floating', function() { + gridster.floatItemsUp(); + }); + gridster.loaded = true; + }, 100); + }; + } + }; + } + ]) + + .controller('GridsterItemCtrl', function() { + this.$element = null; + this.gridster = null; + this.row = null; + this.col = null; + this.sizeX = null; + this.sizeY = null; + this.minSizeX = 0; + this.minSizeY = 0; + this.maxSizeX = null; + this.maxSizeY = null; + + this.init = function($element, gridster) { + this.$element = $element; + this.gridster = gridster; + this.sizeX = gridster.defaultSizeX; + this.sizeY = gridster.defaultSizeY; + }; + + this.destroy = function() { + // set these to null to avoid the possibility of circular references + this.gridster = null; + this.$element = null; + }; + + /** + * Returns the items most important attributes + */ + this.toJSON = function() { + return { + row: this.row, + col: this.col, + sizeY: this.sizeY, + sizeX: this.sizeX + }; + }; + + this.isMoving = function() { + return this.gridster.movingItem === this; + }; + + /** + * Set the items position + * + * @param {Number} + * row + * @param {Number} + * column + */ + this.setPosition = function(row, column) { + this.gridster.putItem(this, row, column); + + if (!this.isMoving()) { + this.setElementPosition(); + } + }; + + /** + * Sets a specified size property + * + * @param {String} + * key Can be either "x" or "y" + * @param {Number} + * value The size amount + * @param {Boolean} + * preventMove + */ + this.setSize = function(key, value, preventMove) { + key = key.toUpperCase(); + var camelCase = 'size' + key, + titleCase = 'Size' + key; + if (value === '') { + return; + } + value = parseInt(value, 10); + if (isNaN(value) || value === 0) { + value = this.gridster['default' + titleCase]; + } + var max = key === 'X' ? this.gridster.columns : this.gridster.maxRows; + if (this['max' + titleCase]) { + max = Math.min(this['max' + titleCase], max); + } + if (this.gridster['max' + titleCase]) { + max = Math.min(this.gridster['max' + titleCase], max); + } + if (key === 'X' && this.cols) { + max -= this.cols; + } else if (key === 'Y' && this.rows) { + max -= this.rows; + } + + var min = 0; + if (this['min' + titleCase]) { + min = Math.max(this['min' + titleCase], min); + } + if (this.gridster['min' + titleCase]) { + min = Math.max(this.gridster['min' + titleCase], min); + } + + value = Math.max(Math.min(value, max), min); + + var changed = (this[camelCase] !== value || (this['old' + titleCase] && this['old' + titleCase] !== value)); + this['old' + titleCase] = this[camelCase] = value; + + if (!this.isMoving()) { + this['setElement' + titleCase](); + } + if (!preventMove && changed) { + this.gridster.moveOverlappingItems(this); + this.gridster.layoutChanged(); + } + + return changed; + }; + + /** + * Sets the items sizeY property + * + * @param {Number} + * rows + * @param {Boolean} + * preventMove + */ + this.setSizeY = function(rows, preventMove) { + return this.setSize('Y', rows, preventMove); + }; + + /** + * Sets the items sizeX property + * + * @param {Number} + * columns + * @param {Boolean} + * preventMove + */ + this.setSizeX = function(columns, preventMove) { + return this.setSize('X', columns, preventMove); + }; + + /** + * Sets an elements position on the page + */ + this.setElementPosition = function() { + if (this.gridster.isMobile) { + this.$element.css({ + marginLeft: this.gridster.margins[0] + 'px', + marginRight: this.gridster.margins[0] + 'px', + marginTop: this.gridster.margins[1] + 'px', + marginBottom: this.gridster.margins[1] + 'px', + top: '', + left: '' + }); + } else { + this.$element.css({ + margin: 0, + top: (this.row * this.gridster.curRowHeight + (this.gridster.outerMargin ? this.gridster.margins[0] : 0)) + 'px', + left: (this.col * this.gridster.curColWidth + (this.gridster.outerMargin ? this.gridster.margins[1] : 0)) + 'px' + }); + } + }; + + /** + * Sets an elements height + */ + this.setElementSizeY = function() { + if (this.gridster.isMobile && !this.gridster.saveGridItemCalculatedHeightInMobile) { + this.$element.css('height', ''); + } else { + var computedHeight = (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]) + 'px'; + // this.$element.css('height', computedHeight); + this.$element.attr('style', this.$element.attr('style') + '; ' + 'height: '+computedHeight+' !important;'); + } + }; + + /** + * Sets an elements width + */ + this.setElementSizeX = function() { + if (this.gridster.isMobile) { + this.$element.css('width', ''); + } else { + this.$element.css('width', (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]) + 'px'); + } + }; + + /** + * Gets an element's width + */ + this.getElementSizeX = function() { + return (this.sizeX * this.gridster.curColWidth - this.gridster.margins[1]); + }; + + /** + * Gets an element's height + */ + this.getElementSizeY = function() { + return (this.sizeY * this.gridster.curRowHeight - this.gridster.margins[0]); + }; + + }) + + .factory('GridsterTouch', [function() { + return function GridsterTouch(target, startEvent, moveEvent, endEvent) { + var lastXYById = {}; + + // Opera doesn't have Object.keys so we use this wrapper + var numberOfKeys = function(theObject) { + if (Object.keys) { + return Object.keys(theObject).length; + } + + var n = 0, + key; + for (key in theObject) { + ++n; + } + + return n; + }; + + // this calculates the delta needed to convert pageX/Y to offsetX/Y + // because offsetX/Y don't exist in the TouchEvent object or in + // Firefox's MouseEvent object + var computeDocumentToElementDelta = function(theElement) { + var elementLeft = 0; + var elementTop = 0; + var oldIEUserAgent = navigator.userAgent.match(/\bMSIE\b/); + + for (var offsetElement = theElement; offsetElement != null; offsetElement = offsetElement.offsetParent) { + // the following is a major hack for versions of IE less + // than 8 to avoid an apparent problem on the IEBlog with + // double-counting the offsets + // this may not be a general solution to IE7's problem with + // offsetLeft/offsetParent + if (oldIEUserAgent && + (!document.documentMode || document.documentMode < 8) && + offsetElement.currentStyle.position === 'relative' && offsetElement.offsetParent && offsetElement.offsetParent.currentStyle.position === 'relative' && offsetElement.offsetLeft === offsetElement.offsetParent.offsetLeft) { + // add only the top + elementTop += offsetElement.offsetTop; + } else { + elementLeft += offsetElement.offsetLeft; + elementTop += offsetElement.offsetTop; + } + } + + return { + x: elementLeft, + y: elementTop + }; + }; + + // cache the delta from the document to our event target + // (reinitialized each mousedown/MSPointerDown/touchstart) + var documentToTargetDelta = computeDocumentToElementDelta(target); + + // common event handler for the mouse/pointer/touch models and their + // down/start, move, up/end, and cancel events + var doEvent = function(theEvtObj) { + + if (theEvtObj.type === 'mousemove' && numberOfKeys(lastXYById) === 0) { + return; + } + + var prevent = true; + + var pointerList = theEvtObj.changedTouches ? theEvtObj.changedTouches : [theEvtObj]; + + for (var i = 0; i < pointerList.length; ++i) { + var pointerObj = pointerList[i]; + var pointerId = (typeof pointerObj.identifier !== 'undefined') ? pointerObj.identifier : (typeof pointerObj.pointerId !== 'undefined') ? pointerObj.pointerId : 1; + + // use the pageX/Y coordinates to + // compute target-relative coordinates + // when we have them (in ie < 9, we need + // to do a little work to put them + // there) + if (typeof pointerObj.pageX === 'undefined') { + + // initialize assuming our + // source element is our target + if(!ie8){ + pointerObj.pageX = pointerObj.offsetX + documentToTargetDelta.x; + pointerObj.pageY = pointerObj.offsetY + documentToTargetDelta.y; + } + else{ + pointerObj.pageX = pointerObj.clientX; + pointerObj.pageY = pointerObj.clientY; + } + + if (pointerObj.srcElement.offsetParent === target && document.documentMode && document.documentMode === 8 && pointerObj.type === 'mousedown') { + // source element is a child piece of VML, we're in + // IE8, and we've not called setCapture yet - add + // the origin of the source element + pointerObj.pageX += pointerObj.srcElement.offsetLeft; + pointerObj.pageY += pointerObj.srcElement.offsetTop; + } else if (pointerObj.srcElement !== target && !document.documentMode || document.documentMode < 8) { + // source element isn't the target (most likely it's + // a child piece of VML) and we're in a version of + // IE before IE8 - + // the offsetX/Y values are unpredictable so use the + // clientX/Y values and adjust by the scroll offsets + // of its parents + // to get the document-relative coordinates (the + // same as pageX/Y) + var sx = -2, + sy = -2; // adjust for old IE's 2-pixel + // border + for (var scrollElement = pointerObj.srcElement; scrollElement !== null; scrollElement = scrollElement.parentNode) { + sx += scrollElement.scrollLeft ? scrollElement.scrollLeft : 0; + sy += scrollElement.scrollTop ? scrollElement.scrollTop : 0; + } + + pointerObj.pageX = pointerObj.clientX + sx; + pointerObj.pageY = pointerObj.clientY + sy; + } + } + + + var pageX = pointerObj.pageX; + var pageY = pointerObj.pageY; + + if (theEvtObj.type.match(/(start|down)$/i)) { + // clause for processing MSPointerDown, touchstart, and + // mousedown + + // refresh the document-to-target delta on start in case + // the target has moved relative to document + documentToTargetDelta = computeDocumentToElementDelta(target); + + // protect against failing to get an up or end on this + // pointerId + if (lastXYById[pointerId]) { + if (endEvent) { + endEvent({ + target: theEvtObj.target, + which: theEvtObj.which, + pointerId: pointerId, + pageX: pageX, + pageY: pageY + }); + } + + delete lastXYById[pointerId]; + } + + if (startEvent) { + if (prevent) { + prevent = startEvent({ + target: theEvtObj.target, + which: theEvtObj.which, + pointerId: pointerId, + pageX: pageX, + pageY: pageY + }); + } + } + + // init last page positions for this pointer + lastXYById[pointerId] = { + x: pageX, + y: pageY + }; + + // IE pointer model + if (target.msSetPointerCapture) { + target.msSetPointerCapture(pointerId); + } else if (theEvtObj.type === 'mousedown' && numberOfKeys(lastXYById) === 1) { + if (useSetReleaseCapture) { + target.setCapture(true); + } else { + document.addEventListener('mousemove', doEvent, false); + document.addEventListener('mouseup', doEvent, false); + } + } + } else if (theEvtObj.type.match(/move$/i)) { + // clause handles mousemove, MSPointerMove, and + // touchmove + + if (lastXYById[pointerId] && !(lastXYById[pointerId].x === pageX && lastXYById[pointerId].y === pageY)) { + // only extend if the pointer is down and it's not + // the same as the last point + + if (moveEvent && prevent) { + prevent = moveEvent({ + target: theEvtObj.target, + which: theEvtObj.which, + pointerId: pointerId, + pageX: pageX, + pageY: pageY + }); + } + + // update last page positions for this pointer + lastXYById[pointerId].x = pageX; + lastXYById[pointerId].y = pageY; + } + } else if (lastXYById[pointerId] && theEvtObj.type.match(/(up|end|cancel)$/i)) { + // clause handles up/end/cancel + + if (endEvent && prevent) { + prevent = endEvent({ + target: theEvtObj.target, + which: theEvtObj.which, + pointerId: pointerId, + pageX: pageX, + pageY: pageY + }); + } + + // delete last page positions for this pointer + delete lastXYById[pointerId]; + + // in the Microsoft pointer model, release the capture + // for this pointer + // in the mouse model, release the capture or remove + // document-level event handlers if there are no down + // points + // nothing is required for the iOS touch model because + // capture is implied on touchstart + if (target.msReleasePointerCapture) { + target.msReleasePointerCapture(pointerId); + } else if (theEvtObj.type === 'mouseup' && numberOfKeys(lastXYById) === 0) { + if (useSetReleaseCapture) { + target.releaseCapture(); + } else { + document.removeEventListener('mousemove', doEvent, false); + document.removeEventListener('mouseup', doEvent, false); + } + } + } + } + + if (prevent) { + if (theEvtObj.preventDefault) { + theEvtObj.preventDefault(); + } + + if (theEvtObj.preventManipulation) { + theEvtObj.preventManipulation(); + } + + if (theEvtObj.preventMouseEvent) { + theEvtObj.preventMouseEvent(); + } + } + }; + + var useSetReleaseCapture = false; + // saving the settings for contentZooming and touchaction before + // activation + var contentZooming, msTouchAction; + + this.enable = function() { + + if (window.navigator.msPointerEnabled) { + // Microsoft pointer model + target.addEventListener('MSPointerDown', doEvent, false); + target.addEventListener('MSPointerMove', doEvent, false); + target.addEventListener('MSPointerUp', doEvent, false); + target.addEventListener('MSPointerCancel', doEvent, false); + + // css way to prevent panning in our target area + if (typeof target.style.msContentZooming !== 'undefined') { + contentZooming = target.style.msContentZooming; + target.style.msContentZooming = 'none'; + } + + // new in Windows Consumer Preview: css way to prevent all + // built-in touch actions on our target + // without this, you cannot touch draw on the element + // because IE will intercept the touch events + if (typeof target.style.msTouchAction !== 'undefined') { + msTouchAction = target.style.msTouchAction; + target.style.msTouchAction = 'none'; + } + } else if (target.addEventListener) { + // iOS touch model + target.addEventListener('touchstart', doEvent, false); + target.addEventListener('touchmove', doEvent, false); + target.addEventListener('touchend', doEvent, false); + target.addEventListener('touchcancel', doEvent, false); + + // mouse model + target.addEventListener('mousedown', doEvent, false); + + // mouse model with capture + // rejecting gecko because, unlike ie, firefox does not send + // events to target when the mouse is outside target + if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { + useSetReleaseCapture = true; + + target.addEventListener('mousemove', doEvent, false); + target.addEventListener('mouseup', doEvent, false); + } + } else if (target.attachEvent && target.setCapture) { + // legacy IE mode - mouse with capture + useSetReleaseCapture = true; + target.attachEvent('onmousedown', function() { + doEvent(window.event); + window.event.returnValue = false; + return false; + }); + target.attachEvent('onmousemove', function() { + doEvent(window.event); + window.event.returnValue = false; + return false; + }); + target.attachEvent('onmouseup', function() { + doEvent(window.event); + window.event.returnValue = false; + return false; + }); + } + }; + + this.disable = function() { + if (window.navigator.msPointerEnabled) { + // Microsoft pointer model + target.removeEventListener('MSPointerDown', doEvent, false); + target.removeEventListener('MSPointerMove', doEvent, false); + target.removeEventListener('MSPointerUp', doEvent, false); + target.removeEventListener('MSPointerCancel', doEvent, false); + + // reset zooming to saved value + if (contentZooming) { + target.style.msContentZooming = contentZooming; + } + + // reset touch action setting + if (msTouchAction) { + target.style.msTouchAction = msTouchAction; + } + } else if (target.removeEventListener) { + // iOS touch model + target.removeEventListener('touchstart', doEvent, false); + target.removeEventListener('touchmove', doEvent, false); + target.removeEventListener('touchend', doEvent, false); + target.removeEventListener('touchcancel', doEvent, false); + + // mouse model + target.removeEventListener('mousedown', doEvent, false); + + // mouse model with capture + // rejecting gecko because, unlike ie, firefox does not send + // events to target when the mouse is outside target + if (target.setCapture && !window.navigator.userAgent.match(/\bGecko\b/)) { + useSetReleaseCapture = true; + + target.removeEventListener('mousemove', doEvent, false); + target.removeEventListener('mouseup', doEvent, false); + } + } else if (target.detachEvent && target.setCapture) { + // legacy IE mode - mouse with capture + useSetReleaseCapture = true; + target.detachEvent('onmousedown'); + target.detachEvent('onmousemove'); + target.detachEvent('onmouseup'); + } + }; + + return this; + }; + }]) + + .factory('GridsterDraggable', ['$document', '$timeout', '$window', 'GridsterTouch', + function($document, $timeout, $window, GridsterTouch) { + function GridsterDraggable($el, scope, gridster, item, itemOptions) { + + var elmX, elmY, elmW, elmH, + + mouseX = 0, + mouseY = 0, + lastMouseX = 0, + lastMouseY = 0, + mOffX = 0, + mOffY = 0, + + minTop = 0, + maxTop = 9999, + minLeft = 0, + realdocument = $document[0]; + + var originalCol, originalRow; + var inputTags = ['select', 'input', 'textarea', 'button']; + + var gridsterItemDragElement = $el[0].querySelector('[gridster-item-drag]'); + // console.log(gridsterItemDragElement); + var isDraggableAreaDefined = gridsterItemDragElement?true:false; + // console.log(isDraggableAreaDefined); + + function mouseDown(e) { + + if(ie8){ + e.target = window.event.srcElement; + e.which = window.event.button; + } + + if(isDraggableAreaDefined && (!gridsterItemDragElement.contains(e.target))){ + return false; + } + + if (inputTags.indexOf(e.target.nodeName.toLowerCase()) !== -1) { + return false; + } + + var $target = angular.element(e.target); + + // exit, if a resize handle was hit + if ($target.hasClass('gridster-item-resizable-handler')) { + return false; + } + + // exit, if the target has it's own click event + if ($target.attr('onclick') || $target.attr('ng-click')) { + return false; + } + + // only works if you have jQuery + if ($target.closest && $target.closest('.gridster-no-drag').length) { + return false; + } + + switch (e.which) { + case 1: + // left mouse button + break; + case 2: + case 3: + // right or middle mouse button + return; + } + + lastMouseX = e.pageX; + lastMouseY = e.pageY; + + elmX = parseInt($el.css('left'), 10); + elmY = parseInt($el.css('top'), 10); + elmW = $el[0].offsetWidth; + elmH = $el[0].offsetHeight; + + originalCol = item.col; + originalRow = item.row; + + dragStart(e); + + return true; + } + + function mouseMove(e) { + if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { + return false; + } + + var maxLeft = gridster.curWidth - 1; + + // Get the current mouse position. + mouseX = e.pageX; + mouseY = e.pageY; + + // Get the deltas + var diffX = mouseX - lastMouseX + mOffX; + var diffY = mouseY - lastMouseY + mOffY; + mOffX = mOffY = 0; + + // Update last processed mouse positions. + lastMouseX = mouseX; + lastMouseY = mouseY; + + var dX = diffX, + dY = diffY; + if (elmX + dX < minLeft) { + diffX = minLeft - elmX; + mOffX = dX - diffX; + } else if (elmX + elmW + dX > maxLeft) { + diffX = maxLeft - elmX - elmW; + mOffX = dX - diffX; + } + + if (elmY + dY < minTop) { + diffY = minTop - elmY; + mOffY = dY - diffY; + } else if (elmY + elmH + dY > maxTop) { + diffY = maxTop - elmY - elmH; + mOffY = dY - diffY; + } + elmX += diffX; + elmY += diffY; + + // set new position + $el.css({ + 'top': elmY + 'px', + 'left': elmX + 'px' + }); + + drag(e); + + return true; + } + + function mouseUp(e) { + if (!$el.hasClass('gridster-item-moving') || $el.hasClass('gridster-item-resizing')) { + return false; + } + + mOffX = mOffY = 0; + + dragStop(e); + + return true; + } + + function dragStart(event) { + $el.addClass('gridster-item-moving'); + gridster.movingItem = item; + + gridster.updateHeight(item.sizeY); + scope.$apply(function() { + if (gridster.draggable && gridster.draggable.start) { + gridster.draggable.start(event, $el, itemOptions); + } + }); + } + + function drag(event) { + var oldRow = item.row, + oldCol = item.col, + hasCallback = gridster.draggable && gridster.draggable.drag, + scrollSensitivity = gridster.draggable.scrollSensitivity, + scrollSpeed = gridster.draggable.scrollSpeed; + + var row = gridster.pixelsToRows(elmY); + var col = gridster.pixelsToColumns(elmX); + + var itemsInTheWay = gridster.getItems(row, col, item.sizeX, item.sizeY, item); + var hasItemsInTheWay = itemsInTheWay.length !== 0; + + if (gridster.swapping === true && hasItemsInTheWay) { + var boundingBoxItem = gridster.getBoundingBox(itemsInTheWay), + sameSize = boundingBoxItem.sizeX === item.sizeX && boundingBoxItem.sizeY === item.sizeY, + sameRow = boundingBoxItem.row === oldRow, + sameCol = boundingBoxItem.col === oldCol, + samePosition = boundingBoxItem.row === row && boundingBoxItem.col === col, + inline = sameRow || sameCol; + + if (sameSize && itemsInTheWay.length === 1) { + if (samePosition) { + gridster.swapItems(item, itemsInTheWay[0]); + } else if (inline) { + return; + } + } else if (boundingBoxItem.sizeX <= item.sizeX && boundingBoxItem.sizeY <= item.sizeY && inline) { + var emptyRow = item.row <= row ? item.row : row + item.sizeY, + emptyCol = item.col <= col ? item.col : col + item.sizeX, + rowOffset = emptyRow - boundingBoxItem.row, + colOffset = emptyCol - boundingBoxItem.col; + + for (var i = 0, l = itemsInTheWay.length; i < l; ++i) { + var itemInTheWay = itemsInTheWay[i]; + + var itemsInFreeSpace = gridster.getItems( + itemInTheWay.row + rowOffset, + itemInTheWay.col + colOffset, + itemInTheWay.sizeX, + itemInTheWay.sizeY, + item + ); + + if (itemsInFreeSpace.length === 0) { + gridster.putItem(itemInTheWay, itemInTheWay.row + rowOffset, itemInTheWay.col + colOffset); + } + } + } + } + + if (gridster.pushing !== false || !hasItemsInTheWay) { + item.row = row; + item.col = col; + } + + if(($window.navigator.appName === 'Microsoft Internet Explorer' && !ie8) || $window.navigator.userAgent.indexOf("Firefox")!==-1){ + if (event.pageY - realdocument.documentElement.scrollTop < scrollSensitivity) { + realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop - scrollSpeed; + } else if ($window.innerHeight - (event.pageY - realdocument.documentElement.scrollTop) < scrollSensitivity) { + realdocument.documentElement.scrollTop = realdocument.documentElement.scrollTop + scrollSpeed; + } + } + else{ + if (event.pageY - realdocument.body.scrollTop < scrollSensitivity) { + realdocument.body.scrollTop = realdocument.body.scrollTop - scrollSpeed; + } else if ($window.innerHeight - (event.pageY - realdocument.body.scrollTop) < scrollSensitivity) { + realdocument.body.scrollTop = realdocument.body.scrollTop + scrollSpeed; + } + } + + + + if (event.pageX - realdocument.body.scrollLeft < scrollSensitivity) { + realdocument.body.scrollLeft = realdocument.body.scrollLeft - scrollSpeed; + } else if ($window.innerWidth - (event.pageX - realdocument.body.scrollLeft) < scrollSensitivity) { + realdocument.body.scrollLeft = realdocument.body.scrollLeft + scrollSpeed; + } + + if (hasCallback || oldRow !== item.row || oldCol !== item.col) { + scope.$apply(function() { + if (hasCallback) { + gridster.draggable.drag(event, $el, itemOptions); + } + }); + } + } + + function dragStop(event) { + $el.removeClass('gridster-item-moving'); + var row = gridster.pixelsToRows(elmY); + var col = gridster.pixelsToColumns(elmX); + if (gridster.pushing !== false || gridster.getItems(row, col, item.sizeX, item.sizeY, item).length === 0) { + item.row = row; + item.col = col; + } + gridster.movingItem = null; + item.setPosition(item.row, item.col); + + scope.$apply(function() { + if (gridster.draggable && gridster.draggable.stop) { + gridster.draggable.stop(event, $el, itemOptions); + } + }); + } + + var enabled = null; + var $dragHandles = null; + var unifiedInputs = []; + + this.enable = function() { + if (enabled === true) { + return; + } + + // disable and timeout required for some template rendering + $timeout(function() { + // disable any existing draghandles + for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { + unifiedInputs[u].disable(); + } + unifiedInputs = []; + + if (gridster.draggable && gridster.draggable.handle) { + $dragHandles = angular.element($el[0].querySelectorAll(gridster.draggable.handle)); + if ($dragHandles.length === 0) { + // fall back to element if handle not found... + $dragHandles = $el; + } + } else { + $dragHandles = $el; + } + + for (var h = 0, hl = $dragHandles.length; h < hl; ++h) { + unifiedInputs[h] = new GridsterTouch($dragHandles[h], mouseDown, mouseMove, mouseUp); + unifiedInputs[h].enable(); + } + + enabled = true; + }); + }; + + this.disable = function() { + if (enabled === false) { + return; + } + + // timeout to avoid race contition with the enable timeout + $timeout(function() { + + for (var u = 0, ul = unifiedInputs.length; u < ul; ++u) { + unifiedInputs[u].disable(); + } + + unifiedInputs = []; + enabled = false; + }); + }; + + this.toggle = function(enabled) { + if (enabled) { + this.enable(); + } else { + this.disable(); + } + }; + + this.destroy = function() { + this.disable(); + }; + } + + return GridsterDraggable; + } + ]) + + .factory('GridsterResizable', ['GridsterTouch', function(GridsterTouch) { + function GridsterResizable($el, scope, gridster, item, itemOptions) { + + function ResizeHandle(handleClass) { + + var hClass = handleClass; + + var elmX, elmY, elmW, elmH, + + mouseX = 0, + mouseY = 0, + lastMouseX = 0, + lastMouseY = 0, + mOffX = 0, + mOffY = 0, + + minTop = 0, + maxTop = 9999, + minLeft = 0; + + var getMinHeight = function() { + return (item.minSizeY ? item.minSizeY : 1) * gridster.curRowHeight - gridster.margins[0]; + }; + var getMinWidth = function() { + return (item.minSizeX ? item.minSizeX : 1) * gridster.curColWidth - gridster.margins[1]; + }; + + var originalWidth, originalHeight; + var savedDraggable; + + function mouseDown(e) { + switch (e.which) { + case 1: + // left mouse button + break; + case 2: + case 3: + // right or middle mouse button + return; + } + + // save the draggable setting to restore after resize + savedDraggable = gridster.draggable.enabled; + if (savedDraggable) { + gridster.draggable.enabled = false; + scope.$broadcast('gridster-draggable-changed', gridster); + } + + // Get the current mouse position. + lastMouseX = e.pageX; + lastMouseY = e.pageY; + + // Record current widget dimensions + elmX = parseInt($el.css('left'), 10); + elmY = parseInt($el.css('top'), 10); + elmW = $el[0].offsetWidth; + elmH = $el[0].offsetHeight; + + originalWidth = item.sizeX; + originalHeight = item.sizeY; + + resizeStart(e); + + return true; + } + + function resizeStart(e) { + $el.addClass('gridster-item-moving'); + $el.addClass('gridster-item-resizing'); + + gridster.movingItem = item; + + item.setElementSizeX(); + item.setElementSizeY(); + item.setElementPosition(); + gridster.updateHeight(1); + + scope.$apply(function() { + // callback + if (gridster.resizable && gridster.resizable.start) { + gridster.resizable.start(e, $el, itemOptions); // options + // is + // the + // item + // model + } + }); + } + + function mouseMove(e) { + var maxLeft = gridster.curWidth - 1; + + // Get the current mouse position. + mouseX = e.pageX; + mouseY = e.pageY; + + // Get the deltas + var diffX = mouseX - lastMouseX + mOffX; + var diffY = mouseY - lastMouseY + mOffY; + mOffX = mOffY = 0; + + // Update last processed mouse positions. + lastMouseX = mouseX; + lastMouseY = mouseY; + + var dY = diffY, + dX = diffX; + + if (hClass.indexOf('n') >= 0) { + if (elmH - dY < getMinHeight()) { + diffY = elmH - getMinHeight(); + mOffY = dY - diffY; + } else if (elmY + dY < minTop) { + diffY = minTop - elmY; + mOffY = dY - diffY; + } + elmY += diffY; + elmH -= diffY; + } + if (hClass.indexOf('s') >= 0) { + if (elmH + dY < getMinHeight()) { + diffY = getMinHeight() - elmH; + mOffY = dY - diffY; + } else if (elmY + elmH + dY > maxTop) { + diffY = maxTop - elmY - elmH; + mOffY = dY - diffY; + } + elmH += diffY; + } + if (hClass.indexOf('w') >= 0) { + if (elmW - dX < getMinWidth()) { + diffX = elmW - getMinWidth(); + mOffX = dX - diffX; + } else if (elmX + dX < minLeft) { + diffX = minLeft - elmX; + mOffX = dX - diffX; + } + elmX += diffX; + elmW -= diffX; + } + if (hClass.indexOf('e') >= 0) { + if (elmW + dX < getMinWidth()) { + diffX = getMinWidth() - elmW; + mOffX = dX - diffX; + } else if (elmX + elmW + dX > maxLeft) { + diffX = maxLeft - elmX - elmW; + mOffX = dX - diffX; + } + elmW += diffX; + } + + // set new position + $el.css({ + 'top': elmY + 'px', + 'left': elmX + 'px', + 'width': elmW + 'px', + 'height': elmH + 'px' + }); + + resize(e); + + return true; + } + + function mouseUp(e) { + // restore draggable setting to its original state + if (gridster.draggable.enabled !== savedDraggable) { + gridster.draggable.enabled = savedDraggable; + scope.$broadcast('gridster-draggable-changed', gridster); + } + + mOffX = mOffY = 0; + + resizeStop(e); + + return true; + } + + function resize(e) { + var oldRow = item.row, + oldCol = item.col, + oldSizeX = item.sizeX, + oldSizeY = item.sizeY, + hasCallback = gridster.resizable && gridster.resizable.resize; + + var col = item.col; + // only change column if grabbing left edge + if (['w', 'nw', 'sw'].indexOf(handleClass) !== -1) { + col = gridster.pixelsToColumns(elmX, false); + } + + var row = item.row; + // only change row if grabbing top edge + if (['n', 'ne', 'nw'].indexOf(handleClass) !== -1) { + row = gridster.pixelsToRows(elmY, false); + } + + var sizeX = item.sizeX; + // only change row if grabbing left or right edge + if (['n', 's'].indexOf(handleClass) === -1) { + sizeX = gridster.pixelsToColumns(elmW, true); + } + + var sizeY = item.sizeY; + // only change row if grabbing top or bottom edge + if (['e', 'w'].indexOf(handleClass) === -1) { + sizeY = gridster.pixelsToRows(elmH, true); + } + + if (gridster.pushing !== false || gridster.getItems(row, col, sizeX, sizeY, item).length === 0) { + item.row = row; + item.col = col; + item.sizeX = sizeX; + item.sizeY = sizeY; + } + var isChanged = item.row !== oldRow || item.col !== oldCol || item.sizeX !== oldSizeX || item.sizeY !== oldSizeY; + + if (hasCallback || isChanged) { + scope.$apply(function() { + if (hasCallback) { + gridster.resizable.resize(e, $el, itemOptions); // options + // is + // the + // item + // model + } + }); + } + } + + function resizeStop(e) { + $el.removeClass('gridster-item-moving'); + $el.removeClass('gridster-item-resizing'); + + gridster.movingItem = null; + + item.setPosition(item.row, item.col); + item.setSizeY(item.sizeY); + item.setSizeX(item.sizeX); + + scope.$apply(function() { + if (gridster.resizable && gridster.resizable.stop) { + gridster.resizable.stop(e, $el, itemOptions); // options + // is + // the + // item + // model + } + }); + } + + var $dragHandle = null; + var unifiedInput; + + this.enable = function() { + if (!$dragHandle) { + $dragHandle = angular.element('
    '); + $el.append($dragHandle); + } + + unifiedInput = new GridsterTouch($dragHandle[0], mouseDown, mouseMove, mouseUp); + unifiedInput.enable(); + }; + + this.disable = function() { + if ($dragHandle) { + $dragHandle.remove(); + $dragHandle = null; + } + + unifiedInput.disable(); + unifiedInput = undefined; + }; + + this.destroy = function() { + this.disable(); + }; + } + + var handles = []; + var handlesOpts = gridster.resizable.handles; + if (typeof handlesOpts === 'string') { + handlesOpts = gridster.resizable.handles.split(','); + } + var enabled = false; + + for (var c = 0, l = handlesOpts.length; c < l; c++) { + handles.push(new ResizeHandle(handlesOpts[c])); + } + + this.enable = function() { + if (enabled) { + return; + } + for (var c = 0, l = handles.length; c < l; c++) { + handles[c].enable(); + } + enabled = true; + }; + + this.disable = function() { + if (!enabled) { + return; + } + for (var c = 0, l = handles.length; c < l; c++) { + handles[c].disable(); + } + enabled = false; + }; + + this.toggle = function(enabled) { + if (enabled) { + this.enable(); + } else { + this.disable(); + } + }; + + this.destroy = function() { + for (var c = 0, l = handles.length; c < l; c++) { + handles[c].destroy(); + } + }; + } + return GridsterResizable; + }]) + + .factory('gridsterDebounce', function() { + return function gridsterDebounce(func, wait, immediate) { + var timeout; + return function() { + var context = this, + args = arguments; + var later = function() { + timeout = null; + if (!immediate) { + func.apply(context, args); + } + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + func.apply(context, args); + } + }; + }; + }) + + /** + * GridsterItem directive + * + * @param $parse + * @param GridsterDraggable + * @param GridsterResizable + * @param gridsterDebounce + */ + .directive('gridsterItem', ['$parse', 'GridsterDraggable', 'GridsterResizable', 'gridsterDebounce', + function($parse, GridsterDraggable, GridsterResizable, gridsterDebounce) { + return { + scope: true, + restrict: 'EA', + controller: 'GridsterItemCtrl', + controllerAs: 'gridsterItem', + require: ['^gridster', 'gridsterItem'], + link: function(scope, $el, attrs, controllers) { + var optionsKey = attrs.gridsterItem, + options; + + var gridster = controllers[0], + item = controllers[1]; + + scope.gridster = gridster; + + + // bind the item's position properties + // options can be an object specified by + // gridster-item="object" + // or the options can be the element html attributes object + if (optionsKey) { + var $optionsGetter = $parse(optionsKey); + options = $optionsGetter(scope) || {}; + if (!options && $optionsGetter.assign) { + options = { + row: item.row, + col: item.col, + sizeX: item.sizeX, + sizeY: item.sizeY, + minSizeX: 0, + minSizeY: 0, + maxSizeX: null, + maxSizeY: null + }; + $optionsGetter.assign(scope, options); + } + } else { + options = attrs; + } + + item.init($el, gridster); + + $el.addClass('gridster-item'); + + var aspects = ['minSizeX', 'maxSizeX', 'minSizeY', 'maxSizeY', 'sizeX', 'sizeY', 'row', 'col'], + $getters = {}; + + var expressions = []; + var aspectFn = function(aspect) { + var expression; + if (typeof options[aspect] === 'string') { + // watch the expression in the scope + expression = options[aspect]; + } else if (typeof options[aspect.toLowerCase()] === 'string') { + // watch the expression in the scope + expression = options[aspect.toLowerCase()]; + } else if (optionsKey) { + // watch the expression on the options object in the + // scope + expression = optionsKey + '.' + aspect; + } else { + return; + } + expressions.push('"' + aspect + '":' + expression); + $getters[aspect] = $parse(expression); + + // initial set + var val = $getters[aspect](scope); + if (typeof val === 'number') { + item[aspect] = val; + } + }; + + for (var i = 0, l = aspects.length; i < l; ++i) { + aspectFn(aspects[i]); + } + + var watchExpressions = '{' + expressions.join(',') + '}'; + + // when the value changes externally, update the internal + // item object + scope.$watchCollection(watchExpressions, function(newVals, oldVals) { + for (var aspect in newVals) { + var newVal = newVals[aspect]; + var oldVal = oldVals[aspect]; + if (oldVal === newVal) { + continue; + } + newVal = parseInt(newVal, 10); + if (!isNaN(newVal)) { + item[aspect] = newVal; + } + } + }); + + function positionChanged() { + // call setPosition so the element and gridster + // controller are updated + item.setPosition(item.row, item.col); + + // when internal item position changes, update + // externally bound values + if ($getters.row && $getters.row.assign) { + $getters.row.assign(scope, item.row); + } + if ($getters.col && $getters.col.assign) { + $getters.col.assign(scope, item.col); + } + } + scope.$watch(function() { + return item.row + ',' + item.col; + }, positionChanged); + + function sizeChanged() { + var changedX = item.setSizeX(item.sizeX, true); + if (changedX && $getters.sizeX && $getters.sizeX.assign) { + $getters.sizeX.assign(scope, item.sizeX); + } + var changedY = item.setSizeY(item.sizeY, true); + if (changedY && $getters.sizeY && $getters.sizeY.assign) { + $getters.sizeY.assign(scope, item.sizeY); + } + + if (changedX || changedY) { + item.gridster.moveOverlappingItems(item); + gridster.layoutChanged(); + scope.$broadcast('gridster-item-resized', item); + } + } + + scope.$watch(function() { + return item.sizeY + ',' + item.sizeX + ',' + item.minSizeX + ',' + item.maxSizeX + ',' + item.minSizeY + ',' + item.maxSizeY; + }, sizeChanged); + + var draggable = new GridsterDraggable($el, scope, gridster, item, options); + var resizable = new GridsterResizable($el, scope, gridster, item, options); + + var updateResizable = function() { + resizable.toggle(!gridster.isMobile && gridster.resizable && gridster.resizable.enabled); + }; + updateResizable(); + + var updateDraggable = function() { + draggable.toggle(!gridster.isMobile && gridster.draggable && gridster.draggable.enabled); + }; + updateDraggable(); + + scope.$on('gridster-draggable-changed', updateDraggable); + scope.$on('gridster-resizable-changed', updateResizable); + scope.$on('gridster-resized', updateResizable); + scope.$on('gridster-mobile-changed', function() { + updateResizable(); + updateDraggable(); + }); + + function whichTransitionEvent() { + var el = document.createElement('div'); + var transitions = { + 'transition': 'transitionend', + 'OTransition': 'oTransitionEnd', + 'MozTransition': 'transitionend', + 'WebkitTransition': 'webkitTransitionEnd' + }; + for (var t in transitions) { + if (el.style[t] !== undefined) { + return transitions[t]; + } + } + } + + var debouncedTransitionEndPublisher = gridsterDebounce(function() { + scope.$apply(function() { + scope.$broadcast('gridster-item-transition-end', item); + }); + }, 50); + + if(whichTransitionEvent()){ // check for IE8, as it + // evaluates to null + $el.on(whichTransitionEvent(), debouncedTransitionEndPublisher); + } + + scope.$broadcast('gridster-item-initialized', item); + + return scope.$on('$destroy', function() { + try { + resizable.destroy(); + draggable.destroy(); + } catch (e) {} + + try { + gridster.removeItem(item); + } catch (e) {} + + try { + item.destroy(); + } catch (e) {} + }); + } + }; + } + ]) + + .directive('gridsterNoDrag', function() { + return { + restrict: 'A', + link: function(scope, $element) { + $element.addClass('gridster-no-drag'); + } + }; + }) + + ; + +})); diff --git a/ui/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js b/ui/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js new file mode 100644 index 0000000..3ca3db7 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/js/att_angular_gridster/ui-gridster-tpls.js @@ -0,0 +1,168 @@ +/** +* FileName ui-gridster +* Version 0.0.1 +* Build number ad58c6f4f8f8fd7f04ac457f95d76f09 +* Date 08/17/2015 +*/ + + +(function(angular, window){ +angular.module("att.gridster", ["att.gridster.tpls", "att.gridster.utilities","att.gridster.gridster"]); +angular.module("att.gridster.tpls", ["template/gridster/gridster.html","template/gridster/gridsterItem.html","template/gridster/gridsterItemBody.html","template/gridster/gridsterItemFooter.html","template/gridster/gridsterItemHeader.html"]); +angular.module('att.gridster.utilities', []) + .factory('$extendObj', [function() { + var _extendDeep = function(dst) { + angular.forEach(arguments, function(obj) { + if (obj !== dst) { + angular.forEach(obj, function(value, key) { + if (dst[key] && dst[key].constructor && dst[key].constructor === Object) { + _extendDeep(dst[key], value); + } else { + dst[key] = value; + } + }); + } + }); + return dst; + }; + return { + extendDeep: _extendDeep + }; + }]); + +angular.module('att.gridster.gridster', ['attGridsterLib', 'att.gridster.utilities']) + .config(['$compileProvider', function($compileProvider) { + $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/); + }]) + .constant('attGridsterConfig', + { + columns: 3, + margins: [10, 10], + outerMargin: true, + pushing: true, + floating: true, + swapping: true, + draggable: { + enabled: true + } + }) + .directive('attGridster', ['attGridsterConfig', '$extendObj', function(attGridsterConfig, $extendObj) { + return { + restrict: 'EA', + scope: { + attGridsterOptions: '=?' + }, + templateUrl: 'template/gridster/gridster.html', + replace: false, + transclude: true, + controller: [function() {}], + link: function(scope) { + if (angular.isDefined(scope.attGridsterOptions)) { + attGridsterConfig = $extendObj.extendDeep(attGridsterConfig, scope.attGridsterOptions); + } + scope.attGridsterConfig = attGridsterConfig; + } + }; + }]) + .directive('attGridsterItem', ['$timeout', function($timeout) { + return { + restrict: 'EA', + require: ['^attGridster'], + scope: { + attGridsterItem: '=' + }, + templateUrl: 'template/gridster/gridsterItem.html', + replace: false, + transclude: true, + controller: [function() {}] + }; + }]) + .directive('attGridsterItemHeader', [function() { + return { + restrict: 'EA', + require: ['^attGridsterItem'], + scope: { + headerText: '@', + subHeaderText: '@?' + }, + templateUrl: 'template/gridster/gridsterItemHeader.html', + replace: true, + transclude: true, + link: function(scope, element) { + if (angular.isDefined(scope.subHeaderText) && scope.subHeaderText) { + angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("tabindex", "0"); + angular.element(element[0].querySelector('span.gridster-item-sub-header-content')).attr("aria-label", scope.subHeaderText); + } + } + }; + }]) + .directive('attGridsterItemBody', [function() { + return { + restrict: 'EA', + require: ['^attGridsterItem'], + scope: {}, + templateUrl: 'template/gridster/gridsterItemBody.html', + replace: true, + transclude: true + }; + }]) + .directive('attGridsterItemFooter', ['$location', function($location) { + return { + restrict: 'EA', + require: ['^attGridsterItem'], + scope: { + attGridsterItemFooterLink: '@?' + }, + templateUrl: 'template/gridster/gridsterItemFooter.html', + replace: true, + transclude: true, + controller: ['$scope', function($scope) { + $scope.clickOnFooterLink = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if ($scope.attGridsterItemFooterLink) { + $location.url($scope.attGridsterItemFooterLink); + } + }; + }], + link: function(scope, element) { + if (angular.isDefined(scope.attGridsterItemFooterLink) && scope.attGridsterItemFooterLink) { + element.attr("role", "link"); + } + } + }; + }]); +angular.module("template/gridster/gridster.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/gridster/gridster.html", + "
    "); +}]); + +angular.module("template/gridster/gridsterItem.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/gridster/gridsterItem.html", + "
    "); +}]); + +angular.module("template/gridster/gridsterItemBody.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/gridster/gridsterItemBody.html", + "
    "); +}]); + +angular.module("template/gridster/gridsterItemFooter.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/gridster/gridsterItemFooter.html", + "
    \n" + + " \n" + + "
    "); +}]); + +angular.module("template/gridster/gridsterItemHeader.html", []).run(["$templateCache", function($templateCache) { + $templateCache.put("template/gridster/gridsterItemHeader.html", + "
    \n" + + " \"||\"\n" + + " {{headerText}}\n" + + " {{subHeaderText}}\n" + + "
    \n" + + "
    "); +}]); + +return {} +})(angular, window); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/css/images/blank.gif b/ui/src/main/webapp/static/fusion/sample/css/images/blank.gif new file mode 100644 index 0000000..75b945d Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/css/images/blank.gif differ diff --git a/ui/src/main/webapp/static/fusion/sample/css/scribble.css b/ui/src/main/webapp/static/fusion/sample/css/scribble.css new file mode 100644 index 0000000..c6ab19b --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/css/scribble.css @@ -0,0 +1,41 @@ +#scribble-pad { + /* margin-left:auto; + margin-right:auto; + height: 475px; + width: 475px;*/ + background: + url(https://www.ibm.com/developerworks/mydeveloperworks/blogs/bobleah/resource/stickynote.jpg) + no-repeat center center; + background-size: 110% 110%; +} + +#scribble { + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ + max-width: 300px; + padding: 120px 100px 100px 75px; + color: #486891; + border-color: #ff0000 #0000ff; + border-color: transparent; + background-color: rgba(0, 0, 0, 0); + font-family: Arial, sans-serif; + font-size: 120%; + font-style: italic; + font-weight: bold; + line-height: 1.5em; +} + +#scribble:focus { + outline-width: 0; +} + +.c-link { + color: #486891; + font-family: Arial, sans-serif; + font-size: 95%; + font-weight: bold; + text-decoration: none; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/css/slider.css b/ui/src/main/webapp/static/fusion/sample/css/slider.css new file mode 100644 index 0000000..0bbb790 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/css/slider.css @@ -0,0 +1,143 @@ +div, span, p { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +#container { + width: 580px; + padding: 10px; + margin: 0 auto; + position: relative; + z-index: 0; +} + +#example { + width: 600px; + height: 350px; + position: relative; +} + +#ribbon { + position: absolute; + top: -3px; + left: -15px; + z-index: 500; +} + +#frame { + position: absolute; + z-index: 0; + width: 739px; + height: 341px; + top: -3px; + left: -80px; +} + +/* + Slideshow +*/ +#slides { + position: absolute; + top: 15px; + left: 4px; + z-index: 100; +} + +/* + Slides container + Important: + Set the width of your slides container + Set to display none, prevents content flash +*/ +.slides_container { + width: 570px; + overflow: hidden; + position: relative; + display: none; +} + +/* + Each slide + Important: + Set the width of your slides + If height not specified height will be set by the slide content + Set to display block +*/ +.slides_container div.slide { + width: 570px; + height: 270px; + display: block; +} + +/* + Next/prev buttons +*/ +#slides .next, #slides .prev { + position: absolute; + top: 107px; + left: -39px; + width: 24px; + height: 43px; + display: block; + z-index: 101; +} + +#slides .next { + left: 585px; +} + +/* + Pagination +*/ +.pagination { + margin: 26px auto 0; + width: 100px; +} + +.pagination li { + float: left; + margin: 0 1px; + list-style: none; +} + +.pagination li a { + display: block; + width: 12px; + height: 0; + padding-top: 12px; + background-image: url(../images/pagination.png); + background-position: 0 0; + float: left; + overflow: hidden; +} + +.pagination li.current a { + background-position: 0 -12px; +} + +/* + Caption +*/ +.caption { + z-index: 500; + position: absolute; + bottom: -35px; + left: 0; + height: 30px; + padding: 5px 20px 0 20px; + background: #000; + background: rgba(0, 0, 0, .5); + width: 540px; + font-size: 1.3em; + line-height: 1.33; + color: #fff; + border-top: 1px solid #000; + text-shadow: none; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/css/spacegallery.css b/ui/src/main/webapp/static/fusion/sample/css/spacegallery.css new file mode 100644 index 0000000..8423221 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/css/spacegallery.css @@ -0,0 +1,20 @@ +.spacegallery { + position: relative; + overflow: hidden; +} + +.spacegallery img { + position: absolute; + left: 50%; +} + +.spacegallery a { + position: absolute; + z-index: 1000; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: url(images/blank.gif); +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/css/welcome.css b/ui/src/main/webapp/static/fusion/sample/css/welcome.css new file mode 100644 index 0000000..f970ecf --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/css/welcome.css @@ -0,0 +1,173 @@ +/* Area Chart */ +#areaChart { + overflow: hidden; +} + +#lineChart { + overflow: hidden; +} + +#areaChart svg { + height: 200px; + width: 380px; + min-width: 100px; + min-height: 100px; +} + +#lineChart svg { + height: 200px; + width: 380px; + min-width: 100px; + min-height: 100px; +} + +#areaChart tr.z-row-over>td.z-row-inner, tr.z-row-over>.z-cell { + background-color: rgb(255, 255, 255); +} + +#lineChart tr.z-row-over>td.z-row-inner, tr.z-row-over>.z-cell { + background-color: rgb(255, 255, 255); +} + +#areaChart .nodatadiv { + display: table-cell; + width: 700px; + height: 370px; + text-align: center; + vertical-align: middle; +} + +#lineChart .nodatadiv { + display: table-cell; + width: 700px; + height: 370px; + text-align: center; + vertical-align: middle; +} + +#areaChart .nodatainner { + padding: 10px; +} + +#lineChart .nodatainner { + padding: 10px; +} + +/* Area Chart END */ +.button--small, [class*=bg-] .button--small { + font-size: 14px; +} + +; + +/* Gridster (EBIZ) */ +.gridster-item-container .gridster-item-body { + bottom: 0px; +} + +.gridster-item-container { + min-height: 50px; +} + +.att-accordion { + border-width: 0px; +} + +/* End Gridster */ +#myGallery { + width: 100%; + height: 400px; +} + +#myGallery img { + border: 2px solid #52697E; +} + +a.loading { + background: #fff url(../images/ajax_small.gif) no-repeat center; +} + +.center { + margin-left: auto; + margin-right: auto; +} + +#selectedTrafficDay ul { + list-style: none; + padding: 0; + margin: 0; +} + +#selectedTrafficDay li { + float: left; + border: 1px solid #000; + border-bottom-width: 0; + margin: 3px 3px 3px 3px; + padding: 5px 5px 5px 5px; + background-color: #F2F2F2; + color: #696969; +} + +#SelectedTrafficeDayView { + padding: 0 1em; +} + +#selectedTrafficDay .active1 { + background-color: #FFF; + color: #000; +} + +#BusyHourTraffic ul { + list-style: none; + padding: 0; + margin: 0; +} + +#BusyHourTraffic li { + float: left; + border: 1px solid #000; + border-bottom-width: 0; + margin: 3px 3px 3px 3px; + padding: 5px 5px 5px 5px; + background-color: #F2F2F2; + color: #696969; +} + +#BusyHourTrafficView { + padding: 0 1em; +} + +#BusyHourTraffic .active2 { + background-color: #FFF; + color: #000; +} + +#slider { + width: 600px; + margin: 0 auto; + clear: left; +} + +@media only screen and (device-width: 768px) { + #slider { + width: 400px; + } +} + +#container { + +} + +#title { + float: left; + width: 100%; + height: 30px; + margin:; + color: #222222; + text-shadow: 1px 1px 2px #A0A0A0; +} + +.content { + margin-right: -230px; + top: 50px; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/area_chart.html b/ui/src/main/webapp/static/fusion/sample/html/area_chart.html new file mode 100644 index 0000000..47df293 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/area_chart.html @@ -0,0 +1,63 @@ + + + + + + + +
    +

    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/bar_chart.html b/ui/src/main/webapp/static/fusion/sample/html/bar_chart.html new file mode 100644 index 0000000..b69ebed --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/bar_chart.html @@ -0,0 +1,110 @@ + + + + + + + +
    +

    +
    +
    + +
    + + + + + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html b/ui/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html new file mode 100644 index 0000000..cb318cd --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/d3_gauges_demo.html @@ -0,0 +1,36 @@ + + + + +d3.js gauges + + + + + + + + + + + + + + +
    + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv b/ui/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv new file mode 100644 index 0000000..406143e --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/data/speedometer2.csv @@ -0,0 +1,16 @@ +"YEARMONTH","Bedminster","Piscataway","Middletown","Paramus" +"201401",8.27,4.89,2.36,2.17 +"201402",10.02,4.57,3.15,3.01 +"201403",11.16,5.00,4.27,4.06 +"201404",13.31,5.00,5.35,5.11 +"201405",12.82,5.00,5.01,4.74 +"201406",14.01,6.09,9.17,8.98 +"201407",14.66,7.00,8.84,8.41 +"201408",16.95,7.02,12.22,11.84 +"201409",21.56,8.12,16.09,15.50 +"201410",25.35,9.00,19.04,18.37 +"201411",21.93,9.00,17.61,17.13 +"201412",24.00,9.00,19.00,18.00 +"201501",25.14,2.01,15.19,12.13 +"201502",26.30,2.67,16.95,13.47 +"201503",26.5833333333333,45.63333333333333,16.1166666666667,12.40 diff --git a/ui/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv b/ui/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv new file mode 100644 index 0000000..046383e --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/data/speedometer3.csv @@ -0,0 +1,2 @@ +"YEARMONTH","Bedminster","Piscataway","Middletown","Paramus" +"201401",8.27,4.89,2.36,2.17 \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/data/worddata.csv b/ui/src/main/webapp/static/fusion/sample/html/data/worddata.csv new file mode 100644 index 0000000..13f0d02 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/data/worddata.csv @@ -0,0 +1,127 @@ +text,frequency +service,98 +portal,70 +management,70 +virtual,56 +design,56 +studio,42 +operations,42 +inventory,42 +router,28 +restart,28 +process,28 +platform,28 +manage,28 +loop,28 +licensing,28 +license,28 +integrated,28 +flow-through,28 +enable,28 +data,28 +controller,28 +control,28 +configure,28 +component,28 +common,28 +asset,28 +application,28 +ECOMP,28 +workflow,14 +waterfall,14 +visual,14 +view,14 +workflow,14 +waterfall,14 +visual,14 +view,14 +utilization,14 +user,14 +usage,14 +troubleshoot,14 +transformation,14 +track,14 +topolgies,14 +topics,14 +time,14 +tickets,14 +thresholds,14 +templates,14 +structures,14 +standards-based,14 +software,14 +reuse,14 +repository,14 +reports,14 +release,14 +recipes,14 +real-time,14 +provisioning,14 +properties,14 +project-based,14 +processes,14 +physical,14 +oversight,14 +openl-loop,14 +network,14 +monitor,14 +modeling,14 +model-driven,14 +model,14 +message,14 +maximize,14 +manually,14 +machine,14 +layer,14 +interact,14 +instances,14 +initiate,14 +increase,14 +imported,14 +impacts,14 +host,14 +function,14 +feeds,14 +features,14 +faults,14 +extended,14 +engines,14 +engine,14 +dynamic,14 +document-driven,14 +determine,14 +dashboard,14 +current,14 +creation,14 +created,14 +create,14 +configuration,14 +composer,14 +components,14 +collective,14 +certification,14 +bus,14 +basis,14 +available,14 +automation,14 +automated,14 +associated,14 +assignment,14 +appropriate,14 +against,14 +aervice,14 +adminstrators,14 +activation,14 +action,14 +VMs,14 +VM,14 +VLAN,14 +SDK,14 +SBG,14 +SAM,14 +RUBY,14 +Policy,14 +PODS,14 +Ops,14 +GFP,14 +F5FW,14 diff --git a/ui/src/main/webapp/static/fusion/sample/html/donut_d3.html b/ui/src/main/webapp/static/fusion/sample/html/donut_d3.html new file mode 100644 index 0000000..9967849 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/donut_d3.html @@ -0,0 +1,42 @@ + + + + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js b/ui/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js new file mode 100644 index 0000000..9b3decb --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/js/area_chart.min.js @@ -0,0 +1 @@ +function redrawAreaChart(){d3.select("#areaChart svg").datum(historicalBarChart).call(area_chart)}var area_chart;nv.addGraph(function(){return area_chart=nv.models.stackedAreaChart().showControls(!1).margin({top:30,right:60,bottom:50,left:100}).showLegend(!1).yAxisTooltipFormat(d3.format(",.1f")).x(function(a){return a.x}).y(function(a){return a.y}).color(d3.scale.category10().range()),area_chart.xAxis.axisLabel("").staggerLabels(!1).showMaxMin(!1).rotateLabels(90).tickFormat(function(a){return d3.time.format("%b %y")(new Date(a))}),area_chart.yAxis.axisLabel("").tickFormat(d3.format(",.1f")),d3.select("#areaChart svg").datum(historicalBarChart).call(area_chart),nv.utils.windowResize(area_chart.update),area_chart}),redrawAreaChart(),historicalBarChart.length<=0&&(document.getElementById("areaChart").innerHTML="
    No Data Available
    ",document.getElementById("areaChart").className="nodatadiv",document.getElementById("nodata").className="nodatainner"); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/js/donut.min.js b/ui/src/main/webapp/static/fusion/sample/html/js/donut.min.js new file mode 100644 index 0000000..60c4fd4 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/js/donut.min.js @@ -0,0 +1 @@ +function angle(t){var e=90*(t.startAngle+t.endAngle)/Math.PI-90;return e>90?e-180:e}function arcTween(t,e){return function(){d3.select(this).transition().delay(e).attrTween("d",function(e){var r=d3.interpolate(e.outerRadius,t);return function(t){return e.outerRadius=r(t),arc(e)}})}}var arc=d3.svg.arc().padRadius(outerRadius).innerRadius(innerRadius),pie=d3.layout.pie().sort(null).padAngle(.02).value(function(t){return t.performance});d3.csv(dataURL,function(t,e){color.domain(d3.keys(e[0]).filter(function(t){return"YEARMONTH"!==t})),e.forEach(function(t){t.performance=color.domain().map(function(e){return{name:e,performance:+t[e]}})});var r=d3.select("body").append("svg").attr("class","legend").attr("width",radius).attr("height",2*radius).selectAll("g").data(color.domain().slice().reverse()).enter().append("g").attr("transform",function(t,e){return"translate(0,"+20*e+")"});r.append("rect").attr("width",18).attr("height",18).style("fill",color),r.append("text").attr("x",24).attr("y",9).attr("dy",".35em").text(function(t){return t});var a=d3.select("body").append("svg").attr("width",width).attr("height",height).data(e).append("g").attr("transform","translate("+radius+","+height/2+")"),n=a.selectAll("g.slice").data(function(t){return pie(t.performance)}).enter().append("g").attr("class","slice");n.append("path").each(function(t){t.outerRadius=outerRadius-10}).attr("class","arc").attr("d",arc).style("fill",function(t){return color(t.data.name)}).on("mouseover",arcTween(outerRadius,0)).on("mouseout",arcTween(outerRadius-10,150)),n.append("text").attr("dy",".35em").attr("transform",function(t){return t.outerRadius=outerRadius,t.innerRadius=outerRadius/2,"translate("+arc.centroid(t)+")rotate("+angle(t)+")"}).attr("text-anchor","middle").style("fill","white").style("font","bold 12px Arial").text(function(t){return t.value}),a.append("text").attr("dy",".35em").style("text-anchor","middle").text(function(t){return t.YEARMONTH})}); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/js/gauges.min.js b/ui/src/main/webapp/static/fusion/sample/html/js/gauges.min.js new file mode 100644 index 0000000..c0fd748 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/js/gauges.min.js @@ -0,0 +1 @@ +function Gauge(t,i){this.placeholderName=t;var n=this;this.configure=function(t){this.config=t,this.config.size=.9*this.config.size,this.config.raduis=.97*this.config.size/2,this.config.cx=this.config.size/2,this.config.cy=this.config.size/2,this.config.min=void 0!=t.min?t.min:0,this.config.max=void 0!=t.max?t.max:100,this.config.range=this.config.max-this.config.min,this.config.majorTicks=t.majorTicks||5,this.config.minorTicks=t.minorTicks||2,this.config.greenColor=t.greenColor||"#109618",this.config.yellowColor=t.yellowColor||"#FF9900",this.config.redColor=t.redColor||"#DC3912",this.config.transitionDuration=t.transitionDuration||500},this.render=function(){this.body=d3.select("#"+this.placeholderName).append("svg:svg").attr("class","gauge").attr("width",this.config.size).attr("height",this.config.size),this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",this.config.raduis).style("fill","#ccc").style("stroke","#000").style("stroke-width","0.5px"),this.body.append("svg:circle").attr("cx",this.config.cx).attr("cy",this.config.cy).attr("r",.9*this.config.raduis).style("fill","#fff").style("stroke","#e0e0e0").style("stroke-width","2px");for(var t in this.config.greenZones)this.drawBand(this.config.greenZones[t].from,this.config.greenZones[t].to,n.config.greenColor);for(var t in this.config.yellowZones)this.drawBand(this.config.yellowZones[t].from,this.config.yellowZones[t].to,n.config.yellowColor);for(var t in this.config.redZones)this.drawBand(this.config.redZones[t].from,this.config.redZones[t].to,n.config.redColor);if(void 0!=this.config.label){var i=Math.round(this.config.size/12);this.body.append("svg:text").attr("x",this.config.cx).attr("y",this.config.cy/2+i/2).attr("dy",i/2).attr("text-anchor","middle").text(this.config.label).style("font-size",i+"px").style("fill","#333").style("stroke-width","0px")}for(var i=Math.round(this.config.size/16),e=this.config.range/(this.config.majorTicks-1),o=this.config.min;o<=this.config.max;o+=e){for(var a=e/this.config.minorTicks,r=o+a;r=i-t||this.body.append("svg:path").style("fill",e).attr("d",d3.svg.arc().startAngle(this.valueToRadians(t)).endAngle(this.valueToRadians(i)).innerRadius(.65*this.config.raduis).outerRadius(.85*this.config.raduis)).attr("transform",function(){return"translate("+n.config.cx+", "+n.config.cy+") rotate(270)"})},this.redraw=function(t,i,e){var o=this.body.select(".pointerContainer"),a=o.selectAll("text");y=a.attr("y"),dy=parseFloat(a.attr("dy")),a.selectAll("tspan").remove(),a.append("tspan").attr("x",45).attr("dy",0).text(Math.round(t)),a.append("tspan").attr("x",45).attr("dy",10).text(i),o.selectAll("text").style("fill",function(){var i=n.config.max-n.config.min;return Math.round(t)>.9*i?"#DC3912":Math.round(t)>.5*i&&Math.round(t)<.9*i?"#FF9900":"#000000"});var r=o.selectAll("path");r.transition().duration(void 0!=e?e:this.config.transitionDuration).attrTween("transform",function(){var i=t;t>n.config.max?i=n.config.max+.02*n.config.range:tNo Data Available",document.getElementById("lineChart").className="nodatadiv",document.getElementById("nodata2").className="nodatainner"); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js b/ui/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js new file mode 100644 index 0000000..f78eec7 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/js/pie_chart.min.js @@ -0,0 +1 @@ +function redraw(){d3.select("#chart423 svg").datum(historicalBarChart).transition().duration(500).call(chart)}var chart;nv.addGraph(function(){return chart=nv.models.pieChart().margin({top:30,right:60,bottom:50,left:100}).x(function(t){return t.key}).y(function(t){return t.y}),chart.showLegend(!1),d3.select("#chart423 svg").datum(historicalBarChart).transition().duration(1200).call(chart),nv.utils.windowResize(chart.update),chart}),setInterval(function(){redraw()},1500),historicalBarChart.length<=0&&(document.getElementById("chart423").innerHTML="
    No Data Available
    ",document.getElementById("chart423").className="nodatadiv",document.getElementById("nodata").className="nodatainner"); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/js/worddata.min.js b/ui/src/main/webapp/static/fusion/sample/html/js/worddata.min.js new file mode 100644 index 0000000..6b82746 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/js/worddata.min.js @@ -0,0 +1 @@ +function dataViz(t){function e(t){var e=d3.select("svg").append("g").attr("id","wordCloudG").attr("transform","translate(210,175)");e.selectAll("text").data(t).enter().append("text").style("font-size",function(t){return 1*t.size+"px"}).style("fill",function(t){return keywords.indexOf(t.text)>-1?"red":"black"}).style("opacity",.75).attr("text-anchor","middle").attr("transform",function(t){return"translate("+[t.x,t.y]+")rotate("+t.rotate+")"}).text(function(t){return t.text})}d3.layout.cloud().size([420,350]).words(t).rotate(function(t){return t.text.length>5?0:90}).fontSize(function(t){return wordScale(t.frequency)}).on("end",e).start()}d3.csv(dataURL,function(t){dataViz(t)}),wordScale=d3.scale.linear().domain([0,100]).range([0,70]).clamp(!0); \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/line_chart.html b/ui/src/main/webapp/static/fusion/sample/html/line_chart.html new file mode 100644 index 0000000..393cc9c --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/line_chart.html @@ -0,0 +1,63 @@ + + + + + + + +
    +

    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/pie_chart.html b/ui/src/main/webapp/static/fusion/sample/html/pie_chart.html new file mode 100644 index 0000000..180066e --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/pie_chart.html @@ -0,0 +1,51 @@ + + + + + + + +
    + +
    + + + + + + + + + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/html/wordcloud.html b/ui/src/main/webapp/static/fusion/sample/html/wordcloud.html new file mode 100644 index 0000000..8619599 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/html/wordcloud.html @@ -0,0 +1,35 @@ + + +Word Cloud Example + + + + + + + + + +
    + + +
    +
    + +
    + + + +
    + + \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png new file mode 100644 index 0000000..78a8873 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_drive_test_map.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png new file mode 100644 index 0000000..df471d7 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_county.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png new file mode 100644 index 0000000..e59fc18 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_eppt_regression.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_ios_throughput.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_ios_throughput.png new file mode 100644 index 0000000..76a2d2b Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_ios_throughput.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png new file mode 100644 index 0000000..174ef9b Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png new file mode 100644 index 0000000..f7f2719 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_lata_map_legend.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png new file mode 100644 index 0000000..ee0ddef Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/carousel/slide_b_nova_sdn_map.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png new file mode 100644 index 0000000..d46eee5 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/1_mon.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/2_tue.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/2_tue.png new file mode 100644 index 0000000..ed82aad Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/2_tue.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png new file mode 100644 index 0000000..8f8c032 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/3_wed.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png new file mode 100644 index 0000000..750dca5 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/4_thu.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/5_fri.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/5_fri.png new file mode 100644 index 0000000..599e51f Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/5_fri.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png new file mode 100644 index 0000000..70323ea Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/6_sat.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png new file mode 100644 index 0000000..9d579d6 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/7_sun.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_IN.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_IN.png new file mode 100644 index 0000000..af1ac0a Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_IN.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_OUT.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_OUT.png new file mode 100644 index 0000000..935b538 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_DLSTX_OUT.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat.png new file mode 100644 index 0000000..916a655 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png new file mode 100644 index 0000000..a8b516d Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Def.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png new file mode 100644 index 0000000..2cf8141 Binary files /dev/null and b/ui/src/main/webapp/static/fusion/sample/images/tunnels/BH_Nat_Priority.png differ diff --git a/ui/src/main/webapp/static/fusion/sample/js/FusionCharts.js b/ui/src/main/webapp/static/fusion/sample/js/FusionCharts.js new file mode 100644 index 0000000..f5f60ad --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/js/FusionCharts.js @@ -0,0 +1,430 @@ +/** + * FusionCharts: Flash Player detection and Chart embedding. Version 1.2.3F ( 22 + * November 2008) - Specialized for FusionChartsFREE Checking Flash Version >=6 + * and added updateChartXML() for FREE Charts. Version: 1.2.3 (1st September, + * 2008) - Added Fix for % and & characters, scaled dimensions, fixes in to + * properly handling of double quotes and single quotes in setDataXML() + * function. Version: 1.2.2 (10th July, 2008) - Added Fix for % scaled + * dimensions, fixes in setDataXML() and setDataURL() functions Version: 1.2.1 + * (21st December, 2007) - Added setting up Transparent/opaque mode: + * setTransparent() function Version: 1.2 (1st November, 2007) - Added FORM + * fixes for IE Version: 1.1 (29th June, 2007) - Added Player detection, New + * conditional fixes for IE + * + * Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT + * License: http://www.opensource.org/licenses/mit-license.php + * + */ +if (typeof infosoftglobal == "undefined") + var infosoftglobal = new Object(); +if (typeof infosoftglobal.FusionChartsUtil == "undefined") + infosoftglobal.FusionChartsUtil = new Object(); +infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, + registerWithJS, c, scaleMode, lang, detectFlashVersion, + autoInstallRedirect) { + if (!document.getElementById) { + return; + } + + // Flag to see whether data has been set initially + this.initialDataSet = false; + + // Create container objects + this.params = new Object(); + this.variables = new Object(); + this.attributes = new Array(); + + // Set attributes for the SWF + if (swf) { + this.setAttribute('swf', swf); + } + if (id) { + this.setAttribute('id', id); + } + + w = w.toString().replace(/\%$/, "%25"); + if (w) { + this.setAttribute('width', w); + } + h = h.toString().replace(/\%$/, "%25"); + if (h) { + this.setAttribute('height', h); + } + + // Set background color + if (c) { + this.addParam('bgcolor', c); + } + + // Set Quality + this.addParam('quality', 'high'); + + // Add scripting access parameter + this.addParam('allowScriptAccess', 'always'); + + // Pass width and height to be appended as chartWidth and chartHeight + this.addVariable('chartWidth', w); + this.addVariable('chartHeight', h); + + // Whether in debug mode + debugMode = debugMode ? debugMode : 0; + this.addVariable('debugMode', debugMode); + // Pass DOM ID to Chart + this.addVariable('DOMId', id); + // Whether to registed with JavaScript + registerWithJS = registerWithJS ? registerWithJS : 0; + this.addVariable('registerWithJS', registerWithJS); + + // Scale Mode of chart + scaleMode = scaleMode ? scaleMode : 'noScale'; + this.addVariable('scaleMode', scaleMode); + + // Application Message Language + lang = lang ? lang : 'EN'; + this.addVariable('lang', lang); + + // Whether to auto detect and re-direct to Flash Player installation + this.detectFlashVersion = detectFlashVersion ? detectFlashVersion : 1; + this.autoInstallRedirect = autoInstallRedirect ? autoInstallRedirect : 1; + + // Ger Flash Player version + this.installedVer = infosoftglobal.FusionChartsUtil.getPlayerVersion(); + + if (!window.opera && document.all && this.installedVer.major > 7) { + // Only add the onunload cleanup if the Flash Player version supports + // External Interface and we are in IE + infosoftglobal.FusionCharts.doPrepUnload = true; + } +} + +infosoftglobal.FusionCharts.prototype = { + setAttribute : function(name, value) { + this.attributes[name] = value; + }, + getAttribute : function(name) { + return this.attributes[name]; + }, + addParam : function(name, value) { + this.params[name] = value; + }, + getParams : function() { + return this.params; + }, + addVariable : function(name, value) { + this.variables[name] = value; + }, + getVariable : function(name) { + return this.variables[name]; + }, + getVariables : function() { + return this.variables; + }, + getVariablePairs : function() { + var variablePairs = new Array(); + var key; + var variables = this.getVariables(); + for (key in variables) { + variablePairs.push(key + "=" + variables[key]); + } + return variablePairs; + }, + getSWFHTML : function() { + var swfNode = ""; + if (navigator.plugins && navigator.mimeTypes + && navigator.mimeTypes.length) { + // netscape plugin architecture + swfNode = ' 0) { + swfNode += 'flashvars="' + pairs + '"'; + } + swfNode += '/>'; + } else { // PC IE + swfNode = ''; + swfNode += ''; + var params = this.getParams(); + for ( var key in params) { + swfNode += ''; + } + var pairs = this.getVariablePairs().join("&"); + if (pairs.length > 0) { + swfNode += ''; + } + swfNode += ""; + } + return swfNode; + }, + setDataURL : function(strDataURL) { + // This method sets the data URL for the chart. + // If being set initially + if (this.initialDataSet == false) { + this.addVariable('dataURL', strDataURL); + // Update flag + this.initialDataSet = true; + } else { + // Else, we update the chart data using External Interface + // Get reference to chart object + var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this + .getAttribute('id')); + + if (!chartObj.setDataURL) { + __flash__addCallback(chartObj, "setDataURL"); + } + + chartObj.setDataURL(strDataURL); + } + }, + // This function : + // fixes the double quoted attributes to single quotes + // Encodes all quotes inside attribute values + // Encodes % to %25 and & to %26; + encodeDataXML : function(strDataXML) { + + var regExpReservedCharacters = [ "\\$", "\\+" ]; + var arrDQAtt = strDataXML.match(/=\s*\".*?\"/g); + if (arrDQAtt) { + for (var i = 0; i < arrDQAtt.length; i++) { + var repStr = arrDQAtt[i].replace(/^=\s*\"|\"$/g, ""); + repStr = repStr.replace(/\'/g, "%26apos;"); + var strTo = strDataXML.indexOf(arrDQAtt[i]); + var repStrr = "='" + repStr + "'"; + var strStart = strDataXML.substring(0, strTo); + var strEnd = strDataXML.substring(strTo + arrDQAtt[i].length); + var strDataXML = strStart + repStrr + strEnd; + } + } + + strDataXML = strDataXML.replace(/\"/g, "%26quot;"); + strDataXML = strDataXML.replace(/%(?![\da-f]{2}|[\da-f]{4})/ig, "%25"); + strDataXML = strDataXML.replace(/\&/g, "%26"); + + return strDataXML; + + }, + setDataXML : function(strDataXML) { + // If being set initially + if (this.initialDataSet == false) { + // This method sets the data XML for the chart INITIALLY. + this.addVariable('dataXML', this.encodeDataXML(strDataXML)); + // Update flag + this.initialDataSet = true; + } else { + // Else, we update the chart data using External Interface + // Get reference to chart object + var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this + .getAttribute('id')); + chartObj.setDataXML(strDataXML); + } + }, + setTransparent : function(isTransparent) { + // Sets chart to transparent mode when isTransparent is true (default) + // When no parameter is passed, we assume transparent to be true. + if (typeof isTransparent == "undefined") { + isTransparent = true; + } + // Set the property + if (isTransparent) + this.addParam('WMode', 'transparent'); + else + this.addParam('WMode', 'Opaque'); + }, + + render : function(elementId) { + // First check for installed version of Flash Player - we need a minimum + // of 6 + if ((this.detectFlashVersion == 1) && (this.installedVer.major < 6)) { + if (this.autoInstallRedirect == 1) { + // If we can auto redirect to install the player? + var installationConfirm = window + .confirm("You need Adobe Flash Player 6 (or above) to view the charts. It is a free and lightweight installation from Adobe.com. Please click on Ok to install the same."); + if (installationConfirm) { + window.location = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"; + } else { + return false; + } + } else { + // Else, do not take an action. It means the developer has + // specified a message in the DIV (and probably a link). + // So, expect the developers to provide a course of way to their + // end users. + // window.alert("You need Adobe Flash Player 8 (or above) to + // view the charts. It is a free and lightweight installation + // from Adobe.com. "); + return false; + } + } else { + // Render the chart + var n = (typeof elementId == 'string') ? document + .getElementById(elementId) : elementId; + n.innerHTML = this.getSWFHTML(); + + // Added
    compatibility + // Check if it's added in Mozilla embed array or if already exits + if (!document.embeds[this.getAttribute('id')] + && !window[this.getAttribute('id')]) + window[this.getAttribute('id')] = document.getElementById(this + .getAttribute('id')); + // or else document.forms[formName/formIndex][chartId] + return true; + } + } +} + +/* ---- detection functions ---- */ +infosoftglobal.FusionChartsUtil.getPlayerVersion = function() { + var PlayerVersion = new infosoftglobal.PlayerVersion([ 0, 0, 0 ]); + if (navigator.plugins && navigator.mimeTypes.length) { + var x = navigator.plugins["Shockwave Flash"]; + if (x && x.description) { + PlayerVersion = new infosoftglobal.PlayerVersion(x.description + .replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, + ".").split(".")); + } + } else if (navigator.userAgent + && navigator.userAgent.indexOf("Windows CE") >= 0) { + // If Windows CE + var axo = 1; + var counter = 3; + while (axo) { + try { + counter++; + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + + counter); + PlayerVersion = new infosoftglobal.PlayerVersion([ counter, 0, + 0 ]); + } catch (e) { + axo = null; + } + } + } else { + // Win IE (non mobile) + // Do minor version lookup in IE, but avoid Flash Player 6 crashing + // issues + try { + var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + } catch (e) { + try { + var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + PlayerVersion = new infosoftglobal.PlayerVersion([ 6, 0, 21 ]); + axo.AllowScriptAccess = "always"; // error if player version < + // 6.0.47 (thanks to Michael + // Williams @ Adobe for this + // code) + } catch (e) { + if (PlayerVersion.major == 6) { + return PlayerVersion; + } + } + try { + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + } catch (e) { + } + } + if (axo != null) { + PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable( + "$version").split(" ")[1].split(",")); + } + } + return PlayerVersion; +} +infosoftglobal.PlayerVersion = function(arrVersion) { + this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; + this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; + this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; +} +// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------// +/* Fix for video streaming bug */ +infosoftglobal.FusionChartsUtil.cleanupSWFs = function() { + var objects = document.getElementsByTagName("OBJECT"); + for (var i = objects.length - 1; i >= 0; i--) { + objects[i].style.display = 'none'; + for ( var x in objects[i]) { + if (typeof objects[i][x] == 'function') { + objects[i][x] = function() { + }; + } + } + } +} +// Fixes bug in fp9 +if (infosoftglobal.FusionCharts.doPrepUnload) { + if (!infosoftglobal.unloadSet) { + infosoftglobal.FusionChartsUtil.prepUnload = function() { + __flash_unloadHandler = function() { + }; + __flash_savedUnloadHandler = function() { + }; + window.attachEvent("onunload", + infosoftglobal.FusionChartsUtil.cleanupSWFs); + } + window.attachEvent("onbeforeunload", + infosoftglobal.FusionChartsUtil.prepUnload); + infosoftglobal.unloadSet = true; + } +} +/* Add document.getElementById if needed (mobile IE < 5) */ +if (!document.getElementById && document.all) { + document.getElementById = function(id) { + return document.all[id]; + } +} +/* Add Array.push if needed (ie5) */ +if (Array.prototype.push == null) { + Array.prototype.push = function(item) { + this[this.length] = item; + return this.length; + } +} + +/* Function to return Flash Object from ID */ +infosoftglobal.FusionChartsUtil.getChartObject = function(id) { + var chartRef = null; + if (navigator.appName.indexOf("Microsoft Internet") == -1) { + if (document.embeds && document.embeds[id]) + chartRef = document.embeds[id]; + else + chartRef = window.document[id]; + } else { + chartRef = window[id]; + } + if (!chartRef) + chartRef = document.getElementById(id); + + return chartRef; +} +/* + * Function to update chart's data at client side (FOR FusionCharts vFREE and + * 2.x + */ +infosoftglobal.FusionChartsUtil.updateChartXML = function(chartId, strXML) { + // Get reference to chart object + var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(chartId); + // Set dataURL to null + chartObj.SetVariable("_root.dataURL", ""); + // Set the flag + chartObj.SetVariable("_root.isNewData", "1"); + // Set the actual data + chartObj.SetVariable("_root.newData", strXML); + // Go to the required frame + chartObj.TGotoLabel("/", "JavaScriptHandler"); +} + +/* Aliases for easy usage */ +var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject; +var updateChartXML = infosoftglobal.FusionChartsUtil.updateChartXML; +var FusionCharts = infosoftglobal.FusionCharts; \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/js/charts.js b/ui/src/main/webapp/static/fusion/sample/js/charts.js new file mode 100644 index 0000000..4acb52d --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/js/charts.js @@ -0,0 +1,142 @@ +function drawSingleSeriesChart(tabId, chartId, chartWidth, chartHeight, + chartType, chartData, mme, yyyyMo) { + // define, set the data for each chart, and render them (if indicated) + var myChart = new FusionCharts( + "static/fusion/inc/fusionchart/" + chartType, + "myChartId" + chartId, chartWidth, chartHeight); + + var mmeLabel = "";// mme + ""; + + var chartCaptionId = tabId + "-chartdiv" + chartId + "-label"; + + document.getElementById(chartCaptionId).innerHTML = "Hosted Voice Usage in " + + yyyyMo; + + myChart + .setDataXML("" + + chartData + ""); + myChart.setTransparent(true); + myChart.render(tabId + "-" + "chartdiv" + chartId); + +} + +// gauge charts +function drawGaugeChart(chartId, gaugeIndex, value) { + var myChart = new FusionCharts( + "static/fusion/inc/fusionchart/AngularGauge.swf", "myChartId" + + chartId, "300", "300", "0", "0"); + // CPU for NYCMNYBWLT1 on 201301 : 12.63// + var chartData = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + ""; + + myChart.setDataXML(chartData); + myChart.render("chartdiv" + chartId); +} + +function updateGaugeChart(chartId, gaugeIndex, refreshCount) { + var myChart = getChartFromId("myChartId" + chartId); + var val = 0; + if (gaugeIndex == "10") + val = 12; + else if (gaugeIndex == "20") + val = 15; + else if (gaugeIndex == "30") + val = 52; + else if (gaugeIndex == "40") + val = 42; + myChart.setData(1, val); + myChart.setData(2, val + 20); +} + +function updateGaugeChartWithMMEData(chartId, value) { + var myChart = getChartFromId("myChartId" + chartId); + myChart.setData(1, value); +} + +function updateGaugeChartWithMMEData(chartId, value, yyyyMo, mme) { + var myChart = getChartFromId("myChartId" + chartId); + myChart.setData(1, value); + document.getElementById("cpuYyyyMm").innerHTML = "Hosted Voice Utilization in " + + yyyyMo; + +} + +function drawMultiSeriesChart(tabId, chartId, chartWidth, chartHeight, + chartType) { + var myChart = new FusionCharts( + "static/fusion/inc/fusionchart/" + chartType, + "myChartId" + chartId, chartWidth, chartHeight, "0", "0"); + + myChart.setTransparent(true); + + var chartData = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + ""; + + myChart.setDataXML(chartData); + myChart.render(tabId + "-" + "chartdiv" + chartId); +} diff --git a/ui/src/main/webapp/static/fusion/sample/js/scribble.js b/ui/src/main/webapp/static/fusion/sample/js/scribble.js new file mode 100644 index 0000000..c255863 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/js/scribble.js @@ -0,0 +1,18 @@ +function storeUserScribble(id) { + var scribble = document.getElementById('scribble').innerHTML; + localStorage.setItem('userScribble', scribble); +} + +function getUserScribble() { + if (localStorage.getItem('userScribble')) { + var scribble = localStorage.getItem('userScribble'); + } else { + var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!'; + } + document.getElementById('scribble').innerHTML = scribble; +} + +function clearLocal() { + clear: localStorage.clear(); + return false; +} diff --git a/ui/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css b/ui/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css new file mode 100644 index 0000000..734e296 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/org_chart/css/bootstrap.min.css @@ -0,0 +1,2708 @@ +html, body { + margin: 0; + padding: 0; +} + +h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, + cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, + sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, + legend, button, table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} + +ol, ul { + list-style: none; +} + +q:before, q:after, blockquote:before, blockquote:after { + content: ""; +} + +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted; +} + +a:hover, a:active { + outline: 0; +} + +article, aside, details, figcaption, figure, footer, header, hgroup, nav, + section { + display: block; +} + +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not ([controls] ){ + display: none; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; +} + +button, input, select, textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} + +button, input { + line-height: normal; + *overflow: visible; +} + +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} + +button, input[type="button"], input[type="reset"], input[type="submit"] + { + cursor: pointer; + -webkit-appearance: button; +} + +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; +} + +.container { + width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} + +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} + +.container:after { + clear: both; +} + +.container-fluid { + position: relative; + min-width: 940px; + padding-left: 20px; + padding-right: 20px; + zoom: 1; +} + +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; + zoom: 1; +} + +.container-fluid:after { + clear: both; +} + +.container-fluid>.sidebar { + position: absolute; + top: 0; + left: 20px; + width: 220px; +} + +.container-fluid>.content { + margin-left: 240px; +} + +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} + +a:hover { + color: #00438a; + text-decoration: underline; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.row { + zoom: 1; + margin-left: -20px; +} + +.row:before, .row:after { + display: table; + content: ""; + zoom: 1; +} + +.row:after { + clear: both; +} + +.row>[class*="span"] { + display: inline; + float: left; + margin-left: 20px; +} + +.span1 { + width: 40px; +} + +.span2 { + width: 100px; +} + +.span3 { + width: 160px; +} + +.span4 { + width: 220px; +} + +.span5 { + width: 280px; +} + +.span6 { + width: 340px; +} + +.span7 { + width: 400px; +} + +.span8 { + width: 460px; +} + +.span9 { + width: 520px; +} + +.span10 { + width: 580px; +} + +.span11 { + width: 640px; +} + +.span12 { + width: 700px; +} + +.span13 { + width: 760px; +} + +.span14 { + width: 820px; +} + +.span15 { + width: 880px; +} + +.span16 { + width: 940px; +} + +.span17 { + width: 1000px; +} + +.span18 { + width: 1060px; +} + +.span19 { + width: 1120px; +} + +.span20 { + width: 1180px; +} + +.span21 { + width: 1240px; +} + +.span22 { + width: 1300px; +} + +.span23 { + width: 1360px; +} + +.span24 { + width: 1420px; +} + +.row>.offset1 { + margin-left: 80px; +} + +.row>.offset2 { + margin-left: 140px; +} + +.row>.offset3 { + margin-left: 200px; +} + +.row>.offset4 { + margin-left: 260px; +} + +.row>.offset5 { + margin-left: 320px; +} + +.row>.offset6 { + margin-left: 380px; +} + +.row>.offset7 { + margin-left: 440px; +} + +.row>.offset8 { + margin-left: 500px; +} + +.row>.offset9 { + margin-left: 560px; +} + +.row>.offset10 { + margin-left: 620px; +} + +.row>.offset11 { + margin-left: 680px; +} + +.row>.offset12 { + margin-left: 740px; +} + +.span-one-third { + width: 300px; +} + +.span-two-thirds { + width: 620px; +} + +.offset-one-third { + margin-left: 340px; +} + +.offset-two-thirds { + margin-left: 660px; +} + +p { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} + +p small { + font-size: 11px; + color: #bfbfbf; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: bold; + color: #404040; +} + +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + color: #bfbfbf; +} + +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 36px; +} + +h2 small { + font-size: 14px; +} + +h3, h4, h5, h6 { + line-height: 36px; +} + +h3 { + font-size: 18px; +} + +h3 small { + font-size: 14px; +} + +h4 { + font-size: 16px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} + +ul, ol { + margin: 0 0 18px 25px; +} + +ul ul, ul ol, ol ol, ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; + color: #808080; +} + +ul.unstyled { + list-style: none; + margin-left: 0; +} + +dl { + margin-bottom: 18px; +} + +dl dt, dl dd { + line-height: 18px; +} + +dl dt { + font-weight: bold; +} + +dl dd { + margin-left: 9px; +} + +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} + +strong { + font-style: inherit; + font-weight: bold; +} + +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} + +.muted { + color: #bfbfbf; +} + +blockquote { + margin-bottom: 18px; + border-left: 5px solid #eee; + padding-left: 15px; +} + +blockquote p { + font-size: 14px; + font-weight: 300; + line-height: 18px; + margin-bottom: 0; +} + +blockquote small { + display: block; + font-size: 12px; + font-weight: 300; + line-height: 18px; + color: #bfbfbf; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} + +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} + +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +form { + margin-bottom: 18px; +} + +fieldset { + margin-bottom: 18px; + padding-top: 18px; +} + +fieldset legend { + display: block; + padding-left: 150px; + font-size: 19.5px; + line-height: 1; + color: #404040; + *padding: 0 0 5px 145px; + *line-height: 1.5; +} + +form .clearfix { + margin-bottom: 18px; + zoom: 1; +} + +form .clearfix:before, form .clearfix:after { + display: table; + content: ""; + zoom: 1; +} + +form .clearfix:after { + clear: both; +} + +label, input, select, textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} + +label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + color: #404040; +} + +form .input { + margin-left: 150px; +} + +input[type=checkbox], input[type=radio] { + cursor: pointer; +} + +input, textarea, select, .uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +select { + padding: initial; +} + +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + line-height: normal; + border: none; +} + +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} + +select, input[type=file] { + height: 27px; + *height: auto; + line-height: 27px; + *margin-top: 4px; +} + +select[multiple] { + height: inherit; + background-color: #ffffff; +} + +textarea { + height: auto; +} + +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} + +:-moz-placeholder { + color: #bfbfbf; +} + +::-webkit-input-placeholder { + color: #bfbfbf; +} + +input, textarea { + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} + +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px + rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px + rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px + rgba(82, 168, 236, 0.6); +} + +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} + +form .clearfix.error>label, form .clearfix.error .help-block, form .clearfix.error .help-inline + { + color: #b94a48; +} + +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} + +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on + { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} + +form .clearfix.warning>label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline + { + color: #c09853; +} + +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} + +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus + { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} + +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on + { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} + +form .clearfix.success>label, form .clearfix.success .help-block, form .clearfix.success .help-inline + { + color: #468847; +} + +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} + +form .clearfix.success input:focus, form .clearfix.success textarea:focus + { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} + +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on + { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} + +.input-mini, input.mini, textarea.mini, select.mini { + width: 60px; +} + +.input-small, input.small, textarea.small, select.small { + width: 90px; +} + +.input-medium, input.medium, textarea.medium, select.medium { + width: 150px; +} + +.input-large, input.large, textarea.large, select.large { + width: 210px; +} + +.input-xlarge, input.xlarge, textarea.xlarge, select.xlarge { + width: 270px; +} + +.input-xxlarge, input.xxlarge, textarea.xxlarge, select.xxlarge { + width: 530px; +} + +textarea.xxlarge { + overflow-y: auto; +} + +input.span1, textarea.span1 { + display: inline-block; + float: none; + width: 30px; + margin-left: 0; +} + +input.span2, textarea.span2 { + display: inline-block; + float: none; + width: 90px; + margin-left: 0; +} + +input.span3, textarea.span3 { + display: inline-block; + float: none; + width: 150px; + margin-left: 0; +} + +input.span4, textarea.span4 { + display: inline-block; + float: none; + width: 210px; + margin-left: 0; +} + +input.span5, textarea.span5 { + display: inline-block; + float: none; + width: 270px; + margin-left: 0; +} + +input.span6, textarea.span6 { + display: inline-block; + float: none; + width: 330px; + margin-left: 0; +} + +input.span7, textarea.span7 { + display: inline-block; + float: none; + width: 390px; + margin-left: 0; +} + +input.span8, textarea.span8 { + display: inline-block; + float: none; + width: 450px; + margin-left: 0; +} + +input.span9, textarea.span9 { + display: inline-block; + float: none; + width: 510px; + margin-left: 0; +} + +input.span10, textarea.span10 { + display: inline-block; + float: none; + width: 570px; + margin-left: 0; +} + +input.span11, textarea.span11 { + display: inline-block; + float: none; + width: 630px; + margin-left: 0; +} + +input.span12, textarea.span12 { + display: inline-block; + float: none; + width: 690px; + margin-left: 0; +} + +input.span13, textarea.span13 { + display: inline-block; + float: none; + width: 750px; + margin-left: 0; +} + +input.span14, textarea.span14 { + display: inline-block; + float: none; + width: 810px; + margin-left: 0; +} + +input.span15, textarea.span15 { + display: inline-block; + float: none; + width: 870px; + margin-left: 0; +} + +input.span16, textarea.span16 { + display: inline-block; + float: none; + width: 930px; + margin-left: 0; +} + +input[disabled], select[disabled], textarea[disabled], input[readonly], + select[readonly], textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} + +.actions { + background: #f5f5f5; + margin-top: 18px; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} + +.actions .secondary-action { + float: right; +} + +.actions .secondary-action a { + line-height: 30px; +} + +.actions .secondary-action a:hover { + text-decoration: underline; +} + +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} + +.help-inline { + padding-left: 5px; + *position: relative; + *top: -5px; +} + +.help-block { + display: block; + max-width: 600px; +} + +.inline-inputs { + color: #808080; +} + +.inline-inputs span { + padding: 0 2px 0 1px; +} + +.input-prepend input, .input-append input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-prepend .add-on, .input-append .add-on { + position: relative; + background: #f5f5f5; + border: 1px solid #ccc; + z-index: 2; + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 4px 4px 5px; + margin-right: -1px; + font-weight: normal; + line-height: 18px; + color: #bfbfbf; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-prepend .active, .input-append .active { + background: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on { + *margin-top: 1px; +} + +.input-append input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-append .add-on { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-right: 0; + margin-left: -1px; +} + +.inputs-list { + margin: 0 0 5px; + width: 100%; +} + +.inputs-list li { + display: block; + padding: 0; + width: 100%; +} + +.inputs-list label { + display: block; + float: none; + width: auto; + padding: 0; + margin-left: 20px; + line-height: 18px; + text-align: left; + white-space: normal; +} + +.inputs-list label strong { + color: #808080; +} + +.inputs-list label small { + font-size: 11px; + font-weight: normal; +} + +.inputs-list .inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; +} + +.inputs-list:first-child { + padding-top: 6px; +} + +.inputs-list li+li { + padding-top: 2px; +} + +.inputs-list input[type=radio], .inputs-list input[type=checkbox] { + margin-bottom: 0; + margin-left: -20px; + float: left; +} + +.form-stacked { + padding-left: 20px; +} + +.form-stacked fieldset { + padding-top: 9px; +} + +.form-stacked legend { + padding-left: 0; +} + +.form-stacked label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; +} + +.form-stacked .clearfix { + margin-bottom: 9px; +} + +.form-stacked .clearfix div.input { + margin-left: 0; +} + +.form-stacked .inputs-list { + margin-bottom: 0; +} + +.form-stacked .inputs-list li { + padding-top: 0; +} + +.form-stacked .inputs-list li label { + font-weight: normal; + padding-top: 0; +} + +.form-stacked div.clearfix.error { + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + margin-top: 0; + margin-left: -10px; +} + +.form-stacked .actions { + margin-left: -20px; + padding-left: 20px; +} + +.condensed-table th, .condensed-table td { + padding: 5px 5px 4px; +} + +.bordered-table { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapse; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.bordered-table th+th, .bordered-table td+td, .bordered-table th+td { + border-left: 1px solid #ddd; +} + +.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child + { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} + +.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child + { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} + +.bordered-table tbody tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} + +.bordered-table tbody tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} + +table .span1 { + width: 20px; +} + +table .span2 { + width: 60px; +} + +table .span3 { + width: 100px; +} + +table .span4 { + width: 140px; +} + +table .span5 { + width: 180px; +} + +table .span6 { + width: 220px; +} + +table .span7 { + width: 260px; +} + +table .span8 { + width: 300px; +} + +table .span9 { + width: 340px; +} + +table .span10 { + width: 380px; +} + +table .span11 { + width: 420px; +} + +table .span12 { + width: 460px; +} + +table .span13 { + width: 500px; +} + +table .span14 { + width: 540px; +} + +table .span15 { + width: 580px; +} + +table .span16 { + width: 620px; +} + +.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th + { + background-color: #f9f9f9; +} + +.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th { + background-color: #f5f5f5; +} + +table .header { + cursor: pointer; +} + +table .header:after { + content: ""; + float: right; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: #000 transparent; + visibility: hidden; +} + +table .headerSortUp, table .headerSortDown { + background-color: rgba(141, 192, 219, 0.25); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +} + +table .header:hover:after { + visibility: visible; +} + +table .headerSortDown:after, table .headerSortDown:hover:after { + visibility: visible; + filter: alpha(opacity = 60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} + +table .headerSortUp:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000; + visibility: visible; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: alpha(opacity = 60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} + +table .blue { + color: #049cdb; + border-bottom-color: #049cdb; +} + +table .headerSortUp.blue, table .headerSortDown.blue { + background-color: #ade6fe; +} + +table .green { + color: #46a546; + border-bottom-color: #46a546; +} + +table .headerSortUp.green, table .headerSortDown.green { + background-color: #cdeacd; +} + +table .red { + color: #9d261d; + border-bottom-color: #9d261d; +} + +table .headerSortUp.red, table .headerSortDown.red { + background-color: #f4c8c5; +} + +table .yellow { + color: #ffc40d; + border-bottom-color: #ffc40d; +} + +table .headerSortUp.yellow, table .headerSortDown.yellow { + background-color: #fff6d9; +} + +table .orange { + color: #f89406; + border-bottom-color: #f89406; +} + +table .headerSortUp.orange, table .headerSortDown.orange { + background-color: #fee9cc; +} + +table .purple { + color: #7a43b6; + border-bottom-color: #7a43b6; +} + +table .headerSortUp.purple, table .headerSortDown.purple { + background-color: #e2d5f0; +} + +.topbar { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; +} + +.topbar a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active>a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} + +.topbar h3 { + position: relative; +} + +.topbar h3 a, .topbar .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} + +.topbar p { + margin: 0; + line-height: 40px; +} + +.topbar p a:hover { + background-color: transparent; + color: #ffffff; +} + +.topbar form { + float: left; + margin: 5px 0 0 0; + position: relative; + filter: alpha(opacity = 100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; +} + +.topbar form.pull-right { + float: right; +} + +.topbar input { + background-color: #444; + background-color: rgba(255, 255, 255, 0.3); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: normal; + font-weight: 13px; + line-height: 1; + padding: 4px 9px; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + border: 1px solid #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px + rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px + rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px + rgba(255, 255, 255, 0.25); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} + +.topbar input:-moz-placeholder { + color: #e6e6e6; +} + +.topbar input::-webkit-input-placeholder { + color: #e6e6e6; +} + +.topbar input:hover { + background-color: #bfbfbf; + background-color: rgba(255, 255, 255, 0.5); + color: #ffffff; +} + +.topbar input:focus, .topbar input.focused { + outline: 0; + background-color: #ffffff; + color: #404040; + text-shadow: 0 1px 0 #ffffff; + border: 0; + padding: 5px 10px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.topbar-inner, .topbar .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), + to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), + color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', + endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 + rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 + rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 + rgba(0, 0, 0, 0.1); +} + +.topbar div>ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} + +.topbar div>ul>li, .nav>li { + display: block; + float: left; +} + +.topbar div>ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} + +.topbar div>ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} + +.topbar div>ul .active>a, .nav .active>a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} + +.topbar div>ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} + +.topbar div>ul.secondary-nav .menu-dropdown, .nav.secondary-nav .menu-dropdown, + .topbar div>ul.secondary-nav .dropdown-menu, .nav.secondary-nav .dropdown-menu + { + right: 0; + border: 0; +} + +.topbar div>ul a.menu:hover, .nav a.menu:hover, .topbar div>ul li.open .menu, + .nav li.open .menu, .topbar div>ul .dropdown-toggle:hover, .nav .dropdown-toggle:hover, + .topbar div>ul .dropdown.open .dropdown-toggle, .nav .dropdown.open .dropdown-toggle + { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +.topbar div>ul .menu-dropdown, .nav .menu-dropdown, .topbar div>ul .dropdown-menu, + .nav .dropdown-menu { + background-color: #333; +} + +.topbar div>ul .menu-dropdown a.menu, .nav .menu-dropdown a.menu, + .topbar div>ul .dropdown-menu a.menu, .nav .dropdown-menu a.menu, + .topbar div>ul .menu-dropdown .dropdown-toggle, .nav .menu-dropdown .dropdown-toggle, + .topbar div>ul .dropdown-menu .dropdown-toggle, .nav .dropdown-menu .dropdown-toggle + { + color: #ffffff; +} + +.topbar div>ul .menu-dropdown a.menu.open, .nav .menu-dropdown a.menu.open, + .topbar div>ul .dropdown-menu a.menu.open, .nav .dropdown-menu a.menu.open, + .topbar div>ul .menu-dropdown .dropdown-toggle.open, .nav .menu-dropdown .dropdown-toggle.open, + .topbar div>ul .dropdown-menu .dropdown-toggle.open, .nav .dropdown-menu .dropdown-toggle.open + { + background: #444; + background: rgba(255, 255, 255, 0.05); +} + +.topbar div>ul .menu-dropdown li a, .nav .menu-dropdown li a, .topbar div>ul .dropdown-menu li a, + .nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} + +.topbar div>ul .menu-dropdown li a:hover, .nav .menu-dropdown li a:hover, + .topbar div>ul .dropdown-menu li a:hover, .nav .dropdown-menu li a:hover + { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), + to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), + color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(top, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', + endColorstr='#191919', GradientType=0); + color: #ffffff; +} + +.topbar div>ul .menu-dropdown .active a, .nav .menu-dropdown .active a, + .topbar div>ul .dropdown-menu .active a, .nav .dropdown-menu .active a + { + color: #ffffff; +} + +.topbar div>ul .menu-dropdown .divider, .nav .menu-dropdown .divider, + .topbar div>ul .dropdown-menu .divider, .nav .dropdown-menu .divider + { + background-color: #222; + border-color: #444; +} + +.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a { + padding: 4px 15px; +} + +li.menu, .dropdown { + position: relative; +} + +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity = 50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} + +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + display: none; + position: absolute; + top: 40px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: none; +} + +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} + +.topbar .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} + +.topbar .dropdown-menu a:hover, .dropdown-menu a:hover, .topbar .dropdown-menu a.hover, + .dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), + to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), + color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(top, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', + endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px + rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px + rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px + rgba(0, 0, 0, 0.025); +} + +.open .menu, .dropdown.open .menu, .open .dropdown-toggle, .dropdown.open .dropdown-toggle + { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} + +.open .menu-dropdown, .dropdown.open .menu-dropdown, .open .dropdown-menu, + .dropdown.open .dropdown-menu { + display: block; +} + +.tabs, .pills { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} + +.tabs:before, .pills:before, .tabs:after, .pills:after { + display: table; + content: ""; + zoom: 1; +} + +.tabs:after, .pills:after { + clear: both; +} + +.tabs>li, .pills>li { + float: left; +} + +.tabs>li>a, .pills>li>a { + display: block; +} + +.tabs { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} + +.tabs>li { + position: relative; + margin-bottom: -1px; +} + +.tabs>li>a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.tabs>li>a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} + +.tabs .active>a, .tabs .active>a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} + +.tabs .menu-dropdown, .tabs .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.tabs a.menu:after, .tabs .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} + +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { + border-color: #999; +} + +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after + { + border-top-color: #555; +} + +.pills a { + margin: 5px 3px 5px 0; + padding: 0 15px; + line-height: 30px; + text-shadow: 0 1px 1px #ffffff; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pills a:hover { + color: #ffffff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #00438a; +} + +.pills .active a { + color: #ffffff; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #0069d6; +} + +.pills-vertical>li { + float: none; +} + +.tab-content>.tab-pane, .pill-content>.pill-pane, .tab-content>div, + .pill-content>div { + display: none; +} + +.tab-content>.active, .pill-content>.active { + display: block; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), + to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), + color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', + endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} + +.breadcrumb .active a { + color: #404040; +} + +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 30px; + padding: 60px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} + +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} + +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} + +.page-header { + margin-bottom: 17px; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.page-header h1 { + margin-bottom: 8px; +} + +.btn.danger, .alert-message.danger, .btn.danger:hover, .alert-message.danger:hover, + .btn.error, .alert-message.error, .btn.error:hover, .alert-message.error:hover, + .btn.success, .alert-message.success, .btn.success:hover, + .alert-message.success:hover, .btn.info, .alert-message.info, .btn.info:hover, + .alert-message.info:hover { + color: #ffffff; +} + +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} + +.btn.danger, .alert-message.danger, .btn.error, .alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), + to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), + color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', + endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), + to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), + color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', + endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), + to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), + color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', + endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), + color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', + endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px + rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px + rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px + rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; +} + +.btn:hover { + background-position: 0 -15px; + color: #333; + text-decoration: none; +} + +.btn:focus { + outline: 1px dotted #666; +} + +.btn.primary { + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), + to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), + color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', + endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn.active, .btn :active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px + rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px + rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px + rgba(0, 0, 0, 0.05); +} + +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled= false); + filter: alpha(opacity = 65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled= false); + filter: alpha(opacity = 65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} + +:root .alert-message, :root .btn { + border-radius: 0 \0; +} + +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity = 25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} + +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity = 40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} + +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), + to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), + color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(top, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', + endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} + +.alert-message a { + font-weight: bold; + color: #404040; +} + +.alert-message.danger p a, .alert-message.error p a, .alert-message.success p a, + .alert-message.info p a { + color: #ffffff; +} + +.alert-message h5 { + line-height: 18px; +} + +.alert-message p { + margin-bottom: 0; +} + +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} + +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} + +.alert-message.block-message { + background-image: none; + background-color: #fdf5d9; + filter: progid:DXImageTransform.Microsoft.gradient(enabled= false); + padding: 14px; + border-color: #fceec1; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.alert-message.block-message ul, .alert-message.block-message p { + margin-right: 30px; +} + +.alert-message.block-message ul { + margin-bottom: 0; +} + +.alert-message.block-message li { + color: #404040; +} + +.alert-message.block-message .alert-actions { + margin-top: 5px; +} + +.alert-message.block-message.error, .alert-message.block-message.success, + .alert-message.block-message.info { + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.alert-message.block-message.error { + background-color: #fddfde; + border-color: #fbc7c6; +} + +.alert-message.block-message.success { + background-color: #d1eed1; + border-color: #bfe7bf; +} + +.alert-message.block-message.info { + background-color: #ddf4fb; + border-color: #c6edf9; +} + +.alert-message.block-message.danger p a, .alert-message.block-message.error p a, + .alert-message.block-message.success p a, .alert-message.block-message.info p a + { + color: #404040; +} + +.pagination { + height: 36px; + margin: 18px 0; +} + +.pagination ul { + float: left; + margin: 0; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination li { + display: inline; +} + +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + border-right: 1px solid; + border-right-color: #ddd; + border-right-color: rgba(0, 0, 0, 0.15); + *border-right-color: #ddd; + text-decoration: none; +} + +.pagination a:hover, .pagination .active a { + background-color: #c7eefe; +} + +.pagination .disabled a, .pagination .disabled a:hover { + background-color: transparent; + color: #bfbfbf; +} + +.pagination .next a { + border: 0; +} + +.well { + background-color: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.modal-backdrop { + background-color: #000000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, .modal-backdrop.fade.in { + filter: alpha(opacity = 80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} + +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 11000; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal .close { + margin-top: 7px; +} + +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} + +.modal.fade.in { + top: 50%; +} + +.modal-header { + border-bottom: 1px solid #eee; + padding: 5px 15px; +} + +.modal-body { + padding: 15px; +} + +.modal-body form { + margin-bottom: 0; +} + +.modal-footer { + background-color: #f5f5f5; + padding: 14px 15px 15px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + zoom: 1; + margin-bottom: 0; +} + +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; + zoom: 1; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn { + float: right; + margin-left: 5px; +} + +.modal .popover, .modal .twipsy { + z-index: 12000; +} + +.twipsy { + display: block; + position: absolute; + visibility: visible; + padding: 5px; + font-size: 11px; + z-index: 1000; + filter: alpha(opacity = 80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} + +.twipsy.fade.in { + filter: alpha(opacity = 80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} + +.twipsy.above .twipsy-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} + +.twipsy.left .twipsy-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.twipsy.below .twipsy-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} + +.twipsy.right .twipsy-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} + +.twipsy-inner { + padding: 3px 8px; + background-color: #000000; + color: white; + text-align: center; + max-width: 200px; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.twipsy-arrow { + position: absolute; + width: 0; + height: 0; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + padding: 5px; + display: none; +} + +.popover.above .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} + +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} + +.popover.below .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} + +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} + +.popover .inner { + background: #000000; + background: rgba(0, 0, 0, 0.8); + padding: 3px; + overflow: hidden; + width: 280px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} + +.popover .title { + background-color: #f5f5f5; + padding: 9px 15px; + line-height: 1; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + border-bottom: 1px solid #eee; +} + +.popover .content { + background-color: #ffffff; + padding: 14px; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.popover .content p, .popover .content ul, .popover .content ol { + margin-bottom: 0; +} + +.fade { + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} + +.fade.in { + opacity: 1; +} + +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.label.important { + background-color: #c43c35; +} + +.label.warning { + background-color: #f89406; +} + +.label.success { + background-color: #46a546; +} + +.label.notice { + background-color: #62cffc; +} + +.media-grid { + margin-left: -20px; + margin-bottom: 0; + zoom: 1; +} + +.media-grid:before, .media-grid:after { + display: table; + content: ""; + zoom: 1; +} + +.media-grid:after { + clear: both; +} + +.media-grid li { + display: inline; +} + +.media-grid a { + float: left; + padding: 4px; + margin: 0 0 18px 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.media-grid a img { + display: block; +} + +.media-grid a:hover { + border-color: #0069d6; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/org_chart/css/custom.css b/ui/src/main/webapp/static/fusion/sample/org_chart/css/custom.css new file mode 100644 index 0000000..9d48c0b --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/org_chart/css/custom.css @@ -0,0 +1,98 @@ +body, html, div, p, span, a, h1, h2, h3, h4, h5 { + margin: 0; + padding: 0; +} + +body, html { + width: 100%; +} + +body { + color: white; + font-family: tahoma; + font-weight: lighter; + padding-top: 40px; +} + +body p { + font-size: 14px; +} + +body p a { + font-size: 16px; +} + +h1 { + color: #E05E00; + font-style: italic; +} + +a { + color: #E05E00; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* general */ +.clear { + clear: both; +} + +/* Header */ +.brand { + color: #E05E00 !important; + font-family: georgia; + font-style: italic; +} + +/* list stuff */ +#org { + background-color: white; + margin: 10px; + padding: 10px; +} + +#show-list { + cursor: pointer; +} + +/* bootstrap overrides */ +.alert-message { + margin: 2px 0; +} + +.topbar { + position: absolute; +} + +/* Custom chart styling */ +.jOrgChart { + margin: 10px; + padding: 20px; +} + +/* Custom node styling */ +.jOrgChart .node { + font-weight: bold; + font-size: 14px; + background-color: #D5D6DB; + border-radius: 8px; + border: 5px solid gray; + color: #793a06; + -moz-border-radius: 8px; +} + +.node p { + font-family: tahoma; + font-size: 10px; + line-height: 11px; + padding: 2px; +} + +table { + margin-left: auto; + margin-right: auto; +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css b/ui/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css new file mode 100644 index 0000000..dd86846 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/org_chart/css/prettify.css @@ -0,0 +1,91 @@ +.pln { + color: #000 +} + +@media screen { + .str { + color: #080 + } + .kwd { + color: #008 + } + .com { + color: #800 + } + .typ { + color: #606 + } + .lit { + color: #066 + } + .pun, .opn, .clo { + color: #660 + } + .tag { + color: #008 + } + .atn { + color: #606 + } + .atv { + color: #080 + } + .dec, .var { + color: #606 + } + .fun { + color: red + } +} + +@media print , projection { + .str { + color: #060 + } + .kwd { + color: #006; + font-weight: bold + } + .com { + color: #600; + font-style: italic + } + .typ { + color: #404; + font-weight: bold + } + .lit { + color: #044 + } + .pun, .opn, .clo { + color: #440 + } + .tag { + color: #006; + font-weight: bold + } + .atn { + color: #404 + } + .atv { + color: #060 + } +} + +pre.prettyprint { + padding: 2px; + border: 1px solid #888 +} + +ol.linenums { + margin-top: 0; + margin-bottom: 0 +} + +li.L0, li.L1, li.L2, li.L3, li.L5, li.L6, li.L7, li.L8 { + list-style-type: none +} + +li.L1, li.L3, li.L5, li.L7, li.L9 { + background: #eee +} \ No newline at end of file diff --git a/ui/src/main/webapp/static/fusion/sample/org_chart/prettify.js b/ui/src/main/webapp/static/fusion/sample/org_chart/prettify.js new file mode 100644 index 0000000..eef5ad7 --- /dev/null +++ b/ui/src/main/webapp/static/fusion/sample/org_chart/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p - - - - - - - -
    -
    -

    Committed Submissions

    -
    - -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    - Refresh - - -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
     Id Status Blueprint VersionLayer Desired Timeslot Url of result 
     {{ - submission.submissionId }}{{ - submission.submissionStatus }}{{ - submission.blueprintInstance.blueprint.blueprintName }}{{ - submission.blueprintInstance.version }} - {{ - submission.blueprintInstance.layer }} - Lab: - {{ submission.blueprintInstance.timeslot.lab }} Start date and - time: {{ submission.blueprintInstance.timeslot.startDateTime }} - duration(in sec) : - {{submission.blueprintInstance.timeslot.duration}} - {{ - submission.nexusResultUrl }} -
    -

    - -
    - - - - - - - \ No newline at end of file diff --git a/ui/src/main/webapp/views/findBySubmissionId.html b/ui/src/main/webapp/views/findBySubmissionId.html deleted file mode 100644 index 2900b25..0000000 --- a/ui/src/main/webapp/views/findBySubmissionId.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - -
    -
    -

    Find results by submission

    -
    - - -
    - -
    - -
    - -

    Test info

    -

    -

    Name: {{result.name}}

    -

    Generated: {{result.robot.generated}}

    -

    Generator: {{result.robot.generator}}

    -

    Errors: {{result.robot.errors}}

    - -

    Test Statistics

    -

    - - - - - - - - - - - - - - - - - - - -
    -

    -
     Total statistics Total Pass Fail Pass / Fail 
    {{ - stat.content }}{{ - (stat.fail * 1) + (stat.pass*1) }}{{ - stat.pass }}{{ - stat.fail}} -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - -
    -

    -
     Statistics by Tag Total Pass Fail Pass / Fail 
    {{ - stat.content }}{{ - (stat.fail * 1) + (stat.pass*1) }}{{ - stat.pass }}{{ - stat.fail}} -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - -
    -

    -
     Statistics by Suite Total Pass Fail Pass / Fail 
    {{ - stat.content }}{{ - (stat.fail * 1) + (stat.pass*1) }}{{ - stat.pass }}{{ - stat.fail}} -
    -
    -
    -
    -
    - -
    -
    - - - - diff --git a/ui/src/main/webapp/views/indexMain.html b/ui/src/main/webapp/views/indexMain.html deleted file mode 100644 index 758bb3a..0000000 --- a/ui/src/main/webapp/views/indexMain.html +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/ui/src/main/webapp/views/login.html b/ui/src/main/webapp/views/login.html deleted file mode 100644 index daf5454..0000000 --- a/ui/src/main/webapp/views/login.html +++ /dev/null @@ -1,98 +0,0 @@ - ---> - - - - - - - -
    -
    -

    Blueprint - Validation UI

    -

    Sign In Page

    -
    -
    -
    -
    - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/ui/src/main/webapp/views/newSubmission.html b/ui/src/main/webapp/views/newSubmission.html deleted file mode 100644 index 11c8afa..0000000 --- a/ui/src/main/webapp/views/newSubmission.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - -
    -
    -

    Submission form

    -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - -
    - -
    - - - - - -