diff --git a/src/cloud/occi/lib/occi-server.rb b/src/cloud/occi/lib/occi-server.rb
index 2eae976ee6..3c84e43d81 100755
--- a/src/cloud/occi/lib/occi-server.rb
+++ b/src/cloud/occi/lib/occi-server.rb
@@ -48,6 +48,8 @@ $: << RUBY_LIB_LOCATION+"/cloud" # For the Repository Manager
require 'rubygems'
require 'sinatra'
require 'yaml'
+require 'erb'
+require 'tempfile'
require 'OCCIServer'
require 'CloudAuth'
@@ -73,6 +75,7 @@ CloudServer.print_configuration(conf)
##############################################################################
use Rack::Session::Pool, :key => 'occi'
set :public, Proc.new { File.join(root, "ui/public") }
+set :views, settings.root + '/ui/views'
set :config, conf
if CloudServer.is_port_open?(settings.config[:server],
@@ -291,5 +294,16 @@ get '/ui' do
if !authorized?
return File.read(File.dirname(__FILE__)+'/ui/templates/login.html')
end
- return File.read(File.dirname(__FILE__)+'/ui/templates/index.html')
+
+ erb :index
+ #return File.read(File.dirname(__FILE__)+'/ui/templates/index.html')
+end
+
+post '/ui/upload' do
+ file = Tempfile.new('uploaded_image')
+ request.params['file'] = file.path #so we can re-use occi post_storage()
+ file.write(request.env['rack.input'].read)
+ #file.close # this would allow that file is garbage-collected
+ result,rc = @occi_server.post_storage(request)
+ treat_response(result,rc)
end
diff --git a/src/cloud/occi/lib/ui/public/css/application.css b/src/cloud/occi/lib/ui/public/css/application.css
index 80ce873be6..e4934e76e9 100644
--- a/src/cloud/occi/lib/ui/public/css/application.css
+++ b/src/cloud/occi/lib/ui/public/css/application.css
@@ -170,7 +170,7 @@ fieldset div{
fieldset input,
fieldset textarea{
- width:180px;
+ width:140px;
/*border-top:1px solid #555;
border-left:1px solid #555;
border-bottom:1px solid #ccc;
@@ -182,7 +182,7 @@ fieldset textarea{
}
fieldset select{
- width:184px;
+ width:144px;
/*border-top:1px solid #555;
border-left:1px solid #555;
border-bottom:1px solid #ccc;
@@ -211,7 +211,7 @@ legend{
label{
float: left;
- width:120px;
+ width:100px;
padding:0 1em;
text-align:left;
}
@@ -289,8 +289,9 @@ textarea:focus{
}
.form_buttons {
- margin-top:25px;
- text-align:right;
+ margin-top:6px;
+ text-align:left;
+ margin-bottom:20px;
}
.add_remove_button {
@@ -319,11 +320,13 @@ tr.odd td, tr.even td{
}
tr.odd:hover{
- background-color: #E69138 !important;
+ background-color: #0098C3 !important;
+ color: white;
}
tr.even:hover{
- background-color: #E69138 !important;
+ color: white;
+ background-color: #0098C3 !important;
}
.show_hide label{
@@ -367,7 +370,7 @@ tr.even:hover{
margin: 20px;
text-align: left;
display: inline-block;
- width:43%;
+ width:85%;
vertical-align:top;
overflow:auto;
}
@@ -551,7 +554,7 @@ ul.action_list li a{
}
ul.action_list li a:hover{
- color:#E69138;
+ color:#0098C3;
}
@@ -567,4 +570,19 @@ ul.action_list li a:hover{
.ui-layout-resizer-open-hover, /* hover-color to 'resize' */
.ui-layout-resizer-dragging {
background: #EEE;
+}
+
+.dashboard_img {
+ padding-left:10px;
+ border:0;
+ height:40px;
+}
+
+.dashboard_p {
+ color: #353735;
+ text-align:justify;
+}
+
+.dashboard_p p{
+ padding-top:5px;
}
\ No newline at end of file
diff --git a/src/cloud/occi/lib/ui/public/css/layout.css b/src/cloud/occi/lib/ui/public/css/layout.css
index 63630c8911..283bf1e7a6 100644
--- a/src/cloud/occi/lib/ui/public/css/layout.css
+++ b/src/cloud/occi/lib/ui/public/css/layout.css
@@ -93,7 +93,7 @@ body {
font-weight: bold;
}
.sunstone-color {
- color: #E69138;
+ color: #0098C3;
}
#logo-wrapper {
@@ -140,12 +140,12 @@ background-image: -moz-linear-gradient(
linear,
left top,
right top,
- color-stop(0.95, #E69138),
+ color-stop(0.95, #0098C3),
color-stop(1, rgb(53,55,53))
);
background-image: -moz-linear-gradient(
left center,
- #E69138 95%,
+ #0098C3 95%,
rgb(53,55,53) 100%
);
/*
diff --git a/src/cloud/occi/lib/ui/public/css/login.css b/src/cloud/occi/lib/ui/public/css/login.css
index 4843efacf9..e086897b3f 100644
--- a/src/cloud/occi/lib/ui/public/css/login.css
+++ b/src/cloud/occi/lib/ui/public/css/login.css
@@ -52,7 +52,7 @@ div#logo_sunstone {
top: 80px;
margin-left: auto;
margin-right: auto;
- background: url(../images/opennebula-sunstone-big.png) no-repeat center;
+ background: url(../images/opennebula-selfservice-big.png) no-repeat center;
vertical-align: center;
}
diff --git a/src/cloud/occi/lib/ui/public/images/ajax-loader.gif b/src/cloud/occi/lib/ui/public/images/ajax-loader.gif
index 6f0e2ddb68..cf69d7879b 100644
Binary files a/src/cloud/occi/lib/ui/public/images/ajax-loader.gif and b/src/cloud/occi/lib/ui/public/images/ajax-loader.gif differ
diff --git a/src/cloud/occi/lib/ui/public/images/one-compute.png b/src/cloud/occi/lib/ui/public/images/one-compute.png
new file mode 100644
index 0000000000..93cfa43614
Binary files /dev/null and b/src/cloud/occi/lib/ui/public/images/one-compute.png differ
diff --git a/src/cloud/occi/lib/ui/public/images/one-network.png b/src/cloud/occi/lib/ui/public/images/one-network.png
new file mode 100644
index 0000000000..a59f6334cd
Binary files /dev/null and b/src/cloud/occi/lib/ui/public/images/one-network.png differ
diff --git a/src/cloud/occi/lib/ui/public/images/one-storage.png b/src/cloud/occi/lib/ui/public/images/one-storage.png
new file mode 100644
index 0000000000..5ec80f21c8
Binary files /dev/null and b/src/cloud/occi/lib/ui/public/images/one-storage.png differ
diff --git a/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-big.png b/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-big.png
new file mode 100644
index 0000000000..add8ed9d26
Binary files /dev/null and b/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-big.png differ
diff --git a/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-small.png b/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-small.png
new file mode 100644
index 0000000000..d2fa63708f
Binary files /dev/null and b/src/cloud/occi/lib/ui/public/images/opennebula-selfservice-small.png differ
diff --git a/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-big.png b/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-big.png
deleted file mode 100644
index 74b70be13d..0000000000
Binary files a/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-big.png and /dev/null differ
diff --git a/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-small.png b/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-small.png
deleted file mode 100644
index 7b411542c2..0000000000
Binary files a/src/cloud/occi/lib/ui/public/images/opennebula-sunstone-small.png and /dev/null differ
diff --git a/src/cloud/occi/lib/ui/public/images/pbar.gif b/src/cloud/occi/lib/ui/public/images/pbar.gif
index b9d8856a73..a36f520314 100644
Binary files a/src/cloud/occi/lib/ui/public/images/pbar.gif and b/src/cloud/occi/lib/ui/public/images/pbar.gif differ
diff --git a/src/cloud/occi/lib/ui/public/js/layout.js b/src/cloud/occi/lib/ui/public/js/layout.js
index ab4f193001..71b0098548 100644
--- a/src/cloud/occi/lib/ui/public/js/layout.js
+++ b/src/cloud/occi/lib/ui/public/js/layout.js
@@ -18,12 +18,12 @@ var activeTab;
var outerLayout, innerLayout;
function hideDialog(){
- innerLayout.close("south");
+ innerLayout.close("east");
}
function popDialog(content){
$("#dialog").html(content);
- innerLayout.open("south");
+ innerLayout.open("east");
}
function popDialogLoading(){
@@ -92,15 +92,16 @@ $(document).ready(function () {
, west__resizable: false
});
- var factor = 0.6;
- var dialog_height = Math.floor($(".outer-center").height()*factor);
+ var factor = 0.45;
+ var dialog_height = Math.floor($(".outer-center").width()*factor);
innerLayout = $('div.outer-center').layout({
fxName: "slide"
, initClosed: true
, center__paneSelector: ".inner-center"
- , south__paneSelector: ".inner-south"
- , south__size: dialog_height
+ , east__paneSelector: ".inner-east"
+ , east__size: dialog_height
+ , east__minSize: 400
, spacing_open: 5 // ALL panes
, spacing_closed: 5 // ALL panes
});
diff --git a/src/cloud/occi/lib/ui/public/js/occi.js b/src/cloud/occi/lib/ui/public/js/occi.js
index ab9a0897c9..2fe3c61ff2 100644
--- a/src/cloud/occi/lib/ui/public/js/occi.js
+++ b/src/cloud/occi/lib/ui/public/js/occi.js
@@ -14,7 +14,7 @@
/* limitations under the License. */
/* -------------------------------------------------------------------------- */
-//Simple recursion
+//Convert json into the XML that OCCI server can understand
function json2xml(element,root_key) {
var xml = "";
if (!root_key) root_key="ROOT";
@@ -28,7 +28,7 @@ function json2xml(element,root_key) {
//do not wrap arrays in root_key
return xml;
- } else
+ } else
xml += json2xml(value,key);
});
} else { //its a simple value. Base condition
@@ -225,7 +225,9 @@ var OCCI = {
dataType: "xml ONEjson",
data: data,
success: function(response){
- return callback ? callback(request, response) : null;
+ var res = {};
+ res[resource] = response;
+ return callback ? callback(request, res) : null;
},
error: function(response){
return callback_error ?
@@ -310,9 +312,9 @@ var OCCI = {
var callback = params.success;
var callback_error = params.error;
var id = params.data.id;
- var body = json2xml(params.data.body,resource)
+ var body = json2xml(params.data.body,resource);
- var request = OCCI.Helper.request(resource,method, [id, body]);
+ var request = OCCI.Helper.request(resource,method, id);
$.ajax({
url: resource.toLowerCase() + "/" + id,
@@ -428,35 +430,13 @@ var OCCI = {
OCCI.Action.show(params,OCCI.Network.resource);
},
"publish": function(params){
- params.data.body = { "public": "YES" }
+ params.data.body = { "PUBLIC": "YES" };
OCCI.Action.update(params,OCCI.Network.resource,"publish");
},
"unpublish": function(params){
- params.data.body = { "public": "NO" }
- OCCI.Action.update(params,OpenNebula.Network.resource,"unpublish");
+ params.data.body = { "PUBLIC": "NO" };
+ OCCI.Action.update(params,OCCI.Network.resource,"unpublish");
},
-/*
- "addleases" : function(params){
- var action_obj = params.data.extra_param;
- OpenNebula.Action.simple_action(params,
- OpenNebula.Network.resource,
- "addleases",
- action_obj);
- },
- "rmleases" : function(params){
- var action_obj = params.data.extra_param;
- OpenNebula.Action.simple_action(params,
- OpenNebula.Network.resource,
- "rmleases",
- action_obj);
- },
- "update": function(params){
- var action_obj = {"template_raw" : params.data.extra_param };
- OpenNebula.Action.simple_action(params,
- OpenNebula.Network.resource,
- "update",
- action_obj);
- },*/
},
"VM": {
@@ -484,25 +464,27 @@ var OCCI = {
},
"cancel": function(params){
params.data.body = { state : "CANCEL" };
- OCCI.Action.simple_action(params,OCCI.VM.resource,"cancel");
+ OCCI.Action.update(params,OCCI.VM.resource,"cancel");
},
"suspend": function(params){
params.data.body = { state : "SUSPENDED" };
- OCCI.Action.simple_action(params,OCCI.VM.resource,"suspend");
+ OCCI.Action.update(params,OCCI.VM.resource,"suspend");
},
"resume": function(params){
params.data.body = { state : "RESUME" };
- OCCI.Action.simple_action(params,OCCI.VM.resource,"resume");
+ OCCI.Action.update(params,OCCI.VM.resource,"resume");
},
"done": function(params){
params.data.body = { state : "DONE" };
- OCCI.Action.simple_action(params,OCCI.VM.resource,"done");
- },
- "saveas": function(params){
- var action_obj = params.data.extra_param;
- OCCI.Action.simple_action(params,OCCI.VM.resource,
- "saveas",action_obj);
+ OCCI.Action.update(params,OCCI.VM.resource,"done");
},
+ "saveas" : function(params){
+ var obj = params.data.extra_param;
+ var disk_id = obj.disk_id;
+ var im_name = obj.image_name;
+ params.data.body = '