FALCON-2118 Proposal for new UI changes changes as described in FALCON-2118
Author: Venkat Ranganathan <[email protected]> Reviewers: Peeyush <[email protected]> Closes #268 from vrangan/FALCON-2118 Project: http://git-wip-us.apache.org/repos/asf/falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/falcon/commit/76dc2e18 Tree: http://git-wip-us.apache.org/repos/asf/falcon/tree/76dc2e18 Diff: http://git-wip-us.apache.org/repos/asf/falcon/diff/76dc2e18 Branch: refs/heads/0.10-refactored-ui Commit: 76dc2e18322b64cea36dc64bbeae5c183c97e7fc Parents: 01a303e Author: Venkat Ranganathan <[email protected]> Authored: Mon Aug 22 10:16:12 2016 +0530 Committer: peeyush b <[email protected]> Committed: Mon Aug 22 10:16:12 2016 +0530 ---------------------------------------------------------------------- falcon-ambari-view/Gruntfile.js | 55 + falcon-ambari-view/README | 53 + falcon-ambari-view/package.json | 38 + falcon-ambari-view/pom.xml | 142 ++ .../src/build/findbugs-exclude.xml | 31 + .../ambari/view/FalconProxyImpersonator.java | 346 +++++ .../src/main/lib/ambari-views-2.4.0.0.1019.jar | Bin 0 -> 27130 bytes .../src/main/resources/WEB-INF/web.xml | 22 + falcon-ambari-view/src/main/resources/view.xml | 39 + .../view/FalconProxyImpersonatorTest.java | 59 + falcon-ui/Gruntfile.js | 19 +- falcon-ui/Installation-steps.txt | 6 +- falcon-ui/app/css/bootstrap/less/dropdowns.less | 8 +- falcon-ui/app/css/bootstrap/less/forms.less | 3 +- .../app/css/bootstrap/less/pagination.less | 2 +- .../bootstrap/less/responsive-utilities.less | 2 +- falcon-ui/app/css/bootstrap/less/tables.less | 10 +- falcon-ui/app/css/bootstrap/less/variables.less | 4 +- falcon-ui/app/css/default-theme.less | 20 + falcon-ui/app/css/fonts/entypo.less | 6 +- falcon-ui/app/css/gray-theme.less | 20 + .../app/css/img/32x32_create-entity-hover.png | Bin 0 -> 1342 bytes falcon-ui/app/css/img/32x32_create-entity.png | Bin 0 -> 1337 bytes falcon-ui/app/css/img/32x32_upload.png | Bin 0 -> 1425 bytes falcon-ui/app/css/img/cloud.png | Bin 0 -> 2816 bytes falcon-ui/app/css/img/falcon-logo.jpg | Bin 0 -> 13903 bytes falcon-ui/app/css/img/falcon.png | Bin 4742 -> 0 bytes falcon-ui/app/css/img/feed.png | Bin 0 -> 4135 bytes .../app/css/img/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../app/css/img/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../app/css/img/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../app/css/img/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../app/css/img/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../app/css/img/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../app/css/img/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../app/css/img/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../app/css/img/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../app/css/img/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes falcon-ui/app/css/img/user.svg | 16 - falcon-ui/app/css/jquery-ui.css | 1225 ++++++++++++++++++ falcon-ui/app/css/main.less | 6 + falcon-ui/app/css/styles/autocomplete-tags.less | 20 +- falcon-ui/app/css/styles/common.less | 399 +++--- falcon-ui/app/css/styles/dataset-form.less | 138 +- falcon-ui/app/css/styles/datasource-form.less | 90 ++ falcon-ui/app/css/styles/default.less | 72 + falcon-ui/app/css/styles/entities-list.less | 99 +- falcon-ui/app/css/styles/feed-form.less | 40 + falcon-ui/app/css/styles/form-pages.less | 515 +++++++- falcon-ui/app/css/styles/gray.less | 65 + falcon-ui/app/css/styles/lineage.less | 50 + falcon-ui/app/css/styles/nav-header.less | 216 ++- .../app/css/styles/ng-tags-input.bootstrap.less | 167 +++ falcon-ui/app/css/styles/ng-tags-input.less | 134 ++ falcon-ui/app/css/styles/popover.less | 6 +- falcon-ui/app/css/styles/progress-bar.less | 42 +- falcon-ui/app/css/styles/server-messages.less | 13 + falcon-ui/app/css/styles/snapshot-form.less | 52 + falcon-ui/app/css/styles/white.less | 65 + falcon-ui/app/css/variables.less | 93 +- falcon-ui/app/css/white-theme.less | 20 + falcon-ui/app/html/authenticating.html | 2 +- .../html/cluster/clusterFormGeneralStepTpl.html | 314 +++-- .../html/cluster/clusterFormSummaryStepTpl.html | 63 +- falcon-ui/app/html/cluster/clusterFormTpl.html | 115 +- falcon-ui/app/html/cluster/clusterSummary.html | 77 ++ .../html/dataset/datasetFormGeneralStepTpl.html | 1200 +++++++++-------- .../html/dataset/datasetFormSummaryStepTpl.html | 235 ++-- falcon-ui/app/html/dataset/datasetFormTpl.html | 50 +- falcon-ui/app/html/dataset/datasetSummary.html | 209 +++ .../datasourceFormAdvancedStepTpl.html | 72 + .../datasourceFormGeneralStepTpl.html | 355 +++++ .../datasourceFormSummaryStepTpl.html | 113 ++ .../app/html/datasource/datasourceFormTpl.html | 96 ++ .../app/html/datasource/datasourceSummary.html | 95 ++ .../app/html/directives/aclPermissions.html | 45 + .../html/directives/dependenciesGraphDv.html | 5 +- .../app/html/directives/entitiesListDv.html | 8 +- .../html/directives/entitiesSearchListDv.html | 44 +- .../html/directives/feedFormHdfsStorage.html | 139 ++ .../html/directives/feedFormHiveStorage.html | 132 ++ .../app/html/directives/instancesListDv.html | 52 +- .../app/html/directives/lineageGraphDv.html | 8 +- falcon-ui/app/html/directives/navDv.html | 272 +++- .../app/html/directives/serverMessagesDv.html | 2 +- .../app/html/directives/timeZoneSelectDv.html | 15 +- falcon-ui/app/html/entityDetailsTpl.html | 87 +- falcon-ui/app/html/entitySummary.html | 8 +- falcon-ui/app/html/error.html | 37 + .../app/html/feed/feedFormAdvancedStepTpl.html | 166 +++ .../html/feed/feedFormClusterDetailsTpl.html | 151 +++ .../html/feed/feedFormClusterPartitionsTpl.html | 44 + .../app/html/feed/feedFormClustersStepTpl.html | 256 ++-- .../app/html/feed/feedFormDataSourceTpl.html | 148 +++ .../app/html/feed/feedFormGeneralStepTpl.html | 523 ++++++-- .../app/html/feed/feedFormLocationStepTpl.html | 50 +- .../html/feed/feedFormPropertiesStepTpl.html | 243 ++-- .../app/html/feed/feedFormSummaryStepTpl.html | 231 ++-- falcon-ui/app/html/feed/feedFormTpl.html | 123 +- falcon-ui/app/html/feed/feedSummary.html | 119 +- falcon-ui/app/html/formsTpl.html | 2 +- falcon-ui/app/html/instanceDetails.html | 26 +- falcon-ui/app/html/mainTpl.html | 161 ++- .../process/processFormAdvancedStepTpl.html | 183 +++ .../process/processFormClustersStepTpl.html | 117 +- .../html/process/processFormGeneralStepTpl.html | 600 +++++++-- .../processFormInputsAndOutputsStepTpl.html | 87 +- .../process/processFormPropertiesStepTpl.html | 87 +- .../html/process/processFormSummaryStepTpl.html | 263 ++-- falcon-ui/app/html/process/processFormTpl.html | 123 +- falcon-ui/app/html/process/processSummary.html | 43 +- .../snapshot/snapshotFormAdvancedStepTpl.html | 194 +++ .../snapshot/snapshotFormGeneralStepTpl.html | 505 ++++++++ .../snapshot/snapshotFormSummaryStepTpl.html | 157 +++ .../app/html/snapshot/snapshotFormTpl.html | 50 + .../app/html/snapshot/snapshotSummary.html | 133 ++ falcon-ui/app/index.html | 10 +- falcon-ui/app/js/app.js | 269 +++- .../js/controllers/cluster/cluster-module.js | 265 +++- falcon-ui/app/js/controllers/controllers.js | 5 +- .../app/js/controllers/dashboard-controller.js | 164 +-- .../controllers/dataset/dataset-controller.js | 530 ++------ .../datasource-advanced-controller.js | 34 + ...datasource-general-information-controller.js | 141 ++ .../controllers/datasource/datasource-module.js | 33 + .../datasource/datasource-root-ctrl.js | 249 ++++ .../datasource/datasource-summary-controller.js | 39 + .../app/js/controllers/entity/entity-details.js | 120 +- .../app/js/controllers/entity/entity-module.js | 22 +- .../js/controllers/entity/instance-details.js | 7 +- .../feed/feed-advanced-controller.js | 34 + .../feed/feed-clusters-controller.js | 135 +- .../feed/feed-general-information-controller.js | 127 +- .../feed/feed-location-controller.js | 13 - .../app/js/controllers/feed/feed-root-ctrl.js | 224 +++- .../controllers/feed/feed-summary-controller.js | 12 +- .../app/js/controllers/header-controller.js | 47 +- .../process/process-advanced-ctrl.js | 34 + .../process/process-clusters-ctrl.js | 6 +- .../process/process-general-information-ctrl.js | 141 +- .../js/controllers/process/process-root-ctrl.js | 120 +- .../controllers/process/process-summary-ctrl.js | 39 - falcon-ui/app/js/controllers/root-controller.js | 157 ++- .../controllers/snapshot/snapshot-controller.js | 262 ++++ falcon-ui/app/js/controllers/themeController.js | 31 + falcon-ui/app/js/directives/acl-permissions.js | 103 ++ falcon-ui/app/js/directives/chart.js | 4 +- falcon-ui/app/js/directives/check-name.js | 184 ++- .../app/js/directives/dependencies-graph.js | 288 ++-- falcon-ui/app/js/directives/directives.js | 285 +++- .../app/js/directives/entities-search-list.js | 86 +- .../js/directives/feed-cluster-partitions.js | 119 ++ falcon-ui/app/js/directives/instances-list.js | 510 +++----- .../app/js/directives/interface-endpoint.js | 85 ++ falcon-ui/app/js/directives/lineage-graph.js | 4 +- falcon-ui/app/js/directives/ng-tags-input.js | 4 +- falcon-ui/app/js/directives/server-messages.js | 45 +- falcon-ui/app/js/directives/tooltip.js | 24 +- .../app/js/directives/validation-message.js | 45 +- falcon-ui/app/js/lib/angular-ngStorage.js | 161 +++ falcon-ui/app/js/lib/focusIf.min.js | 1 + falcon-ui/app/js/lib/jquery-ui.min.js | 13 + falcon-ui/app/js/lib/jquery.mask.min.js | 12 + falcon-ui/app/js/lib/popover.js | 20 +- falcon-ui/app/js/lib/xml2json.min.js | 1095 ++++++++-------- falcon-ui/app/js/services/common/date-helper.js | 266 +++- falcon-ui/app/js/services/common/falcon-api.js | 75 +- .../app/js/services/common/route-helper.js | 46 + falcon-ui/app/js/services/common/server-api.js | 49 +- .../app/js/services/common/tooltip-messages.js | 117 ++ .../js/services/common/validation-service.js | 120 +- .../js/services/common/xml-to-json-service.js | 9 + .../app/js/services/entity/entity-details.js | 64 + .../app/js/services/entity/entity-factory.js | 272 +++- .../app/js/services/entity/entity-model.js | 135 +- .../app/js/services/entity/entity-scheduler.js | 122 ++ .../app/js/services/entity/entity-serializer.js | 555 +++++++- .../services/extension/extension-serializer.js | 415 ++++++ falcon-ui/app/js/services/services.js | 16 +- .../test/controllers/HeaderControllerSpec.js | 10 +- .../controllers/cluster/cluster-moduleSpec.js | 42 +- .../FeedGeneralInformationControllerSpec.js | 1 + .../feed/FeedLocationControllerSpec.js | 3 +- .../test/controllers/feed/FeedRootCtrlSpec.js | 32 +- .../feed/FeedSummaryControllerSpec.js | 4 +- .../process/ProcessClustersCtrlSpec.js | 8 +- .../ProcessGeneralInformationCtrlSpec.js | 39 +- .../controllers/process/ProcessRootCtrlSpec.js | 81 +- .../process/ProcessSummaryCtrlSpec.js | 65 +- falcon-ui/app/test/e2e/protractor.js | 20 +- .../app/test/services/EntitySerializerSpec.js | 138 +- .../app/test/services/ValdationServiceSpec.js | 2 +- falcon-ui/express-data/mockData.js | 52 +- falcon-ui/karma.conf.js | 18 - falcon-ui/pom.xml | 29 +- falcon-ui/server.js | 28 +- pom.xml | 1 + 198 files changed, 17112 insertions(+), 5143 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/Gruntfile.js ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/Gruntfile.js b/falcon-ambari-view/Gruntfile.js new file mode 100644 index 0000000..06ae4ea --- /dev/null +++ b/falcon-ambari-view/Gruntfile.js @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +(function () { + "use strict"; + + module.exports = function (grunt) { + + grunt.initConfig({ + + scp: { + options: { + host: 'sandbox.hortonworks.com', + username: 'root', + password: 'hadoop' + }, + + sandbox: { + files: [ + { + cwd: 'target', + src: '*.jar', + filter: 'isFile', + // path on the server + dest: '/var/lib/ambari-server/resources/views' + } + ] + } + } + + }); + + grunt.registerTask('deploy', [ + 'scp' + ]); + + grunt.loadNpmTasks('grunt-scp'); + + }; + +}()); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/README ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/README b/falcon-ambari-view/README new file mode 100644 index 0000000..07cb13b --- /dev/null +++ b/falcon-ambari-view/README @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Falcon-Ambari-UI +========= +Web UI inside ambari for the Falcon-UI + +To clone the repository +=============================== +- git clone https://github.com/hortonworks/falcon.git +- git checkout dal + + +Before starting +=============== +NodeJs , npm, Grunt must be installed in the local pc. + +- From git root cd to /falcon-ui +- npm install (this will install all the app related node modules) + + +To deploy to the sandbox (v2-2) +=============================== +- Deploy ambari view in order to generate falcon-ambari-view-0.7-incubating-SNAPSHOT.jar: + 1. cd falcon-ui + 2. grunt ambariview + 3. cd .. + 4. cd falcon-ambari-view + 5. mvn clean install + 6. falcon-ambari-view-0.7-incubating-SNAPSHOT.jar will be generated inside the taget directory + +- Upload falcon-ambari-view-0.7-incubating-SNAPSHOT.jar to /var/lib/ambari-server/resources/views/ +- Restart ambari server +- Go to ambari admin -> Manage Ambari -> Falcon Ambari View -> Create Instance +- Enter the API URL in the falcon.service.uri property + +Important! +Security/Kerberos must be enabled, otherwise the services will ask for user.name param http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/package.json ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/package.json b/falcon-ambari-view/package.json new file mode 100644 index 0000000..1aa99d4 --- /dev/null +++ b/falcon-ambari-view/package.json @@ -0,0 +1,38 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +{ + "name": "falcon-ambari-view", + "version": "1.0.0", + "description": "UI to communicate with the ambari views", + "author": "Apache Foundation", + "license": "ISC", + "devDependencies": { + "grunt": "~0.4.4", + "grunt-concurrent": "^1.0.0", + "grunt-contrib-clean": "^0.6.0", + "grunt-contrib-concat": "^0.5.0", + "grunt-contrib-copy": "~0.5.0", + "grunt-contrib-csslint": "~0.2.0", + "grunt-contrib-jshint": "~0.10.0", + "grunt-contrib-less": "~0.11.0", + "grunt-contrib-uglify": "~0.4.0", + "grunt-contrib-watch": "~0.6.1", + "grunt-scp": "^0.1.7" + } +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/pom.xml ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/pom.xml b/falcon-ambari-view/pom.xml new file mode 100644 index 0000000..00176b5 --- /dev/null +++ b/falcon-ambari-view/pom.xml @@ -0,0 +1,142 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor + license agreements. See the NOTICE file distributed with this work for additional + information regarding copyright ownership. The ASF licenses this file to + You under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of + the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required + by applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + OF ANY KIND, either express or implied. See the License for the specific + language governing permissions and limitations under the License. --> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.falcon</groupId> + <artifactId>falcon-main</artifactId> + <version>0.10</version> + </parent> + + <artifactId>falcon-ambari-view</artifactId> + <packaging>jar</packaging> + <name>Apache Falcon Ambari Views Integration</name> + <description>Apache Falcon UI Application</description> + + + + <dependencies> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-client</artifactId> + <version>${jersey.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-json</artifactId> + </dependency> + <dependency> + <groupId>javax.inject</groupId> + <artifactId>javax.inject</artifactId> + <version>1</version> + </dependency> + + <!-- Unit testing ====================================================== --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>1.9.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + </dependency> + <dependency> + <groupId>com.google.inject</groupId> + <artifactId>guice</artifactId> + <version>4.1.0</version> + </dependency> + <dependency> + <groupId>org.apache.ambari.contrib.views</groupId> + <artifactId>ambari-views</artifactId> + <version>2.4.0.0.1019</version> + <scope>system</scope> + <systemPath>${basedir}/src/main/lib/ambari-views-2.4.0.0.1019.jar</systemPath> + </dependency> + </dependencies> + + <build> + + <plugins> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.12</version> + </plugin> + + <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <configuration> + <excludes> + <exclude>package.json</exclude> + <exclude>src/main/resources/ui/css/**</exclude> + <exclude>src/main/resources/ui/js/**</exclude> + <exclude>src/main/resources/ui/config/**</exclude> + </excludes> + </configuration> + </plugin> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <phase>generate-resources</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/lib</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + + <resources> + <resource> + <directory>src/main/resources/ui/</directory> + <filtering>false</filtering> + </resource> + <resource> + <directory>src/main/resources/</directory> + <filtering>false</filtering> + <includes> + <include>view.xml</include> + </includes> + </resource> + <resource> + <targetPath>WEB-INF/lib</targetPath> + <filtering>false</filtering> + <directory>target/lib</directory> + </resource> + </resources> + </build> + +</project> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/build/findbugs-exclude.xml ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/build/findbugs-exclude.xml b/falcon-ambari-view/src/build/findbugs-exclude.xml new file mode 100644 index 0000000..d548c0e --- /dev/null +++ b/falcon-ambari-view/src/build/findbugs-exclude.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<FindBugsFilter> + + <!-- + Disable encoding as this might give an impression that Falcon code base is + "Internationalization" ready, but we haven't done anything consciously to guarantee that. + --> + <Match> + <Bug pattern="DM_DEFAULT_ENCODING" /> + </Match> + + <Match> + <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" /> + </Match> +</FindBugsFilter> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java b/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java new file mode 100644 index 0000000..15b0997 --- /dev/null +++ b/falcon-ambari-view/src/main/java/org/apache/falcon/ambari/view/FalconProxyImpersonator.java @@ -0,0 +1,346 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.falcon.ambari.view; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import com.google.inject.Singleton; + +import javax.inject.Inject; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +import org.apache.ambari.view.URLStreamProvider; +import org.apache.ambari.view.ViewContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * This is a class used to bridge the communication between the falcon-ui and + * the falcon API executing inside ambari. + */ + +@Singleton +public class FalconProxyImpersonator { + private static final Logger LOG = LoggerFactory + .getLogger(FalconProxyImpersonator.class); + private static final String GET_METHOD = "GET"; + private static final String POST_METHOD = "POST"; + private static final String DELETE_METHOD = "DELETE"; + + private static final String FALCON_ERROR = "<result><status>FAILED</status>"; + private static final String[] FORCE_JSON_RESPONSE = { "/entities/list/", "admin/version", }; + + public static final String VIEW_KERBEROS_PRINCIPAL = "view.kerberos.principal"; + public static final String VIEW_KERBEROS_PRINCIPAL_KEYTAB = "view.kerberos.principal.keytab"; + + private ViewContext viewContext; + + /** + * Constructor to get the default viewcontext. + * @param viewContext + */ + @Inject + public FalconProxyImpersonator(ViewContext viewContext) { + this.viewContext = viewContext; + } + + /** + * Method to set the ambari user. + * @param headers + * @param ui + * @return + */ + @GET + @Path("/") + public Response setUser(@Context HttpHeaders headers, @Context UriInfo ui) { + try { + String userName = viewContext.getUsername(); + return Response.ok(userName).type(getResponseType(userName)) + .build(); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); + return Response.status(Response.Status.BAD_REQUEST) + .entity(ex.toString()).build(); + } + } + + /** + * Method to attend all the GET calls. + * @param headers + * @param ui + * @return + */ + @GET + @Path("/{path: .*}") + public Response getUsage(@Context HttpHeaders headers, @Context UriInfo ui) { + try { + String serviceURI = buildURI(ui); + return consumeService(headers, serviceURI, GET_METHOD, null); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); + return Response.status(Response.Status.BAD_REQUEST) + .entity(ex.toString()).build(); + } + } + + /** + * Method to attend all the POST calls. + * @param xml + * @param headers + * @param ui + * @return + * @throws IOException + */ + @POST + @Path("/{path: .*}") + public Response handlePost(String xml, @Context HttpHeaders headers, + @Context UriInfo ui) throws IOException { + try { + String serviceURI = buildURI(ui); + return consumeService(headers, serviceURI, POST_METHOD, xml); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); + return Response.status(Response.Status.BAD_REQUEST) + .entity(ex.toString()).build(); + } + } + + /** + * Method to attend all the DELETE calls. + * @param headers + * @param ui + * @return + * @throws IOException + */ + @DELETE + @Path("/{path: .*}") + public Response handleDelete(@Context HttpHeaders headers, + @Context UriInfo ui) throws IOException { + try { + String serviceURI = buildURI(ui); + return consumeService(headers, serviceURI, DELETE_METHOD, null); + } catch (Exception ex) { + LOG.error(ex.getMessage(), ex); + return Response.status(Response.Status.BAD_REQUEST) + .entity(ex.toString()).build(); + } + } + + /** + * Method set the parametters and cast them to a String. + * @param ui + * @return + */ + private String buildURI(UriInfo ui) { + String serviceURI = getFalconURL(); + serviceURI += getUIURI(ui); + StringBuilder urlBuilder = new StringBuilder(serviceURI); + MultivaluedMap<String, String> parameters = ui.getQueryParameters(); + boolean firstEntry = true; + for (Map.Entry<String, List<String>> entry : parameters.entrySet()) { + if (firstEntry) { + urlBuilder.append("?"); + } else { + urlBuilder.append("&"); + } + boolean firstVal = true; + for (String val : entry.getValue()) { + urlBuilder.append(firstVal ? "" : "&").append(entry.getKey()) + .append("=").append(val); + firstVal = false; + } + firstEntry = false; + } + return urlBuilder.toString(); + } + + private String getUIURI(UriInfo uriInfo) { + String uriPath = uriInfo.getAbsolutePath().getPath(); + int index = uriPath.indexOf("proxy/") + 5; + return uriPath.substring(index); + } + + /** + * Method to consume the API from the URLStreamProvider. + * @param headers + * @param urlToRead + * @param method + * @param xml + * @return + * @throws Exception + */ + private Response consumeService(HttpHeaders headers, String urlToRead, + String method, String xml) throws Exception { + Response response; + URLStreamProvider streamProvider = viewContext.getURLStreamProvider(); + Map<String, String> newHeaders = getHeaders(headers); + newHeaders.put("user.name", viewContext.getUsername()); + + if (checkForceJsonRepsonse(urlToRead, newHeaders)) { + newHeaders.put("Accept", MediaType.APPLICATION_JSON); + } + LOG.info(String.format("Falcon Url[%s]", urlToRead)); + InputStream stream = null; + if (isSecurityEnabled()) { + stream = streamProvider.readAsCurrent(urlToRead, method, xml, + newHeaders); + } else { + stream = streamProvider + .readFrom(urlToRead, method, xml, newHeaders); + } + + String sresponse = getStringFromInputStream(stream); + + if (sresponse.contains(FALCON_ERROR) + || sresponse.contains(Response.Status.BAD_REQUEST.name())) { + response = Response.status(Response.Status.BAD_REQUEST) + .entity(sresponse).type(MediaType.TEXT_PLAIN).build(); + } else { + return Response.status(Response.Status.OK).entity(sresponse) + .type(getResponseType(sresponse)).build(); + } + + return response; + } + + private boolean isSecurityEnabled() { + return !"simple".equals(viewContext.getProperties().get( + "falcon.authentication.type")); + } + + private String getFalconURL() { + String falconUri = ""; + if (viewContext.getCluster() != null) { + String tlsEnabled = viewContext.getCluster().getConfigurationValue( + "falcon_startup.properties", "falcon.enableTLS"); + String scheme = Boolean.parseBoolean(tlsEnabled) ? "https" : "http"; + String falconHost = viewContext.getCluster() + .getHostsForServiceComponent("FALCON", "FALCON_SERVER") + .get(0); + String falconPort = viewContext.getCluster().getConfigurationValue( + "falcon-env", "falcon_port"); + falconUri = scheme + "://" + falconHost + ":" + falconPort; + + } else { + falconUri = viewContext.getProperties().get("falcon.service.uri"); + } + LOG.info("Falcon URI==" + falconUri); + return falconUri; + + } + + /** + * Method to read the response and send it to the front. + * @param is + * @return + */ + private String getStringFromInputStream(InputStream is) { + + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + + String line; + try { + br = new BufferedReader(new InputStreamReader(is)); + while ((line = br.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + LOG.error(e.getMessage(), e); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + LOG.error(e.getMessage(), e); + } + } + } + return sb.toString(); + } + + /** + * Method to cast the response type. + * @param response + * @return + */ + private String getResponseType(String response) { + if (response.startsWith("{")) { + return MediaType.TEXT_PLAIN; + } else if (response.startsWith("<")) { + return MediaType.TEXT_XML; + } else { + return MediaType.TEXT_PLAIN; + } + } + + private boolean checkForceJsonRepsonse(String urlToRead, + Map<String, String> headers) throws Exception { + for (int i = 0; i < FORCE_JSON_RESPONSE.length; i++) { + if (urlToRead.contains(FORCE_JSON_RESPONSE[i])) { + return true; + } + } + return false; + } + + private Map<String, String> getHeaders(HttpHeaders headers) { + MultivaluedMap<String, String> requestHeaders = headers + .getRequestHeaders(); + Set<Entry<String, List<String>>> headerEntrySet = requestHeaders + .entrySet(); + HashMap<String, String> headersMap = new HashMap<String, String>(); + for (Entry<String, List<String>> headerEntry : headerEntrySet) { + String key = headerEntry.getKey(); + List<String> values = headerEntry.getValue(); + headersMap.put(key, strJoin(values, ",")); + } + return headersMap; + } + + // TODO use one of libraries. + private String strJoin(List<String> strings, String separator) { + + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0, il = strings.size(); i < il; i++) { + if (i > 0) { + stringBuilder.append(separator); + } + stringBuilder.append(strings.get(i)); + } + return stringBuilder.toString(); + } + +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar b/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar new file mode 100644 index 0000000..6865744 Binary files /dev/null and b/falcon-ambari-view/src/main/lib/ambari-views-2.4.0.0.1019.jar differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/main/resources/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/main/resources/WEB-INF/web.xml b/falcon-ambari-view/src/main/resources/WEB-INF/web.xml new file mode 100644 index 0000000..aad4c20 --- /dev/null +++ b/falcon-ambari-view/src/main/resources/WEB-INF/web.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. Kerberos, LDAP, Custom. Binary/Htt +--> +<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" + version="3.1"> +</web-app> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/main/resources/view.xml ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/main/resources/view.xml b/falcon-ambari-view/src/main/resources/view.xml new file mode 100644 index 0000000..1a8d914 --- /dev/null +++ b/falcon-ambari-view/src/main/resources/view.xml @@ -0,0 +1,39 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<view> + <name>Falcon</name> + <label>Falcon View</label> + <version>1.1.0</version> + <build>${env.BUILD_NUMBER}</build> + <resource> + <name>proxy</name> + <service-class>org.apache.falcon.ambari.view.FalconProxyImpersonator</service-class> + </resource> + <parameter> + <name>falcon.service.uri</name> + <description>The URI to which the falcon services will route. Default: "http://sandbox.hortonworks.com:15000"</description> + <required>false</required> + <cluster-config>fake</cluster-config> + </parameter> + <parameter> + <name>falcon.authentication.type</name> + <description>Authentication Type(simple|kerberos)</description> + <required>false</required> + <default-value>simple</default-value> + <cluster-config>falcon_startup.properties/falcon.authentication.type</cluster-config> + </parameter> +</view> http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java ---------------------------------------------------------------------- diff --git a/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java b/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java new file mode 100644 index 0000000..e01fed5 --- /dev/null +++ b/falcon-ambari-view/src/test/java/org/apache/falcon/ambari/view/FalconProxyImpersonatorTest.java @@ -0,0 +1,59 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.falcon.ambari.view; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import org.apache.ambari.view.ViewContext; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; + +/** + * This is a class used to test FalconProxyImpersonator to bridge the communication between the falcon-ui + * and the falcon API executing inside ambari. + */ +public class FalconProxyImpersonatorTest { + + private ViewContext viewContext; + private HttpHeaders headers; + private UriInfo ui; + + private FalconProxyImpersonator impersonator; + + @Before + public void setUp() throws Exception { + viewContext = mock(ViewContext.class); + headers = mock(HttpHeaders.class); + ui = mock(UriInfo.class); + impersonator = new FalconProxyImpersonator(viewContext); + } + + @Test + public void testSetUser(){ + Mockito.when(viewContext.getUsername()).thenReturn("ambari-qa"); + Response response = impersonator.setUser(headers, ui); + assertEquals(200, response.getStatus()); + } + +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/Gruntfile.js ---------------------------------------------------------------------- diff --git a/falcon-ui/Gruntfile.js b/falcon-ui/Gruntfile.js index 112ad49..2ba3343 100644 --- a/falcon-ui/Gruntfile.js +++ b/falcon-ui/Gruntfile.js @@ -24,7 +24,7 @@ copy: { resources: { cwd: 'app', - src: ['html/**/*.html', 'index.html', 'config/*'], + src: ['html/**/*.html', 'index.html', 'config/*', 'css/jquery-ui.css'], dest: 'dist/', expand: true }, @@ -34,6 +34,12 @@ dest: 'dist/', expand: true }, + webapp : { + cwd: 'dist', + src: ['**/*.*'], + dest: '../webapp/src/main/webapp/', + expand: true + }, ambariview : { cwd: 'dist', src: ['**/*.*'], @@ -54,6 +60,7 @@ 'app/js/lib/jquery-1.11.1.min.js', 'app/js/lib/angular.min.js', 'app/js/lib/angular-cookies.min.js', + 'app/js/lib/angular-ngStorage.js', 'app/js/lib/uirouter.min.js', 'app/js/lib/ui-bootstrap-tpls-0.11.0.min.js', 'app/js/lib/d3.min.js', @@ -65,7 +72,10 @@ 'app/js/lib/ng-tags-input.js', 'app/js/lib/popover.js', 'app/js/lib/ng-mask.min.js', - 'app/js/lib/dagre.min.js' + 'app/js/lib/dagre.min.js', + 'app/js/lib/focusIf.min.js', + 'app/js/lib/jquery.mask.min.js', + 'app/js/lib/jquery-ui.min.js' //'app/js/lib/bootstrap.notify.js' ], dest: 'dist/js/vendor.min.js' @@ -151,7 +161,10 @@ ieCompat: false }, files: { - 'dist/css/main.css': 'app/css/main.less' + 'dist/css/dark-theme.css': 'app/css/main.less', + 'dist/css/white-theme.css': 'app/css/white-theme.less', + 'dist/css/gray-theme.css': 'app/css/gray-theme.less', + 'dist/css/default-theme.css': 'app/css/default-theme.less' } } }, http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/Installation-steps.txt ---------------------------------------------------------------------- diff --git a/falcon-ui/Installation-steps.txt b/falcon-ui/Installation-steps.txt index 3f9968d..d4d3fb5 100644 --- a/falcon-ui/Installation-steps.txt +++ b/falcon-ui/Installation-steps.txt @@ -44,4 +44,8 @@ Then navigate to localhost:15000 ------------------- - grunt dev This will launch an express server with the falcon-ui to localhost:3000 -(You can test there all UI related behaviours and express will mock all falcon REST calls) \ No newline at end of file +(You can test there all UI related behaviours and express will mock all falcon REST calls) + + +## Font/Icons +http://web.archive.org/web/20140912210715/http://entypo.com/characters/ \ No newline at end of file http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/dropdowns.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/dropdowns.less b/falcon-ui/app/css/bootstrap/less/dropdowns.less index 3eb7fc0..aed4d90 100644 --- a/falcon-ui/app/css/bootstrap/less/dropdowns.less +++ b/falcon-ui/app/css/bootstrap/less/dropdowns.less @@ -33,8 +33,8 @@ z-index: @zindex-dropdown; display: none; // none by default, but block on "open" of the menu float: left; - min-width: 160px; - padding: 5px 0; + min-width: 60px; + padding: 0px 0; margin: 2px 0 0; // override default ul list-style: none; font-size: @font-size-base; @@ -213,3 +213,7 @@ } } +.dropdown-submenu { + list-style: none; + padding: 0 0 0 10px; +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/forms.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/forms.less b/falcon-ui/app/css/bootstrap/less/forms.less index 2c5e9bf..6c4c6bb 100644 --- a/falcon-ui/app/css/bootstrap/less/forms.less +++ b/falcon-ui/app/css/bootstrap/less/forms.less @@ -51,8 +51,7 @@ input[type="search"] { // Position radios and checkboxes better input[type="radio"], input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; // IE8-9 + vertical-align: middle; line-height: normal; } http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/pagination.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/pagination.less b/falcon-ui/app/css/bootstrap/less/pagination.less index b2856ae..9bcd05b 100644 --- a/falcon-ui/app/css/bootstrap/less/pagination.less +++ b/falcon-ui/app/css/bootstrap/less/pagination.less @@ -4,7 +4,7 @@ .pagination { display: inline-block; padding-left: 0; - margin: @line-height-computed 0; + margin-bottom: -5px; border-radius: @border-radius-base; > li { http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/responsive-utilities.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/responsive-utilities.less b/falcon-ui/app/css/bootstrap/less/responsive-utilities.less index b1db31d..1862e71 100644 --- a/falcon-ui/app/css/bootstrap/less/responsive-utilities.less +++ b/falcon-ui/app/css/bootstrap/less/responsive-utilities.less @@ -126,7 +126,7 @@ } } .visible-lg-inline-block { - @media (min-width: @screen-lg-min) { + @media (min-width: @screen-xs-min) { display: inline-block !important; } } http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/tables.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/tables.less b/falcon-ui/app/css/bootstrap/less/tables.less index 2e1ef33..76b51de 100644 --- a/falcon-ui/app/css/bootstrap/less/tables.less +++ b/falcon-ui/app/css/bootstrap/less/tables.less @@ -26,7 +26,7 @@ th { > td { padding: @table-cell-padding; line-height: @line-height-base; - vertical-align: top; + vertical-align: middle; border-top: 1px solid @table-border-color; } } @@ -231,3 +231,11 @@ table { } } } + +.evenRow { + background: #fff; +} + +.oddRow { + background: #F9F9F9; +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/bootstrap/less/variables.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/bootstrap/less/variables.less b/falcon-ui/app/css/bootstrap/less/variables.less index 582f0f8..6298c5f 100644 --- a/falcon-ui/app/css/bootstrap/less/variables.less +++ b/falcon-ui/app/css/bootstrap/less/variables.less @@ -119,7 +119,7 @@ //## Customizes the `.table` component with basic values, each used across all table variations. //** Padding for `<th>`s and `<td>`s. -@table-cell-padding: 8px; +@table-cell-padding: 5px; //** Padding for cells in `.table-condensed`. @table-condensed-cell-padding: 5px; @@ -842,5 +842,3 @@ @dl-horizontal-offset: @component-offset-horizontal; //** Horizontal line color. @hr-border: @gray-lighter; - - http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/default-theme.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/default-theme.less b/falcon-ui/app/css/default-theme.less new file mode 100644 index 0000000..e2e3117 --- /dev/null +++ b/falcon-ui/app/css/default-theme.less @@ -0,0 +1,20 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Core variables and mixins +@import "main.less"; +@import "styles/default.less"; http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/fonts/entypo.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/fonts/entypo.less b/falcon-ui/app/css/fonts/entypo.less index 3b90398..cd67f6a 100644 --- a/falcon-ui/app/css/fonts/entypo.less +++ b/falcon-ui/app/css/fonts/entypo.less @@ -46,6 +46,10 @@ line-height: 0; } +.entypo-align-sub { + vertical-align: sub; +} + .entypo-social { font-family: 'EntypoSocialRegular'; font-size: 2em; @@ -1187,4 +1191,4 @@ .entypo-social.smashing:before { content: '\F357'; -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/gray-theme.less ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/gray-theme.less b/falcon-ui/app/css/gray-theme.less new file mode 100644 index 0000000..5f6ec7e --- /dev/null +++ b/falcon-ui/app/css/gray-theme.less @@ -0,0 +1,20 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Core variables and mixins +@import "main.less"; +@import "styles/gray.less"; http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/32x32_create-entity-hover.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/32x32_create-entity-hover.png b/falcon-ui/app/css/img/32x32_create-entity-hover.png new file mode 100755 index 0000000..32361ae Binary files /dev/null and b/falcon-ui/app/css/img/32x32_create-entity-hover.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/32x32_create-entity.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/32x32_create-entity.png b/falcon-ui/app/css/img/32x32_create-entity.png new file mode 100755 index 0000000..30e6f65 Binary files /dev/null and b/falcon-ui/app/css/img/32x32_create-entity.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/32x32_upload.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/32x32_upload.png b/falcon-ui/app/css/img/32x32_upload.png new file mode 100755 index 0000000..d18c2df Binary files /dev/null and b/falcon-ui/app/css/img/32x32_upload.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/cloud.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/cloud.png b/falcon-ui/app/css/img/cloud.png new file mode 100644 index 0000000..1cb0075 Binary files /dev/null and b/falcon-ui/app/css/img/cloud.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/falcon-logo.jpg ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/falcon-logo.jpg b/falcon-ui/app/css/img/falcon-logo.jpg new file mode 100755 index 0000000..3eadaa6 Binary files /dev/null and b/falcon-ui/app/css/img/falcon-logo.jpg differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/falcon.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/falcon.png b/falcon-ui/app/css/img/falcon.png deleted file mode 100644 index f0e6934..0000000 Binary files a/falcon-ui/app/css/img/falcon.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/feed.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/feed.png b/falcon-ui/app/css/img/feed.png new file mode 100644 index 0000000..b6e9836 Binary files /dev/null and b/falcon-ui/app/css/img/feed.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..f2811e5 Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_glass_55_fbf9ee_1x400.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..c2c7126 Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_glass_65_ffffff_1x400.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..a1d1e14 Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_glass_75_dadada_1x400.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..af8a90c Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_glass_75_e6e6e6_1x400.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png b/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..078e793 Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_glass_95_fef1ec_1x400.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png b/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..88d1855 Binary files /dev/null and b/falcon-ui/app/css/img/ui-bg_highlight-soft_75_cccccc_1x100.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-icons_222222_256x240.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-icons_222222_256x240.png b/falcon-ui/app/css/img/ui-icons_222222_256x240.png new file mode 100644 index 0000000..e9c8e16 Binary files /dev/null and b/falcon-ui/app/css/img/ui-icons_222222_256x240.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png b/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..f2bf838 Binary files /dev/null and b/falcon-ui/app/css/img/ui-icons_2e83ff_256x240.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-icons_454545_256x240.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-icons_454545_256x240.png b/falcon-ui/app/css/img/ui-icons_454545_256x240.png new file mode 100644 index 0000000..d6169e8 Binary files /dev/null and b/falcon-ui/app/css/img/ui-icons_454545_256x240.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-icons_888888_256x240.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-icons_888888_256x240.png b/falcon-ui/app/css/img/ui-icons_888888_256x240.png new file mode 100644 index 0000000..d3e6e02 Binary files /dev/null and b/falcon-ui/app/css/img/ui-icons_888888_256x240.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png b/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..4937018 Binary files /dev/null and b/falcon-ui/app/css/img/ui-icons_cd0a0a_256x240.png differ http://git-wip-us.apache.org/repos/asf/falcon/blob/76dc2e18/falcon-ui/app/css/img/user.svg ---------------------------------------------------------------------- diff --git a/falcon-ui/app/css/img/user.svg b/falcon-ui/app/css/img/user.svg index fb534c2..60ac6c5 100644 --- a/falcon-ui/app/css/img/user.svg +++ b/falcon-ui/app/css/img/user.svg @@ -1,20 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --> <!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1" id="User" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
