ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tbeerbo...@apache.org
Subject [1/4] AMBARI-5617 - Ambari Views: FileBrowser view (Roman Rader via tbeerbower)
Date Fri, 02 May 2014 23:48:35 GMT
Repository: ambari
Updated Branches:
  refs/heads/trunk 4520a8125 -> 3daffeac5


http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/styles/application.less
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/styles/application.less b/contrib/views/files/src/main/resources/ui/app/styles/application.less
new file mode 100644
index 0000000..2d20e16
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/styles/application.less
@@ -0,0 +1,279 @@
+/**
+ * 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.
+ */
+
+.wrap {
+  padding: 10px;
+}
+
+.panel-files {
+  .panel-heading {
+    height: 41px;
+    padding: 5px 10px;
+
+    .breadcrumb {
+      margin-bottom: 0;
+      padding: 5px 10px;
+      //background-color: #fff;
+
+      .active a {
+        color: #999999 !important;
+      }
+
+      li:first-child + li:before {
+        padding: 0 3px;
+        content: " ";
+      }
+    }
+
+    .upload-area, .mkdir-area{
+      // margin: -4px 5px -4px 5px;
+      width: 350px;
+      margin-right: 5px;
+    }
+    .uploadwrap, .mkdirwrap{
+      margin-right: 5px;
+    }
+    .btn-mkdir-cancel {
+      border-radius: 0 !important;
+      margin-left: -1px;
+    }
+    .mkdir-input{
+      font-size: 14px;
+    }
+    .btn-upload {
+      button {
+        border-radius:0 !important;
+      }
+    }
+  }
+
+  .panel-body {
+    .i-am-in {
+      margin: 0;
+    }
+  }
+
+  .table-files{
+    td {
+      cursor: pointer;
+    }
+    thead {
+      background-color: #f5f5f5;
+    }
+    thead > tr > th {
+      border-bottom: 1px solid #dddddd;
+      border-top: 1px solid #dddddd !important;
+    }
+    thead tr th.icon {
+      width: 2%;
+    }
+    thead tr th.path {
+      cursor: pointer;
+      width: 20%;
+    }
+    thead tr th.owner {
+      cursor: pointer;
+      width: 20%;
+    }
+    thead tr th.grp {
+      cursor: pointer;
+      width: 20%;
+    }
+    thead tr th.perm {
+      cursor: pointer;
+      width: 20%;
+    }
+    thead tr th.download {
+      width: 2%;
+      .btn-group{
+        width: 130px;
+      }
+    }
+    thead tr th.check{
+      width: 2%;
+      .btn-group {
+        width: 50px;
+        .input-group-addon {
+          padding: 2px 17px 1px 5px;
+          position: relative;
+          float: left;
+        }
+        .checkbox {
+          margin: 0;
+          min-height: 17px;
+        }
+      }
+    }
+    tbody {
+      .btn-delete {
+        .popover-content{
+          width: 80px;
+        }
+      }
+      .levelup {
+        text-align: center;
+      }
+      .levelup:hover {
+        background-color: #dddddd;
+      }
+      tr {
+        &.isMoving {
+          opacity: 0.5;
+        }
+        td {
+          vertical-align: middle;
+        }
+        .file-actions{
+          width: 130px;
+          margin-bottom: 0;
+          .delete-forever {
+            display: inline-block;
+            margin: 5px;
+          }
+        }
+        .mod-time{
+          margin: 0;
+        }
+        .file-name {
+          margin-top: -5px;
+          margin-bottom: -5px;
+        }
+        .rename-area {
+          //margin: -4px;
+        }
+        .btn-rename {
+          display: none;
+        }
+        &:hover .btn-rename {
+          display: inline-block;
+        }
+        .btn-rename-cancel {
+          border-radius: 0 !important;
+          margin-left: -1px;
+        }
+        .rename-input{
+          font-size: 14px;
+        }
+      }
+    }
+  } 
+
+}
+
+
+.btn-file {
+    position: relative;
+    overflow: hidden;
+}
+.btn-file input[type=file] {
+    position: absolute;
+    top: 0;
+    right: 0;
+    min-width: 100%;
+    min-height: 100%;
+    font-size: 999px;
+    text-align: right;
+    filter: alpha(opacity=0);
+    opacity: 0;
+    outline: none;
+    background: white;
+    cursor: inherit;
+    display: block;
+}
+
+.dropdown-submenu {
+  position:relative;
+  & > a {
+    white-space: normal !important;
+  }
+  & > .dropdown-menu {
+    top:0;
+    left:100%;
+    margin-top:-6px;
+    margin-left:-1px;
+    -webkit-border-radius:0 6px 6px 6px;
+    -moz-border-radius:0 6px 6px 6px;
+    border-radius:0 6px 6px 6px;
+  }
+  &:hover > .dropdown-menu {
+    display:block;
+  }
+  &.pull-left {
+    float:none;
+    & > .dropdown-menu {
+      left:-100%;
+      margin-left:10px;
+    }
+  }
+  & > .left-submenu {
+    -webkit-border-radius:6px 0 6px 6px;
+    -moz-border-radius:6px 0 6px 6px;
+    border-radius:6px 0 6px 6px;
+    float: right;
+    right: 100%;
+    left: inherit;
+  }
+}
+
+
+.fa-right {
+  top: 3px;
+  position: relative;
+  color: #cccccc;
+}
+
+.fa-gr {
+  color: #ccc;
+}
+
+
+.dropdown-context {
+  .nav-header{
+    cursor:default;
+  }
+  .dropdown-submenu:hover {
+    .dropdown-menu {
+      display: none;
+    }
+    & > .dropdown-menu {
+      display: block;
+    }
+  }
+}
+
+.dropdown-context-sub:before, .dropdown-context-sub:after{
+  display:none;
+}
+.compressed-context {
+  a {
+    padding-left: 14px;
+    padding-top: 0;
+    padding-bottom: 0;
+    font-size: 13px;
+  }
+  .divider {
+    margin: 5px 1px;
+  }
+  .nav-header {
+    padding:1px 13px;
+  }
+}
+
+.dropdown-confirm {
+  margin: -4px 0;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/application.hbs b/contrib/views/files/src/main/resources/ui/app/templates/application.hbs
new file mode 100644
index 0000000..5ce40eb
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/application.hbs
@@ -0,0 +1,21 @@
+{{!
+   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.
+}}
+
+<div class="wrap">
+  {{outlet}}
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/error.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/error.hbs b/contrib/views/files/src/main/resources/ui/app/templates/error.hbs
new file mode 100644
index 0000000..688113a
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/error.hbs
@@ -0,0 +1,24 @@
+{{!
+   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.
+}}
+
+<div class="container">
+  <div class="alert alert-danger">
+    <strong>{{content.status}}</strong>
+    {{content.statusText}}
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/files.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/files.hbs b/contrib/views/files/src/main/resources/ui/app/templates/files.hbs
new file mode 100644
index 0000000..a9ddc99
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/files.hbs
@@ -0,0 +1,254 @@
+{{!
+   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.
+}}
+
+<div class="panel panel-default panel-files">
+  <div class="panel-heading">
+    {{!-- BREADCRUMBS --}}  
+    {{view view.breadcrumbsView}}
+      
+    <div class="um-section">
+    {{!-- UPLOADER --}}  
+    <div {{bind-attr class="isUploading::hide :pull-right" }}>
+      <button {{action 'upload' 'close'}} type="button" class="close" aria-hidden="true">&times;</button>
+      {{file-uploader path=path uploader=uploader class=" upload-area pull-right"}}
+    </div>
+
+    <div {{bind-attr class="isUploading:hide: :pull-right :uploadwrap" }}>
+      <button type="button" {{action 'upload' 'open'}} {{bind-attr class=":btn :btn-default :btn-sm :pull-right"}}>
+        <i class="fa fa-upload"></i> Upload
+      </button>
+    </div>
+
+    {{!-- MKDIR --}}  
+    {{#unless isMkdir}} 
+      <button type="button" {{action 'mkdir' 'edit'}} {{bind-attr class=":btn :btn-default :btn-sm :pull-right :mkdirwrap"}}>
+        <i class="fa fa-plus"></i> New directory
+      </button>
+    {{else}}
+      <div class="input-group input-group-sm pull-right mkdir-area">
+        {{input class="form-control mkdir-input" valueBinding='newDirName'}}
+        <div class="input-group-btn">
+          <button  type="button" {{action 'mkdir' 'cancel'}} {{bind-attr class=":btn :btn-danger :btn-sm :btn-mkdir-cancel"}} >
+            <i class="fa fa-times"></i> Cancel
+          </button>
+        </div>
+        <div class="input-group-btn">
+          <button  type="button" {{action 'mkdir' 'confirm'}} {{bind-attr class=":btn :btn-success :btn-sm :btn-mkdir"}} >
+            <i class="fa fa-check"></i> Create
+          </button>
+        </div>
+      </div>
+    {{/unless}}
+
+
+    </div>
+  </div>
+
+  <div class="panel-body">
+    <h4 class="i-am-in" > <i class="fa fa-folder fa-lg"></i>  {{currentDir}}</h4>
+  </div>
+
+  <table class="table table-hover table-files">
+    <thead>
+      <tr>
+        <th class="icon"></th>
+        <th class="path" {{action 'sort' 'title'}}> Title {{view view.sortArrow sortProperty='title'}} </th>
+        <th class="owner" {{action 'sort' 'owner'}}>Owner {{view view.sortArrow sortProperty='owner'}}</th>
+        <th class="grp" {{action 'sort' 'group'}} >Group {{view view.sortArrow sortProperty='group'}}</th>
+        <th class="perm" {{action 'sort' 'permission'}} >Permission {{view view.sortArrow sortProperty='permission'}}</th>
+        <th class="download">
+          <div class="btn-group btn-sort" data-toggle="tooltip" data-placement="top" title="Sort by:">
+            <button type="button" class="btn btn-xs btn-default" {{action sort 'toggle'}}>
+            {{#if sortAscending}} Asc {{else}} Desc {{/if}}
+            </button>
+
+            <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown">
+              <span>
+              {{capitalize sortProperties.firstObject}}
+              </span>
+              <span class="caret"></span>
+            </button>
+            <ul class="dropdown-menu" role="menu">
+              <li><a href="#" {{action 'sort' 'title'}} >Title</a></li>
+              <li><a href="#" {{action 'sort' 'owner'}} >Owner</a></li>
+              <li><a href="#" {{action 'sort' 'group'}} >Group</a></li>
+              <li><a href="#" {{action 'sort' 'permission'}} >Permission</a></li>
+              <li><a href="#" {{action 'sort' 'date'}} >Date</a></li>
+            </ul>
+          </div>
+        </th>
+        <th class="check"> 
+          <div id="bulkDropdown" class="btn-group">
+              <span class="input-group-addon">
+                <div class="checkbox">
+                    {{view view.checkboxAll contentBinding='fileList'}}
+                </div>
+              </span>
+          <button  type="button" data-toggle="dropdown" {{bind-attr class=":btn :btn-xs :btn-default :dropdown-toggle isSelected::disabled"}} >
+            <span class="caret"></span>
+          </button>
+          <ul class="dropdown-menu pull-right" role="menu">
+            <li><a href="#"  {{action 'download' 'zip'}} ><i class="fa fa-archive fa-fw"></i> Download zip</a></li>
+            {{#if canConcat}}
+            <li><a href="#"  {{action 'download' 'concat'}} ><i class="fa fa-th fa-fw"></i> Concat</a></li>
+            {{/if}}
+            <li class="divider"></li>
+            <li class="dropdown-submenu">
+              <a href="#" disabled="disabled">
+                <i class="fa fa-chevron-left fa-gr fa-fw"></i> Delete
+              </a>
+              <ul class="dropdown-menu left-submenu">
+                {{view view.deleteBulkView}}
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </th>
+      </tr>
+    </thead>
+    <tbody>
+    <div>
+      <tr>
+        <td><i class="fa fa-folder"></i></td>
+        <td  {{action 'dirUp'}} colspan="6">
+          <strong> .. </strong>
+        </td>
+      </tr>
+      {{#unless hideMoving}}
+      {{#if movingFile}}
+        <tr class="isMoving">
+          <td>
+            {{#if movingFile.isDirectory}}
+            <i class="fa fa-folder"></i>
+            {{else}}
+            <i class="fa fa-file"></i>
+            {{/if}}
+          </td>
+          <td>
+            <div class="file-name">
+                <span>
+                  <a>
+                  {{movingFile.title}}
+                  </a>
+                </span>
+                <span class="help-block mod-time">
+                  <small>
+                    Updated {{showDateUnix movingFile.modificationTime 'YYYY-MM-DD HH:mm'}}
+                  </small>
+                </span>
+              </div>
+          </td>
+          <td >{{movingFile.owner}}</td>
+          <td>{{movingFile.group}}</td>
+          <td>{{movingFile.permission}}</td>
+          <td >
+            <ul class="list-inline file-actions text-right">
+              <li>
+                <a href="#" {{action 'moveFile' 'move'}} data-toggle="tooltip" data-placement="bottom" title="Paste"><i class="fa fa-clipboard fa-lg"></i></a>  
+              </li>
+            </ul>
+          </td>
+          <td >
+            <a href="#" {{action 'moveFile' 'cancel' }} data-toggle="tooltip" data-placement="bottom" title="Cancel moving"> <i class="fa fa-times fa-lg"></i> </a>
+          </td>
+        </tr>
+      {{/if}}
+      {{/unless}}
+    </div>
+      {{#each fileList itemController="file"}}
+        <tr {{bind-attr class=":file-row isMoving:isMoving"}}>
+          <td>
+            {{#if content.isDirectory}}
+            <i class="fa fa-folder"></i>
+            {{else}}
+            <i class="fa fa-file"></i>
+            {{/if}}
+          </td>
+          <td>
+            {{#unless isRenaming}}
+              <div class="file-name allow-open">
+                <span>
+                  {{#link-to 'files' (query-params path=content.path)}}
+                    <strong>
+                      {{content.title}}
+                    </strong>
+                  {{/link-to}}
+                </span>
+                {{#unless isMoving}}
+                <a {{action 'rename' 'edit'}} {{bind-attr class=":btn-rename "}} data-toggle="tooltip" data-placement="bottom" title="Rename">
+                  <small>
+                    <i class="fa fa-edit fa-lg"></i>
+                  </small>
+                </a>
+                {{/unless }}
+                <span class="help-block mod-time allow-open">
+                  <small class='allow-open'>
+                    Updated {{showDate modificationTime 'YYYY-MM-DD HH:mm'}}
+                  </small>
+                </span>
+              </div>
+            {{else}}
+              <div class="input-group input-group-sm rename-area">
+                {{view view.renameInputView class="form-control rename-input" valueBinding='tmpName'}}
+                <div class="input-group-btn">
+                  <button  type="button" {{action 'rename' 'cancel'}} {{bind-attr class=":btn :btn-danger :btn-xs :btn-rename-cancel isRenaming:show"}} >
+                    <i class="fa fa-times"></i> Cancel
+                  </button>
+                </div>
+                <div class="input-group-btn">
+                  <button  type="button" {{action 'rename' 'confirm'}} {{bind-attr class=":btn :btn-success :btn-xs :btn-rename isRenaming:show"}} >
+                    <i class="fa fa-check"></i> Rename
+                  </button>
+                </div>
+              </div>
+            {{/unless}}
+          </td>
+          <td >{{content.owner}}</td>
+          <td>{{content.group}}</td>
+          <td>{{content.permission}}</td>
+          <td>
+            {{#unless isMoving}}
+              <ul class="list-inline file-actions text-right">
+                <li>
+                {{#if content.isDirectory}}
+                  <a href="#" {{action 'download' 'zip'}} data-toggle="tooltip" data-placement="bottom" title="Download zip"><i class="fa fa-archive fa-fw fa-lg"></i></a>  
+                {{else}}
+                  <a href="#" {{action 'download' 'browse'}} data-toggle="tooltip" data-placement="bottom" title="Download"><i class="fa fa-download fa-fw fa-lg"></i></a>  
+                {{/if}}
+                </li>
+                <li>{{view view.deleteSingleView}}</li>
+                <li>
+                  <a href="#" {{action 'moveFile' 'cut' this.content}} data-toggle="tooltip" data-placement="bottom" title="Move"><i class="fa fa-level-down fa-rotate-270 fa-fw fa-lg"></i></span></a>  
+                </li>
+              </ul>
+            {{/unless}}
+            </td>
+          <td>
+          {{#if isMoving}}
+            <a href="#" {{action 'moveFile' 'cancel' target="parentController" }} data-toggle="tooltip" data-placement="bottom" title="Cancel moving"> <i class="fa fa-times fa-lg"></i></a>
+          {{else}}
+            {{input type="checkbox" checkedBinding='content.selected'}}
+          {{/if}}
+          {{view view.togglecontext}}
+          </td>
+        </tr>
+      {{/each}}
+    </tbody>
+  </table>
+  {{view view.contextMenu }}
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/index.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/index.hbs b/contrib/views/files/src/main/resources/ui/app/templates/index.hbs
new file mode 100644
index 0000000..0efb5b2
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/index.hbs
@@ -0,0 +1,18 @@
+{{!
+   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.
+}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/util/contextMenu.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/util/contextMenu.hbs b/contrib/views/files/src/main/resources/ui/app/templates/util/contextMenu.hbs
new file mode 100644
index 0000000..e5c601c
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/util/contextMenu.hbs
@@ -0,0 +1,56 @@
+{{!
+   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.
+}}
+
+<div id="context-menu">
+  <ul class="dropdown-menu dropdown-context compressed-context" role="menu">
+    {{#if view.target.content.isDirectory}} 
+    <li><a tabindex="-1" href="#" {{action 'open'}}>Open folder</a></li>
+    {{else}}
+    <li><a tabindex="-1" href="#" {{action 'download'}}>Download</a></li>
+    {{/if}}
+    <li><a tabindex="-1" href="#" {{action 'moveFile' 'cut' view.target.content}}>Move</a></li>
+    <li class="disabled"><a data-disabled="disabled" tabindex="-1" href="#">Permissions</a></li>
+    <li><a tabindex="-1" href="#" {{action 'rename' 'edit'}} >Rename</a></li>
+    <li class="divider"></li>
+    <li class="dropdown-submenu">
+      <a href="#" data-disabled="disabled">
+      <span> Delete </span>
+        <i class="fa fa-chevron-right pull-right fa-right"></i>
+      </a>
+      <ul class="dropdown-menu">
+        {{#if view.target.isRemoving}}
+        <li>
+        <a  tabindex="-1" href="#" data-disabled="disabled">
+          Delete forever
+          <div class="btn-group text-center dropdown-confirm">
+            <button {{action 'removeFile' 'cancel'}} type="button" class="btn btn-xs btn-danger">
+              <i class="fa fa-times"></i>
+            </button>
+            <button {{action 'removeFile' 'confirm'}} type="button" class="btn btn-xs btn-success">
+              <i class="fa fa-check"></i>
+            </button>
+          </div>
+        </a>
+        </li>
+        {{else}}
+        <li><a class="confirm-action" data-action="removeFile" tabindex="-1" href="#">Delete forever</a></li>
+        {{/if}}
+      </ul>
+    </li>
+  </ul>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/util/deleteBulk.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/util/deleteBulk.hbs b/contrib/views/files/src/main/resources/ui/app/templates/util/deleteBulk.hbs
new file mode 100644
index 0000000..0c7a13f
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/util/deleteBulk.hbs
@@ -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.
+}}
+
+{{#if isRemoving}}
+<a  tabindex="-1" href="#">
+  <i class="fa fa-exclamation-triangle"></i>
+  Delete forever
+  <div class="btn-group text-center dropdown-confirm">
+    <button {{action 'ask' target="view" }} type="button" class="btn btn-xs btn-danger">
+      <span class="glyphicon glyphicon-remove"></span>
+    </button>
+    <button {{action 'deleteFile'}} type="button" class="btn btn-xs btn-success delete">
+      <span class="glyphicon glyphicon-ok delete"></span>
+    </button>
+  </div>
+</a>
+{{else}}
+<a {{action 'ask' target="view" }} tabindex="-1" href="#">
+  <i class="fa fa-exclamation-triangle"></i>
+  Delete forever
+</a>
+{{/if}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/util/deletePopover.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/util/deletePopover.hbs b/contrib/views/files/src/main/resources/ui/app/templates/util/deletePopover.hbs
new file mode 100644
index 0000000..23a5085
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/util/deletePopover.hbs
@@ -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.
+}}
+
+<a {{action 'show' target="view"}} data-toggle="tooltip" data-placement="bottom" title="Delete"> <i class="fa fa-trash-o fa-lg"></i> </a>
+
+<div class='df-popover hide'>
+  <div class="input-group" >
+    <div class="btn-group ">
+      <button {{action 'close' target="view"}} type="button" class="btn btn-xs btn-danger">
+        <i class="fa fa-times fa-fw"></i>
+      </button>
+      <button {{action 'deleteFile'}} type="button" class="btn btn-xs btn-success">
+        <i class="fa fa-check fa-fw"></i>
+      </button>
+    </div>
+    <div class="checkbox delete-forever">
+      <label>
+        <input type="checkbox"> Delete forever
+      </label>
+    </div>
+  </div>
+</div>
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/templates/util/uploader.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/templates/util/uploader.hbs b/contrib/views/files/src/main/resources/ui/app/templates/util/uploader.hbs
new file mode 100644
index 0000000..cefc9f8
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/templates/util/uploader.hbs
@@ -0,0 +1,35 @@
+{{!
+   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.
+}}
+
+<div class="input-group input-group-sm">
+  <span class="input-group-btn">
+    <span class="btn btn-primary btn-file">
+      Browse… {{view fileInput}}
+    </span>
+    <span  {{bind-attr class=":btn :btn-danger isFiles:hide"}} {{action 'clear'}}  >
+      Clear
+    </span>
+  </span>
+  <span {{bind-attr class=":input-group-btn :btn-upload isFiles:hide"}}>
+    {{#view uploadButton data-style="expand-right" data-size="xs"}}
+      <span class="ladda-label">Upload</span>
+    {{/view}}
+  </span>
+  {{view controlInput placeholder='Select files to upload.'}}
+</div>
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/app/views/file.js
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/app/views/file.js b/contrib/views/files/src/main/resources/ui/app/views/file.js
new file mode 100644
index 0000000..98a7b10
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/app/views/file.js
@@ -0,0 +1,211 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.DeleteBulkView = Em.View.extend({
+  actions:{
+    ask:function (argument) {
+      this.get('controller').toggleProperty('isRemoving');
+      return false; 
+    }
+  }
+});
+
+App.FilesView = Em.View.extend({
+    templateName: 'files',
+    didInsertElement:function () {
+      $('.btn-sort').tooltip();
+    },
+    deleteBulkView:App.DeleteBulkView.create({
+      didInsertElement:function(){
+        var self = this;
+        $('#bulkDropdown').on('hidden.bs.dropdown', function () {
+          self.get('controller').set('isRemoving',false);
+        })
+      },
+      templateName:'util/deleteBulk',
+      tagName:'li',
+      click:function  (e) {
+        if (!$(e.target).hasClass('delete')) {
+          e.stopPropagation();
+        };
+      }
+    }),
+    deleteSingleView: Em.View.extend({
+      popoverSelector:'.df-popover',
+      actions:{
+        close:function () {
+          $(this.get('element')).popover('toggle');
+        },
+        show:function () {
+          $(this.get('element')).popover('toggle');
+        }
+      },
+      didInsertElement:function () {
+        var self = this,
+            element = $(this.get('element'));
+        $(element).popover({
+          html:true,
+          trigger:'manual',
+          placement:'top',
+          content:function() {
+            var content = element.find('.df-popover');
+            return content.html();
+          }
+        });
+
+        $('body').on('click.popover', function (e) {
+          if (!element.is(e.target) 
+              && element.has(e.target).length === 0 
+              && $('.popover').has(e.target).length === 0) {
+            element.popover('hide');
+          }
+        });
+
+        element.on('hidden.bs.popover', function () {
+          element.parent().find('.popover').remove();
+        });
+      },
+      willClearRender:function () {
+        $('body').off('click.popover');
+      },
+      templateName:'util/deletePopover',
+    }),
+    checkboxAll:Em.Checkbox.extend({
+      changeBinding:'selectAll',
+      checkedBinding:'selectedAll',
+      selectedAll:false,
+      selectAll:function () {
+        var checked = this.get('checked');
+        var items = this.get('content');
+        return items.forEach(function (item) {
+          item.set('selected',checked);
+        });
+      },
+      selection:function () {
+        var selected = this.get('content').filterProperty('selected',true);
+        if (selected.length == this.get('content.length') && selected.length > 0) {
+          this.set('selectedAll',true);
+        } else {
+          this.set('selectedAll',false);
+        }
+      }.observes('content.@each.selected'),
+    }),
+    breadcrumbsView: Ember.CollectionView.extend({
+      classNames: ['breadcrumb pull-left'],
+      tagName: 'ul',
+      content: function (argument) {
+        var crumbs = [];
+        var currentPath = this.get('controller.path').match(/((?!\/)\S)+/g)||[];
+        currentPath.forEach(function (cur,i,array) {
+          return crumbs.push({name:cur,path:'/'+array.slice(0,i+1).join('/')});
+        });
+        crumbs.unshift({name:'/',path:'/'});
+        crumbs.get('lastObject').last = 'true';
+        return crumbs;
+      }.property('controller.path'),
+      itemViewClass: Ember.View.extend({
+        classNameBindings: ['isActive:active'],
+        template: Ember.Handlebars.compile("{{#link-to 'files' (query-params path=view.content.path)}}{{view.content.name}}{{/link-to}}"),
+        isActive: function () {
+          return this.get('content.last');
+        }.property('content')
+      })
+    }),
+    renameInputView: Em.TextField.extend({
+      controller:null,
+      didInsertElement:function (argument) {
+        var element = $(this.get('element'));
+        element.focus().val(this.value)
+      },
+      keyUp: function(e) {
+        var target = this.get('targetObject');
+        if (e.keyCode==13) {
+          return target.send('rename', 'confirm');
+        };
+
+        if (e.keyCode==27) {
+          return target.send('rename', 'cancel');
+        };
+      }
+    }),
+    togglecontext:Em.View.extend({
+      didInsertElement:function () {
+        var self = this;
+        var fileRow = $(this.get('element')).parents('.file-row');
+        fileRow.contextmenu({
+          target:'#context-menu',
+          before: function(e) {
+            if (self.get('controller.isMoving')) {
+              return false;
+            };
+            self.get('parentView.contextMenu').set('target',self.get('context'));
+            return true;
+          },
+          onItem:function (t,e) {
+            if (e.target.className=='confirm-action') {
+              console.log('set waitConfirm onItem');
+              self.get('parentView.contextMenu').set('waitConfirm',e.target.dataset.action);
+              return false;
+            }
+
+            if (e.target.dataset.disabled) {
+              return false;
+            };
+          }
+        });
+        fileRow.find('[data-toggle=tooltip]').tooltip();
+        fileRow.on('click',function(e){
+          if($(e.target).is('td') || $(e.target).hasClass('allow-open')){
+            self.get('controller').send('open');
+          }
+        });
+      },
+      reBind:function(){
+        var row = $(this.get('element')).parents('.file-row');
+        Em.run.next(function(){
+          row.find('[data-toggle=tooltip]').tooltip();
+        });
+
+      }.observes('context.isMoving')
+    }),
+    contextMenu: App.ContextMenu.create(),
+    sortArrow:Em.View.extend({
+      sortProperty:null,
+      asc:true,
+      cur:false,
+      sorting:function () {
+        if (this.get('controller.sortProperties.firstObject')==this.get('sortProperty')) {
+          this.set('asc',this.get('controller.sortAscending'));
+          this.set('cur',true);
+        } else{
+          this.set('asc',true);
+          this.set('cur',false);
+        };
+      }.observes('controller.sortProperties','controller.sortAscending'),
+      tagName:'span',
+      classNames:['pull-right'],
+      template:Ember.Handlebars.compile('<i {{bind-attr class=":fa view.asc:fa-chevron-down:fa-chevron-up view.cur::fa-gr view.cur::fa-rotate-270" }} ></i>')
+    }),
+    reBind:function(){
+      Em.run.next(function(){
+        $('.isMoving').find('[data-toggle=tooltip]').tooltip();
+      });
+    }.observes('controller.hideMoving')
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/bin
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/bin b/contrib/views/files/src/main/resources/ui/bin
new file mode 100644
index 0000000..d9eb09e
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/bin
@@ -0,0 +1 @@
+node_modules/.bin
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/bower.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/bower.json b/contrib/views/files/src/main/resources/ui/bower.json
new file mode 100644
index 0000000..d837d4f
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/bower.json
@@ -0,0 +1,34 @@
+{
+  "name": "filebrowser-web",
+  "version": "0.0.1",
+  "main": "public/app.js",
+  "dependencies": {
+    "ember": "1.6.0-beta.1",
+    "ember-data": "1.0.0-beta.7",
+    "jquery": "1.9.0",
+    "bootstrap": "3.0.x",
+    "ember-uploader": "~0.2.7",
+    "ladda-bootstrap": "git://github.com/msurguy/ladda-bootstrap.git#~0.1.0",
+    "moment": "~2.5.1",
+    "ember-i18n": "~1.6.0",
+    "bootstrap-contextmenu": "~0.2.0",
+    "font-awesome": "~4.0.3"
+  },
+  "overrides": {
+    "jquery": {
+      "main": "jquery.js"
+    },
+    "ember-uploader": {
+      "main": "dist/ember-uploader.js"
+    },
+    "cldr": {
+      "main": "plurals.js"
+    },
+    "ember-i18n": {
+      "scripts": []
+    },
+    "font-awesome":{
+      "main":"css/font-awesome.css"
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/config.coffee
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/config.coffee b/contrib/views/files/src/main/resources/ui/config.coffee
new file mode 100644
index 0000000..3d629c0
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/config.coffee
@@ -0,0 +1,51 @@
+#  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.
+
+
+exports.config = 
+
+  files: 
+    
+    javascripts: 
+      defaultExtension: 'js'
+      joinTo: 
+        'javascripts/app.js': /^app/
+        'javascripts/vendor.js': /^bower_components|vendor/
+
+    stylesheets:
+      defaultExtension: 'css'
+      joinTo: 'stylesheets/app.css'
+
+    templates:
+      precompile: true
+      root: 'templates'
+      defaultExtension: 'hbs'
+      joinTo: 'javascripts/app.js' : /^app/
+      paths:
+        jquery: 'bower_components/jquery/jquery.js'
+        handlebars: 'bower_components/handlebars/handlebars.js'
+        ember: 'bower_components/ember/ember.js'
+
+  modules:
+    addSourceURLs: true
+
+  paths:
+    public: '/usr/lib/ambari-server/web/files'
+
+  overrides:
+    production:
+      paths:
+        public: 'public'

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/collection/collection.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/collection/collection.js.hbs b/contrib/views/files/src/main/resources/ui/generators/collection/collection.js.hbs
new file mode 100644
index 0000000..04a95a9
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/collection/collection.js.hbs
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.{{#camelize}}{{pluralName}}{{/camelize}}Controller = Em.ArrayController.extend({
+    content: [] 
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/collection/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/collection/generator.json b/contrib/views/files/src/main/resources/ui/generators/collection/generator.json
new file mode 100644
index 0000000..42d3588
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/collection/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "collection.js.hbs",
+      "to": "app/controllers/{{pluralName}}.js"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/controller/controller.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/controller/controller.js.hbs b/contrib/views/files/src/main/resources/ui/generators/controller/controller.js.hbs
new file mode 100644
index 0000000..66c11bb
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/controller/controller.js.hbs
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.{{#camelize}}{{name}}{{/camelize}}Controller = Em.ObjectController.extend({
+    content: null
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/controller/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/controller/generator.json b/contrib/views/files/src/main/resources/ui/generators/controller/generator.json
new file mode 100644
index 0000000..9da94c8
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/controller/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "controller.js.hbs",
+      "to": "app/controllers/{{name}}.js"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/model/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/model/generator.json b/contrib/views/files/src/main/resources/ui/generators/model/generator.json
new file mode 100644
index 0000000..e771584
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/model/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "model.js.hbs",
+      "to": "app/models/{{name}}.js"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/model/model.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/model/model.js.hbs b/contrib/views/files/src/main/resources/ui/generators/model/model.js.hbs
new file mode 100644
index 0000000..d5f5ece
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/model/model.js.hbs
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.{{#camelize}}{{name}}{{/camelize}} = DS.Model.extend({
+    
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/route/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/route/generator.json b/contrib/views/files/src/main/resources/ui/generators/route/generator.json
new file mode 100644
index 0000000..8c573b3
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/route/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "route.js.hbs",
+      "to": "app/routes/{{name}}.js"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/route/route.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/route/route.js.hbs b/contrib/views/files/src/main/resources/ui/generators/route/route.js.hbs
new file mode 100644
index 0000000..5d45dc5
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/route/route.js.hbs
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.{{#camelize}}{{name}}{{/camelize}}Route = Em.Route.extend({
+    setupController: function (controller) {
+
+    }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/template/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/template/generator.json b/contrib/views/files/src/main/resources/ui/generators/template/generator.json
new file mode 100644
index 0000000..579243d
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/template/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "template.hbs.hbs",
+      "to": "app/templates/{{name}}.hbs"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/template/template.hbs.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/template/template.hbs.hbs b/contrib/views/files/src/main/resources/ui/generators/template/template.hbs.hbs
new file mode 100644
index 0000000..0efb5b2
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/template/template.hbs.hbs
@@ -0,0 +1,18 @@
+{{!
+   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.
+}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/view/generator.json
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/view/generator.json b/contrib/views/files/src/main/resources/ui/generators/view/generator.json
new file mode 100644
index 0000000..79b2da7
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/view/generator.json
@@ -0,0 +1,9 @@
+{
+  "files": [
+    {
+      "from": "view.js.hbs",
+      "to": "app/views/{{name}}.js"
+    }
+  ],
+  "dependencies": []
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/generators/view/view.js.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/generators/view/view.js.hbs b/contrib/views/files/src/main/resources/ui/generators/view/view.js.hbs
new file mode 100644
index 0000000..7e35717
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/generators/view/view.js.hbs
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+App.{{#camelize}}{{name}}{{/camelize}}View = Em.View.extend({
+    templateName: '{{name}}'
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/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
new file mode 100644
index 0000000..54d6788
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/package.json
@@ -0,0 +1,38 @@
+{
+  "author": "Your Name",
+  "name": "package-name",
+  "description": "Package description",
+  "version": "0.0.1",
+  "homepage": "",
+  "repository": {
+    "type": "git",
+    "url": ""
+  },
+  "engines": {
+    "node": "~0.6.10 || 0.8 || 0.9"
+  },
+  "scripts": {
+    "start": "brunch watch --server",
+    "preinstall": "chmod +x node/npm/bin/node-gyp-bin/node-gyp",
+    "postinstall" : "bash node/with_new_path.sh node node_modules/.bin/bower --allow-root install"
+  },
+  "dependencies": {
+    "javascript-brunch": "^1.7.1",
+    "css-brunch": "^1.7.0",
+    "uglify-js-brunch": "^1.7.7",
+    "clean-css-brunch": "^1.7.1",
+    "bower": "^1.2.8",
+    "brunch": "^1.7.13",
+    "scaffolt": "^0.4.3",
+    "ember-precompiler-brunch": "^1.5.1",
+    "less-brunch": "^1.7.2"
+  },
+  "devDependencies": {},
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ]
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/ui/test/spec.coffee
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/ui/test/spec.coffee b/contrib/views/files/src/main/resources/ui/test/spec.coffee
new file mode 100644
index 0000000..ecf0374
--- /dev/null
+++ b/contrib/views/files/src/main/resources/ui/test/spec.coffee
@@ -0,0 +1,17 @@
+# 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.
+
+# Write your [mocha](http://visionmedia.github.com/mocha/) specs here.

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/files/src/main/resources/view.xml
----------------------------------------------------------------------
diff --git a/contrib/views/files/src/main/resources/view.xml b/contrib/views/files/src/main/resources/view.xml
new file mode 100644
index 0000000..f4e145f
--- /dev/null
+++ b/contrib/views/files/src/main/resources/view.xml
@@ -0,0 +1,42 @@
+<!--
+   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>FILE_BROWSER</name>
+    <label>File browser</label>
+    <version>1.0.0</version>
+
+    <parameter>
+        <name>dataworker.defaultFs</name>
+        <description>FileSystem URI</description>
+        <required>true</required>
+    </parameter>
+
+    
+    <resource>
+        <name>filebrowser</name>
+        <service-class>org.apache.ambari.view.filebrowser.FileBrowserService</service-class>
+    </resource>
+ 
+    <instance>
+        <name>FILEBROWSER_1</name>
+        <property>
+            <key>dataworker.defaultFs</key>
+            <value>hdfs://sandbox.hortonworks.com:8020</value>
+        </property>
+    </instance>
+  
+</view>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/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
new file mode 100644
index 0000000..e74d5b2
--- /dev/null
+++ b/contrib/views/files/src/test/java/org/apache/ambari/view/filebrowser/FilebrowserTest.java
@@ -0,0 +1,185 @@
+/**
+ * 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 static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import javax.ws.rs.client.WebTarget;
+
+import org.apache.ambari.view.ViewContext;
+import org.apache.ambari.view.ViewResourceHandler;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.json.simple.JSONArray;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.Ignore;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.sun.jersey.core.header.FormDataContentDisposition;
+import com.sun.jersey.multipart.FormDataBodyPart;
+
+
+
+public class FilebrowserTest{
+    private ViewResourceHandler handler;
+    private ViewContext context;
+    private HttpHeaders httpHeaders;
+    private UriInfo uriInfo;
+
+    private Map<String, String> properties;
+    private FileBrowserService fileBrowserService;
+
+    private MiniDFSCluster hdfsCluster;
+    public static final String BASE_URI = "http://localhost:8084/myapp/";
+
+
+    @Before
+    public void setUp() throws Exception {
+        handler = createNiceMock(ViewResourceHandler.class);
+        context = createNiceMock(ViewContext.class);
+        httpHeaders = createNiceMock(HttpHeaders.class);
+        uriInfo = createNiceMock(UriInfo.class);
+
+        properties = new HashMap<String, String>();
+        File baseDir = new File("./target/hdfs/" + "FilebrowserTest")
+            .getAbsoluteFile();
+        FileUtil.fullyDelete(baseDir);
+        Configuration conf = new Configuration();
+        conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, baseDir.getAbsolutePath());
+        MiniDFSCluster.Builder builder = new MiniDFSCluster.Builder(conf);
+        hdfsCluster = builder.build();
+        String hdfsURI = hdfsCluster.getURI() + "/";
+        properties.put("dataworker.defaultFs", hdfsURI);
+        expect(context.getProperties()).andReturn(properties).anyTimes();
+        expect(context.getUsername()).andReturn("ambari-qa").anyTimes();
+        replay(handler, context, httpHeaders, uriInfo);
+        fileBrowserService = getService(FileBrowserService.class, handler, context);
+        FileOperationService.MkdirRequest request = new FileOperationService.MkdirRequest();
+        request.path = "/tmp";
+        fileBrowserService.fileOps().mkdir(request, httpHeaders, uriInfo);
+    }
+
+    @After
+    public void tearDown() {
+        hdfsCluster.shutdown();
+    }
+
+  // TODO : fix test!!!
+    @Ignore
+    @Test
+    public void testListDir() throws IOException, Exception {
+        FileOperationService.MkdirRequest request = new FileOperationService.MkdirRequest();
+        request.path = "/tmp1";
+        fileBrowserService.fileOps().mkdir(request, httpHeaders, uriInfo);
+        Response response = fileBrowserService.fileOps().listdir("/", httpHeaders,
+            uriInfo);
+        JSONArray statuses = (JSONArray) response.getEntity();
+        System.out.println(response.getEntity());
+        Assert.assertEquals(200, response.getStatus());
+        Assert.assertTrue(statuses.size() > 0);
+        System.out.println(statuses);
+    }
+
+    private Response uploadFile(String path, String fileName,
+        String fileExtension, String fileContent) throws Exception {
+        File tempFile = File.createTempFile(fileName, fileExtension);
+        BufferedWriter bw = new BufferedWriter(new FileWriter(tempFile));
+        bw.write(fileContent);
+        bw.close();
+        InputStream content = new FileInputStream(tempFile);
+        FormDataBodyPart inputStreamBody = new FormDataBodyPart(
+            FormDataContentDisposition.name("file")
+                .fileName(fileName + fileExtension).build(), content,
+            MediaType.APPLICATION_OCTET_STREAM_TYPE);
+
+        Response response = fileBrowserService.upload().uploadFile(content,
+            inputStreamBody.getFormDataContentDisposition(), "/tmp/");
+        return response;
+    }
+
+  // TODO : fix test!!!
+    @Ignore
+    @Test
+    public void testUploadFile() throws Exception {
+        Response response = uploadFile("/tmp/", "testUpload", ".tmp", "Hello world");
+        Assert.assertEquals(200, response.getStatus());
+        Response listdir = fileBrowserService.fileOps().listdir("/tmp", httpHeaders,
+            uriInfo);
+        JSONArray statuses = (JSONArray) listdir.getEntity();
+        System.out.println(statuses.size());
+        Response response2 = fileBrowserService.download().browse("/tmp/testUpload.tmp", false, httpHeaders, uriInfo);
+        Assert.assertEquals(200, response2.getStatus());
+    }
+
+  // TODO : fix test!!!
+    @Ignore
+    @Test
+    public void testStreamingGzip() throws Exception {
+        String gzipDir = "/tmp/testGzip";
+        FileOperationService.MkdirRequest request = new FileOperationService.MkdirRequest();
+        request.path = gzipDir;
+        fileBrowserService.fileOps().mkdir(request, httpHeaders, uriInfo);
+        for (int i = 0; i < 10; i++) {
+            uploadFile(gzipDir, "testGzip" + i, ".txt", "Hello world" + i);
+        }
+        DownloadService.DownloadRequest dr = new DownloadService.DownloadRequest();
+        dr.entries = new String[] { gzipDir };
+
+        Response result = fileBrowserService.download().downloadGZip(dr);
+    }
+
+    private static <T> T getService(Class<T> clazz,
+        final ViewResourceHandler viewResourceHandler,
+        final ViewContext viewInstanceContext) {
+        Injector viewInstanceInjector = Guice.createInjector(new AbstractModule() {
+            @Override
+            protected void configure() {
+                bind(ViewResourceHandler.class).toInstance(viewResourceHandler);
+                bind(ViewContext.class).toInstance(viewInstanceContext);
+            }
+        });
+        return viewInstanceInjector.getInstance(clazz);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pom.xml b/contrib/views/pom.xml
index e6fb0c7..b52fa62 100644
--- a/contrib/views/pom.xml
+++ b/contrib/views/pom.xml
@@ -23,9 +23,7 @@
   <version>0.1.0-SNAPSHOT</version>
   <name>Ambari Views Proof of Concept</name>
   <modules>
-    <!--
-            <module>files</module>
-    -->
+    <module>files</module>
     <module>pig</module>
   </modules>
   <build>

http://git-wip-us.apache.org/repos/asf/ambari/blob/3daffeac/contrib/views/pom.xml.rej
----------------------------------------------------------------------
diff --git a/contrib/views/pom.xml.rej b/contrib/views/pom.xml.rej
new file mode 100644
index 0000000..5a77cbd
--- /dev/null
+++ b/contrib/views/pom.xml.rej
@@ -0,0 +1,136 @@
+***************
+*** 0 ****
+--- 1,133 ----
++ <!--
++    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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
++          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
++     <modelVersion>4.0.0</modelVersion>
++     <groupId>org.apache.ambari.views</groupId>
++     <artifactId>ambari-views-poc</artifactId>
++     <packaging>pom</packaging>
++     <version>0.1.0-SNAPSHOT</version>
++     <name>Ambari Views Proof of Concept</name>
++     <modules>
++         <module>files</module>
++         <module>pig</module>
++     </modules>
++     <build>
++         <pluginManagement>
++             <plugins>
++                 <plugin>
++                     <groupId>org.apache.rat</groupId>
++                     <artifactId>apache-rat-plugin</artifactId>
++                     <version>0.8</version>
++                 </plugin>
++             </plugins>
++         </pluginManagement>
++         <plugins>
++             <plugin>
++                 <groupId>org.apache.rat</groupId>
++                 <artifactId>apache-rat-plugin</artifactId>
++                 <configuration>
++                     <excludes>
++                         <!--GIT files-->
++                         <exclude>.git/</exclude>
++                         <exclude>**/.gitignore</exclude>
++                         <exclude>**/.gitattributes</exclude>
++                         <!--gitignore content-->
++                         <exclude>.idea/</exclude>
++                         <exclude>pass.txt</exclude>
++                         <exclude>.DS_Store</exclude>
++                         <exclude>.iml/</exclude>
++                         <exclude>.classpath</exclude>
++                         <exclude>.project</exclude>
++                         <exclude>.settings</exclude>
++                         <!--license files-->
++                         <exclude>MSPL-LICENSE</exclude>
++                         <!--VS generated files-->
++                         <exclude>**/*.resources</exclude>
++                         <exclude>**/*.rtf</exclude>
++                         <exclude>**/*.snk</exclude>
++                         <exclude>**/*.cs</exclude>
++                     </excludes>
++                 </configuration>
++             </plugin>
++     <plugin>
++         <artifactId>maven-assembly-plugin</artifactId>
++         <executions>
++           <execution>
++             <phase>package</phase>
++             <goals>
++               <goal>attached</goal>
++             </goals>
++           </execution>
++         </executions>
++         <configuration>
++           <descriptorRefs>
++             <descriptorRef>jar-with-dependencies</descriptorRef>
++           </descriptorRefs>
++           <outputDirectory>${basedir}/target</outputDirectory>
++         </configuration>
++       </plugin>
++       <plugin>
++         <groupId>org.apache.maven.plugins</groupId>
++         <artifactId>maven-compiler-plugin</artifactId>
++         <version>3.1</version>
++         <configuration>
++           <source>1.6</source>
++           <target>1.6</target>
++         </configuration>
++       </plugin>
++     </plugins>
++ 
++     </build>
++     <dependencyManagement>
++         <dependencies>
++             <dependency>
++                 <groupId>org.glassfish.jersey.containers</groupId>
++                 <artifactId>jersey-container-servlet</artifactId>
++                 <version>2.6</version>
++             </dependency>
++             <dependency>
++                 <groupId>junit</groupId>
++                 <artifactId>junit</artifactId>
++                 <version>4.11</version>
++                 <scope>test</scope>
++             </dependency>
++             <dependency>
++                 <groupId>com.google.inject</groupId>
++                 <artifactId>guice</artifactId>
++                 <version>4.0-beta</version>
++             </dependency>
++             <dependency>
++                 <groupId>org.easymock</groupId>
++                 <artifactId>easymock</artifactId>
++                 <version>3.2</version>
++                 <scope>test</scope>
++             </dependency>
++             <dependency>
++                 <groupId>com.googlecode.json-simple</groupId>
++                 <artifactId>json-simple</artifactId>
++                 <version>1.1.1</version>
++             </dependency>
++             <dependency>
++                 <groupId>org.apache.ambari</groupId>
++                 <artifactId>ambari-views</artifactId>
++                 <version>[1.5.0.1,)</version>
++             </dependency>
++         </dependencies>
++     </dependencyManagement>
++ 
++ </project>


Mime
View raw message