first commit
Change-Id: I8a65ee5527dd16d81e87c8ac5d4bdb471e5e759d
Signed-off-by: lombardof <flombardo@cnit.it>
diff --git a/projecthandler/template/project/descriptor/descriptor_view_base.html b/projecthandler/template/project/descriptor/descriptor_view_base.html
new file mode 100644
index 0000000..3635d66
--- /dev/null
+++ b/projecthandler/template/project/descriptor/descriptor_view_base.html
@@ -0,0 +1,131 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+
+
+ <!-- Codemirror core CSS -->
+ <link rel="stylesheet" href="/static/bower_components/codemirror/lib/codemirror.css" >
+ <link rel="stylesheet" href="/static/bower_components/codemirror/addon/fold/foldgutter.css" />
+ <link rel="stylesheet" href="/static/bower_components/codemirror/theme/neat.css" >
+ <link rel="stylesheet" href="/static/bower_components/codemirror/addon/dialog/dialog.css" >
+ <link rel="stylesheet" href="/static/bower_components/codemirror/addon/display/fullscreen.css" >
+
+{% endblock %}
+
+
+
+
+{% block content_body %}
+ {{ block.super }}
+<div class="row">
+ <div class="col-md-12">
+ <div class="nav-tabs-custom">
+ <ul class="nav nav-tabs">
+ {% block tab_pane_button_list %}
+
+ {% endblock %}
+
+ {% block nav_buttons_list %}
+
+ {% endblock %}
+
+ </ul>
+ <div class="tab-content">
+ {% block tab_pane_list %}
+
+ {% endblock %}
+ </div>
+ <!-- /.tab-content -->
+
+
+
+
+</div>
+
+ </div>
+</div>
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+
+ <script src="/static/bower_components/codemirror/lib/codemirror.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/fold/foldcode.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/fold/foldgutter.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/fold/brace-fold.js" ></script>
+ <script src="/static/bower_components/codemirror/mode/javascript/javascript.js" ></script>
+ <script src="/static/bower_components/codemirror/mode/yaml/yaml.js" ></script>
+ <script src="/static/bower_components/codemirror/mode/markdown/markdown.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/search/searchcursor.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/search/search.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/dialog/dialog.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/display/autorefresh.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/edit/matchbrackets.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/edit/closebrackets.js" ></script>
+ <script src="/static/bower_components/codemirror/addon/display/fullscreen.js" ></script>
+ <script src="/static/bower_components/codemirror/keymap/sublime.js" ></script>
+
+
+ <script>
+
+ var json_editor_settings = {
+ mode: "javascript",
+ showCursorWhenSelecting: true,
+ autofocus: true,
+ lineNumbers: true,
+ lineWrapping: true,
+ foldGutter: true,
+ gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
+ autoCloseBrackets: true,
+ matchBrackets: true,
+ extraKeys: {
+ "F11": function (cm) {
+ cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+ },
+ "Esc": function (cm) {
+ if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
+ },
+ "Ctrl-Q": function (cm) {
+ cm.foldCode(cm.getCursor());
+ }
+ },
+ theme: "neat",
+ keyMap: "sublime"
+ };
+
+ var yaml_editor_settings = {
+ mode: "yaml",
+ showCursorWhenSelecting: true,
+ autofocus: true,
+ autoRefresh: true,
+ lineNumbers: true,
+ lineWrapping: true,
+ foldGutter: true,
+ gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
+ autoCloseBrackets: true,
+ matchBrackets: true,
+ extraKeys: {
+ "F11": function (cm) {
+ cm.setOption("fullScreen", !cm.getOption("fullScreen"));
+ },
+ "Esc": function (cm) {
+ if (cm.getOption("fullScreen")) cm.setOption("fullScreen", false);
+ },
+ "Ctrl-Q": function (cm) {
+ cm.foldCode(cm.getCursor());
+ }
+ },
+ theme: "neat",
+ keyMap: "sublime"
+ };
+
+
+ function goToGraph() {
+ window.location.href = '/projects/{{project_id}}/graph?type={{descriptor_type}}&id={{descriptor_id}}'
+ }
+ </script>
+{% endblock %}
diff --git a/projecthandler/template/project/descriptor/modal/choose_node_id.html b/projecthandler/template/project/descriptor/modal/choose_node_id.html
new file mode 100644
index 0000000..3bfea9e
--- /dev/null
+++ b/projecthandler/template/project/descriptor/modal/choose_node_id.html
@@ -0,0 +1,27 @@
+<div class="modal" id="modal_choose_node_id" xmlns="http://www.w3.org/1999/html">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="modal_chooser_title_add_node">Add node</h4>
+ </div>
+ <div class="modal-body">
+ <div id="div_chose_id">
+ <label>Choose an id </label>
+ <input name="input_choose_node_id" id="input_choose_node_id" type="text" size="40" maxlength="20"/>
+ </div>
+ {% block content_body %}
+
+ {% endblock %}
+ </div>
+
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+ <button type="button" class="btn btn-primary" id="save_choose_node_id">Add</button>
+ </div>
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
\ No newline at end of file
diff --git a/projecthandler/template/project/modal/modal_keyboard_info_base.html b/projecthandler/template/project/modal/modal_keyboard_info_base.html
new file mode 100644
index 0000000..1986d5d
--- /dev/null
+++ b/projecthandler/template/project/modal/modal_keyboard_info_base.html
@@ -0,0 +1,37 @@
+<div id="modalTopologyInfoButton" class="modal fade" tabindex="-1" role="dialog">
+ <div class="modal-dialog ">
+ <div class="modal-content">
+ <div class="modal-header">
+
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span>
+ </button>
+ <h4 class="modal-title">Keyboard shortcuts</h4>
+ </div>
+ <div class="modal-body">
+ <ul>
+
+ <li>
+ <p>Create edge: Select the first vertex by clicking on it. <span class="help-key">Shift</span> + <span class="help-key">left-click</span> on another vertex (different than the selected one).</p>
+ </li>
+ <li>
+ <p> <span class="help-key">Delete</span> Delete selected nodes or link.</p>
+ </li>
+
+ <li>
+ <p>Switch to automatic node positioning: Play/Pause</p>
+ </li>
+ {% block left_sidebar %}
+
+ {% endblock %}
+ </ul>
+ </div>
+ <div class="modal-footer">
+
+ </div>
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
+<!-- /.modal -->
\ No newline at end of file
diff --git a/projecthandler/template/project/new_project.html b/projecthandler/template/project/new_project.html
new file mode 100644
index 0000000..44fb435
--- /dev/null
+++ b/projecthandler/template/project/new_project.html
@@ -0,0 +1,129 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+{{ block.super }}
+ <link rel="stylesheet" href="{% static "bower_components/admin-lte/plugins/select2/select2.css" %}">
+
+ <style type="text/css">
+
+ input:required:invalid, input:focus:invalid {
+
+ background-position: right top;
+ background-repeat: no-repeat;
+ }
+ input:required:valid {
+
+ background-position: right top;
+ background-repeat: no-repeat;
+ }
+
+</style>
+{% endblock %}
+
+{% block left_sidebar %}
+ {% include 'left_sidebar_base.html' %}
+{% endblock %}
+
+{% block breadcrumb_body %}
+{{ block.super }}
+<li><a href='{% url "projects:new_project" %}'>New Project</a></li>
+{% endblock %}
+
+{% block content_body %}
+{{ block.super }}
+<div class="row">
+ <div class="col-md-12">
+ <!-- general form elements -->
+ <div class="box box-primary">
+ <div class="box-header with-border">
+ <h3 class="box-title">New Project</h3>
+ </div>
+ <!-- /.box-header -->
+ <!-- form start -->
+ <form role="form" method="post" enctype="multipart/form-data">
+ {% csrf_token %}
+ <div class="box-body">
+ <div class="row">
+ <div class="form-group col-xs-3">
+ <p for="typeButtonsSelect">Project Type</p>
+ <input type="hidden" class="form-control input-sm" name="type" id="projectType"
+ required>
+ <select id="select_type" class="js-example-basic-single form-control" style="width: 75%">
+
+ </select>
+
+ </div>
+ <div class="form-group col-xs-4">
+ <p for="projectName">Project Name</p>
+ <input type="text" class="form-control input-sm" name="name" id="projectName"
+ placeholder="Enter Project name" required>
+ </div>
+ <div class="form-group col-xs-4">
+ <p for="projectInfo">Info</p>
+ <input type="text" class="form-control input-sm" name="info" id="projectInfo"
+ placeholder="Short Description">
+ </div>
+
+
+ </div>
+ <div class="row">
+ <div id="startGroup" class="form-group col-xs-5" style="display: none;">
+
+
+ <div id="startButtonsSelect" class="btn-group" data-toggle="buttons">
+ <label id="s-scratch" class="btn btn-primary active">
+ <input id="scratch" type="radio" name="startfrom" autocomplete="off" value="scratch">
+ Empty project
+ </label>
+ <label id="s-example" class="btn btn-primary">
+ <input type="radio" name="startfrom" autocomplete="off" value="example">
+ Example project
+ </label>
+ <label id="s-files" class="btn btn-primary">
+ <input type="radio" name="startfrom" autocomplete="off" value="files">
+ Load files
+ </label>
+
+
+ </div>
+ </div>
+ </div>
+ <div id="typeStartContainer" class="row">
+ <div class="form-group col-xs-8">
+ {% autoescape off %}{{ type_container_template }}{% endautoescape %}
+ </div>
+ </div>
+
+ <!-- /.box-body -->
+ </div>
+ <div class="box-footer">
+ <button id="createButton" type="submit" class="btn btn-primary" disabled>Create</button>
+ </div>
+ </form>
+ </div>
+ <!-- /.box -->
+
+ </div>
+</div>
+{% endblock %}
+
+{% block resource_block %}
+{{ block.super }}
+ <!-- Select2 -->
+ <script src="{% static "bower_components/admin-lte/plugins/select2/select2.full.min.js" %}"></script>
+
+ <script src="{% static "src/projecthandler/new_project.js" %}"></script>
+<script>
+{% if data_type_selector %}
+var data_type_selector ={{ data_type_selector |safe }};
+{% endif %}
+
+{% if type_example_files %}
+var type_example_files = {{type_example_files | safe}};
+{% endif %}
+
+</script>
+{% endblock %}
+
diff --git a/projecthandler/template/project/osm/descriptor/descriptor_new.html b/projecthandler/template/project/osm/descriptor/descriptor_new.html
new file mode 100644
index 0000000..d257d7f
--- /dev/null
+++ b/projecthandler/template/project/osm/descriptor/descriptor_new.html
@@ -0,0 +1,155 @@
+{% extends "descriptor/descriptor_view_base.html" %}
+
+{% load staticfiles %}
+{% block head_base %}
+ {% with skin_css="AdminLTE/dist/css/skins/skin-purple.min.css"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block body %}
+ {% with skin="purple"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+{% block logo_sidebar %}
+ {% with logo_mini="assets/img/osm_small_logo.png" logo="assets/img/OSM-logo.png"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block title_header_big %}
+{{ block.super }}
+Onboard new {{ descriptor_type }} package
+{% endblock %}
+
+{% block left_sidebar %}
+{% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block breadcrumb_body %}
+{{ block.super }}
+<li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview_data.name}}</a></li>
+<li><a href="{% url 'projects:open_project' project_id=project_id %}descriptors/{{descriptor_type}}">{{ descriptor_type }} Descriptors</a></li>
+<li>Create Descriptor</li>
+{% endblock %}
+
+{% block tab_pane_button_list %}
+{{ block.super }}
+<li id="file_li" class="active"><a href="#upload" data-toggle="tab"><i class="fa fa-upload"></i> Onboard Package</a></li>
+{% endblock %}
+
+{% block nav_buttons_list %}
+{{ block.super }}
+<li class="pull-right">
+ <button id="cancel" type="button" class="btn btn-block btn-primary btn-sm" onclick="cancel(this.id)"><i
+ class="fa fa-times"></i> Cancel
+ </button>
+</li>
+{% endblock %}
+
+{% block tab_pane_list %}
+{{ block.super }}
+
+<div class="tab-pane active" id="upload">
+
+ <h4>Drag and drop file below</h4>
+ <div class="upload-drop-zone" id="drop-zone">
+ Just drag and drop files here
+ </div>
+</div>
+{% endblock %}
+
+
+{% block resource_block %}
+{{ block.super }}
+
+<script>
+
+ var dropZone = document.getElementById('drop-zone');
+ dropZone.ondrop = function(e) {
+ e.preventDefault();
+ this.className = 'upload-drop-zone';
+ create(e.dataTransfer.files, true);
+ }
+
+ dropZone.ondragover = function() {
+ this.className = 'upload-drop-zone drop';
+ return false;
+ }
+
+ dropZone.ondragleave = function() {
+ this.className = 'upload-drop-zone';
+ return false;
+ }
+
+
+
+
+ function create(fs, dropzone){
+ var id = $('.nav-tabs .active').attr('id');
+ if (dropzone) id = 'file_li'
+ var type, text ;
+ var data = new FormData();
+ switch(id) {
+
+ case 'file_li':
+ type = 'file'
+
+ var files = dropzone ? fs : document.getElementById('js-upload-files').files;
+ if (!files || !files.length) {
+ files = document.getElementById('drop-zone').files
+ if(!files || !files.length){
+ alert("Seletc a file")
+ return
+ }
+ }
+ console.log(files[0])
+ var patt1 = /\.([0-9a-z]+)(?:[\?#]|$)/i;
+ console.log(files[0].name.match(patt1));
+ var extension = files[0].name.substr(files[0].name.lastIndexOf('.') + 1)
+ console.log(extension)
+ if(!(extension == 'gz' )){
+ alert("The file must be .tar.gz");
+ return
+ }
+
+ data.append('file', files[0]);
+ break;
+ }
+ data.append('csrfmiddlewaretoken','{{csrf_token}}');
+ data.append('type', type);
+ data.append('text', text);
+ data.append('id', '{{descriptor_id}}');
+ console.log(text);
+ $.ajax({
+ url: "new",
+ type: 'POST',
+ data: data,
+ cache: false,
+ contentType: false,
+ processData: false,
+ success: function(result) {
+ console.log(result)
+
+ window.location.href="/projects/{{project_id}}/descriptors/{{descriptor_type}}"
+
+ },
+ error: function(result) {
+ showAlert(result);
+ }
+ });
+ }
+
+ function cancel(id){
+ window.location.href="/projects/{{project_id}}/descriptors/{{descriptor_type}}"
+ }
+
+
+
+</script>
+{% endblock %}
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
diff --git a/projecthandler/template/project/osm/descriptor/descriptor_view.html b/projecthandler/template/project/osm/descriptor/descriptor_view.html
new file mode 100644
index 0000000..5a082de
--- /dev/null
+++ b/projecthandler/template/project/osm/descriptor/descriptor_view.html
@@ -0,0 +1,126 @@
+{% extends "descriptor/descriptor_view_base.html" %}
+
+{% load staticfiles %}
+
+
+{% block title_header_big %}
+{{ block.super }}
+Edit {{ descriptor_type|upper }} Descriptor
+{% endblock %}
+
+
+{% block left_sidebar %}
+{% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block breadcrumb_body %}
+{{ block.super }}
+<li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview_data.name}}</a></li>
+<li><a href="{% url 'projects:open_project' project_id=project_id %}descriptors/{{descriptor_type}}">{{ descriptor_type }} Descriptors</a></li>
+<li><a>{{descriptor_id}}</a></li>
+{% endblock %}
+
+{% block tab_pane_button_list %}
+{{ block.super }}
+<li class="active" id="yaml_li"><a href="#yaml" data-toggle="tab"><i class="fa fa-file-code-o"></i> YAML</a></li>
+<li id="json_li"><a href="#json" data-toggle="tab"><i class="fa fa-file-code-o"></i> JSON</a></li>
+{% endblock %}
+
+{% block nav_buttons_list %}
+ {{ block.super }}
+ <li class="pull-right"><button id="save" type="button" class="btn btn-block btn-primary btn-sm" onclick="update(this.id)" ><i class="fa fa-save"></i> Update</button></li>
+ <li class="pull-right"><button id="save_show_graph" type="button" class="btn btn-block btn-primary btn-sm" onclick="update(this.id)" disabled><i class="fa fa-save"></i> Update and Show Graph</button></li>
+ <li class="pull-right"><button type="button" class="btn btn-block btn-primary btn-sm" onclick="goToGraph()" disabled><i class="fa fa-sitemap"></i> Show Graph</button></li>
+{% endblock %}
+
+{% block tab_pane_list %}
+{{ block.super }}
+
+<!-- /.tab-pane -->
+<div class="active tab-pane" id="yaml">
+ <textarea id="code_editor_yaml">
+ </textarea>
+</div>
+<!-- /.tab-pane-->
+
+<div class="tab-pane" id="json">
+ <textarea id="code_editor_json">
+ </textarea>
+</div>
+
+{% endblock %}
+
+{% block resource_block %}
+{{ block.super }}
+
+
+<script>
+ var editorJSON;
+ var editorYaml;
+
+ $(document).ready(function () {
+ //var cmjsoneditor = CodeMirror.fromTextArea(document.getElementById("code_editor"), json_editor_settings);
+ var myJsonTextArea = document.getElementById("code_editor_json");
+ editorJSON = CodeMirror(function (elt) {
+ myJsonTextArea.parentNode.replaceChild(elt, myJsonTextArea);
+ }, json_editor_settings);
+
+
+ editorJSON.setValue(JSON.stringify({{descriptor_strings.descriptor_string_json | safe}}, null, "\t"));
+ editorJSON.setOption("autoRefresh", true);
+ var myYamlTextArea = document.getElementById("code_editor_yaml");
+ editorYaml = CodeMirror(function (elt) {
+ myYamlTextArea.parentNode.replaceChild(elt, myYamlTextArea);
+ }, yaml_editor_settings);
+ var des_strings = {{descriptor_strings | safe}};
+ editorYaml.setValue(des_strings.descriptor_string_yaml);
+
+ });
+
+
+ function update(e) {
+ var dialog = bootbox.dialog({
+ message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
+ closeButton: false
+ });
+
+ var id = $('.nav-tabs .active').attr('id');
+ var type, text;
+ switch (id) {
+ case 'yaml_li':
+ type = 'yaml';
+ text = editorYaml.getValue();
+ break;
+ case 'json_li':
+ type = 'json';
+ text = editorJSON.getValue();
+ break;
+ }
+ $.ajax({
+ url: "/projects/{{project_id}}/descriptors/{{descriptor_type}}/{{descriptor_id}}/",
+ type: 'POST',
+ dataType: 'json',
+ data: {
+ 'csrfmiddlewaretoken': '{{csrf_token}}',
+ 'type': type,
+ 'text': text
+ },
+ success: function (result) {
+ dialog.modal('hide');
+
+ },
+ error: function (result) {
+ console.log(result);
+ dialog.modal('hide');
+ bootbox.alert(result);
+ }
+ });
+ }
+
+</script>
+{% endblock %}
+
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
diff --git a/projecthandler/template/project/osm/descriptor/descriptorlist.html b/projecthandler/template/project/osm/descriptor/descriptorlist.html
new file mode 100644
index 0000000..56ee44d
--- /dev/null
+++ b/projecthandler/template/project/osm/descriptor/descriptorlist.html
@@ -0,0 +1,57 @@
+{% load staticfiles %}
+{% load get %}
+<div class="col-md-12">
+
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title">
+ </h3>
+ <div class="box-tools">
+
+ <a href="{% url 'projects:new_descriptor' project_id=project_id descriptor_type=descriptor_type %}"
+ class="btn btn-block btn-primary btn-sm"><i
+ class="fa fa-upload"></i><span> Onboard {{descriptor_type|upper}}</span></a>
+ </div>
+ </div>
+ <div class="box-body">
+ <table id="descriptors_table" class="table table-bordered table-striped dataTable"
+ role="grid">
+ <thead>
+ <tr role="row">
+ <th>Id</th>
+ <th>Name</th>
+ <th>Description</th>
+ <th style="width:10%">Vendor</th>
+ <th style="width:5%">Version</th>
+ <th style="width:35%">Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for k in descriptors %}
+ <tr role="row">
+ <td>{{ k|get:"_id" }}</td>
+ <td>{{ k|get:"short-name" }} </td>
+ <td>{{ k|get:"description" }} </td>
+ <td>{{ k|get:"vendor" }} </td>
+ <td>{{ k|get:"version" }} </td>
+ <td>
+ <div class="btn-group">
+ {% if descriptor_type == "nsd" %}
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Instantiate NS" onclick="javascript:openModalCreateNS('{{project_id}}', '{{descriptor_type}}', '{{ k|get:"_id" }}')"><i class="fa fa-paper-plane"></i></button>
+ {% endif %}
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Edit" onclick="javascript:openDescriptorView('{{project_id}}', '{{descriptor_type}}', '{{ k|get:"_id" }}')"><i class="fa fa-edit"></i></button>
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Show content" onclick="javascript:openPackageContentList('{{project_id}}', '{{descriptor_type}}', '{{ k|get:"_id" }}')"><i class="fa fa-folder-open"></i></button>
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Show Graph" onclick="location.href='/projects/{{project_id}}/graph?type={{descriptor_type}}&id={{ k|get:"_id" }}'" disabled><i class="fa fa-sitemap fa-fw"></i></button>
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Download package" onclick="location.href='{% url 'projects:custom_action' project_id=project_id descriptor_type=descriptor_type descriptor_id=k|get:'_id' action_name='download_pkg' %}'"><i class="fa fa-download fa-fw"></i></button>
+ <button type="button" class="btn btn-default" data-container="body" data-toggle="tooltip" data-placement="top" title="Delete" onclick="javascript:deletePackage('{{project_id}}', '{{descriptor_type}}', '{{ k|get:"_id" }}')"><i class="fa fa-trash-o"></i></button>
+ </div>
+
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+
+ </table>
+ </div>
+ </div>
+</div>
diff --git a/projecthandler/template/project/osm/descriptor/modal/choose_node_id.html b/projecthandler/template/project/osm/descriptor/modal/choose_node_id.html
new file mode 100644
index 0000000..91c4d20
--- /dev/null
+++ b/projecthandler/template/project/osm/descriptor/modal/choose_node_id.html
@@ -0,0 +1 @@
+{% extends "descriptor/modal/choose_node_id.html" %}
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/descriptor/modal/create_link_chooser.html b/projecthandler/template/project/osm/descriptor/modal/create_link_chooser.html
new file mode 100644
index 0000000..ed9a4a5
--- /dev/null
+++ b/projecthandler/template/project/osm/descriptor/modal/create_link_chooser.html
@@ -0,0 +1,21 @@
+<div class="modal" id="modal_create_link_chooser">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="modal_chooser_title">Default Modal</h4>
+ </div>
+ <div class="modal-body" >
+ <select class="form-control" id="selection_chooser">
+ </select>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary" id="save_chooser">Save changes</button>
+ </div>
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/modal/files_list.html b/projecthandler/template/project/osm/modal/files_list.html
new file mode 100644
index 0000000..13105fe
--- /dev/null
+++ b/projecthandler/template/project/osm/modal/files_list.html
@@ -0,0 +1,33 @@
+<div class="modal" id="modal_files_list" xmlns="http://www.w3.org/1999/html">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span></button>
+ <h4 id="files_list_tbody_title" class="modal-title"></h4>
+ </div>
+
+ <div class="modal-body" id="modal_files_list_body" >
+ <table id="files_list" class="table table-condensed">
+ <tbody id="files_list_tbody">
+ <tr>
+ <th style="width: 10px">#</th>
+ <th>File Name</th>
+ <th>Actions</th>
+ </tr>
+ <tr>
+ <td>-</td>
+ <td>name</td>
+ <td>-</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button>
+ </div>
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
diff --git a/projecthandler/template/project/osm/modal/modal_keyboard_info.html b/projecthandler/template/project/osm/modal/modal_keyboard_info.html
new file mode 100644
index 0000000..bf39e69
--- /dev/null
+++ b/projecthandler/template/project/osm/modal/modal_keyboard_info.html
@@ -0,0 +1 @@
+{% extends "modal/modal_keyboard_info_base.html" %}
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/osm_new_project.html b/projecthandler/template/project/osm/osm_new_project.html
new file mode 100644
index 0000000..cfdec29
--- /dev/null
+++ b/projecthandler/template/project/osm/osm_new_project.html
@@ -0,0 +1,25 @@
+<div id="div-file-upload-osm" class="start-selector" style="display: none;">
+ <h4>Select Descriptors File from your computer</h4>
+
+ <div class="tab-pane col-md-6" >
+
+ <!-- Standar Form -->
+ <h3>Descriptor</h3>
+ <div class="form-inline">
+ <div class="form-group">
+ <input type="file" name="ns_files" id="ns-js-upload-files" multiple>
+ </div>
+ </div>
+
+ </div>
+
+</div>
+
+<div id="div-example-osm" class="start-selector" style="display: none;">
+
+ <select id="example-osm" class="example-selector" data-type="osm" name="example-osm-id">
+
+ </select>
+
+
+</div>
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/osm_project_delete.html b/projecthandler/template/project/osm/osm_project_delete.html
new file mode 100644
index 0000000..50bf685
--- /dev/null
+++ b/projecthandler/template/project/osm/osm_project_delete.html
@@ -0,0 +1,36 @@
+{% extends "project_delete.html" %}
+
+{% block head_base %}
+ {% with skin_css="AdminLTE/dist/css/skins/skin-purple.min.css"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block body %}
+ {% with skin="purple"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+{% block logo_sidebar %}
+ {% with logo_mini="assets/img/osm_small_logo.png" logo="assets/img/OSM-logo.png"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block head_block %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block left_sidebar %}
+ {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/osm_project_descriptors.html b/projecthandler/template/project/osm/osm_project_descriptors.html
new file mode 100644
index 0000000..30ea76a
--- /dev/null
+++ b/projecthandler/template/project/osm/osm_project_descriptors.html
@@ -0,0 +1,121 @@
+{% extends "project_descriptors.html" %}
+{% load staticfiles %}
+
+
+{% block head_block %}
+ {{ block.super }}
+<link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
+{% endblock %}
+
+{% block title_header_big %}
+ {{ block.super }}
+ {% if descriptor_type %}
+ {{ descriptor_type|upper }}
+ {% else%}
+ Undefined
+ {% endif %} Packages
+{% endblock %}
+
+{% block left_sidebar %}
+ {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ <li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview_data.name}}</a></li>
+ <li><a> {% if descriptor_type %}
+ {{ descriptor_type }}
+ {% else%}
+ Undefined
+ {% endif %} Packages</a></li>
+
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+{% include 'osm/modal/files_list.html' %}
+{% include 'modal/instance_create.html' %}
+<div class="row">
+ {% include "osm/descriptor/descriptorlist.html" %}
+</div>
+{% endblock %}
+
+
+
+
+{% block resource_block %}
+ {{ block.super }}
+ <script src="/static/bower_components/select2/dist/js/select2.js"></script>
+ <script>
+ function deletePackage(project_id, descriptor_type, package_id) {
+ bootbox.confirm("Are you sure want to delete?", function (result) {
+ if (result) {
+ location.href = '/projects/' + project_id + '/descriptors/' + descriptor_type + '/' + package_id + '/delete'
+ }
+ })
+ }
+
+ function openModalCreateNS(project_id, descriptor_type, descriptor_id) {
+ select2_groups = $('#vimAccountId').select2({
+ placeholder: 'Select VIM',
+ ajax: {
+ url: '{% url "vim:list" %}',
+ dataType: 'json',
+ processResults: function (data) {
+ vims = [];
+ if (data['datacenters']){
+ for(d in data['datacenters']){
+ var datacenter = data['datacenters'][d];
+ vims.push({id: datacenter['_id'], text: datacenter['name']})
+ }
+ }
+
+ return {
+ results: vims
+ };
+ }
+ }
+ });
+ $('#nsdId').val(descriptor_id);
+ $('#modal_new_instance').modal('show');
+ }
+
+ function openPackageContentList(project_id, type, pkg_id) {
+ var dialog = bootbox.dialog({
+ message: '<div class="text-center"><i class="fa fa-spin fa-spinner"></i> Loading...</div>',
+ closeButton: true
+ });
+ $.ajax({
+ url: '/projects/' + project_id + '/descriptors/' + type + '/' + pkg_id + '/action/get_package_files_list',
+ type: 'GET',
+ dataType: "json",
+ contentType: "application/json;charset=utf-8",
+ success: function (result) {
+ //$('#modal_show_vim_body').empty();
+ console.log(result)
+ dialog.modal('hide');
+ build_file_list("Files in " + pkg_id, result.files);
+ },
+ error: function (result) {
+ dialog.modal('hide');
+ bootbox.alert("An error occurred while retrieving the package content.");
+ }
+ });
+ }
+
+
+ function build_file_list(title, list) {
+ $('#files_list_tbody').find('tr:gt(0)').remove();
+ $('#files_list_tbody_title').text(title)
+ for (var i in list) {
+ var template = '<tr><td>-</td><td>' + list[i] + '</td><td><button type="button" class="btn btn-default" onclick="" disabled><i class="fa fa-folder-open"></i></button></td></tr>'
+ $('#files_list_tbody').append(template)
+ }
+ $('#modal_files_list').modal('show');
+ }
+ </script>
+{% endblock %}
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
diff --git a/projecthandler/template/project/osm/osm_project_details.html b/projecthandler/template/project/osm/osm_project_details.html
new file mode 100644
index 0000000..ab90385
--- /dev/null
+++ b/projecthandler/template/project/osm/osm_project_details.html
@@ -0,0 +1,79 @@
+{% extends "project_details.html" %}
+{% block head_base %}
+ {{ block.super }}
+{% endblock %}
+
+{% block body %}
+ {{ block.super }}
+{% endblock %}
+{% block logo_sidebar %}
+ {{ block.super }}
+{% endblock %}
+
+{% block left_sidebar %}
+ {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block content_body %}
+
+<div class="row">
+ <div class="col-md-6">
+ <div class="box box-widget">
+ <div class="box-footer no-padding">
+ <ul class="nav nav-stacked">
+ <li><a><b>Project Name:</b> <span
+ class="pull-right">{{project_overview.name}}</span></a>
+ </li>
+ <li><a><b>Info:</b> <span
+ class="pull-right">{{project_overview.info}}</span></a></li>
+ <li><a><b>Last updated:</b> <span
+ class="pull-right">{{project_overview.updated_date}}</span></a>
+ </li>
+ <li><a><b>Owner:</b> <span
+ class="pull-right">{{project_overview.owner}}</span></a></li>
+ </ul>
+
+ </div>
+
+ </div>
+ </div>
+ <div class="col-md-6">
+ <div class="row">
+ <div class="col-md-6 ">
+ <div class="small-box bg-aqua">
+ <div class="inner"><h3>{{ project_overview.nsd }}</h3>
+ <p>NS packages</p></div>
+ <div class="icon"><i class="fa fa-archive"></i></div>
+ <a href="/projects/{{ project_id }}/descriptors/nsd" class="small-box-footer">Open list <i
+ class="fa fa-arrow-circle-right"></i></a></div>
+ </div>
+ <div class="col-md-6 ">
+ <div class="small-box bg-aqua">
+ <div class="inner"><h3>{{ project_overview.vnfd }}</h3>
+ <p>VNF packages</p></div>
+ <div class="icon"><i class="fa fa-archive"></i></div>
+ <a href="/projects/{{ project_id }}/descriptors/vnfd" class="small-box-footer">Open list <i
+ class="fa fa-arrow-circle-right"></i></a></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-6 ">
+ <div class="small-box bg-maroon">
+ <div class="inner"><h3>{{ project_overview.ns }}</h3>
+ <p>NS Instances</p></div>
+ <div class="icon"><i class="fa fa-list"></i></div>
+ <a href='{% url "projects:instances:list" project_id=project_id type="ns" %}' class="small-box-footer">Open list <i
+ class="fa fa-arrow-circle-right"></i></a></div>
+ </div>
+
+ </div>
+
+ </div>
+</div>
+
+{% endblock %}
+
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
diff --git a/projecthandler/template/project/osm/osm_project_left_sidebar.html b/projecthandler/template/project/osm/osm_project_left_sidebar.html
new file mode 100644
index 0000000..029ae11
--- /dev/null
+++ b/projecthandler/template/project/osm/osm_project_left_sidebar.html
@@ -0,0 +1,56 @@
+<aside class="main-sidebar">
+ <!-- sidebar: style can be found in sidebar.less -->
+ <section class="sidebar">
+ <!-- sidebar menu: : style can be found in sidebar.less -->
+ <ul class="sidebar-menu" data-widget="tree">
+ <li class="header">MAIN NAVIGATION</li>
+ {% url "home" as home_url %}
+ <li {% if request.get_full_path == home_url %} class="active" {% endif %} ><a href='{% url "home" %}'><i class="fa fa-home fa-fw"></i><span>Home</span></a></li>
+ <li class="header">PROJECT</li>
+ {% url "projects:open_project" project_id=project_id as project_url %}
+ <li {% if request.get_full_path == project_url %} class="active" {% endif %} >
+ <a href='{% url "projects:open_project" project_id=project_id%}'>
+ <i class="fa fa-file-text fa-fw"></i><span>Overview</span>
+ </a>
+ </li>
+ {% url "projects:list_descriptors" project_id=project_id descriptor_type="vnfd" as nsd_list_url %}
+ {% url "projects:list_descriptors" project_id=project_id descriptor_type='vnfd' as vnfd_list_url %}
+ <li {% if request.get_full_path == nsd_list_url %} class="active treeview" {% else %} class="treeview" {% endif %} >
+ <a href="#">
+ <i class="fa fa-archive fa-fw"></i> <span>Packages {{nsd_list}}</span>
+ <span class="pull-right-container">
+ <i class="fa fa-angle-left pull-right"></i>
+ </span>
+ </a>
+ <ul class="treeview-menu">
+ <li {% if request.get_full_path == nsd_list_url %} class="active" {% endif %}>
+ <a href="/projects/{{project_id}}/descriptors/nsd">
+ <i class="fa fa-archive fa-fw"></i>NS Packages
+ </a>
+ </li>
+ <li {% if request.get_full_path == vnfd_list_url %} class="active" {% endif %}>
+ <a href="/projects/{{project_id}}/descriptors/vnfd">
+ <i class="fa fa-archive fa-fw"></i>VNF Packages
+ </a>
+ </li>
+
+ </ul>
+ </li>
+ {% url "projects:instances:list" project_id=project_id type='ns' as instance_ns_list_url %}
+ <li {% if request.get_full_path == instance_ns_list_url %} class="active" {% endif %} >
+ <a href='{% url "projects:instances:list" project_id=project_id type="ns"%}'>
+ <i class="fa fa-list fa-fw"></i><span>NS Instances</span>
+ </a>
+ </li>
+ <li class="header">CONFIG</li>
+ {% url "vim:list" type='ns' as vim_list_url %}
+ <li {% if request.get_full_path == vim_list_url %} class="active" {% endif %}>
+ <a href='{% url "vim:list" %}'>
+ <i class="fa fa-list fa-fw"></i><span>VIM Accounts</span>
+ </a>
+ </li>
+
+ </ul>
+ </section>
+ <!-- /.sidebar -->
+ </aside>
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/project_graph.html b/projecthandler/template/project/osm/project_graph.html
new file mode 100644
index 0000000..15d2eeb
--- /dev/null
+++ b/projecthandler/template/project/osm/project_graph.html
@@ -0,0 +1,61 @@
+{% extends "project_graph_base.html" %}
+
+{% load staticfiles %}
+{% block head_base %}
+ {% with skin_css="AdminLTE/dist/css/skins/skin-purple.min.css"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block body %}
+ {% with skin="purple"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+{% block logo_sidebar %}
+ {% with logo_mini="assets/img/osm_small_logo.png" logo="assets/img/OSM-logo.png"%}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block title_header_big %}
+ {{ block.super }}
+{% endblock %}
+
+{% block left_sidebar %}
+ {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+{% block topology_toolbar %}
+ {{ block.super }}
+ {% include 'osm/topology_toolbar.html' %}
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+ {% csrf_token %}
+
+
+{% include 'osm/descriptor/modal/create_link_chooser.html' %}
+{% include 'osm/descriptor/modal/choose_node_id.html' %}
+{% include 'osm/modal/modal_keyboard_info.html' %}
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+ <script src="{% static "topology3D/js/model_graph_editor.js" %}"></script>
+ <!-- osm -->
+ <script src="{% static "src/projecthandler/osm/gui_properties.js" %}"></script>
+ <script src="{% static "src/projecthandler/osm/project_graph.js" %}"></script>
+ <script src="{% static "src/projecthandler/osm/controller.js" %}"></script>
+
+<script>
+ graph_editor.project_id = '{{project_id}}'
+
+</script>
+{% endblock %}
+
+{% block footer %}
+ {% include "footer.html" %}
+{% endblock %}
\ No newline at end of file
diff --git a/projecthandler/template/project/osm/topology_toolbar.html b/projecthandler/template/project/osm/topology_toolbar.html
new file mode 100644
index 0000000..9a1f528
--- /dev/null
+++ b/projecthandler/template/project/osm/topology_toolbar.html
@@ -0,0 +1,6 @@
+{% extends 'topology_toolbar.html' %}
+
+{% block topology_toolbar_buttons %}
+ {{ block.super }}
+
+{% endblock %}
diff --git a/projecthandler/template/project/project_delete.html b/projecthandler/template/project/project_delete.html
new file mode 100644
index 0000000..e6afc5e
--- /dev/null
+++ b/projecthandler/template/project/project_delete.html
@@ -0,0 +1,73 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block left_sidebar %}
+
+{% endblock %}
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ {% if project_id %}
+ <li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview_data.name}}</a></li>
+ <li>Delete Project</li>
+ {% endif %}
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+ <div class="row">
+ {% if project_id %}
+ <div class="col-sm-5">
+ <div class="box box-danger">
+ <div class="box-header with-border">
+ <i class="fa fa-warning"></i>
+
+ <h3 class="box-title">Warning</h3>
+ </div>
+ <div class="box-body">
+ <form role="form" method="post">
+ {% csrf_token %}
+ <div class="box-body">
+ <p>The Project <strong>{{project_name}}</strong> will be deleted!</p>
+ <!-- /.box-body -->
+ </div>
+ <div class="box-footer">
+ <button type="submit" class="btn btn-danger pull-right"><i class="fa fa-trash"></i> Delete</button>
+ </div>
+ </form>
+
+ </div><!-- /.box-body -->
+ </div><!-- /.box -->
+ </div>
+ {% endif %}
+</div>
+
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+
+ <script>
+
+
+
+
+$(document).ready(function () {
+ {% if project_id == None %}
+ window.location.href='{% url "home" %}';
+ {% endif %}
+
+});
+
+
+
+ </script>
+{% endblock %}
+
diff --git a/projecthandler/template/project/project_descriptors.html b/projecthandler/template/project/project_descriptors.html
new file mode 100644
index 0000000..6f7345e
--- /dev/null
+++ b/projecthandler/template/project/project_descriptors.html
@@ -0,0 +1,54 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+ <link rel="stylesheet" href="/static/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
+{% endblock %}
+{% block title_header_big %}
+
+{% endblock %}
+
+{% block left_sidebar %}
+
+{% endblock %}
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ <li><a href="{% url 'projects:projects_list' %}">Projects</a></li>
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+{% if alert_message %}
+ {% if alert_message.success %}
+ <div class="alert alert-success alert-dismissible fade in">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ <h4><i class="icon fa fa-check"></i> Success</h4>
+ {{alert_message.message}}
+ </div>
+ {% endif %}
+ {% if not alert_message.success %}
+ <div class="alert alert-danger alert-dismissible fade in">
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
+ <h4><i class="icon fa fa-ban"></i> Alert!</h4>
+ {{alert_message.message}}
+ </div>
+ {% endif %}
+{% endif %}
+
+{% endblock %}
+
+
+
+
+{% block resource_block %}
+ {{ block.super }}
+
+ <script src="/static/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+ <script src="/static/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+ <script src="/static/src/projecthandler/descriptorslist.js"></script>
+
+{% endblock %}
+
diff --git a/projecthandler/template/project/project_details.html b/projecthandler/template/project/project_details.html
new file mode 100644
index 0000000..e944e0d
--- /dev/null
+++ b/projecthandler/template/project/project_details.html
@@ -0,0 +1,78 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block left_sidebar %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block title_header_big %}
+ {{ block.super }}
+ {{project_overview.name}}
+{% endblock %}
+
+{% block title_header_small %}
+ {{ block.super }}
+ Overview
+{% endblock %}
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ <li><a href="{% url 'projects:projects_list' %}">Projects</a></li>
+ <li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview.name}}</a></li>
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+<div class="row">
+ <div class="col-md-6">
+ <div class="box box-widget">
+ <div class="box-footer no-padding">
+ <ul class="nav nav-stacked">
+ <li><a><b>Project Name:</b> <span class="pull-right">{{project_overview.name}}</span></a>
+ </li>
+ <li><a><b>Info:</b> <span
+ class="pull-right">{{project_overview.info}}</span></a></li>
+ <li><a><b>Last updated:</b> <span class="pull-right">{{project_overview.updated_date}}</span></a>
+ </li>
+ <li><a><b>Owner:</b> <span
+ class="pull-right">{{project_overview.owner}}</span></a></li>
+
+ <li><a><b>Validated:</b>
+ {% if project_overview.validated %}
+ <span class="pull-right badge bg-green">{{project_overview.validated}}</span>
+ {% else %}
+ <span class="pull-right badge bg-red">{{project_overview.validated}}</span>
+ {% endif %}
+ </a>
+
+ </li>
+
+ </ul>
+
+ </div>
+
+ </div>
+ </div>
+ <div class="col-md-6">
+ {% block content_descritors_col %}
+
+ {% endblock %}
+ </div>
+</div>
+
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+
+{% endblock %}
+
+
diff --git a/projecthandler/template/project/project_graph_base.html b/projecthandler/template/project/project_graph_base.html
new file mode 100644
index 0000000..7d344da
--- /dev/null
+++ b/projecthandler/template/project/project_graph_base.html
@@ -0,0 +1,58 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+ <link rel="stylesheet" href="{% static "topology3D/css/graph_editor_d3js.css" %}">
+ <link rel="stylesheet" href="{% static "topology3D/css/d3-context-menu.css" %}">
+{% endblock %}
+{% block title_header_big %}
+ {{ block.super }}
+{% endblock %}
+{% block left_sidebar %}
+
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ <li><a href="{% url 'projects:open_project' project_id=project_id %}">{{project_overview_data.name}}</a></li>
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+ {% csrf_token %}
+<div class="row" >
+ <div class="col-md-12">
+ {% block topology_toolbar %}
+
+
+ {% endblock %}
+ <div id="graph_ed_container" style="width: 100%; height:100%; background-color: white; border: 2px #3c8dbc solid;">
+
+ </div>
+ </div>
+</div>
+
+
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+ <!-- d3.js -->
+ <script src="{% static "bower_components/d3/d3.min.js" %}" charset="utf-8"></script>
+
+ <!-- topology3D -->
+ <script src="{% static "topology3D/js/d3-context-menu.js" %}"></script>
+ <script src="{% static "topology3D/js/event.js" %}"></script>
+ <script src="{% static "topology3D/js/graph_editor.js" %}"></script>
+ <script src="{% static "topology3D/js/graph_request.js" %}"></script>
+
+{% endblock %}
+
+
+{% block header %}
+{% endblock %}
+
diff --git a/projecthandler/template/project/projectlist.html b/projecthandler/template/project/projectlist.html
new file mode 100644
index 0000000..5fd3b9d
--- /dev/null
+++ b/projecthandler/template/project/projectlist.html
@@ -0,0 +1,84 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+ {{ block.super }}
+
+{% endblock %}
+{% block title_header_big %}
+ {{ block.super }}
+{% endblock %}
+{% block left_sidebar %}
+
+{% include 'left_sidebar_base.html' %}
+
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+ {{ block.super }}
+ <li><a href="{% url 'projects:projects_list' %}">Projects</a></li>
+{% endblock %}
+
+{% block content_body %}
+ {{ block.super }}
+ {% csrf_token %}
+<div class="row">
+<div class="col-md-12">
+
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title">Projects</h3>
+ <div class="box-tools">
+ <a href="" class="btn btn-block btn-primary btn-sm" disabled><i class="fa fa-plus"></i><span> New Project</span></a>
+ </div>
+ </div>
+ <div class="box-body">
+ <table id="projects_table" class="table table-bordered table-striped">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+ <th>Info</th>
+ <th>Type</th>
+ <th>Modification Date</th>
+ <th>Creation Date</th>
+
+ <th>Owner</th>
+
+ <th><i class="fa fa-trash-o"></i></th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for p in projects %}
+ <tr>
+
+ <td>
+ <a href="javascript:openProject('{{ p.id }}')" >{{ p.name }}</a>
+ </td>
+ <td>{{ p.info }}</td>
+ <td>{{ p.get_type }}</td>
+ <td>{{ p.updated_date }}</td>
+ <td>{{ p.created_date }}</td>
+ <td>{{ p.owner.username }}</td>
+
+ <td><a href="#"> Delete</a></td>
+
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+</div>
+
+</div>
+{% endblock %}
+
+{% block resource_block %}
+ {{ block.super }}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/projecthandler/template/project/repository/repo_base_left_sidebar.html b/projecthandler/template/project/repository/repo_base_left_sidebar.html
new file mode 100644
index 0000000..3367eeb
--- /dev/null
+++ b/projecthandler/template/project/repository/repo_base_left_sidebar.html
@@ -0,0 +1,12 @@
+{% extends "left_sidebar_base.html" %}
+
+{% block left_sidebar_base %}
+ <li class="header">REPOSITORY</li>
+ {% url "repos:repos_list" as repo_list_url %}
+ <li {% if request.get_full_path == repo_list_url %} class="active" {% endif %}><a href='{% url "repos:repos_list" %}'><i class="fa fa-git fa-fw"></i><span>Ropository Registered</span></a></li>
+
+ {% block li_list %}
+
+
+ {% endblock %}
+{% endblock %}
diff --git a/projecthandler/template/project/repository/repo_create_modal.html b/projecthandler/template/project/repository/repo_create_modal.html
new file mode 100644
index 0000000..6df53b5
--- /dev/null
+++ b/projecthandler/template/project/repository/repo_create_modal.html
@@ -0,0 +1,43 @@
+<div class="modal" id="modal_new_repository" xmlns="http://www.w3.org/1999/html">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="modal_new_repo_title">New Repository</h4>
+ </div>
+ <div id="div_chose_id" class="modal-body">
+ <!-- form start -->
+ <form action='{% url "repos:new_repo" %}' class="form-horizontal" role="form" method="post" enctype="multipart/form-data">
+ {% csrf_token %}
+ <div class="box-body">
+ <div class="form-group">
+ <label for="name" class="col-sm-2 control-label">Name</label>
+
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="name" placeholder="Name" name="name" required>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="base_url_repo" class="col-sm-2 control-label">Base Url</label>
+
+ <div class="col-sm-10">
+ <input class="form-control required" id="base_url_repo"
+ name="base_url_repo" placeholder="Base Url" pattern="((git|ssh|http(s)?)|(git@[\w\.]+))(:(\/\/)?)([\w\.\/\-]*)">
+ </div>
+ </div>
+ </div>
+ <!-- /.box-body -->
+ <div class="box-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+ <button type="submit" class="btn btn-info pull-right" id="save_new_repo">Register</button>
+ </div>
+ <!-- /.box-footer -->
+ </form>
+ </div>
+
+ </div>
+ <!-- /.modal-content -->
+ </div>
+ <!-- /.modal-dialog -->
+</div>
\ No newline at end of file
diff --git a/projecthandler/template/project/repository/repo_list.html b/projecthandler/template/project/repository/repo_list.html
new file mode 100644
index 0000000..1f0a8f3
--- /dev/null
+++ b/projecthandler/template/project/repository/repo_list.html
@@ -0,0 +1,120 @@
+{% extends "base.html" %}
+
+{% load staticfiles %}
+
+{% block head_block %}
+{{ block.super }}
+
+<style type="text/css">
+
+ input:required:invalid, input:focus:invalid {
+
+ background-position: right top;
+ background-repeat: no-repeat;
+ }
+ input:required:valid {
+
+ background-position: right top;
+ background-repeat: no-repeat;
+ }
+
+.form-control.select2-hidden-accessible {
+ top: 30px;
+}
+
+
+</style>
+{% endblock %}
+
+{% block title_header_big %}
+{{ block.super }}
+{% endblock %}
+
+{% block left_sidebar %}
+<!-- Left side column. contains the sidebar -->
+{% include "repository/repo_base_left_sidebar.html" %}
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+{{ block.super }}
+
+{% endblock %}
+
+{% block content_body %}
+{{ block.super }}
+{% csrf_token %}
+ <div class="row">
+
+ <div class="col-md-12">
+
+ <div class="box">
+ <div class="box-header with-border">
+ <h3 class="box-title">Registered Repository</h3>
+ <div class="box-tools">
+ <a href="#" class="btn btn-block btn-primary btn-sm" data-toggle="modal"
+ data-target="#modal_new_repository"><i
+ class="fa fa-plus"></i><span> New Repository</span></a>
+ </div>
+ </div>
+ <div class="box-body">
+ <table id="deployments_table" class="table table-bordered table-striped">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+ <th>Url</th>
+ <th>Last Update</th>
+ <th>Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for repo in repos %}
+ <tr>
+
+ <td>
+ {{ repo.name }}
+ </td>
+ <td>
+ {{ repo.base_url }}
+ </td>
+ <td>{{ repo.last_update }}</td>
+ <td>
+ <div class="btn-group">
+ <button type="button" class="btn btn-default"><i class="fa fa-cog"
+ aria-hidden="true"></i>
+ </button>
+ <button type="button" class="btn btn-default dropdown-toggle"
+ data-toggle="dropdown"
+ aria-expanded="false">
+ <span class="caret"></span>
+ <span class="sr-only">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu" role="menu">
+ <li class='disabled'><a href='#'><i class="fa fa-edit fa-fw"></i>Edit</a>
+ </li>
+ <li><a href='{% url "repos:delete_repo" repo_id=repo.id %}'>
+ <i class="fa fa-trash fa-fw"></i>Delete</a></li>
+ </ul>
+ </div>
+ </td>
+
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+
+ </div>
+{% include 'repository/repo_create_modal.html' %}
+
+{% endblock %}
+
+{% block resource_block %}
+{{ block.super }}
+
+
+
+{% endblock %}
\ No newline at end of file