Class: CmisServer::DocumentAdapter
- Inherits:
-
Object
- Object
- CmisServer::DocumentAdapter
- Defined in:
- lib/cmis_server/document_adapter.rb
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#object ⇒ Object
readonly
Returns the value of attribute object.
Class Method Summary collapse
Instance Method Summary collapse
- #add_content_stream(content_stream) ⇒ Object
- #add_to_folder(folder) ⇒ Object
- #find(id) ⇒ Object
-
#initialize(object, context:) ⇒ DocumentAdapter
constructor
A new instance of DocumentAdapter.
- #save! ⇒ Object
- #to_renderable_object ⇒ Object
Constructor Details
#initialize(object, context:) ⇒ DocumentAdapter
Returns a new instance of DocumentAdapter.
5 6 7 8 |
# File 'lib/cmis_server/document_adapter.rb', line 5 def initialize(object, context:) @object = object @context = context end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
3 4 5 |
# File 'lib/cmis_server/document_adapter.rb', line 3 def context @context end |
#object ⇒ Object (readonly)
Returns the value of attribute object.
3 4 5 |
# File 'lib/cmis_server/document_adapter.rb', line 3 def object @object end |
Class Method Details
.class_adapter(context:) ⇒ Object
10 11 12 |
# File 'lib/cmis_server/document_adapter.rb', line 10 def self.class_adapter(context:) new(nil, context: context) end |
Instance Method Details
#add_content_stream(content_stream) ⇒ Object
47 48 49 |
# File 'lib/cmis_server/document_adapter.rb', line 47 def add_content_stream(content_stream) @content_stream = content_stream end |
#add_to_folder(folder) ⇒ Object
42 43 44 45 |
# File 'lib/cmis_server/document_adapter.rb', line 42 def add_to_folder(folder) # Store folder ID for when we save @parent_folder_id = folder.respond_to?(:cmis_object_id) ? folder.cmis_object_id : folder end |
#find(id) ⇒ Object
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 |
# File 'lib/cmis_server/document_adapter.rb', line 14 def find(id) connector = CmisServer::Connectors::ConnectorFactory.create_connector( user: @context.is_a?(Hash) ? @context[:current_user] : @context.current_user ) core_doc = connector.find_object_by_id(id) # Convertir le document Core en objet CMIS if core_doc # Créer un DocumentObject CMIS à partir du Doc Core doc_type = CmisServer::TypeRegistry.get_type('cmis:document') properties = { 'cmis:objectId' => CmisServer::Property.new(id: 'cmis:objectId', value: core_doc.id.to_s), 'cmis:objectTypeId' => CmisServer::Property.new(id: 'cmis:objectTypeId', value: 'cmis:document'), 'cmis:name' => CmisServer::Property.new(id: 'cmis:name', value: core_doc.title), 'cmis:createdBy' => CmisServer::Property.new(id: 'cmis:createdBy', value: core_doc.user&.full_name || 'Unknown'), 'cmis:creationDate' => CmisServer::Property.new(id: 'cmis:creationDate', value: core_doc.created_at), 'cmis:lastModificationDate' => CmisServer::Property.new(id: 'cmis:lastModificationDate', value: core_doc.updated_at) } cmis_doc = CmisServer::DocumentObject.new(type: doc_type, properties: properties) cmis_doc.cmis_object_id = core_doc.id.to_s self.class.new(cmis_doc, context: @context) else raise CmisServer::ObjectNotFound.new("Document with ID #{id} not found") end end |
#save! ⇒ Object
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/cmis_server/document_adapter.rb', line 51 def save! # Créer un document Core doc = ::Doc.new # Mapper les propriétés CMIS vers Core if @object && @object.properties # Extraire les valeurs des objets Property name_value = @object.properties['cmis:name'] name_value = name_value.value if name_value.respond_to?(:value) doc.title = name_value || 'Untitled' doc.labels = ['cmis'] # Mapper les autres propriétés CMIS vers superfields superfields = {} @object.properties.each do |key, value| unless ['cmis:name', 'cmis:objectTypeId'].include?(key) # Extraire la valeur si c'est un objet Property actual_value = value.respond_to?(:value) ? value.value : value # Nettoyer la clé pour MongoDB (remplacer . et : par _) clean_key = key.gsub(/[.:]/, '_') # Convertir les IDs en string if actual_value.respond_to?(:to_s) superfields[clean_key] = actual_value.to_s else superfields[clean_key] = actual_value end end end doc.superfields = superfields unless superfields.empty? end # Ajouter le contenu si présent if @content_stream require 'base64' if @content_stream.base64 doc.blob = Base64.decode64(@content_stream.base64) end end # Définir le responsable (obligatoire) if @context.current_user # Si l'utilisateur est déjà un objet User de Core, l'utiliser directement if @context.current_user.is_a?(::User) doc.responsible = @context.current_user.id.to_s Rails.logger.debug "Setting document responsible to Core user: #{doc.responsible}" else Rails.logger.error "Current user is not a Core User: #{@context.current_user.class.name}" raise "Invalid user type for document creation" end else Rails.logger.warn "No current_user available in context!" raise "No authenticated user for document creation" end # Ajouter aux espaces (folders) if @parent_folder_id # Si c'est root_folder, on ne fait rien unless @parent_folder_id == 'root_folder' # Sinon on ajoute le document à l'espace correspondant doc. = [@parent_folder_id] end end # Sauvegarder le document if doc.save # Mettre à jour l'objet CMIS avec l'ID du document créé @object.cmis_object_id = doc.id.to_s if @object true else Rails.logger.error "DocumentAdapter#save! - Failed to save document: #{doc.errors.full_messages.join(', ')}" raise "Failed to save document: #{doc.errors.full_messages.join(', ')}" end rescue => e Rails.logger.error "DocumentAdapter#save! - Exception: #{e.class.name} - #{e.message}" Rails.logger.error e.backtrace.first(5).join("\n") raise e end |
#to_renderable_object ⇒ Object
131 132 133 |
# File 'lib/cmis_server/document_adapter.rb', line 131 def to_renderable_object CmisServer::RenderableObject.new(base_object: @object) end |