MWF.xApplication.Setting.servers = MWF.xApplication.Setting.servers || {};
MWF.xApplication.Setting.servers.ApplicationServers = new Class({
Extends: MWF.widget.Common,
Implements: [Options, Events],
initialize: function(explorer){
this.explorer = explorer;
this.app = this.explorer.app;
this.actions = this.app.actions;
this.css = this.app.css;
this.applicationServers = [];
this.content = this.explorer.applicationServerContent;
this.page = this.app.serverPage;
this.currentDoc = null;
this.load();
},
load: function(){
this.actions.listApplicationServer(function(json){
json.data.each(function(serverJson){
this.applicationServers.push(new MWF.xApplication.Setting.servers.ApplicationServer(this, serverJson));
}.bind(this));
this.createAddAction();
this.setApplicationServerAreaWidth();
this.setApplicationServerAreaWidthFun = this.setApplicationServerAreaWidth.bind(this);
this.app.addEvent("resize", this.setApplicationServerAreaWidthFun);
}.bind(this));
},
createAddAction: function(){
this.createServerAction = new Element("div", {"styles": this.css.applicationServerCreateAction}).inject(this.content);
this.createServerAction.addEvents({
"mouseover": function(){this.createServerAction.setStyles( this.css.applicationServerCreateAction_over);}.bind(this),
"mouseout": function(){this.createServerAction.setStyles( this.css.applicationServerCreateAction);}.bind(this),
"click": function(){this.createServer();}.bind(this),
});
},
createServer: function(){
var server = {
"list": this,
"app": this.app,
"json": {
"contextList": [],
"planList": []
},
"node": this.createServerAction,
"name": "",
"reload": function(){
this.list.applicationServers.push(new MWF.xApplication.Setting.servers.ApplicationServer(this.list, this.json));
}
}
this.currentDoc = new MWF.xApplication.Setting.servers.ApplicationServer.Document(server);
},
setApplicationServerAreaWidth: function(){
var count = this.applicationServers.length;
var width = this.explorer.contentAreaNode.getSize().x;
var nodeWidth = this.applicationServers[0].node.getSize().x;
var x1 = this.applicationServers[0].node.getStyle("margin-left").toInt();
var x2 = this.applicationServers[0].node.getStyle("margin-right").toInt();
nodeWidth = nodeWidth+x1+x2;
var n = (width/nodeWidth).toInt();
var w = nodeWidth*n;
this.content.setStyle("width", ""+w+"px");
},
getDepolyableList: function(callback){
this.actions.listDepolyable(function(json){
this.depolyableList = json.data;
if (callback) callback(json.data);
}.bind(this));
},
destroy: function(){
if (this.setApplicationServerAreaWidthFun) this.app.removeEvent("resize", this.setApplicationServerAreaWidthFun);
this.applicationServers.each(function(server){
server.destroy();
}.bind(this));
if (this.currentDoc) this.currentDoc.destroy();
this.content.destroy();
MWF.release(this);
}
});
MWF.xApplication.Setting.servers.ApplicationServer = new Class({
Implements: [Events],
initialize: function(list, json){
this.list = list
this.explorer = this.list.explorer;
this.app = this.list.explorer.app;
this.json = json;
this.container = this.list.content;
this.css = this.app.css;
this.name = this.json.name;
this.load();
},
load: function(){
this.node = new Element("div", {"styles": this.css.applicationServerNode}).inject(this.container);
if (this.list.createServerAction) this.node.inject(this.list.createServerAction, "before");
this.iconNode = new Element("div", {"styles": this.css.applicationServerIconNode}).inject(this.node);
this.statusNode = new Element("div", {"styles": this.css.applicationServerStatusNode}).inject(this.node);
if (this.json.status=="connected"){
this.statusNode.setStyle("background-color", "#23b107");
}else{
this.statusNode.setStyle("background-color", "#999");
}
this.textNode = new Element("div", {"styles": this.css.applicationServerTextNode}).inject(this.node);
this.nameNode = new Element("div", {"styles": this.css.applicationServerNameNode}).inject(this.textNode);
this.hostNode = new Element("div", {"styles": this.css.applicationServerHostNode}).inject(this.textNode);
this.adminNode = new Element("div", {"styles": this.css.applicationServerAdminNode}).inject(this.textNode);
this.messageNode = new Element("div", {"styles": this.css.applicationServerMessageNode}).inject(this.textNode);
this.setServerText();
this.node.addEvent("click", this.open.bind(this));
//this.checkWidthFun = this.checkWidth.bind(this);
//this.app.addEvent("resize", this.checkWidthFun);
},
setServerText: function(){
this.nameNode.set("text", (this.json.name || ""));
this.hostNode.set("text", (this.json.host || "")+" : "+(this.json.port || ""));
this.adminNode.set("text", (this.json.username || ""));
this.messageNode.set("text", (this.json.message || ""));
},
open: function(){
this.list.currentDoc = new MWF.xApplication.Setting.servers.ApplicationServer.Document(this);
},
reload: function(){
this.app.actions.getAppServer(this.json.name, function(json){
this.name = this.json.name;
this.json = json.data;
this.nameNode.set("text", this.json.name);
this.hostNode.set("text", this.json.host+" : "+this.json.port);
this.adminNode.set("text", this.json.username);
this.messageNode.set("text", this.json.message);
}.bind(this));
},
destroy: function(){
this.node.destroy();
MWF.release(this);
}
});
MWF.xApplication.Setting.servers.ApplicationServer.Document = new Class({
Implements: [Events],
initialize: function(server){
this.server = server;
this.list = this.server.list
this.app = this.server.app;
this.json = this.server.json;
this.container = this.list.explorer.container;
this.css = this.app.css;
this.apps = [];
this.load();
},
load: function(){
this.node = new Element("div", {"styles": this.css.applicationServerDocumentNode}).inject(this.container);
this.setNodeSize();
this.show();
//this.createForm();
},
setNodeSize: function(){
var size = this.server.node.getSize();
var position = this.server.node.getPosition(this.server.node.getOffsetParent());
this.node.setStyles({
"width": ""+size.x+"px",
"height": ""+size.y+"px",
"top": ""+position.y+"px",
"left": ""+position.x+"px"
});
},
show: function(){
var size = this.list.page.contentNodeArea.getSize();
var position = this.list.page.contentNodeArea.getPosition(this.list.page.contentNodeArea.getOffsetParent());
var css = {
"width": ""+size.x+"px",
"height": ""+size.y+"px",
"top": ""+position.y+"px",
"left": ""+position.x+"px"
}
this.morph = new Fx.Morph(this.node,{
"duration": 100,
"transition": Fx.Transitions.Sine.easeOut
});
this.morph.start(css).chain(function(){
this.list.content.setStyle("display", "none");
this.createForm();
this.setDocumentSizeFun = this.setDocumentSize.bind(this);
this.setDocumentSize();
this.app.addEvent("resize", this.setDocumentSizeFun);
}.bind(this));
},
setDocumentSize: function(){
var size = this.list.page.contentNodeArea.getSize();
var actionSize = this.actionNode.getSize();
var h = size.y-actionSize.y;
this.inforNode.setStyle("height", ""+h+"px");
this.applicationAreaNode.setStyle("height", ""+h+"px");
//this.inforNode.setStyle("min-height", ""+h+"px");
this.node.setStyles({
"width": ""+size.x+"px",
"height": ""+size.y+"px",
});
},
createForm: function(){
this.createActions();
this.createBaseInfo();
},
createActions: function(){
this.actionNode = new Element("div", {"styles": this.css.applicationServerDocumentActionNode}).inject(this.node);
this.saveAction = new Element("div", {"styles": this.css.applicationServerDocumentSaveNode}).inject(this.actionNode);
if (this.server.name) this.deleteAction = new Element("div", {"styles": this.css.applicationServerDocumentDeleteNode}).inject(this.actionNode);
if (this.server.name) this.deployAction = new Element("div", {"title": this.app.lp.deploy, "styles": this.css.applicationServerDocumentDeployNode}).inject(this.actionNode);
this.closeAction = new Element("div", {"styles": this.css.applicationServerDocumentCloseNode}).inject(this.actionNode);
this.saveAction.addEvents({
"mouseover": function(){this.saveAction.setStyles(this.css.applicationServerDocumentSaveNode_over);}.bind(this),
"mouseout": function(){this.saveAction.setStyles(this.css.applicationServerDocumentSaveNode);}.bind(this),
"mousedown": function(){this.saveAction.setStyles(this.css.applicationServerDocumentSaveNode_down);}.bind(this),
"mouseup": function(){this.saveAction.setStyles(this.css.applicationServerDocumentSaveNode_over);}.bind(this),
"click": function(e){this.saveDocument();}.bind(this)
});
if (this.deleteAction){
this.deleteAction.addEvents({
"mouseover": function(){this.deleteAction.setStyles(this.css.applicationServerDocumentDeleteNode_over);}.bind(this),
"mouseout": function(){this.deleteAction.setStyles(this.css.applicationServerDocumentDeleteNode);}.bind(this),
"mousedown": function(){this.deleteAction.setStyles(this.css.applicationServerDocumentDeleteNode_down);}.bind(this),
"mouseup": function(){this.deleteAction.setStyles(this.css.applicationServerDocumentDeleteNode_over);}.bind(this),
"click": function(e){this.deleteDocument(e);}.bind(this)
});
}
this.closeAction.addEvents({
"mouseover": function(){this.closeAction.setStyles(this.css.applicationServerDocumentCloseNode_over);}.bind(this),
"mouseout": function(){this.closeAction.setStyles(this.css.applicationServerDocumentCloseNode);}.bind(this),
"mousedown": function(){this.closeAction.setStyles(this.css.applicationServerDocumentCloseNode_down);}.bind(this),
"mouseup": function(){this.closeAction.setStyles(this.css.applicationServerDocumentCloseNode_over);}.bind(this),
"click": function(e){this.closeDocument();}.bind(this)
});
if (this.deployAction){
this.deployAction.addEvents({
"mouseover": function(){this.deployAction.setStyles(this.css.applicationServerDocumentDeployNode_over);}.bind(this),
"mouseout": function(){this.deployAction.setStyles(this.css.applicationServerDocumentDeployNode);}.bind(this),
"mousedown": function(){this.deployAction.setStyles(this.css.applicationServerDocumentDeployNode_down);}.bind(this),
"mouseup": function(){this.deployAction.setStyles(this.css.applicationServerDocumentDeployNode_over);}.bind(this),
"click": function(e){this.deploy(e);}.bind(this)
});
}
},
createBaseInfo: function(){
this.inforAreaNode = new Element("div", {"styles": this.css.applicationServerDocumentInforAreaNode}).inject(this.node);
this.inforNode = new Element("div", {"styles": this.css.applicationServerDocumentInforNode}).inject(this.inforAreaNode);
var html = "
";
this.inforNode.set("html", html);
var tds = this.inforNode.getElements("td");
var inputs = this.inforNode.getElements("input");
tds.setStyles(this.css.applicationServerDocumentTdNode);
inputs.setStyles(this.css.applicationServerDocumentInputNode);
this.applicationAreaNode = new Element("div", {"styles": this.css.applicationServerDocumentApplicationAreaNode}).inject(this.inforAreaNode);
this.applicationNode = new Element("div", {"styles": this.css.applicationServerDocumentApplicationNode}).inject(this.applicationAreaNode);
this.listApplications();
},
listApplications: function(){
var html = "" +
"| name | description | weight | deployed | plan |
" +
"
";
this.applicationNode.set("html", html);
this.applicationTable = this.applicationNode.getElement("table");
this.list.getDepolyableList(function(){
this.list.depolyableList.each(function(json, i){
var color = "#FFF";
if (i%2==0) color = "#f3f4ff";
this.apps.push(new MWF.xApplication.Setting.servers.ApplicationServer.Document.App(this, json.name, color));
}.bind(this));
}.bind(this));
},
closeDocument: function(){
this.node.empty();
this.list.content.setStyle("display", "block");
var size = this.server.node.getSize();
var position = this.server.node.getPosition(this.server.node.getOffsetParent());
var css = {
"width": ""+size.x+"px",
"height": ""+size.y+"px",
"top": ""+position.y+"px",
"left": ""+position.x+"px"
}
//this.morph = new Fx.Morph(this.node,{
// "duration": 100,
// "transition": Fx.Transitions.Sine.easeIn
//});
this.morph.start(css).chain(function(){
this.destroy();
}.bind(this));
},
destroy: function(){
this.app.removeEvent("resize", this.setDocumentSizeFun);
this.apps.each(function(app){
app.destroy();
}.bind(this));
this.node.destroy();
this.list.currentDoc = null;
MWF.release(this);
},
saveDocument: function(){
debugger;
var inputs = this.inforNode.getElements("input");
this.json.name = inputs[0].get("value");
this.json.order = inputs[1].get("value");
this.json.host = inputs[3].get("value");
this.json.port = inputs[4].get("value");
this.json.proxyHost = inputs[5].get("value");
this.json.proxyPort = inputs[6].get("value");
this.json.username = inputs[7].get("value");
this.json.password = inputs[8].get("value");
this.apps.each(function(app){
if (app.weightInput){
if (app.planAppArr.length){
var weight = app.weightInput.get("value").toFloat();
if (!isNaN(weight)){
app.planAppArr[0].weight = weight;
}
}
}
}.bind(this));
if (this.server.name){
this.app.actions.updateAppServer(this.server.name, this.json, function(){
this.closeDocument();
this.server.reload();
}.bind(this));
}else{
this.app.actions.addAppServer(this.json, function(){
this.closeDocument();
this.server.reload();
}.bind(this));
}
},
deleteDocument: function(e){
var _self = this;
this.app.confirm("warn", e, this.app.lp.deleteAppServer_title, this.app.lp.deleteAppServer, "350", "120", function(){
_self.app.actions.removeAppServer(_self.server.name, function(){
this.closeDocument();
this.server.destroy();
}.bind(_self));
this.close();
}, function(){
this.close();
});
},
deploy: function(e){
var _self = this;
this.app.confirm("warn", e, this.app.lp.deployAppServer_title, {"html": this.app.lp.deployAppServer}, "350", "150", function(){
var input = this.content.getElement("input");
var force = "false";
if (input.checked) force = "true";
var inputs = _self.inforNode.getElements("input");
_self.json.name = inputs[0].get("value");
_self.json.order = inputs[1].get("value");
_self.json.host = inputs[3].get("value");
_self.json.port = inputs[4].get("value");
_self.json.username = inputs[5].get("value");
_self.json.password = inputs[6].get("value");
_self.json.weight = inputs[7].get("value");
if (_self.server.name){
_self.app.actions.updateAppServer(_self.server.name, _self.json, function(){
this.app.actions.deploy(this.server.name, force, function(){
this.closeDocument();
this.server.reload();
}.bind(this));
}.bind(_self));
}
this.close();
}, function(){
this.close();
});
}
});
MWF.xApplication.Setting.servers.ApplicationServer.Document.App = new Class({
Implements: [Events],
initialize: function(doc, appName, color){
this.document = doc;
this.server = this.document.server;
this.app = this.server.app;
this.json = this.server.json;
this.css = this.app.css;
this.appName = appName;
this.table = this.document.applicationTable;
this.status = "";
this.load(color);
},
load: function(color){
this.checkbox = new Element("input", {"type": "checkbox", "name": this.appName});
this.tr = new Element("tr", {"styles": {"background-color": color}}).inject(this.table);
var td = new Element("td", {"text": this.appName}).inject(this.tr);
td = new Element("td").inject(this.tr);
this.weightTd = new Element("td").inject(this.tr);
this.weightTd.setStyle("width", "80px");
td = new Element("td").inject(this.tr);
var idx1 = this.json.contextList.indexOf(this.appName);
this.planAppArr = this.json.planList.filter(function(item, index){
return (item.name==this.appName);
}.bind(this));
if ((idx1!=-1) && (this.planAppArr.length)){
new Element("div", {"styles": this.css.applicationServerDocumentApplicationDeployedNode}).inject(td);
this.checkbox.set("checked", true);
this.status = "depolyed";
}else if ((idx1==-1) && (this.planAppArr.length)){
new Element("div", {"styles": this.css.applicationServerDocumentApplicationReadyDeployNode}).inject(td);
this.checkbox.set("checked", true);
this.status = "readyDepoly";
}else if ((idx1!=-1) && (!this.planAppArr.length)){
new Element("div", {"styles": this.css.applicationServerDocumentApplicationReadyDeleteNode}).inject(td);
this.status = "readyDelete";
}else{
new Element("div", {"styles": this.css.applicationServerDocumentApplicationNotDepolyNode}).inject(td);
this.status = "";
}
if (this.checkbox.get("checked")){
this.createWeightInput();
}
td = new Element("td").inject(this.tr);
this.checkbox.inject(td);
var _self = this;
this.checkbox.addEvent("click", function(){
var td = this.getParent().getPrevious("td");
var div = td.getElement("div");
var name = this.get("name");
var tmpArr = _self.json.planList.filter(function(item, index){
return (item.name==name);
});
if (this.checked){
_self.createWeightInput();
if (!tmpArr.length) _self.json.planList.push({"name": name, "weight": 100});
if (_self.status == "depolyed"){
div.setStyle("background", "url(/x_component_Setting/$Main/default/icon/deployed.png) no-repeat center center");
}else{
div.setStyle("background", "url(/x_component_Setting/$Main/default/icon/readyDeploy.png) no-repeat center center");
}
}else{
_self.removeWeightInput();
if (tmpArr.length) _self.json.planList.erase(tmpArr[0]);
if (_self.status == "depolyed"){
div.setStyle("background", "url(/x_component_Setting/$Main/default/icon/readyDelete.png) no-repeat center center");
}else{
div.setStyle("background", "");
}
}
});
},
createWeightInput: function(){
if (!this.weightInput){
this.weightInput = new Element("input", {
"styles": {
"border": "1px solid #BBB",
"width": "80px"
},
"type": "text",
"value": (this.planAppArr.length) ? this.planAppArr[0].weight : ""
}).inject(this.weightTd);
}
},
removeWeightInput: function(){
if (this.weightInput){
this.weightInput.destroy();
this.weightInput = null;
}
},
destroy: function(){
this.tr.destroy();
MWF.release(this);
}
});