class Chef::Knife::DataBagFromFile

def data_bags_path

def data_bags_path
  @data_bag_path ||= "data_bags"
end

def find_all_data_bag_items(data_bag)

def find_all_data_bag_items(data_bag)
  loader.find_all_objects("./#{data_bags_path}/#{data_bag}")
end

def find_all_data_bags

def find_all_data_bags
  loader.find_all_object_dirs("./#{data_bags_path}")
end

def load_all_data_bags(args)

def load_all_data_bags(args)
  data_bags = args.empty? ? find_all_data_bags : [args.shift]
  data_bags.each do |data_bag|
    load_data_bag_items(data_bag)
  end
end

def load_data_bag_items(data_bag, items = nil)

def load_data_bag_items(data_bag, items = nil)
  items ||= find_all_data_bag_items(data_bag)
  item_paths = normalize_item_paths(items)
  item_paths.each do |item_path|
    item = loader.load_from((data_bags_path).to_s, data_bag, item_path)
    item = if encryption_secret_provided?
             Chef::EncryptedDataBagItem.encrypt_data_bag_item(item, read_secret)
           else
             item
           end
    dbag = Chef::DataBagItem.new
    dbag.data_bag(data_bag)
    dbag.raw_data = item
    dbag.save
    ui.info("Updated data_bag_item[#{dbag.data_bag}::#{dbag.id}]")
  end
end

def loader

def loader
  @loader ||= Knife::Core::ObjectLoader.new(Chef::DataBagItem, ui)
end

def normalize_item_paths(args)

def normalize_item_paths(args)
  paths = []
  args.each do |path|
    if File.directory?(path)
      paths.concat(Dir.glob(File.join(ChefConfig::PathHelper.escape_glob_dir(path), "*.json")))
    else
      paths << path
    end
  end
  paths
end

def run

def run
  if config[:all] == true
    load_all_data_bags(@name_args)
  else
    if @name_args.size < 2
      ui.msg(opt_parser)
      exit(1)
    end
    @data_bag = @name_args.shift
    load_data_bag_items(@data_bag, @name_args)
  end
end