clone packages

Change-Id: Iefe34dc4309ebc53cdee6f2d59924e10ea72e487
Signed-off-by: lombardofr <lombardo@everyup.it>
diff --git a/projecthandler/template/project/osm/descriptor/descriptorlist.html b/projecthandler/template/project/osm/descriptor/descriptorlist.html
index 734259f..b2222e2 100644
--- a/projecthandler/template/project/osm/descriptor/descriptorlist.html
+++ b/projecthandler/template/project/osm/descriptor/descriptorlist.html
@@ -30,46 +30,7 @@
                 </tr>
                 </thead>
                 <tbody>
-                {% for k in descriptors %}
-                    <tr role="row">
-                        <td>{{ k|get:"short-name" }} </td>
-                        <td>{{ k|get:"_id" }}</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':'{{ project_id }}', 'descriptor_type': '{{ descriptor_type }}', 'descriptor_name':'{{ k|get:"name" }}', 'descriptor_id':'{{ k|get:"_id" }}','vim_list_url': '{% url "vims:list"  %}',  'nsd_list_url': '{% url "projects:list_descriptors"  descriptor_type=descriptor_type %}' })">
-                                        <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('{{ 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('{{ 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/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'  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( '{{ descriptor_type }}', '{{ k|get:"_id" }}')">
-                                    <i class="far fa-trash-alt"></i></button>
-                            </div>
 
-                        </td>
-                    </tr>
-                {% endfor %}
                 </tbody>
 
             </table>
diff --git a/projecthandler/template/project/osm/osm_project_descriptors.html b/projecthandler/template/project/osm/osm_project_descriptors.html
index 182c8cc..4478ade 100644
--- a/projecthandler/template/project/osm/osm_project_descriptors.html
+++ b/projecthandler/template/project/osm/osm_project_descriptors.html
@@ -76,7 +76,7 @@
             "columns": [
                 {
                     "render": function (data, type, row) {
-                       return row['short-name'];
+                       return row['short-name'] || '';
                     },
                     "targets": 0
                 },
@@ -120,6 +120,10 @@
                            '        data-toggle="tooltip" data-placement="top" title="Show content"\n' +
                            '        onclick="javascript:openPackageContentList(\''+ descriptor_type +'\', \''+row["_id"]+'\')">\n' +
                            '    <i class="fa fa-folder-open"></i></button>\n' +
+                            '<button type="button" class="btn btn-default" data-container="body"\n' +
+                           '        data-toggle="tooltip" data-placement="top" title="Clone"\n' +
+                           '        onclick="javascript:clonePackage(\''+ descriptor_type +'\', \''+row["_id"]+'\')">\n' +
+                           '    <i class="fa fa-clone"></i></button>\n' +
                            '<button type="button" class="btn btn-default" data-container="body"\n' +
                            '        data-toggle="tooltip" data-placement="top" title="Show Graph"\n' +
                            '        onclick="location.href=\'/projects/graph?type='+descriptor_type+'&id='+row["_id"] +'\'"\n' +
@@ -130,7 +134,7 @@
                            '    <i class="fa fa-download fa-fw"></i></button>\n' +
                            '<button type="button" class="btn btn-default" data-container="body"\n' +
                            '        data-toggle="tooltip" data-placement="top" title="Delete"\n' +
-                           '        onclick="javascript:deletePackage( \'' + descriptor_type + '\', \''+row["_id"] + '\')">\n' +
+                           '        onclick="javascript:deletePackage( \'' + descriptor_type + '\', \''+row["_id"] + '\', \''+row["name"] + '\')">\n' +
                            '    <i class="far fa-trash-alt"></i></button>\n' +
                            '</div>';
 
diff --git a/projecthandler/urls/project.py b/projecthandler/urls/project.py
index 9d653b6..91c79c7 100644
--- a/projecthandler/urls/project.py
+++ b/projecthandler/urls/project.py
@@ -30,6 +30,9 @@
     url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)/delete$',
         views.delete_descriptor,
         name='delete_descriptor'),
+    url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)/clone',
+        views.clone_descriptor,
+        name='clone_descriptor'),
     url(r'^descriptors/(?P<descriptor_type>\w+)/(?P<descriptor_id>[-\w]+)/action/(?P<action_name>[-\w]+)',
         views.custom_action,
         name='custom_action'),
diff --git a/projecthandler/views.py b/projecthandler/views.py
index 06b4770..1f1573d 100644
--- a/projecthandler/views.py
+++ b/projecthandler/views.py
@@ -376,6 +376,32 @@
     }, url)
 
 
+@login_required
+def clone_descriptor(request, descriptor_type=None, descriptor_id=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
+
+    try:
+        client = Client()
+        if descriptor_type == 'nsd':
+            result = client.nsd_clone(user.get_token(), descriptor_id)
+        elif descriptor_type == 'vnfd':
+            result = client.vnfd_clone(user.get_token(), descriptor_id)
+        else:
+            log.debug('Update descriptor: Unknown data type')
+            result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
+    except Exception as e:
+        log.exception(e)
+        result = {'error': True, 'data': str(e)}
+    print result
+    if result['error'] == True:
+        return __response_handler(request, result['data'], url=None,
+                                  status=result['data']['status'] if 'status' in result['data'] else 500)
+
+    else:
+        return __response_handler(request, {}, url=None, status=200)
+
+
 
 @login_required
 def new_descriptor(request, descriptor_type=None):