Repository: ambari Updated Branches: refs/heads/trunk f903d17f8 -> 6f340ec2d
http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/index.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/index.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/index.js deleted file mode 100644 index dc074d7..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* jshint node: true */ -'use strict'; - -module.exports = { - name: 'hdfs-directory-viewer', - included: function(app) { - this._super.included(app); - - app.import(app.bowerDirectory + '/bootstrap/dist/css/bootstrap.css'); - app.import(app.bowerDirectory + '/bootstrap/dist/js/bootstrap.js'); - app.import(app.bowerDirectory + '/bootstrap-treeview/src/js/bootstrap-treeview.js'); - app.import(app.bowerDirectory + '/bootstrap-treeview/dist/bootstrap-treeview.min.css'); - } -}; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/package.json ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/package.json b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/package.json deleted file mode 100644 index 66a7b20..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "hdfs-directory-viewer", - "version": "0.1.0", - "description": "The hdfs directory viewer addon to be used by ambari views", - "directories": { - "doc": "doc", - "test": "tests" - }, - "scripts": { - "build": "ember build", - "start": "ember server", - "test": "ember try:testall" - }, - "repository": "", - "engines": { - "node": ">= 0.10.0" - }, - "author": "", - "license": "MIT", - "devDependencies": { - "broccoli-asset-rev": "^2.2.0", - "ember-ajax": "0.7.1", - "ember-cli": "2.2.0-beta.4", - "ember-cli-app-version": "^1.0.0", - "ember-cli-dependency-checker": "^1.2.0", - "ember-cli-font-awesome": "1.5.0", - "ember-cli-htmlbars": "^1.0.1", - "ember-cli-htmlbars-inline-precompile": "^0.3.1", - "ember-cli-inject-live-reload": "^1.3.1", - "ember-cli-qunit": "^1.1.0", - "ember-cli-release": "0.2.8", - "ember-cli-sri": "^2.0.0", - "ember-cli-uglify": "^1.2.0", - "ember-data": "^2.2.1", - "ember-disable-prototype-extensions": "^1.0.0", - "ember-disable-proxy-controllers": "^1.0.1", - "ember-export-application-global": "^1.0.4", - "ember-resolver": "^2.0.3", - "ember-try": "~0.0.8" - }, - "keywords": [ - "ember-addon" - ], - "dependencies": { - "ember-cli-babel": "^5.1.5", - "ember-cli-htmlbars": "^1.0.1" - }, - "ember-addon": { - "configPath": "tests/dummy/config" - } -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/testem.json ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/testem.json b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/testem.json deleted file mode 100644 index 0f35392..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/testem.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "framework": "qunit", - "test_page": "tests/index.html?hidepassed", - "disable_watching": true, - "launch_in_ci": [ - "PhantomJS" - ], - "launch_in_dev": [ - "PhantomJS", - "Chrome" - ] -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/.jshintrc ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/.jshintrc b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/.jshintrc deleted file mode 100644 index 6ec0b7c..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/.jshintrc +++ /dev/null @@ -1,52 +0,0 @@ -{ - "predef": [ - "document", - "window", - "location", - "setTimeout", - "$", - "-Promise", - "define", - "console", - "visit", - "exists", - "fillIn", - "click", - "keyEvent", - "triggerEvent", - "find", - "findWithAssert", - "wait", - "DS", - "andThen", - "currentURL", - "currentPath", - "currentRouteName" - ], - "node": false, - "browser": false, - "boss": true, - "curly": true, - "debug": false, - "devel": false, - "eqeqeq": true, - "evil": true, - "forin": false, - "immed": false, - "laxbreak": false, - "newcap": true, - "noarg": true, - "noempty": false, - "nonew": false, - "nomen": false, - "onevar": false, - "plusplus": false, - "regexp": false, - "undef": true, - "sub": true, - "strict": false, - "white": false, - "eqnull": true, - "esnext": true, - "unused": true -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/app.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/app.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/app.js deleted file mode 100644 index fb4695c..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/app.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; -import Resolver from 'ember-resolver'; -import loadInitializers from 'ember/load-initializers'; -import config from './config/environment'; - -let App; - -Ember.MODEL_FACTORY_INJECTIONS = true; - -App = Ember.Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver -}); - -loadInitializers(App, config.modulePrefix); - -export default App; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/components/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/components/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/components/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/application.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/application.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/application.js deleted file mode 100644 index b9b52f7..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/controllers/application.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; -import MyViewerConfig from '../utils/my-viewer-config'; - -export default Ember.Controller.extend({ - config: MyViewerConfig.create(), - actions: { - viewerError: function() { - console.log("Failed to fetch the content!!!"); - }, - viewerSelectedPath: function(data) { - console.log(`User selected: path: ${data.path}, isDirectory: ${data.isDirectory}`); - } - } -}); http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/helpers/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/helpers/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/helpers/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/index.html ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/index.html b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/index.html deleted file mode 100644 index fba56f90..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/index.html +++ /dev/null @@ -1,43 +0,0 @@ -<!-- - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. ---> - -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <title>Dummy</title> - <meta name="description" content=""> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - {{content-for "head"}} - - <link rel="stylesheet" href="assets/vendor.css"> - <link rel="stylesheet" href="assets/dummy.css"> - - {{content-for "head-footer"}} - </head> - <body> - {{content-for "body"}} - - <script src="assets/vendor.js"></script> - <script src="assets/dummy.js"></script> - - {{content-for "body-footer"}} - </body> -</html> http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/models/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/models/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/models/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/router.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/router.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/router.js deleted file mode 100644 index 3b44118..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/router.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; -import config from './config/environment'; - -const Router = Ember.Router.extend({ - location: config.locationType -}); - -Router.map(function() { -}); - -export default Router; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/routes/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/routes/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/routes/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/styles/app.css ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/styles/app.css b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/styles/app.css deleted file mode 100644 index 1c922ba..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/styles/app.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -.directory-viewer-wrap { - width: 600px; - height: 500px; - border: 1px solid darkgray; -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/application.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/application.hbs b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/application.hbs deleted file mode 100644 index 0263b2c..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/application.hbs +++ /dev/null @@ -1,36 +0,0 @@ -{{! -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you under the Apache License, Version 2.0 (the -* "License"); you may not use this file except in compliance -* with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -}} - -<h2 id="title">Ambari HDFS Directory Viewer example</h2> -<p> - This will require Ambari installation with a file view instance created.<br/> - <strong>Instance name: files - <br/>Files view version used is: 1.0.0</strong> -</p> - - -<div class="directory-viewer-wrap"> - {{directory-viewer - config=config - errorAction="viewerError" - pathSelectAction="viewerSelectedPath" - }} -</div> - - -{{outlet}} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/components/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/components/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/templates/components/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/utils/my-viewer-config.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/utils/my-viewer-config.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/utils/my-viewer-config.js deleted file mode 100644 index e029e1a..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/app/utils/my-viewer-config.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; -import ViewerConfig from 'hdfs-directory-viewer/utils/viewer-config'; - -export default ViewerConfig.extend({ - showOnlyDirectories: true, - - expandIcon: 'fa fa-chevron-right', - collapseIcon: 'fa fa-chevron-down', - - getHeaders() { - return Ember.merge({"Authorization": "Basic YWRtaW46YWRtaW4="}, this._super()); - }, - - listDirectoryUrl(pathParams) { - return `/api/v1/views/FILES/versions/1.0.0/instances/files/resources/files/fileops/listdir?${pathParams}`; - } -}); http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/config/environment.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/config/environment.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/config/environment.js deleted file mode 100644 index 1445079..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/config/environment.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* jshint node: true */ - -module.exports = function(environment) { - var ENV = { - modulePrefix: 'dummy', - environment: environment, - baseURL: '/', - locationType: 'auto', - EmberENV: { - FEATURES: { - // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true - } - }, - - APP: { - // Here you can pass flags/options to your application instance - // when it is created - } - }; - - if (environment === 'development') { - // ENV.APP.LOG_RESOLVER = true; - // ENV.APP.LOG_ACTIVE_GENERATION = true; - // ENV.APP.LOG_TRANSITIONS = true; - // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; - // ENV.APP.LOG_VIEW_LOOKUPS = true; - } - - if (environment === 'test') { - // Testem prefers this... - ENV.baseURL = '/'; - ENV.locationType = 'none'; - - // keep test console output quieter - ENV.APP.LOG_ACTIVE_GENERATION = false; - ENV.APP.LOG_VIEW_LOOKUPS = false; - - ENV.APP.rootElement = '#ember-testing'; - } - - if (environment === 'production') { - - } - - return ENV; -}; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/crossdomain.xml ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/crossdomain.xml b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/crossdomain.xml deleted file mode 100644 index 0c16a7a..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/crossdomain.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> -<cross-domain-policy> - <!-- Read this: www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html --> - - <!-- Most restrictive policy: --> - <site-control permitted-cross-domain-policies="none"/> - - <!-- Least restrictive policy: --> - <!-- - <site-control permitted-cross-domain-policies="all"/> - <allow-access-from domain="*" to-ports="*" secure="false"/> - <allow-http-request-headers-from domain="*" headers="*" secure="false"/> - --> -</cross-domain-policy> http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/robots.txt ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/robots.txt b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/robots.txt deleted file mode 100644 index f591645..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/dummy/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/destroy-app.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/destroy-app.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/destroy-app.js deleted file mode 100644 index dfabf85..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/destroy-app.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; - -export default function destroyApp(application) { - Ember.run(application, 'destroy'); -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/module-for-acceptance.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/module-for-acceptance.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/module-for-acceptance.js deleted file mode 100644 index 05aa014..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/module-for-acceptance.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { module } from 'qunit'; -import startApp from '../helpers/start-app'; -import destroyApp from '../helpers/destroy-app'; - -export default function(name, options = {}) { - module(name, { - beforeEach() { - this.application = startApp(); - - if (options.beforeEach) { - options.beforeEach.apply(this, arguments); - } - }, - - afterEach() { - destroyApp(this.application); - - if (options.afterEach) { - options.afterEach.apply(this, arguments); - } - } - }); -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/resolver.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/resolver.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/resolver.js deleted file mode 100644 index b7193ba..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/resolver.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Resolver from 'ember-resolver'; -import config from '../../config/environment'; - -const resolver = Resolver.create(); - -resolver.namespace = { - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix -}; - -export default resolver; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/start-app.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/start-app.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/start-app.js deleted file mode 100644 index 7b25773..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/helpers/start-app.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; -import Application from '../../app'; -import config from '../../config/environment'; - -export default function startApp(attrs) { - let application; - - let attributes = Ember.merge({}, config.APP); - attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; - - Ember.run(() => { - application = Application.create(attributes); - application.setupForTesting(); - application.injectTestHelpers(); - }); - - return application; -} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/index.html ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/index.html b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/index.html deleted file mode 100644 index 5251332..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/index.html +++ /dev/null @@ -1,52 +0,0 @@ -<!-- - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. ---> - -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <title>Dummy Tests</title> - <meta name="description" content=""> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - {{content-for "head"}} - {{content-for "test-head"}} - - <link rel="stylesheet" href="assets/vendor.css"> - <link rel="stylesheet" href="assets/dummy.css"> - <link rel="stylesheet" href="assets/test-support.css"> - - {{content-for "head-footer"}} - {{content-for "test-head-footer"}} - </head> - <body> - {{content-for "body"}} - {{content-for "test-body"}} - - <script src="testem.js" integrity=""></script> - <script src="assets/vendor.js"></script> - <script src="assets/test-support.js"></script> - <script src="assets/dummy.js"></script> - <script src="assets/tests.js"></script> - <script src="assets/test-loader.js"></script> - - {{content-for "body-footer"}} - {{content-for "test-body-footer"}} - </body> -</html> http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/integration/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/integration/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/integration/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/test-helper.js ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/test-helper.js b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/test-helper.js deleted file mode 100644 index 96975ee..0000000 --- a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/test-helper.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import resolver from './helpers/resolver'; -import { - setResolver -} from 'ember-qunit'; - -setResolver(resolver); http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/unit/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/unit/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/tests/unit/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/vendor/.gitkeep ---------------------------------------------------------------------- diff --git a/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/vendor/.gitkeep b/contrib/views/commons/src/main/resources/ui/hdfs-directory-viewer/vendor/.gitkeep deleted file mode 100644 index e69de29..0000000 http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/pom.xml ---------------------------------------------------------------------- diff --git a/contrib/views/files/pom.xml b/contrib/views/files/pom.xml index 383d90d..13ff5e1 100644 --- a/contrib/views/files/pom.xml +++ b/contrib/views/files/pom.xml @@ -97,11 +97,6 @@ <version>2.0.0.0-SNAPSHOT</version> </dependency> <dependency> - <groupId>org.apache.ambari.contrib.views</groupId> - <artifactId>ambari-views-commons</artifactId> - <version>2.0.0.0-SNAPSHOT</version> - </dependency> - <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2</version> http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/DownloadService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/DownloadService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/DownloadService.java index 4b8a546..95a07b5 100644 --- a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/DownloadService.java +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/DownloadService.java @@ -47,14 +47,14 @@ import javax.ws.rs.core.UriInfo; import javax.xml.bind.annotation.XmlElement; import com.google.gson.Gson; -import org.apache.ambari.view.commons.exceptions.MisconfigurationFormattedException; -import org.apache.ambari.view.commons.exceptions.NotFoundFormattedException; -import org.apache.ambari.view.commons.exceptions.ServiceFormattedException; -import org.apache.ambari.view.commons.hdfs.HdfsService; +import org.apache.ambari.view.filebrowser.utils.MisconfigurationFormattedException; +import org.apache.ambari.view.filebrowser.utils.NotFoundFormattedException; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; import org.apache.ambari.view.utils.hdfs.HdfsApi; import org.apache.ambari.view.utils.hdfs.HdfsApiException; import org.apache.ambari.view.utils.hdfs.HdfsUtil; import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileStatus; import org.apache.ambari.view.ViewContext; import org.apache.hadoop.security.AccessControlException; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileBrowserService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileBrowserService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileBrowserService.java index adaa6c9..fd1c710 100644 --- a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileBrowserService.java +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileBrowserService.java @@ -23,9 +23,6 @@ import javax.ws.rs.Path; import org.apache.ambari.view.ViewContext; import com.google.inject.Inject; -import org.apache.ambari.view.commons.hdfs.FileOperationService; -import org.apache.ambari.view.commons.hdfs.UploadService; -import org.apache.ambari.view.commons.hdfs.UserService; /** * Root files service @@ -45,7 +42,7 @@ public class FileBrowserService { } /** - * @see UploadService + * @see org.apache.ambari.view.filebrowser.UploadService * @return service */ @Path("/upload") @@ -54,7 +51,7 @@ public class FileBrowserService { } /** - * @see org.apache.ambari.view.commons.hdfs.FileOperationService + * @see org.apache.ambari.view.filebrowser.FileOperationService * @return service */ @Path("/fileops") @@ -71,12 +68,6 @@ public class FileBrowserService { return new HelpService(context); } - /** - * @see org.apache.ambari.view.commons.hdfs.UserService - * @return service - */ - @Path("/user") - public UserService userService() { return new UserService(context); } /** * @see org.apache.ambari.view.filebrowser.FilePreviewService http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileOperationService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileOperationService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileOperationService.java new file mode 100644 index 0000000..a0793ac --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FileOperationService.java @@ -0,0 +1,484 @@ +/** + * 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.ambari.view.filebrowser; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; +import javax.ws.rs.core.UriInfo; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ambari.view.ViewContext; +import org.apache.ambari.view.filebrowser.utils.NotFoundFormattedException; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; +import org.apache.ambari.view.utils.hdfs.HdfsApi; +import org.apache.ambari.view.utils.hdfs.HdfsApiException; +import org.json.simple.JSONObject; + +/** + * File operations service + */ +public class FileOperationService extends HdfsService { + + /** + * Constructor + * @param context View Context instance + */ + public FileOperationService(ViewContext context) { + super(context); + } + + /** + * List dir + * @param path path + * @return response with dir content + */ + @GET + @Path("/listdir") + @Produces(MediaType.APPLICATION_JSON) + public Response listdir(@QueryParam("path") String path) { + try { + JSONObject response = new JSONObject(); + response.put("files", getApi(context).fileStatusToJSON(getApi(context).listdir(path))); + response.put("meta", getApi(context).fileStatusToJSON(getApi(context).getFileStatus(path))); + return Response.ok(response).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (FileNotFoundException ex) { + throw new NotFoundFormattedException(ex.getMessage(), ex); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Rename + * @param request rename request + * @return response with success + */ + @POST + @Path("/rename") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response rename(final SrcDstFileRequest request) { + try { + HdfsApi api = getApi(context); + ResponseBuilder result; + if (api.rename(request.src, request.dst)) { + result = Response.ok(getApi(context).fileStatusToJSON(api + .getFileStatus(request.dst))); + } else { + result = Response.ok(new FileOperationResult(false, "Can't move '" + request.src + "' to '" + request.dst + "'")).status(422); + } + return result.build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Chmod + * @param request chmod request + * @return response with success + */ + @POST + @Path("/chmod") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response chmod(final ChmodRequest request) { + try { + HdfsApi api = getApi(context); + ResponseBuilder result; + if (api.chmod(request.path, request.mode)) { + result = Response.ok(getApi(context).fileStatusToJSON(api + .getFileStatus(request.path))); + } else { + result = Response.ok(new FileOperationResult(false, "Can't chmod '" + request.path + "'")).status(422); + } + return result.build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Copy file + * @param request source and destination request + * @return response with success + */ + @POST + @Path("/move") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response move(final MultiSrcDstFileRequest request, + @Context HttpHeaders headers, @Context UriInfo ui) { + try { + HdfsApi api = getApi(context); + ResponseBuilder result; + String message = ""; + + List<String> sources = request.sourcePaths; + String destination = request.destinationPath; + if(sources.isEmpty()) { + result = Response.ok(new FileOperationResult(false, "Can't move 0 file/folder to '" + destination + "'")). + status(422); + return result.build(); + } + + int index = 0; + for (String src : sources) { + String fileName = getFileName(src); + String finalDestination = getDestination(destination, fileName); + try { + if (api.rename(src, finalDestination)) { + index ++; + } else { + message = "Failed to move '" + src + "' to '" + finalDestination + "'"; + break; + } + } catch (IOException exception) { + message = exception.getMessage(); + logger.error("Failed to move '{}' to '{}'. Exception: {}", src, finalDestination, + exception.getMessage()); + break; + } + } + if (index == sources.size()) { + result = Response.ok(new FileOperationResult(true)).status(200); + } else { + FileOperationResult errorResult = getFailureFileOperationResult(sources, index, message); + result = Response.ok(errorResult).status(422); + } + return result.build(); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Copy file + * @param request source and destination request + * @return response with success + */ + @POST + @Path("/copy") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response copy(final MultiSrcDstFileRequest request, + @Context HttpHeaders headers, @Context UriInfo ui) { + try { + HdfsApi api = getApi(context); + ResponseBuilder result; + String message = ""; + + List<String> sources = request.sourcePaths; + String destination = request.destinationPath; + if(sources.isEmpty()) { + result = Response.ok(new FileOperationResult(false, "Can't copy 0 file/folder to '" + destination + "'")). + status(422); + return result.build(); + } + + int index = 0; + for (String src : sources) { + String fileName = getFileName(src); + String finalDestination = getDestination(destination, fileName); + try { + api.copy(src, finalDestination); + index ++; + } catch (IOException|HdfsApiException exception) { + message = exception.getMessage(); + logger.error("Failed to copy '{}' to '{}'. Exception: {}", src, finalDestination, + exception.getMessage()); + break; + } + } + if (index == sources.size()) { + result = Response.ok(new FileOperationResult(true)).status(200); + } else { + FileOperationResult errorResult = getFailureFileOperationResult(sources, index, message); + result = Response.ok(errorResult).status(422); + } + return result.build(); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Make directory + * @param request make directory request + * @return response with success + */ + @PUT + @Path("/mkdir") + @Produces(MediaType.APPLICATION_JSON) + public Response mkdir(final MkdirRequest request) { + try{ + HdfsApi api = getApi(context); + ResponseBuilder result; + if (api.mkdir(request.path)) { + result = Response.ok(getApi(context).fileStatusToJSON(api.getFileStatus(request.path))); + } else { + result = Response.ok(new FileOperationResult(false, "Can't create dir '" + request.path + "'")).status(422); + } + return result.build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Empty trash + * @return response with success + */ + @DELETE + @Path("/trash/emptyTrash") + @Produces(MediaType.APPLICATION_JSON) + public Response emptyTrash() { + try { + HdfsApi api = getApi(context); + api.emptyTrash(); + return Response.ok(new FileOperationResult(true)).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Move to trash + * @param request remove request + * @return response with success + */ + @DELETE + @Path("/moveToTrash") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response moveToTrash(MultiRemoveRequest request) { + try { + ResponseBuilder result; + HdfsApi api = getApi(context); + String trash = api.getTrashDirPath(); + String message = ""; + + if (request.paths.size() == 0) { + result = Response.ok(new FileOperationResult(false, "No path entries provided.")).status(422); + } else { + if (!api.exists(trash)) { + if (!api.mkdir(trash)) { + result = Response.ok(new FileOperationResult(false, "Trash dir does not exists. Can't create dir for " + + "trash '" + trash + "'")).status(422); + return result.build(); + } + } + + int index = 0; + for (MultiRemoveRequest.PathEntry entry : request.paths) { + String trashFilePath = api.getTrashDirPath(entry.path); + try { + if (api.rename(entry.path, trashFilePath)) { + index ++; + } else { + message = "Failed to move '" + entry.path + "' to '" + trashFilePath + "'"; + break; + } + } catch (IOException exception) { + message = exception.getMessage(); + logger.error("Failed to move '{}' to '{}'. Exception: {}", entry.path, trashFilePath, + exception.getMessage()); + break; + } + } + if (index == request.paths.size()) { + result = Response.ok(new FileOperationResult(true)).status(200); + } else { + FileOperationResult errorResult = getFailureFileOperationResult(getPathsFromPathsEntries(request.paths), index, message); + result = Response.ok(errorResult).status(422); + } + } + return result.build(); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Remove + * @param request remove request + * @return response with success + */ + @DELETE + @Path("/remove") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public Response remove(MultiRemoveRequest request, @Context HttpHeaders headers, + @Context UriInfo ui) { + try { + HdfsApi api = getApi(context); + ResponseBuilder result; + String message = ""; + if(request.paths.size() == 0) { + result = Response.ok(new FileOperationResult(false, "No path entries provided.")); + } else { + int index = 0; + for (MultiRemoveRequest.PathEntry entry : request.paths) { + try { + if (api.delete(entry.path, entry.recursive)) { + index++; + } else { + message = "Failed to remove '" + entry.path + "'"; + break; + } + } catch (IOException exception) { + message = exception.getMessage(); + logger.error("Failed to remove '{}'. Exception: {}", entry.path, exception.getMessage()); + break; + } + + } + if (index == request.paths.size()) { + result = Response.ok(new FileOperationResult(true)).status(200); + } else { + FileOperationResult errorResult = getFailureFileOperationResult(getPathsFromPathsEntries(request.paths), index, message); + result = Response.ok(errorResult).status(422); + } + } + return result.build(); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + private List<String> getPathsFromPathsEntries(List<MultiRemoveRequest.PathEntry> paths) { + List<String> entries = new ArrayList<>(); + for(MultiRemoveRequest.PathEntry path: paths) { + entries.add(path.path); + } + return entries; + } + + private FileOperationResult getFailureFileOperationResult(List<String> paths, int failedIndex, String message) { + List<String> succeeded = new ArrayList<>(); + List<String> unprocessed = new ArrayList<>(); + List<String> failed = new ArrayList<>(); + ListIterator<String> iter = paths.listIterator(); + while (iter.hasNext()) { + int index = iter.nextIndex(); + String path = iter.next(); + if (index < failedIndex) { + succeeded.add(path); + } else if (index == failedIndex) { + failed.add(path); + } else { + unprocessed.add(path); + } + } + return new FileOperationResult(false, message, succeeded, failed, unprocessed); + } + + private String getDestination(String baseDestination, String fileName) { + if(baseDestination.endsWith("/")) { + return baseDestination + fileName; + } else { + return baseDestination + "/" + fileName; + } + } + + private String getFileName(String srcPath) { + return srcPath.substring(srcPath.lastIndexOf('/') + 1); + } + + + /** + * Wrapper for json mapping of mkdir request + */ + @XmlRootElement + public static class MkdirRequest { + @XmlElement(nillable = false, required = true) + public String path; + } + + /** + * Wrapper for json mapping of chmod request + */ + @XmlRootElement + public static class ChmodRequest { + @XmlElement(nillable = false, required = true) + public String path; + @XmlElement(nillable = false, required = true) + public String mode; + } + + /** + * Wrapper for json mapping of request with + * source and destination + */ + @XmlRootElement + public static class SrcDstFileRequest { + @XmlElement(nillable = false, required = true) + public String src; + @XmlElement(nillable = false, required = true) + public String dst; + } + + /** + * Wrapper for json mapping of request with multiple + * source and destination + */ + @XmlRootElement + public static class MultiSrcDstFileRequest { + @XmlElement(nillable = false, required = true) + public List<String> sourcePaths = new ArrayList<>(); + @XmlElement(nillable = false, required = true) + public String destinationPath; + } + + /** + * Wrapper for json mapping of remove request + */ + @XmlRootElement + public static class MultiRemoveRequest { + @XmlElement(nillable = false, required = true) + public List<PathEntry> paths = new ArrayList<>(); + public static class PathEntry { + @XmlElement(nillable = false, required = true) + public String path; + public boolean recursive; + } + + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FilePreviewService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FilePreviewService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FilePreviewService.java index 3585516..0c1344d 100644 --- a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FilePreviewService.java +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/FilePreviewService.java @@ -19,9 +19,8 @@ package org.apache.ambari.view.filebrowser; import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.commons.exceptions.NotFoundFormattedException; -import org.apache.ambari.view.commons.exceptions.ServiceFormattedException; -import org.apache.ambari.view.commons.hdfs.HdfsService; +import org.apache.ambari.view.filebrowser.utils.NotFoundFormattedException; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; import org.apache.ambari.view.utils.hdfs.HdfsApi; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; @@ -38,7 +37,7 @@ import java.io.InputStream; /** * File Preview Service */ -public class FilePreviewService extends HdfsService { +public class FilePreviewService extends HdfsService{ private CompressionCodecFactory compressionCodecFactory; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HdfsService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HdfsService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HdfsService.java new file mode 100644 index 0000000..93105d9 --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HdfsService.java @@ -0,0 +1,160 @@ +/** + * 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.ambari.view.filebrowser; + +import javax.ws.rs.WebApplicationException; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.ambari.view.ViewContext; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; +import org.apache.ambari.view.utils.hdfs.HdfsApi; +import org.apache.ambari.view.utils.hdfs.HdfsUtil; +import org.apache.hadoop.security.UserGroupInformation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Base Hdfs service + */ +public abstract class HdfsService { + + protected static final Logger logger = LoggerFactory.getLogger(HdfsService.class); + + protected final ViewContext context; + + /** + * Constructor + * @param context View Context instance + */ + public HdfsService(ViewContext context) { + this.context = context; + } + + /** + * Wrapper for json mapping of result of Multi Remove Request + */ + @XmlRootElement + public static class FileOperationResult { + public boolean success; + public String message; + public List<String> succeeded; + public List<String> failed; + public List<String> unprocessed; + + public FileOperationResult(boolean success) { + this.success = success; + } + + public FileOperationResult(boolean success, String message) { + this(success); + this.message = message; + } + + public FileOperationResult(boolean success, String message, List<String> succeeded, List<String> failed, List<String> unprocessed) { + this(success, message); + this.succeeded = succeeded; + this.failed = failed; + this.unprocessed = unprocessed; + } + + } + + private HdfsApi _api = null; + + /** + * Ger HdfsApi instance + * @param context View Context instance + * @return HdfsApi business delegate + */ + public HdfsApi getApi(ViewContext context) { + if (_api == null) { + try { + _api = HdfsUtil.connectToHDFSApi(context); + } catch (Exception ex) { + throw new ServiceFormattedException("HdfsApi connection failed. Check \"webhdfs.url\" property", ex); + } + } + return _api; + } + + private static Map<String, String> getHdfsAuthParams(ViewContext context) { + String auth = context.getProperties().get("webhdfs.auth"); + Map<String, String> params = new HashMap<String, String>(); + if (auth == null || auth.isEmpty()) { + auth = "auth=SIMPLE"; + } + for(String param : auth.split(";")) { + String[] keyvalue = param.split("="); + if (keyvalue.length != 2) { + logger.error("Can not parse authentication param " + param + " in " + auth); + continue; + } + params.put(keyvalue[0], keyvalue[1]); + } + return params; + } + + /** + * Get doAs username to use in HDFS + * @param context View Context instance + * @return user name + */ + public String getDoAsUsername(ViewContext context) { + String username = context.getProperties().get("webhdfs.username"); + if (username == null || username.isEmpty()) + username = context.getUsername(); + return username; + } + + /** + * Checks connection to HDFS + * @param context View Context + */ + public static void hdfsSmokeTest(ViewContext context) { + try { + HdfsApi api = HdfsUtil.connectToHDFSApi(context); + api.getStatus(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Get proxyuser username to use in HDFS + * @param context View Context instance + * @return user name + */ + public String getRealUsername(ViewContext context) { + String username = context.getProperties().get("webhdfs.proxyuser"); + if (username == null || username.isEmpty()) + try { + username = UserGroupInformation.getCurrentUser().getShortUserName(); + } catch (IOException e) { + throw new ServiceFormattedException("HdfsApi connection failed. Can't get current user", e); + } + return username; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HelpService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HelpService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HelpService.java index 92af2d5..b49130b 100644 --- a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HelpService.java +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/HelpService.java @@ -18,14 +18,19 @@ package org.apache.ambari.view.filebrowser; +import java.io.FileNotFoundException; + import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.apache.ambari.view.ViewContext; -import org.apache.ambari.view.commons.hdfs.HdfsService; +import org.apache.ambari.view.filebrowser.utils.NotFoundFormattedException; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; +import org.apache.ambari.view.utils.hdfs.HdfsApi; import org.json.simple.JSONObject; /** @@ -95,4 +100,64 @@ public class HelpService extends HdfsService { return Response.ok().entity(response).type(MediaType.APPLICATION_JSON).build(); } + /** + * Returns home directory + * @return home directory + */ + @GET + @Path("/home") + @Produces(MediaType.APPLICATION_JSON) + public Response homeDir() { + try { + HdfsApi api = getApi(context); + return Response + .ok(getApi(context).fileStatusToJSON(api.getFileStatus(api.getHomeDir() + .toString()))).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Is trash enabled + * @return is trash enabled + */ + @GET + @Path("/trash/enabled") + @Produces(MediaType.APPLICATION_JSON) + public Response trashEnabled() { + try { + HdfsApi api = getApi(context); + return Response.ok(new FileOperationResult(api.trashEnabled())).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Trash dir + * @return trash dir + */ + @GET + @Path("/trashDir") + @Produces(MediaType.APPLICATION_JSON) + public Response trashdir() { + try { + HdfsApi api = getApi(context); + return Response.ok( + getApi(context).fileStatusToJSON(api.getFileStatus(api.getTrashDir() + .toString()))).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (FileNotFoundException ex) { + throw new NotFoundFormattedException(ex.getMessage(), ex); + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/UploadService.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/UploadService.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/UploadService.java new file mode 100644 index 0000000..eb5c0c7 --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/UploadService.java @@ -0,0 +1,137 @@ +/** + * 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.ambari.view.filebrowser; + +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.ambari.view.ViewContext; +import org.apache.ambari.view.filebrowser.utils.ServiceFormattedException; +import org.apache.ambari.view.utils.hdfs.HdfsApi; +import org.apache.hadoop.fs.FSDataOutputStream; + +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataParam; + +/** + * Upload service + */ +public class UploadService extends HdfsService { + + /** + * Constructor + * @param context View Context instance + */ + public UploadService(ViewContext context) { + super(context); + } + + private void uploadFile(final String filePath, InputStream uploadedInputStream) + throws IOException, InterruptedException { + int read; + byte[] chunk = new byte[1024]; + FSDataOutputStream out = null; + try { + out = getApi(context).create(filePath, false); + while ((read = uploadedInputStream.read(chunk)) != -1) { + out.write(chunk, 0, read); + } + } finally { + if (out != null) { + out.close(); + } + } + } + + /** + * Upload file + * @param uploadedInputStream file input stream + * @param contentDisposition content disposition + * @param path path + * @return file status + */ + @PUT + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) + public Response uploadFile( + @FormDataParam("file") InputStream uploadedInputStream, + @FormDataParam("file") FormDataContentDisposition contentDisposition, + @FormDataParam("path") String path) { + try { + if (!path.endsWith("/")) + path = path + "/"; + String filePath = path + contentDisposition.getFileName(); + uploadFile(filePath, uploadedInputStream); + return Response.ok( + getApi(context).fileStatusToJSON(getApi(context).getFileStatus(filePath))) + .build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + + /** + * Upload zip and unpack + * @param uploadedInputStream file input stream + * @param contentDisposition content disposition + * @param path path + * @return files statuses + * @throws IOException + * @throws Exception + */ + @PUT + @Path("/zip") + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) + public Response uploadZip( + @FormDataParam("file") InputStream uploadedInputStream, + @FormDataParam("file") FormDataContentDisposition contentDisposition, + @FormDataParam("path") String path) { + try { + if (!path.endsWith("/")) + path = path + "/"; + ZipInputStream zip = new ZipInputStream(uploadedInputStream); + ZipEntry ze = zip.getNextEntry(); + HdfsApi api = getApi(context); + while (ze != null) { + String filePath = path + ze.getName(); + if (ze.isDirectory()) { + api.mkdir(filePath); + } else { + uploadFile(filePath, zip); + } + ze = zip.getNextEntry(); + } + return Response.ok(getApi(context).fileStatusToJSON(api.listdir(path))).build(); + } catch (WebApplicationException ex) { + throw ex; + } catch (Exception ex) { + throw new ServiceFormattedException(ex.getMessage(), ex); + } + } + +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/MisconfigurationFormattedException.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/MisconfigurationFormattedException.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/MisconfigurationFormattedException.java new file mode 100644 index 0000000..584bbac --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/MisconfigurationFormattedException.java @@ -0,0 +1,43 @@ +/** + * 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.ambari.view.filebrowser.utils; + +import org.json.simple.JSONObject; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.HashMap; + +public class MisconfigurationFormattedException extends WebApplicationException { + private final static int STATUS = 500; + private final static String message = "Parameter \"%s\" is set to null"; + + public MisconfigurationFormattedException(String name) { + super(errorEntity(name)); + } + + protected static Response errorEntity(String name) { + HashMap<String, Object> response = new HashMap<String, Object>(); + response.put("message", String.format(message, name)); + response.put("trace", null); + response.put("status", STATUS); + return Response.status(STATUS).entity(new JSONObject(response)).type(MediaType.APPLICATION_JSON).build(); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/NotFoundFormattedException.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/NotFoundFormattedException.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/NotFoundFormattedException.java new file mode 100644 index 0000000..f4353cd --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/NotFoundFormattedException.java @@ -0,0 +1,27 @@ +/** + * 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.ambari.view.filebrowser.utils; + +public class NotFoundFormattedException extends ServiceFormattedException { + private final static int STATUS = 404; + + public NotFoundFormattedException(String message, Throwable exception) { + super(message, exception, STATUS); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/ServiceFormattedException.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/ServiceFormattedException.java b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/ServiceFormattedException.java new file mode 100644 index 0000000..5cb7dea --- /dev/null +++ b/contrib/views/files/src/main/java/org/apache/ambari/view/filebrowser/utils/ServiceFormattedException.java @@ -0,0 +1,57 @@ +/** + * 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.ambari.view.filebrowser.utils; + +import org.apache.commons.lang.exception.ExceptionUtils; +import org.json.simple.JSONObject; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.security.AccessControlException; +import java.util.HashMap; + +public class ServiceFormattedException extends WebApplicationException { + public ServiceFormattedException(String message, Throwable exception) { + super(errorEntity(message, exception, suggestStatus(exception))); + } + + public ServiceFormattedException(String message, Throwable exception, int status) { + super(errorEntity(message, exception, status)); + } + + private static int suggestStatus(Throwable exception) { + int status = 500; + if (exception instanceof AccessControlException) { + status = 403; + } + return status; + } + + protected static Response errorEntity(String message, Throwable e, int status) { + HashMap<String, Object> response = new HashMap<String, Object>(); + response.put("message", message); + String trace = null; + if (e != null) + trace = ExceptionUtils.getStackTrace(e); + response.put("trace", trace); + response.put("status", status); + return Response.status(status).entity(new JSONObject(response)).type(MediaType.APPLICATION_JSON).build(); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/resources/ui/app/services/file-operation.js ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/resources/ui/app/services/file-operation.js b/contrib/views/files/src/main/resources/ui/app/services/file-operation.js index 09bb67f..abb3000 100644 --- a/contrib/views/files/src/main/resources/ui/app/services/file-operation.js +++ b/contrib/views/files/src/main/resources/ui/app/services/file-operation.js @@ -170,12 +170,12 @@ export default Ember.Service.extend(FileOperationMixin, { getHome: function () { var adapter = this.get('store').adapterFor('file'); - return adapter.ajax(this._getMiscUrl("/user/home"), "GET"); + return adapter.ajax(this._getMiscUrl("/help/home"), "GET"); }, getTrash: function () { var adapter = this.get('store').adapterFor('file'); - return adapter.ajax(this._getMiscUrl("/user/trashDir"), "GET"); + return adapter.ajax(this._getMiscUrl("/help/trashDir"), "GET"); }, _getMiscUrl: function (segment) { http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/main/resources/ui/package.json ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/main/resources/ui/package.json b/contrib/views/files/src/main/resources/ui/package.json index 5bf3e93..d15c5c9 100644 --- a/contrib/views/files/src/main/resources/ui/package.json +++ b/contrib/views/files/src/main/resources/ui/package.json @@ -20,11 +20,6 @@ }, "author": "", "license": "MIT", - "ember-addon": { - "paths": [ - "../../../../../commons/src/main/resources/ui/hdfs-directory-viewer" - ] - }, "devDependencies": { "bower": "1.7.2", "broccoli-asset-rev": "^2.2.0", http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java ---------------------------------------------------------------------- diff --git a/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java b/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java index f431f66..da804d1 100644 --- a/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java +++ b/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java @@ -38,7 +38,6 @@ import javax.ws.rs.core.UriInfo; import org.apache.ambari.view.ViewContext; import org.apache.ambari.view.ViewResourceHandler; -import org.apache.ambari.view.commons.hdfs.FileOperationService; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.hdfs.MiniDFSCluster; http://git-wip-us.apache.org/repos/asf/ambari/blob/6f340ec2/contrib/views/pom.xml ---------------------------------------------------------------------- diff --git a/contrib/views/pom.xml b/contrib/views/pom.xml index da12899..18141c6 100644 --- a/contrib/views/pom.xml +++ b/contrib/views/pom.xml @@ -43,7 +43,6 @@ <module>tez</module> <module>storm</module> <module>zeppelin</module> - <module>commons</module> </modules> <build> <pluginManagement>
