Class: CmisServer::NavigationService
- Inherits:
-
Object
- Object
- CmisServer::NavigationService
- Defined in:
- app/services/cmis_server/navigation_service.rb
Instance Method Summary collapse
- #get_checked_out_docs ⇒ Object
- #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
- #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
- #get_folder_parent ⇒ Object
- #get_folder_tree ⇒ Object
- #get_object_parents ⇒ Object
-
#initialize(repository, context) ⇒ NavigationService
constructor
A new instance of NavigationService.
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_docs ⇒ Object
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.}" 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_parent ⇒ Object
89 90 91 |
# File 'app/services/cmis_server/navigation_service.rb', line 89 def get_folder_parent raise NotImplemented end |
#get_folder_tree ⇒ Object
85 86 87 |
# File 'app/services/cmis_server/navigation_service.rb', line 85 def get_folder_tree raise NotImplemented end |
#get_object_parents ⇒ Object
93 94 95 |
# File 'app/services/cmis_server/navigation_service.rb', line 93 def get_object_parents raise NotImplemented end |