http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/change-name-invoke.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/change-name-invoke.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/change-name-invoke.js
deleted file mode 100644
index 30c2277..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/change-name-invoke.js
+++ /dev/null
@@ -1,57 +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.
-*/
-/**
- * Render entity expungement as a modal
- */
-define([
-    "underscore", "jquery", "backbone", "brooklyn-utils",
-    "text!tpl/apps/change-name-modal.html"
-], function(_, $, Backbone, Util, ChangeNameModalHtml) {
-    return Backbone.View.extend({
-        template: _.template(ChangeNameModalHtml),
-        initialize: function() {
-            this.title = "Change Name of "+this.options.entity.get('name');
-        },
-        render: function() {
-            this.$el.html(this.template({ name: 
this.options.entity.get('name') }));
-            return this;
-        },
-        onSubmit: function() {
-            var self = this;
-            var newName = this.$("#new-name").val();
-            var url = this.options.entity.get('links').rename + "?name=" + 
encodeURIComponent(newName);
-            var ajax = $.ajax({
-                type: "POST",
-                url: url,
-                contentType: "application/json",
-                success: function() {
-                    self.options.target.reload();
-                },
-                error: function(response) {
-                    self.showError(Util.extractError(response, "Error 
contacting server", url));
-                }
-            });
-            return ajax;
-        },
-        showError: function (message) {
-            this.$(".change-name-error-container").removeClass("hide");
-            this.$(".change-name-error-message").html(message);
-        }
-    });
-});

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/effector-invoke.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/effector-invoke.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/effector-invoke.js
deleted file mode 100644
index 7c9e0bd..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/effector-invoke.js
+++ /dev/null
@@ -1,171 +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.
-*/
-/**
- * Render an entity effector as a modal.
- */
-define([
-    "underscore", "jquery", "backbone",
-    "model/location",
-    "text!tpl/apps/effector-modal.html",
-    "text!tpl/app-add-wizard/deploy-location-row.html", 
-    "text!tpl/app-add-wizard/deploy-location-option.html",
-    "text!tpl/apps/param.html",
-    "text!tpl/apps/param-list.html",
-    "bootstrap"
-], function (_, $, Backbone, Location, EffectorModalHtml, 
-        DeployLocationRowHtml, DeployLocationOptionHtml, ParamHtml, 
ParamListHtml) {
-
-    var EffectorInvokeView = Backbone.View.extend({
-        template:_.template(EffectorModalHtml),
-        locationRowTemplate:_.template(DeployLocationRowHtml),
-        locationOptionTemplate:_.template(DeployLocationOptionHtml),
-        effectorParam:_.template(ParamHtml),
-        effectorParamList:_.template(ParamListHtml),
-
-        events:{
-            "click .invoke-effector":"invokeEffector",
-            "shown": "onShow",
-            "hide": "onHide"
-        },
-
-        initialize:function () {
-            this.locations = this.options.locations /* for testing */
-              || new Location.Collection();
-        },
-
-        onShow: function() {
-            this.delegateEvents();
-            this.$el.fadeTo(500,1);
-        },
-
-        onHide: function() {
-            this.undelegateEvents();
-        },
-
-        render:function () {
-            var that = this, params = this.model.get("parameters")
-            this.$el.html(this.template({
-                name:this.model.get("name"),
-                entityName:this.options.entity.get("name"),
-                
description:this.model.get("description")?this.model.get("description"):""
-            }))
-            // do we have parameters to render?
-            if (params.length !== 0) {
-                this.$(".modal-body").html(this.effectorParamList({}))
-                // select the body of the table we just rendered and append 
params
-                var $tbody = this.$("tbody")
-                _(params).each(function (param) {
-                    // TODO: this should be another view whose implementation 
is specific to
-                    // the type of the parameter (i.e. text, dates, checkboxes 
etc. can all
-                    // be handled separately).
-                    $tbody.append(that.effectorParam({
-                        name:param.name,
-                        type:param.type,
-                        description:param.description?param.description:"",
-                        defaultValue:param.defaultValue
-                    }))
-                })
-                var container = this.$("#selector-container")
-                if (container.length) {                    
-                    this.locations.fetch({async:false})
-                    container.empty()
-                    var chosenLocation = this.locations[0];
-                    container.append(that.locationRowTemplate({
-                        initialValue : chosenLocation,
-                        rowId : 0
-                    }))
-                    var $selectLocations = container.find('.select-location')
-                        .append(this.locationOptionTemplate({
-                                id: "",
-                                name: "None"
-                            }))
-                        .append("<option disabled>------</option>");
-                    this.locations.each(function(aLocation) {
-                        var $option = that.locationOptionTemplate({
-                            id:aLocation.id,
-                            url:aLocation.getLinkByName("self"),
-                            name:aLocation.getPrettyName()
-                        })
-                        $selectLocations.append($option)
-                    })
-                    $selectLocations.each(function(i) {
-                        var url = 
$($selectLocations[i]).parent().attr('initialValue');
-                        $($selectLocations[i]).val(url)
-                    })
-                }
-            }
-            this.$(".modal-body").find('*[rel="tooltip"]').tooltip()
-            return this
-        },
-
-        extractParamsFromTable:function () {
-            var parameters = {};
-
-            // iterate over the rows
-            // TODO: this should be generic alongside the rendering of 
parameters.
-            this.$(".effector-param").each(function (index) {
-                var key = $(this).find(".param-name").text();
-                var valElement = $(this).find(".param-value");
-                var value;
-                if (valElement.attr('id') == 'selector-container') {
-                    value = $(this).find(".param-value 
option:selected").attr("value")
-                } else if (valElement.is(":checkbox")) {
-                    value = ("checked" == valElement.attr("checked")) ? "true" 
: "false";
-                } else {
-                    value = valElement.val();
-                }
-                //treat empty field as null value
-                if (value !== '') {
-                    parameters[key] = value;
-                }
-            });
-            return parameters
-        },
-
-        invokeEffector:function () {
-            var that = this
-            var url = this.model.getLinkByName("self")
-            var parameters = this.extractParamsFromTable()
-            this.$el.fadeTo(500,0.5);
-            $.ajax({
-                type:"POST",
-                url:url+"?timeout=0",
-                data:JSON.stringify(parameters),
-                contentType:"application/json",
-                success:function (data) {
-                    that.$el.modal("hide")
-                    that.$el.fadeTo(500,1);
-                    if (that.options.openTask)
-                        
that.options.tabView.openTab('activities/subtask/'+data.id);
-                },
-                error: function(data) {
-                    
that.$el.fadeTo(100,1).delay(200).fadeTo(200,0.2).delay(200).fadeTo(200,1);
-                    // TODO render the error better than poor-man's flashing
-                    // (would just be connection error -- with timeout=0 we 
get a task even for invalid input)
-                    
-                    console.error("ERROR invoking effector")
-                    console.debug(data)
-                }})
-            // un-delegate events
-            this.undelegateEvents()
-        }
-
-    })
-    return EffectorInvokeView
-})

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-activities.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-activities.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-activities.js
deleted file mode 100644
index 07dc948..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-activities.js
+++ /dev/null
@@ -1,249 +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.
-*/
-/**
- * Displays the list of activities/tasks the entity performed.
- */
-define([
-    "underscore", "jquery", "backbone", "brooklyn-utils", "view/viewutils",
-    "view/activity-details",
-    "text!tpl/apps/activities.html", "text!tpl/apps/activity-table.html", 
-    "text!tpl/apps/activity-row-details.html", 
"text!tpl/apps/activity-row-details-main.html",
-    "text!tpl/apps/activity-full-details.html", 
-    "bootstrap", "jquery-datatables", "datatables-extensions", "moment"
-], function (_, $, Backbone, Util, ViewUtils, ActivityDetailsView, 
-    ActivitiesHtml, ActivityTableHtml, ActivityRowDetailsHtml, 
ActivityRowDetailsMainHtml, ActivityFullDetailsHtml) {
-
-    var ActivitiesView = Backbone.View.extend({
-        template:_.template(ActivitiesHtml),
-        table:null,
-        refreshActive:true,
-        selectedId:null,
-        selectedRow:null,
-        events:{
-            "click #activities-root .activity-table tr":"rowClick",
-            'click #activities-root .refresh':'refreshNow',
-            'click #activities-root .toggleAutoRefresh':'toggleAutoRefresh',
-            'click #activities-root .showDrillDown':'showDrillDown',
-            'click #activities-root .toggleFullDetail':'toggleFullDetail'
-        },
-        initialize:function () {
-            _.bindAll(this)
-            this.$el.html(this.template({ }));
-            this.$('#activities-root').html(_.template(ActivityTableHtml))
-            var that = this,
-                $table = that.$('#activities-root .activity-table');
-            that.collection.url = that.model.getLinkByName("activities");
-            that.table = ViewUtils.myDataTable($table, {
-                "fnRowCallback": function( nRow, aData, iDisplayIndex, 
iDisplayIndexFull ) {
-                    $(nRow).attr('id', aData[0])
-                    $(nRow).addClass('activity-row')
-                },
-                "aaSorting": [[ 2, "desc" ]],
-                "aoColumnDefs": [
-                                 {
-                                     "mRender": function ( data, type, row ) {
-                                         return Util.escape(data)
-                                     },
-                                     "aTargets": [ 1, 3 ]
-                                 },
-                                 {
-                                     "mRender": function ( data, type, row ) {
-                                         if ( type === 'display' ) {
-                                             data = moment(data).calendar();
-                                         }
-                                         return Util.escape(data)
-                                     },
-                                     "aTargets": [ 2 ]
-                                 },
-                                 { "bVisible": false,  "aTargets": [ 0 ] }
-                             ]            
-            });
-            
-            // TODO domain-specific filters
-            ViewUtils.addAutoRefreshButton(that.table);
-            ViewUtils.addRefreshButton(that.table);
-            
-            ViewUtils.fadeToIndicateInitialLoad($table);
-            that.collection.on("reset", that.renderOnLoad, that);
-            ViewUtils.fetchRepeatedlyWithDelay(this, this.collection, 
-                    { fetchOptions: { reset: true }, doitnow: true, 
-                    enablement: function() { return that.refreshActive }  });
-        },
-        refreshNow: function() {
-            this.collection.fetch({reset: true});
-        },
-        render:function () {
-            this.updateActivitiesNow();
-            var details = this.options.tabView ? 
this.options.tabView.options.preselectTabDetails : null;
-            if (details && details!=this.lastPreselectTabDetails) {
-                this.lastPreselectTabDetails = details;
-                // should be a path
-                this.queuedTasksToOpen = details.split("/");
-            }
-            this.tryOpenQueuedTasks();
-            return this;
-        },
-        tryOpenQueuedTasks: function() {
-            if (!this.queuedTasksToOpen || this.tryingOpenQueuedTasks) return;
-            this.openingQueuedTasks = true;
-            var $lastActivityPanel = null;
-            while (true) {
-                var task = this.queuedTasksToOpen.shift();
-                if (task == undefined) {
-                    this.openingQueuedTasks = false;                    
-                    return;
-                }
-                if (task == 'subtask') {
-                    var subtask = this.queuedTasksToOpen.shift();
-                    $lastActivityPanel = this.showDrillDownTask(subtask, 
$lastActivityPanel);
-                } else {
-                    log("unknown queued task for activities panel: "+task)
-                    // skip it, just continue
-                }
-            }
-        },
-        beforeClose:function () {
-            this.collection.off("reset", this.renderOnLoad);
-        },
-        renderOnLoad: function() {
-            this.loaded = true;
-            this.render();
-            ViewUtils.cancelFadeOnceLoaded(this.table);
-        },
-        toggleAutoRefresh:function () {
-            ViewUtils.toggleAutoRefresh(this);
-        },
-        enableAutoRefresh: function(isEnabled) {
-            this.refreshActive = isEnabled
-        },
-        refreshNow: function() {
-            this.collection.fetch();
-            this.table.fnAdjustColumnSizing();
-        },
-        updateActivitiesNow: function() {
-            var that = this;
-            if (this.table == null || this.collection.length==0 || 
this.viewIsClosed) {
-                // nothing to do
-            } else {
-                var topLevelTasks = []
-                for (taskI in this.collection.models) {
-                    var task = this.collection.models[taskI]
-                    var submitter = task.get("submittedByTask")
-                    if ((submitter==null) ||
-                        (submitter!=null && 
this.collection.get(submitter.metadata.id)==null)
-                    ) {                        
-                        topLevelTasks.push(task)
-                    }
-                }
-                ViewUtils.updateMyDataTable(that.table, topLevelTasks, 
function(task, index) {
-                    return [ task.get("id"),
-                             task.get("displayName"),
-                             task.get("submitTimeUtc"),
-                             task.get("currentStatus")
-                    ]; 
-                });
-                this.showDetailRow(true);
-            }
-            return this;
-        },
-        rowClick:function(evt) {
-            var row = $(evt.currentTarget).closest("tr");
-            var id = row.attr("id");
-            if (id==null)
-                // is the details row, ignore click here
-                return;
-            this.showDrillDownTask(id);
-            return;
-        },
-        showDrillDown: function(event) {
-            
this.showDrillDownTask($(event.currentTarget).closest("td.row-expansion").attr("id"));
-        },
-        showDrillDownTask: function(taskId, optionalParent) {  
-//            log("showing initial drill down "+taskId)
-            var that = this;
-            
-            var activityDetailsPanel = new ActivityDetailsView({
-                taskId: taskId,
-                tabView: that,
-                collection: this.collection,
-                breadcrumbs: ''
-            })
-            activityDetailsPanel.addToView(optionalParent || 
this.$(".activity-table"));
-            return activityDetailsPanel.$el;
-        },
-        
-        showDetailRow: function(updateOnly) {
-            var id = this.selectedId,
-                that = this;
-            if (id==null) return;
-            var task = this.collection.get(id);
-            if (task==null) return;
-            if (!updateOnly) {
-                var html = _.template(ActivityRowDetailsHtml, { 
-                    task: task==null ? null : task.attributes,
-                    link: that.model.getLinkByName("activities")+"/"+id,
-                    updateOnly: updateOnly
-                })
-                $('tr#'+id).next().find('td.row-expansion').html(html)
-                $('tr#'+id).next().find('td.row-expansion').attr('id', id)
-            } else {
-                // just update
-                
$('tr#'+id).next().find('.task-description').html(Util.escape(task.attributes.description))
-            }
-            
-            var html = _.template(ActivityRowDetailsMainHtml, { 
-                task: task==null ? null : task.attributes,
-                link: that.model.getLinkByName("activities")+"/"+id,
-                updateOnly: updateOnly 
-            })
-            $('tr#'+id).next().find('.expansion-main').html(html)
-            
-            
-            if (!updateOnly) {
-                $('tr#'+id).next().find('.row-expansion 
.opened-row-details').hide()
-                $('tr#'+id).next().find('.row-expansion 
.opened-row-details').slideDown(300)
-            }
-        },
-        toggleFullDetail: function(evt) {
-            var i = $('.toggleFullDetail');
-            var id = i.closest("td.row-expansion").attr('id')
-            i.toggleClass('active')
-            if (i.hasClass('active'))
-                this.showFullActivity(id)
-            else
-                this.hideFullActivity(id)
-        },
-        showFullActivity: function(id) {
-            id = this.selectedId
-            var $details = $("td.row-expansion#"+id+" .expansion-footer");
-            var task = this.collection.get(id);
-            var html = _.template(ActivityFullDetailsHtml, { task: task });
-            $details.html(html);
-            $details.slideDown(100);
-            _.defer(function() { 
ViewUtils.setHeightAutomatically($('textarea',$details), 30, 200) })
-        },
-        hideFullActivity: function(id) {
-            id = this.selectedId
-            var $details = $("td.row-expansion#"+id+" .expansion-footer");
-            $details.slideUp(100);
-        }
-    });
-
-    return ActivitiesView;
-});

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-advanced.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-advanced.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-advanced.js
deleted file mode 100644
index fe18430..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-advanced.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
-*/
-/**
- * Render entity advanced tab.
- *
- * @type {*}
- */
-define(["underscore", "jquery", "backbone", "brooklyn", "brooklyn-utils", 
"view/viewutils",
-    "text!tpl/apps/advanced.html", "view/change-name-invoke", 
"view/add-child-invoke", "view/policy-new"
-], function(_, $, Backbone, Brooklyn, Util, ViewUtils,
-        AdvancedHtml, ChangeNameInvokeView, AddChildInvokeView, NewPolicyView) 
{
-    var EntityAdvancedView = Backbone.View.extend({
-        events: {
-            "click button#change-name": "showChangeNameModal",
-            "click button#add-child": "showAddChildModal",
-            "click button#add-new-policy": "showNewPolicyModal",
-            "click button#reset-problems": "confirmResetProblems",
-            "click button#expunge": "confirmExpunge",
-            "click button#unmanage": "confirmUnmanage",
-            "click #advanced-tab-error-closer": "closeAdvancedTabError"
-        },
-        template: _.template(AdvancedHtml),
-        initialize:function() {
-            _.bindAll(this);
-            this.$el.html(this.template());
-
-            this.model.on('change', this.modelChange, this);
-            this.modelChange();
-            
-            ViewUtils.getRepeatedlyWithDelay(this, 
this.model.get('links').locations, this.renderLocationData);
-            ViewUtils.get(this, this.model.get('links').tags, this.renderTags);
-            
-            ViewUtils.attachToggler(this.$el);
-        },
-        modelChange: function() {
-            
this.$('#entity-name').html(Util.toDisplayString(this.model.get("name")));
-            ViewUtils.updateTextareaWithData($("#advanced-entity-json", 
this.$el), Util.toTextAreaString(this.model), true, false, 250, 600);
-        },
-        renderLocationData: function(data) {
-            ViewUtils.updateTextareaWithData($("#advanced-locations", 
this.$el), Util.toTextAreaString(data), true, false, 250, 600);
-        },
-        renderTags: function(data) {
-            var list = "";
-            for (tag in data)
-                list += "<div 
class='activity-tag-giftlabel'>"+Util.toDisplayString(data[tag])+"</div>";
-            if (!list) list = "No tags";
-            this.$('#advanced-entity-tags').html(list);
-        },
-        reload: function() {
-            this.model.fetch();
-        },
-        
-        showModal: function(modal) {
-            if (this.activeModal)
-                this.activeModal.close();
-            this.activeModal = modal;
-            Brooklyn.view.showModalWith(modal);
-        },
-        showChangeNameModal: function() {
-            this.showModal(new ChangeNameInvokeView({
-                entity: this.model,
-                target:this
-            }));
-        },
-        showAddChildModal: function() {
-            this.showModal(new AddChildInvokeView({
-                entity: this.model,
-                target:this
-            }));
-        },
-        showNewPolicyModal: function () {
-            this.showModal(new NewPolicyView({
-                entity: this.model,
-            }));
-        },
-        
-        confirmResetProblems: function () {
-            var entity = this.model.get("name");
-            var title = "Confirm the reset of problem indicators in " + entity;
-            var q = "<p>Are you sure you want to reset the problem indicators 
for this entity?</p>" +
-                "<p>If a problem has been fixed externally, but the fix is not 
being detected, this will clear problems. " +
-                "If the problem is not actually fixed, many feeds and 
enrichers will re-detect it, but note that some may not, " +
-                "and the entity may show as healthy when it is not." +
-                "</p>";
-            Brooklyn.view.requestConfirmation(q, 
title).done(this.doResetProblems);
-        },
-        doResetProblems: function() {
-            
this.post(this.model.get('links').sensors+"/"+"service.notUp.indicators", {});
-            this.post(this.model.get('links').sensors+"/"+"service.problems", 
{});
-        },
-        post: function(url, data) {
-            var self = this;
-            
-            $.ajax({
-                type: "POST",
-                url: url,
-                data: JSON.stringify(data),
-                contentType: "application/json",
-                success: function() {
-                    self.reload();
-                },
-                error: function(response) {
-                    self.showAdvancedTabError(Util.extractError(response, 
"Error contacting server", url));
-                }
-            });
-        },
-        
-        confirmExpunge: function () {
-            var entity = this.model.get("name");
-            var title = "Confirm the expunging of " + entity;
-            var q = "<p>Are you certain you want to expunge this entity?</p>" +
-                "<p>When possible, Brooklyn will delete all of its 
resources.</p>" +
-                "<p><span class='label label-important'>Important</span> " +
-                "<b>This action is irreversible</b></p>";
-            this.unmanageAndOrExpunge(q, title, true);
-        },
-        confirmUnmanage: function () {
-            var entity = this.model.get("name");
-            var title = "Confirm the unmanagement of " + entity;
-            var q = "<p>Are you certain you want to unmanage this entity?</p>" 
+
-            "<p>Its resources will be left running.</p>" +
-            "<p><span class='label label-important'>Important</span> " +
-            "<b>This action is irreversible</b></p>";
-            this.unmanageAndOrExpunge(q, title, false);
-        },
-        unmanageAndOrExpunge: function (question, title, releaseResources) {
-            var self = this;
-            Brooklyn.view.requestConfirmation(question, title).done(function() 
{
-                return $.ajax({
-                    type: "POST",
-                    url: self.model.get("links").expunge + "?release=" + 
releaseResources + "&timeout=0",
-                    contentType: "application/json"
-                }).done(function() {
-                    self.trigger("entity.expunged");
-                }).fail(function() {
-                    // (would just be connection error -- with timeout=0 we 
get a task even for invalid input)
-                    self.showAdvancedTabError("Error connecting to Brooklyn 
server");
-                    
-                    log("ERROR unmanaging/expunging");
-                    log(data);
-                });
-            });
-        },
-
-        showAdvancedTabError: function(errorMessage) {
-            self.$("#advanced-tab-error-message").html(_.escape(errorMessage));
-            self.$("#advanced-tab-error-section").removeClass("hide");
-        },
-        closeAdvancedTabError: function() {
-            self.$("#advanced-tab-error-section").addClass("hide");
-        },
-        
-        beforeClose:function() {
-            if (this.activeModal)
-                this.activeModal.close();
-            this.options.tabView.configView.close();
-            this.model.off();
-        }
-    });
-    return EntityAdvancedView;
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-config.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-config.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-config.js
deleted file mode 100644
index f517bcb..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-config.js
+++ /dev/null
@@ -1,516 +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.
-*/
-/**
- * Render entity config tab.
- *
- * @type {*}
- */
-define([
-    "underscore", "jquery", "backbone", "brooklyn-utils", "zeroclipboard", 
"view/viewutils", 
-    "model/config-summary", "text!tpl/apps/config.html", 
"text!tpl/apps/config-name.html",
-    "jquery-datatables", "datatables-extensions"
-], function (_, $, Backbone, Util, ZeroClipboard, ViewUtils, ConfigSummary, 
ConfigHtml, ConfigNameHtml) {
-
-    // TODO consider extracting all such usages to a shared ZeroClipboard 
wrapper?
-    ZeroClipboard.config({ moviePath: 
'//cdnjs.cloudflare.com/ajax/libs/zeroclipboard/1.3.1/ZeroClipboard.swf' });
-
-    var configHtml = _.template(ConfigHtml),
-        configNameHtml = _.template(ConfigNameHtml);
-
-    // TODO refactor to share code w entity-sensors.js
-    // in meantime, see notes there!
-    var EntityConfigView = Backbone.View.extend({
-        template: configHtml,
-        configMetadata:{},
-        refreshActive:true,
-        zeroClipboard: null,
-        
-        events:{
-            'click .refresh':'updateConfigNow',
-            'click .filterEmpty':'toggleFilterEmpty',
-            'click .toggleAutoRefresh':'toggleAutoRefresh',
-            'click #config-table div.secret-info':'toggleSecrecyVisibility',
-
-            'mouseup .valueOpen':'valueOpen',
-            'mouseover #config-table tbody tr':'noteFloatMenuActive',
-            'mouseout #config-table tbody tr':'noteFloatMenuSeemsInactive',
-            'mouseover .floatGroup':'noteFloatMenuActive',
-            'mouseout .floatGroup':'noteFloatMenuSeemsInactive',
-            'mouseover .clipboard-item':'noteFloatMenuActiveCI',
-            'mouseout .clipboard-item':'noteFloatMenuSeemsInactiveCI',
-            'mouseover .hasFloatLeft':'showFloatLeft',
-            'mouseover .hasFloatDown':'enterFloatDown',
-            'mouseout .hasFloatDown':'exitFloatDown',
-            'mouseup .light-popup-menu-item':'closeFloatMenuNow',
-        },
-        
-        initialize:function () {
-            _.bindAll(this);
-            this.$el.html(this.template());
-            
-            var that = this,
-                $table = this.$('#config-table');
-            that.table = ViewUtils.myDataTable($table, {
-                "fnRowCallback": function( nRow, aData, iDisplayIndex, 
iDisplayIndexFull ) {
-                    $(nRow).attr('id', aData[0]);
-                    $('td',nRow).each(function(i,v){
-                        if (i==1) $(v).attr('class','config-value');
-                    });
-                    return nRow;
-                },
-                "aoColumnDefs": [
-                                 { // name (with tooltip)
-                                     "mRender": function ( data, type, row ) {
-                                         // name (column 1) should have 
tooltip title
-                                         var actions = 
that.getConfigActions(data.name);
-                                         // if data.description or .type is 
absent we get an error in html rendering (js)
-                                         // unless we set it explicitly (there 
is probably a nicer way to do this however?)
-                                         var context = _.extend(data, { 
-                                             description: data['description'], 
type: data['type']});
-                                         return configNameHtml(context);
-                                     },
-                                     "aTargets": [ 1 ]
-                                 },
-                                 { // value
-                                     "mRender": function ( data, type, row ) {
-                                         var escapedValue = 
Util.toDisplayString(data);
-                                         if (type!='display')
-                                             return escapedValue;
-                                         
-                                         var hasEscapedValue = 
(escapedValue!=null && (""+escapedValue).length > 0);
-                                             configName = row[0],
-                                             actions = 
that.getConfigActions(configName);
-                                         
-                                         // NB: the row might not yet exist
-                                         var $row = 
$('tr[id="'+configName+'"]');
-                                         
-                                         // datatables doesn't seem to expose 
any way to modify the html in place for a cell,
-                                         // so we rebuild
-                                         
-                                         var result = "<span 
class='value'>"+(hasEscapedValue ? escapedValue : '')+"</span>";
-                                         
-                                         var isSecret = 
Util.isSecret(configName);
-                                         if (isSecret) {
-                                            result += "<span 
class='secret-indicator'>(hidden)</span>";
-                                         }
-                                         
-                                         if (actions.open)
-                                             result = "<a 
href='"+actions.open+"'>" + result + "</a>";
-                                         if (escapedValue==null || 
escapedValue.length < 3)
-                                             // include whitespace so we can 
click on it, if it's really small
-                                             result += 
"&nbsp;&nbsp;&nbsp;&nbsp;";
-
-                                         var existing = 
$row.find('.dynamic-contents');
-                                         // for the json url, use the full url 
(relative to window.location.href)
-                                         var jsonUrl = actions.json ? new 
URI(actions.json).resolve(new URI(window.location.href)).toString() : null;
-                                         // prefer to update in place, so 
menus don't disappear, also more efficient
-                                         // (but if menu is changed, we do 
recreate it)
-                                         if (existing.length>0) {
-                                             if 
(that.checkFloatMenuUpToDate($row, actions.open, '.actions-open', 
'open-target') &&
-                                                 
that.checkFloatMenuUpToDate($row, escapedValue, '.actions-copy') &&
-                                                 
that.checkFloatMenuUpToDate($row, actions.json, '.actions-json-open', 
'open-target') &&
-                                                 
that.checkFloatMenuUpToDate($row, jsonUrl, '.actions-json-copy', 'copy-value')) 
{
-//                                                 log("updating in place 
"+configName)
-                                                 existing.html(result);
-                                                 return 
$row.find('td.config-value').html();
-                                             }
-                                         }
-                                         
-                                         // build the menu - either because it 
is the first time, or the actions are stale
-//                                         log("creating "+configName);
-                                         
-                                         var downMenu = "";
-                                         if (actions.open)
-                                             downMenu += "<div 
class='light-popup-menu-item valueOpen actions-open' 
open-target='"+actions.open+"'>" +
-                                                    "Open</div>";
-                                         if (hasEscapedValue) downMenu +=
-                                             "<div 
class='light-popup-menu-item handy valueCopy actions-copy clipboard-item'>Copy 
Value</div>";
-                                         if (actions.json) downMenu +=
-                                             "<div 
class='light-popup-menu-item handy valueOpen actions-json-open' 
open-target='"+actions.json+"'>" +
-                                                 "Open REST Link</div>";
-                                         if (actions.json && hasEscapedValue) 
downMenu +=
-                                             "<div 
class='light-popup-menu-item handy valueCopy actions-json-copy clipboard-item' 
copy-value='"+
-                                                 jsonUrl+"'>Copy REST 
Link</div>";
-                                         if (downMenu=="") {
-//                                             log("no actions for 
"+configName);
-                                             downMenu += 
-                                                 "<div 
class='light-popup-menu-item'>(no actions)</div>";
-                                         }
-                                         downMenu = "<div 
class='floatDown'><div class='light-popup'><div class='light-popup-body'>"
-                                             + downMenu +
-                                             "</div></div></div>";
-                                         result = "<span class='hasFloatLeft 
dynamic-contents'>" + result +
-                                                "</span>" +
-                                                "<div class='floatLeft'><span 
class='icon-chevron-down hasFloatDown'></span>" +
-                                                downMenu +
-                                                "</div>";
-                                         result = "<div class='floatGroup"+
-                                            (isSecret ? " secret-info" : "")+
-                                            "'>" + result + "</div>";
-                                         // also see updateFloatMenus which 
wires up the JS for these classes
-                                         
-                                         return result;
-                                     },
-                                     "aTargets": [ 2 ]
-                                 },
-                                 // ID in column 0 is standard (assumed in 
ViewUtils)
-                                 { "bVisible": false,  "aTargets": [ 0 ] }
-                             ]            
-            });
-            
-            this.zeroClipboard = new ZeroClipboard();
-            this.zeroClipboard.on( "dataRequested" , function(client) {
-                try {
-                    // the zeroClipboard instance is a singleton so check our 
scope first
-                    if (!$(this).closest("#config-table").length) return;
-                    var text = $(this).attr('copy-value');
-                    if (!text) text = 
$(this).closest('.floatGroup').find('.value').text();
-                    
-//                    log("Copying config text '"+text+"' to clipboard");
-                    client.setText(text);
-
-                    // show the word "copied" for feedback;
-                    // NB this occurs on mousedown, due to how flash plugin 
works
-                    // (same style of feedback and interaction as github)
-                    // the other "clicks" are now triggered by *mouseup*
-                    var $widget = $(this);
-                    var oldHtml = $widget.html();
-                    $widget.html('<b>Copied!</b>');
-                    // use a timeout to restore because mouseouts can leave 
corner cases (see history)
-                    setTimeout(function() { $widget.html(oldHtml); }, 600);
-                } catch (e) {
-                    log("Zeroclipboard failure; falling back to prompt 
mechanism");
-                    log(e);
-                    Util.promptCopyToClipboard(text);
-                }
-            });
-            // these seem to arrive delayed sometimes, so we also work with 
the clipboard-item class events
-            this.zeroClipboard.on( "mouseover", function() { 
that.noteFloatMenuZeroClipboardItem(true, this); } );
-            this.zeroClipboard.on( "mouseout", function() { 
that.noteFloatMenuZeroClipboardItem(false, this); } );
-            this.zeroClipboard.on( "mouseup", function() { 
that.closeFloatMenuNow(); } );
-
-            ViewUtils.addFilterEmptyButton(this.table);
-            ViewUtils.addAutoRefreshButton(this.table);
-            ViewUtils.addRefreshButton(this.table);
-            this.loadConfigMetadata();
-            this.updateConfigPeriodically();
-            this.toggleFilterEmpty();
-            return this;
-        },
-
-        beforeClose: function () {
-            if (this.zeroClipboard) {
-                this.zeroClipboard.destroy();
-            }
-        },
-
-        floatMenuActive: false,
-        lastFloatMenuRowId: null,
-        lastFloatFocusInTextForEventUnmangling: null,
-        updateFloatMenus: function() {
-            $('#config-table *[rel="tooltip"]').tooltip();
-            this.zeroClipboard.clip( $('.valueCopy') );
-        },
-        showFloatLeft: function(event) {
-            this.noteFloatMenuFocusChange(true, event, "show-left");
-            this.showFloatLeftOf($(event.currentTarget));
-        },
-        showFloatLeftOf: function($hasFloatLeft) {
-            $hasFloatLeft.next('.floatLeft').show(); 
-        },
-        enterFloatDown: function(event) {
-            this.noteFloatMenuFocusChange(true, event, "show-down");
-//            log("entering float down");
-            var fdTarget = $(event.currentTarget);
-//            log( fdTarget );
-            this.floatDownFocus = fdTarget;
-            var that = this;
-            setTimeout(function() {
-                that.showFloatDownOf( fdTarget );
-            }, 200);
-        },
-        exitFloatDown: function(event) {
-//            log("exiting float down");
-            this.floatDownFocus = null;
-        },
-        showFloatDownOf: function($hasFloatDown) {
-            if ($hasFloatDown != this.floatDownFocus) {
-//                log("float down did not hover long enough");
-                return;
-            }
-            var down = $hasFloatDown.next('.floatDown');
-            down.show();
-            $('.light-popup', down).show(2000); 
-        },
-        noteFloatMenuActive: function(focus) { 
-            this.noteFloatMenuFocusChange(true, focus, "menu");
-            
-            // remove dangling zc events (these don't always get removed, 
apparent bug in zc event framework)
-            // this causes it to flash sometimes but that's better than 
leaving the old item highlighted
-            if (focus.toElement && 
$(focus.toElement).hasClass('clipboard-item')) {
-                // don't remove it
-            } else {
-                var zc = 
$(focus.target).closest('.floatGroup').find('div.zeroclipboard-is-hover');
-                zc.removeClass('zeroclipboard-is-hover');
-            }
-        },
-        noteFloatMenuSeemsInactive: function(focus) { 
this.noteFloatMenuFocusChange(false, focus, "menu"); },
-        noteFloatMenuActiveCI: function(focus) { 
this.noteFloatMenuFocusChange(true, focus, "menu-clip-item"); },
-        noteFloatMenuSeemsInactiveCI: function(focus) { 
this.noteFloatMenuFocusChange(false, focus, "menu-clip-item"); },
-        noteFloatMenuZeroClipboardItem: function(seemsActive,focus) { 
-            this.noteFloatMenuFocusChange(seemsActive, focus, "clipboard");
-            if (seemsActive) {
-                // make the table row highlighted (as the default hover event 
is lost)
-                // we remove it when the float group goes away
-                $(focus).closest('tr').addClass('zeroclipboard-is-hover');
-            } else {
-                // sometimes does not get removed by framework - though this 
doesn't seem to help
-                // as you can see by logging this before and after:
-//                log(""+$(focus).attr('class'))
-                // the problem is that the framework seems sometime to trigger 
this event before adding the class
-                // see in noteFloatMenuActive where we do a different check
-                $(focus).removeClass('zeroclipboard-is-hover');
-            }
-        },
-        noteFloatMenuFocusChange: function(seemsActive, focus, caller) {
-//            log(""+new Date().getTime()+" note active "+caller+" 
"+seemsActive);
-            var delayCheckFloat = true;
-            var focusRowId = null;
-            var focusElement = null;
-            if (focus) {
-                focusElement = focus.target ? focus.target : focus;
-                if (seemsActive) {
-                    this.lastFloatFocusInTextForEventUnmangling = 
$(focusElement).text();
-                    focusRowId = focus.target ? 
$(focus.target).closest('tr').attr('id') : $(focus).closest('tr').attr('id');
-                    if (this.floatMenuActive && 
focusRowId==this.lastFloatMenuRowId) {
-                        // lastFloatMenuRowId has not changed, when moving 
within a floatgroup
-                        // (but we still get mouseout events when the submenu 
changes)
-//                        log("redundant mousein from "+ focusRowId );
-                        return;
-                    }
-                } else {
-                    // on mouseout, skip events which are bogus
-                    // first, if the toElement is in the same floatGroup
-                    focusRowId = focus.toElement ? 
$(focus.toElement).closest('tr').attr('id') : null;
-                    if (focusRowId==this.lastFloatMenuRowId) {
-                        // lastFloatMenuRowId has not changed, when moving 
within a floatgroup
-                        // (but we still get mouseout events when the submenu 
changes)
-//                        log("skipping, internal mouseout from "+ focusRowId 
);
-                        return;
-                    }
-                    // check (a) it is the 'out' event corresponding to the 
most recent 'in'
-                    // (because there is a race where it can say  in1, in2, 
out1 rather than in1, out2, in2
-                    if ($(focusElement).text() != 
this.lastFloatFocusInTextForEventUnmangling) {
-//                        log("skipping, not most recent mouseout from "+ 
focusRowId );
-                        return;
-                    }
-                    if (focus.toElement) {
-                        if 
($(focus.toElement).hasClass('global-zeroclipboard-container')) {
-//                            log("skipping out, as we are moving to clipboard 
container");
-                            return;
-                        }
-                        if (focus.toElement.name && 
focus.toElement.name=="global-zeroclipboard-flash-bridge") {
-//                            log("skipping out, as we are moving to clipboard 
movie");
-                            return;                            
-                        }
-                    }
-                } 
-            }           
-//            log( "moving to "+focusRowId );
-            if (seemsActive && focusRowId) {
-//                log("setting lastFloat when "+this.floatMenuActive + ", from 
"+this.lastFloatMenuRowId );
-                if (this.lastFloatMenuRowId != focusRowId) {
-                    if (this.lastFloatMenuRowId) {
-                        // the floating menu has changed, hide the old
-//                        log("hiding old menu on float-focus change");
-                        this.closeFloatMenuNow();
-                    }
-                }
-                // now show the new, if possible (might happen multiple times, 
but no matter
-                if (focusElement) {
-//                    log("ensuring row "+focusRowId+" is showing on change");
-                    
this.showFloatLeftOf($(focusElement).closest('tr').find('.hasFloatLeft'));
-                    this.lastFloatMenuRowId = focusRowId;
-                } else {
-                    this.lastFloatMenuRowId = null;
-                }
-            }
-            this.floatMenuActive = seemsActive;
-            if (!seemsActive) {
-                this.scheduleCheckFloatMenuNeedsHiding(delayCheckFloat);
-            }
-        },
-        scheduleCheckFloatMenuNeedsHiding: function(delayCheckFloat) {
-            if (delayCheckFloat) {
-                this.checkTime = new Date().getTime()+299;
-                setTimeout(this.checkFloatMenuNeedsHiding, 300);
-            } else {
-                this.checkTime = new Date().getTime()-1;
-                this.checkFloatMenuNeedsHiding();
-            }
-        },
-        closeFloatMenuNow: function() {
-//            log("closing float menu due do direct call (eg click)");
-            this.checkTime = new Date().getTime()-1;
-            this.floatMenuActive = false;
-            this.checkFloatMenuNeedsHiding();
-        },
-        checkFloatMenuNeedsHiding: function() {
-//            log(""+new Date().getTime()+" checking float menu - 
"+this.floatMenuActive);
-            if (new Date().getTime() <= this.checkTime) {
-//                log("aborting check as another one scheduled");
-                return;
-            }
-            
-            // we use a flag to determine whether to hide the float menu
-            // because the embedded zero-clipboard flash objects cause 
floatGroup 
-            // to get a mouseout event when the "Copy" menu item is hovered
-            if (!this.floatMenuActive) {
-//                log("HIDING FLOAT MENU")
-                $('.floatLeft').hide(); 
-                $('.floatDown').hide();
-                
$('.zeroclipboard-is-hover').removeClass('zeroclipboard-is-hover');
-                lastFloatMenuRowId = null;
-            } else {
-//                log("we're still in")
-            }
-        },
-        valueOpen: function(event) {
-            window.open($(event.target).attr('open-target'),'_blank');
-        },
-
-        render: function() {
-            return this;
-        },
-        checkFloatMenuUpToDate: function($row, actionValue, actionSelector, 
actionAttribute) {
-            if (typeof actionValue === 'undefined' || actionValue==null || 
actionValue=="") {
-                if ($row.find(actionSelector).length==0) return true;
-            } else {
-                if (actionAttribute) {
-                    if 
($row.find(actionSelector).attr(actionAttribute)==actionValue) return true;
-                } else {
-                    if ($row.find(actionSelector).length>0) return true;
-                }
-            }
-            return false;
-        },
-        
-        /**
-         * Returns the actions loaded to view.configMetadata[name].actions
-         * for the given name, or an empty object.
-         */
-        getConfigActions: function(configName) {
-            var allMetadata = this.configMetadata || {};
-            var metadata = allMetadata[configName] || {};
-            return metadata.actions || {};
-        },
-
-        toggleFilterEmpty: function() {
-            ViewUtils.toggleFilterEmpty(this.$('#config-table'), 2);
-            return this;
-        },
-
-        toggleAutoRefresh: function() {
-            ViewUtils.toggleAutoRefresh(this);
-            return this;
-        },
-
-        enableAutoRefresh: function(isEnabled) {
-            this.refreshActive = isEnabled;
-            return this;
-        },
-        
-        toggleSecrecyVisibility: function(event) {
-            
$(event.target).closest('.secret-info').toggleClass('secret-revealed');
-        },
-        
-        /**
-         * Loads current values for all config on an entity and updates config 
table.
-         */
-        isRefreshActive: function() { return this.refreshActive; },
-        updateConfigNow:function () {
-            var that = this;
-            ViewUtils.get(that, that.model.getConfigUpdateUrl(), 
that.updateWithData,
-                    { enablement: that.isRefreshActive });
-        },
-        updateConfigPeriodically:function () {
-            var that = this;
-            ViewUtils.getRepeatedlyWithDelay(that, 
that.model.getConfigUpdateUrl(), function(data) { that.updateWithData(data); },
-                    { enablement: that.isRefreshActive });
-        },
-        updateWithData: function (data) {
-            var that = this;
-            $table = that.$('#config-table');
-            var options = {};
-            
-            if (that.fullRedraw) {
-                options.refreshAllRows = true;
-                that.fullRedraw = false;
-            }
-            ViewUtils.updateMyDataTable($table, data, function(value, name) {
-                var metadata = that.configMetadata[name];
-                if (metadata==null) {                        
-                    // kick off reload metadata when this happens (new config 
for which no metadata known)
-                    // but only if we haven't loaded metadata for a while
-                    metadata = { 'name':name };
-                    that.configMetadata[name] = metadata; 
-                    that.loadConfigMetadataIfStale(name, 10000);
-                } 
-                return [name, metadata, value];
-            }, options);
-            
-            that.updateFloatMenus();
-        },
-
-        loadConfigMetadata: function() {
-            var url = this.model.getLinkByName('config'),
-                that = this;
-            that.lastConfigMetadataLoadTime = new Date().getTime();
-            $.get(url, function (data) {
-                _.each(data, function(config) {
-                    var actions = {};
-                    _.each(config.links, function(v, k) {
-                        if (k.slice(0, 7) == "action:") {
-                            actions[k.slice(7)] = v;
-                        }
-                    });
-                    that.configMetadata[config.name] = {
-                        name: config.name,
-                        description: config.description,
-                        actions: actions,
-                        type: config.type
-                    };
-                });
-                that.fullRedraw = true;
-                that.updateConfigNow();
-                that.table.find('*[rel="tooltip"]').tooltip();
-            });
-            return this;
-        },
-        
-        loadConfigMetadataIfStale: function(configName, recency) {
-            var that = this;
-            if (!that.lastConfigMetadataLoadTime || 
that.lastConfigMetadataLoadTime + recency < new Date().getTime()) {
-//                log("reloading metadata because new config "+configName+" 
identified")
-                that.loadConfigMetadata();
-            }
-        }
-    });
-    return EntityConfigView;
-});

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-details.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-details.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-details.js
deleted file mode 100644
index f54c572..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-details.js
+++ /dev/null
@@ -1,180 +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.
-*/
-/**
- * Renders details information about an application (sensors, summary, 
effectors, etc.).
- * 
- * Options preselectTab (e.g. 'activities') and preselectTabDetails 
('subtasks/1234') can be set
- * before a render to cause the given tab / details to be opened.
- * 
- * @type {*}
- */
-define([
-    "underscore", "jquery", "backbone", "./entity-summary", 
-    "./entity-sensors", "./entity-effectors", "./entity-policies",
-    "./entity-activities", "./entity-advanced", "model/task-summary", 
"text!tpl/apps/details.html"
-], function (_, $, Backbone, SummaryView, SensorsView, EffectorsView, 
PoliciesView, ActivitiesView, AdvancedView, TaskSummary, DetailsHtml) {
-
-    var EntityDetailsView = Backbone.View.extend({
-        template:_.template(DetailsHtml),
-        events:{
-            'click .entity-tabs a':'tabSelected'
-        },
-        initialize:function () {
-            var self = this;
-            var tasks = new TaskSummary.Collection;
-            
-            this.$el.html(this.template({}))
-            this.sensorsView = new SensorsView({
-                model:this.model,
-                tabView:this,
-            })
-            this.effectorsView = new EffectorsView({
-                model:this.model,
-                tabView:this,
-            })
-            this.policiesView = new PoliciesView({
-                model:this.model,
-                tabView:this,
-            })
-            this.activitiesView = new ActivitiesView({
-                model:this.model,
-                tabView:this,
-                collection:tasks
-            })
-            // summary comes after others because it uses the tasks
-            this.summaryView = new SummaryView({
-                model:this.model,
-                tabView:this,
-                application:this.options.application,
-                tasks:tasks,
-            })
-            this.advancedView = new AdvancedView({
-                model: this.model,
-                tabView:this,
-                application:this.options.application
-            });
-            // propagate to app tree view 
-            this.advancedView.on("entity.expunged", function() { 
self.trigger("entity.expunged"); })
-            
-            this.$("#summary").html(this.summaryView.render().el);
-            this.$("#sensors").html(this.sensorsView.render().el);
-            this.$("#effectors").html(this.effectorsView.render().el);
-            this.$("#policies").html(this.policiesView.render().el);
-            this.$("#activities").html(this.activitiesView.render().el);
-            this.$("#advanced").html(this.advancedView.render().el);
-        },
-        beforeClose:function () {
-            this.summaryView.close();
-            this.sensorsView.close();
-            this.effectorsView.close();
-            this.policiesView.close();
-            this.activitiesView.close();
-            this.advancedView.close();
-        },
-        getEntityHref: function() {
-            return $("#app-tree .entity_tree_node_wrapper.active 
a").attr("href");
-        },
-        render: function(optionalParent) {
-            this.summaryView.render()
-            this.sensorsView.render()
-            this.effectorsView.render()
-            this.policiesView.render()
-            this.activitiesView.render()
-            this.advancedView.render()
-            
-            if (optionalParent) {
-                optionalParent.html(this.el)
-            }
-            var entityHref = this.getEntityHref();
-            if (entityHref) {
-                $("a[data-toggle='tab']").each(function(i,a) {
-                    
$(a).attr('href',entityHref+"/"+$(a).attr("data-target").slice(1));
-                });
-            } else {
-                log("could not find entity href for tab");
-            }
-            if (this.options.preselectTab) {
-                var tabLink = 
this.$('a[data-target="#'+this.options.preselectTab+'"]');
-                var showFn = function() { tabLink.tab('show'); };
-                if (optionalParent) showFn();
-                else _.defer(showFn);
-            }
-            return this;
-        },
-        tabSelected: function(event) {
-            // TODO: the bootstrap JS code still prevents shift-click from 
working
-            // have to add the following logic to bootstrap tab click handler 
also
-//            if (event.metaKey || event.shiftKey)
-//                // trying to open in a new tab, do not act on it here!
-//                return;
-            event.preventDefault();
-            
-            var tabName = $(event.currentTarget).attr("data-target").slice(1);
-            var route = this.getTab(tabName);
-            if (route) {
-                if (route[0]=='#') route = route.substring(1);
-                Backbone.history.navigate(route);
-            }
-            // caller will ensure tab is shown
-        },
-        getTab: function(tabName, entityId, entityHref) {
-            if (!entityHref) {
-                if (entityId) {
-                    entityHref = this.getEntityHref();
-                    if (!entityHref.endsWith(entityId)) {
-                        lastSlash = entityHref.lastIndexOf('/');
-                        if (lastSlash>=0) {
-                            entityHref = entityHref.substring(0, lastSlash+1) 
+ '/' + entityId;
-                        } else {
-                            log("malformed entityHref when opening tab: 
"+entityHref)
-                            entityHref = this.getEntityHref();
-                        }
-                    }
-                } else {
-                    entityHref = this.getEntityHref();
-                }
-            }
-            if (entityHref && tabName)                
-                return entityHref+"/"+tabName;
-            return null;
-        },
-        /** for tabs to redirect to other tabs; entityId and entityHref are 
optional (can supply either, or null to use current entity); 
-         * tabPath is e.g. 'sensors' or 'activities/subtask/1234' */ 
-        openTab: function(tabPath, entityId, entityHref) {
-            var route = this.getTab(tabPath, entityId, entityHref);
-            if (!route) return;
-            if (route[0]=='#') route = route.substring(1);
-            Backbone.history.navigate(route);
-                
-            tabPaths = tabPath.split('/');
-            if (!tabPaths) return;
-            var tabName = tabPaths.shift();
-            if (!tabName)
-                // ignore leading /
-                tabName = tabPaths.shift();
-            if (!tabName) return;
-
-            this.options.preselectTab = tabName;
-            if (tabPaths)
-                this.options.preselectTabDetails = tabPaths.join('/');
-            this.render();
-        }
-    });
-    return EntityDetailsView;
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-effectors.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-effectors.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-effectors.js
deleted file mode 100644
index 974fbec..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-effectors.js
+++ /dev/null
@@ -1,92 +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.
-*/
-/**
- * Render the effectors tab.You must supply the model and optionally the 
element
- * on which the view binds itself.
- *
- * @type {*}
- */
-define([
-    "underscore", "jquery", "backbone", "view/viewutils", 
"model/effector-summary",
-    "view/effector-invoke", "text!tpl/apps/effector.html", 
"text!tpl/apps/effector-row.html", "bootstrap"
-], function (_, $, Backbone, ViewUtils, EffectorSummary, EffectorInvokeView, 
EffectorHtml, EffectorRowHtml) {
-
-    var EntityEffectorsView = Backbone.View.extend({
-        template:_.template(EffectorHtml),
-        effectorRow:_.template(EffectorRowHtml),
-        events:{
-            "click .show-effector-modal":"showEffectorModal"
-        },
-        initialize:function () {
-            this.$el.html(this.template({}))
-            var that = this
-            this._effectors = new EffectorSummary.Collection()
-            // fetch the list of effectors and create a view for each one
-            this._effectors.url = this.model.getLinkByName("effectors")
-            that.loadedData = false;
-            ViewUtils.fadeToIndicateInitialLoad(this.$('#effectors-table'));
-            this.$(".has-no-effectors").hide();
-            
-            this._effectors.fetch({success:function () {
-                that.loadedData = true;
-                that.render()
-                ViewUtils.cancelFadeOnceLoaded(that.$('#effectors-table'));
-            }})
-            // attach a fetch simply to fade this tab when not available
-            // (the table is statically rendered)
-            ViewUtils.fetchRepeatedlyWithDelay(this, this._effectors, { 
period: 10*1000 })
-        },
-        render:function () {
-            if (this.viewIsClosed)
-                return;
-            var that = this
-            var $tableBody = this.$('#effectors-table tbody').empty()
-            if (this._effectors.length==0) {
-                if (that.loadedData)
-                    this.$(".has-no-effectors").show();
-            } else {                
-                this.$(".has-no-effectors").hide();
-                this._effectors.each(function (effector) {
-                    $tableBody.append(that.effectorRow({
-                        name:effector.get("name"),
-                        description:effector.get("description"),
-                        // cid is mapped to id (here) which is mapped to name 
(in Effector.Summary), 
-                        // so it is consistent across resets
-                        cid:effector.id
-                    }))
-                })
-            }
-            return this
-        },
-        showEffectorModal:function (eventName) {
-            // get the model that we need to show, create its view and show it
-            var cid = $(eventName.currentTarget).attr("id")
-            var effectorModel = this._effectors.get(cid);
-            var modal = new EffectorInvokeView({
-                el:"#effector-modal",
-                model:effectorModel,
-                entity:this.model,
-                tabView:this.options.tabView,
-                openTask:true
-            })
-            modal.render().$el.modal('show')
-        }
-    })
-    return EntityEffectorsView
-})
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/18b073a9/brooklyn-ui/src/main/webapp/assets/js/view/entity-policies.js
----------------------------------------------------------------------
diff --git a/brooklyn-ui/src/main/webapp/assets/js/view/entity-policies.js 
b/brooklyn-ui/src/main/webapp/assets/js/view/entity-policies.js
deleted file mode 100644
index 74ba885..0000000
--- a/brooklyn-ui/src/main/webapp/assets/js/view/entity-policies.js
+++ /dev/null
@@ -1,244 +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.
-*/
-/**
- * Render the policies tab. You must supply the model and optionally the 
element
- * on which the view binds itself.
- */
-define([
-    "underscore", "jquery", "backbone", "brooklyn",
-    "model/policy-summary", "model/policy-config-summary",
-    "view/viewutils", "view/policy-config-invoke", "view/policy-new",
-    "text!tpl/apps/policy.html", "text!tpl/apps/policy-row.html", 
"text!tpl/apps/policy-config-row.html",
-    "jquery-datatables", "datatables-extensions"
-], function (_, $, Backbone, Brooklyn,
-        PolicySummary, PolicyConfigSummary,
-        ViewUtils, PolicyConfigInvokeView, NewPolicyView,
-        PolicyHtml, PolicyRowHtml, PolicyConfigRowHtml) {
-
-    var EntityPoliciesView = Backbone.View.extend({
-
-        template: _.template(PolicyHtml),
-        policyRow: _.template(PolicyRowHtml),
-
-        events:{
-            'click .refresh':'refreshPolicyConfigNow',
-            'click .filterEmpty':'toggleFilterEmpty',
-            "click #policies-table tr":"rowClick",
-            "click .policy-start":"callStart",
-            "click .policy-stop":"callStop",
-            "click .policy-destroy":"callDestroy",
-            "click .show-policy-config-modal":"showPolicyConfigModal",
-            "click .add-new-policy": "showNewPolicyModal"
-        },
-
-        initialize:function () {
-            _.bindAll(this)
-            this.$el.html(this.template({ }));
-            var that = this;
-            // fetch the list of policies and create a row for each one
-            that._policies = new PolicySummary.Collection();
-            that._policies.url = that.model.getLinkByName("policies");
-            
-            this.loadedData = false;
-            ViewUtils.fadeToIndicateInitialLoad(this.$('#policies-table'));
-            that.render();
-            this._policies.on("all", this.render, this)
-            ViewUtils.fetchRepeatedlyWithDelay(this, this._policies, {
-                doitnow: true,
-                success: function () {
-                    that.loadedData = true;
-                    ViewUtils.cancelFadeOnceLoaded(that.$('#policies-table'));
-                }});
-        },
-
-        render:function () {
-            if (this.viewIsClosed)
-                return;
-            var that = this,
-                $tbody = this.$('#policies-table tbody').empty();
-            if (that._policies.length==0) {
-                if (this.loadedData)
-                    this.$(".has-no-policies").show();
-                this.$("#policy-config").hide();
-                this.$("#policy-config-none-selected").hide();
-            } else {
-                this.$(".has-no-policies").hide();
-                that._policies.each(function (policy) {
-                    // TODO better to use datatables, and a json array, as we 
do elsewhere
-                    $tbody.append(that.policyRow({
-                        cid:policy.get("id"),
-                        name:policy.get("name"),
-                        state:policy.get("state"),
-                        summary:policy
-                    }));
-                    if (that.activePolicy) {
-                        that.$("#policies-table 
tr[id='"+that.activePolicy+"']").addClass("selected");
-                        that.showPolicyConfig(that.activePolicy);
-                        that.refreshPolicyConfig();
-                    } else {
-                        that.$("#policy-config").hide();
-                        that.$("#policy-config-none-selected").show();
-                    }
-                });
-            }
-            return that;
-        },
-
-        toggleFilterEmpty:function() {
-            ViewUtils.toggleFilterEmpty($('#policy-config-table'), 2);
-        },
-
-        refreshPolicyConfigNow:function () {
-            this.refreshPolicyConfig();  
-        },
-
-        rowClick:function(evt) {
-            evt.stopPropagation();
-            var row = $(evt.currentTarget).closest("tr"),
-                id = row.attr("id"),
-                policy = this._policies.get(id);
-            $("#policies-table tr").removeClass("selected");
-            if (this.activePolicy == id) {
-                // deselected
-                this.activePolicy = null;
-                this._config = null;
-                $("#policy-config-table").dataTable().fnDestroy();
-                $("#policy-config").slideUp(100);
-                $("#policy-config-none-selected").slideDown(100);
-            } else {
-                row.addClass("selected");
-                // fetch the list of policy config entries
-                this._config = new PolicyConfigSummary.Collection();
-                this._config.url = policy.getLinkByName("config");
-                ViewUtils.fadeToIndicateInitialLoad($('#policy-config-table'));
-                this.showPolicyConfig(id);
-                var that = this;
-                this._config.fetch().done(function () {
-                    that.showPolicyConfig(id);
-                    ViewUtils.cancelFadeOnceLoaded($('#policy-config-table'))
-                });
-            }
-        },
-
-        showPolicyConfig:function (activePolicyId) {
-            var that = this;
-            if (activePolicyId != null && that.activePolicy != activePolicyId) 
{
-                // TODO better to use a json array, as we do elsewhere
-                var $table = $('#policy-config-table'),
-                    $tbody = $table.find('tbody');
-                $table.dataTable().fnClearTable();
-                $("#policy-config-none-selected").slideUp(100);
-                if (that._config.length==0) {
-                    $(".has-no-policy-config").show();
-                } else {
-                    $(".has-no-policy-config").hide();
-                    that.activePolicy = activePolicyId;
-                    var policyConfigRow = _.template(PolicyConfigRowHtml);
-                    that._config.each(function (config) {
-                        $tbody.append(policyConfigRow({
-                            cid:config.cid,
-                            name:config.get("name"),
-                            description:config.get("description"),
-                            type:config.get("type"),
-                            reconfigurable:config.get("reconfigurable"),
-                            link:config.getLinkByName('self'),
-                            value: config.get("defaultValue")
-                        }));
-                        $tbody.find('*[rel="tooltip"]').tooltip();
-                    });
-                    that.currentStateUrl = 
that._policies.get(that.activePolicy).getLinkByName("config") + 
"/current-state";
-                    $("#policy-config").slideDown(100);
-                    $table.slideDown(100);
-                    ViewUtils.myDataTable($table, {
-                        "bAutoWidth": false,
-                        "aoColumns" : [
-                            { sWidth: '220px' },
-                            { sWidth: '240px' },
-                            { sWidth: '25px' }
-                        ]
-                    });
-                    $table.dataTable().fnAdjustColumnSizing();
-                }
-            }
-            that.refreshPolicyConfig();
-        },
-
-        refreshPolicyConfig:function() {
-            var that = this;
-            if (that.viewIsClosed || !that.currentStateUrl) return;
-            var $table = that.$('#policy-config-table').dataTable(),
-                $rows = that.$("tr.policy-config-row");
-            $.get(that.currentStateUrl, function (data) {
-                if (that.viewIsClosed) return;
-                // iterate over the sensors table and update each sensor
-                $rows.each(function (index, row) {
-                    var key = $(this).find(".policy-config-name").text();
-                    var v = data[key];
-                    if (v !== undefined) {
-                        $table.fnUpdate(_.escape(v), row, 1, false);
-                    }
-                });
-            });
-            $table.dataTable().fnStandingRedraw();
-        },
-
-        showPolicyConfigModal: function (evt) {
-            var cid = $(evt.currentTarget).attr("id");
-            var currentValue = $(evt.currentTarget)
-                .parent().parent()
-                .find(".policy-config-value")
-                .text();
-            Brooklyn.view.showModalWith(new PolicyConfigInvokeView({
-                model: this._config.get(cid),
-                policy: this.model,
-                currentValue: currentValue
-            }));
-        },
-
-        showNewPolicyModal: function () {
-            var self = this;
-            Brooklyn.view.showModalWith(new NewPolicyView({
-                entity: this.model,
-                onSave: function (policy) {
-                    console.log("New policy", policy);
-                    self._policies.add(policy);
-                }
-            }));
-        },
-
-        callStart:function(event) { this.doPost(event, "start"); },
-        callStop:function(event) { this.doPost(event, "stop"); },
-        callDestroy:function(event) { this.doPost(event, "destroy"); },
-        doPost:function(event, linkname) {
-            event.stopPropagation();
-            var that = this,
-                url = $(event.currentTarget).attr("link");
-            $.ajax({
-                type:"POST",
-                url:url,
-                success:function() {
-                    that._policies.fetch();
-                }
-            });
-        }
-
-    });
-
-    return EntityPoliciesView;
-});

Reply via email to