10645: regexp for keep_locator_in_json format
[arvados.git] / apps / workbench / app / controllers / collections_controller.rb
index c3777962d09d0b52589d2db6e104a1420b899cf7..dc9ed43c409b64a2838ad74d3e165609c49e1e62 100644 (file)
@@ -1,4 +1,5 @@
 require "arvados/keep"
+require "arvados/collection"
 require "uri"
 
 class CollectionsController < ApplicationController
@@ -308,16 +309,39 @@ class CollectionsController < ApplicationController
     end
   end
 
-  def rename_selected_file
-    arv_coll = Arv::Collection.new(@object.manifest_text)
-    source_paths[uuids[0]].each do |p|
-      arv_coll.rename "./"+params[:src], "./"+params[:dst]
-    end
+  def update
+    updated_attr = params[:collection].each.select {|a| a[0].andand.start_with? 'rename-file-path:'}
 
-    if @object.update_attributes manifest_text: arv_coll.manifest_text
-      show
+    if updated_attr.size > 0
+      # Is it file rename?
+      file_path = updated_attr[0][0].split('rename-file-path:')[-1]
+
+      new_file_path = updated_attr[0][1]
+      if new_file_path.start_with?('./')
+        # looks good
+      elsif new_file_path.start_with?('/')
+        new_file_path = '.' + new_file_path
+      else
+        new_file_path = './' + new_file_path
+      end
+
+      arv_coll = Arv::Collection.new(@object.manifest_text)
+
+      if arv_coll.exist?(new_file_path)
+        @errors = 'Duplicate file path. Please use a different name.'
+        self.render_error status: 422
+      else
+        arv_coll.rename "./"+file_path, new_file_path
+
+        if @object.update_attributes manifest_text: arv_coll.manifest_text
+          show
+        else
+          self.render_error status: 422
+        end
+      end
     else
-      self.render_error status: 422
+      # Not a file rename; use default
+      super
     end
   end