Class: CmisServer::NavigationService

Inherits:
Object
  • Object
show all
Defined in:
app/services/cmis_server/navigation_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(repository, context) ⇒ NavigationService

Returns a new instance of NavigationService.



4
5
6
7
# File 'app/services/cmis_server/navigation_service.rb', line 4

def initialize(repository, context)
  @repository= repository.is_a?(Repository) ? repository : CmisServer::Repository.find(repository)
  @context   =context
end

Instance Method Details

#get_checked_out_docsObject

Raises:

  • (NotImplemented)


97
98
99
# File 'app/services/cmis_server/navigation_service.rb', line 97

def get_checked_out_docs
  raise NotImplemented
end

#get_children(folder_id, max_items: 10, skip_count: 0, order_by: {'cmis:creationDate' => :asc}, filter: [], include_relationships: :none, rendition_filter: "cmis:none", include_allowable_actions: false, include_path_segment: false, with_object: false) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/services/cmis_server/navigation_service.rb', line 9

def get_children(folder_id, max_items: 10, skip_count: 0, order_by: {'cmis:creationDate' => :asc}, filter: [], include_relationships: :none, rendition_filter: "cmis:none", include_allowable_actions: false, include_path_segment: false, with_object: false)

  # Utiliser le connecteur pour récupérer le dossier et ses enfants
  connector = CmisServer::Connectors::ConnectorFactory.create_connector(
    user: @context.current_user
  )
  
  # Récupérer le dossier parent
  folder = connector.find_object_by_id(folder_id)
  unless folder
    raise CmisServer::ObjectNotFound.new(debug_data: "Folder '#{folder_id}' not found")
  end
  
  # Déterminer quels enfants récupérer selon le type de dossier
  children = []
  
  # Si c'est le dossier racine, retourner les espaces favoris de l'utilisateur
  if folder_id == 'core_root' || folder_id == 'root_folder' || folder_id == 'root_folder_id' || folder_id == 'root'
    # Les espaces favoris sont les "dossiers racines" de l'utilisateur dans Core
    children = connector.find_root_folders()
  else
    # Pour un espace spécifique, récupérer:
    # 1. Les documents dans cet espace
    documents = connector.find_documents({'space_ids' => [folder_id]})
    # 2. Les sous-espaces (si applicable)
    sub_spaces = connector.find_folders({'parent_id' => folder_id})
    
    children = documents + sub_spaces
  end
  
  # Convertir en objets renderable
  renderable_objects = children.map do |obj|
    begin
      
      # Déterminer le type d'objet et créer l'adaptateur approprié
      if obj.is_a?(::Doc)
        # Document Core -> CMIS Document
        adapter = CmisServer::DocumentAdapter.new(nil, context: @context)
        cmis_doc = adapter.find(obj.id.to_s)
        cmis_doc.to_renderable_object
      elsif obj.is_a?(::Tagset) || (obj.respond_to?(:is_space) && obj.is_space)
        # Tagset/Space Core -> CMIS Folder
        adapter = CmisServer::FolderAdapter.new(nil, context: @context)
        cmis_folder = adapter.find(obj.id.to_s)
        cmis_folder.to_renderable_object
      else
        # Fallback: créer un document CMIS générique
        doc_type = CmisServer::TypeRegistry.get_type('cmis:document') || CmisServer::DocumentType.base
        properties = {
          'cmis:objectId' => CmisServer::Property.new(id: 'cmis:objectId', value: obj.id.to_s),
          'cmis:name' => CmisServer::Property.new(id: 'cmis:name', value: obj.respond_to?(:title) ? obj.title : 'Unknown')
        }
        cmis_doc = CmisServer::DocumentObject.new(type: doc_type, properties: properties)
        cmis_doc.cmis_object_id = obj.id.to_s
        cmis_doc.to_renderable_object
      end
    rescue => e
      Rails.logger.error "NavigationService: Error converting object: #{e.message}"
      Rails.logger.error "NavigationService: Backtrace: #{e.backtrace.first(5).join("\n")}"
      raise e
    end
  end

  {
      objects:        renderable_objects,
      has_more_items: children.count == max_items,
  }
end

#get_descendants(folder_id, depth: 2, filter: [], include_relationships: :none, rendition_filter: "cmis:none", include_allowable_actions: false, include_path_segment: false, with_object: false) ⇒ Object



78
79
80
81
82
83
# File 'app/services/cmis_server/navigation_service.rb', line 78

def get_descendants(folder_id, depth: 2, filter: [], include_relationships: :none, rendition_filter: "cmis:none", include_allowable_actions: false, include_path_segment: false, with_object: false)
  folder =CmisServer::Folder.find(folder_id)
  objects=[]

  return {objects: objects}
end

#get_folder_parentObject

Raises:

  • (NotImplemented)


89
90
91
# File 'app/services/cmis_server/navigation_service.rb', line 89

def get_folder_parent
  raise NotImplemented
end

#get_folder_treeObject

Raises:

  • (NotImplemented)


85
86
87
# File 'app/services/cmis_server/navigation_service.rb', line 85

def get_folder_tree
  raise NotImplemented
end

#get_object_parentsObject

Raises:

  • (NotImplemented)


93
94
95
# File 'app/services/cmis_server/navigation_service.rb', line 93

def get_object_parents
  raise NotImplemented
end