Class: CmisServer::AtomPub::SecondaryTypesController

Inherits:
BaseController show all
Includes:
RepositoryScopable
Defined in:
app/controllers/cmis_server/atom_pub/secondary_types_controller.rb

Instance Method Summary collapse

Methods included from RepositoryScopable

#set_repository

Methods inherited from BaseController

#raw_post_body, #render_standard_error, #request_entry_parser

Methods inherited from CmisServer::ApplicationController

#check_auth, #context

Instance Method Details

#add_secondary_typeObject

POST /objects/id/types



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
# File 'app/controllers/cmis_server/atom_pub/secondary_types_controller.rb', line 22

def add_secondary_type
  type_data = parse_secondary_type_request
  
  # Support pour l'ajout de plusieurs types secondaires en une fois
  type_ids = type_data.is_a?(Array) ? type_data : [type_data[:type_id]]
  
  results = []
  
  type_ids.each do |type_id|
    begin
      # Trouver le type secondaire
      secondary_type = CmisServer::TypeRegistry.get_type(type_id)
      
      unless secondary_type
        results << { type_id: type_id, status: "error", message: "Type '#{type_id}' not found" }
        next
      end
      
      # Vérifier que c'est bien un type secondaire
      unless secondary_type.base_id == 'cmis:secondary'
        results << { type_id: type_id, status: "error", message: "Type '#{type_id}' is not a secondary type" }
        next
      end
      
      # Vérifier les conflits de propriétés
      if has_property_conflicts?(@object, secondary_type)
        results << { type_id: type_id, status: "error", message: "Property conflicts detected with type '#{type_id}'" }
        next
      end
      
      # Ajouter le type secondaire à l'objet
      @object.add_secondary_type(secondary_type)
      results << { type_id: type_id, status: "success" }
      
    rescue => e
      results << { type_id: type_id, status: "error", message: e.message }
    end
  end
  
  @object.save if results.any? { |r| r[:status] == "success" }
  
  respond_to do |format|
    format.atom_entry { render "cmis_server/atom_pub/entries/object_entry", locals: { object: @object.to_renderable_object } }
    format.json { render json: { object: @object.to_json, results: results } }
  end
rescue => e
  render_error(e)
end

#indexObject

GET /objects/id/types - Lister les types secondaires d’un objet



12
13
14
15
16
17
18
19
# File 'app/controllers/cmis_server/atom_pub/secondary_types_controller.rb', line 12

def index
  secondary_types = @object.secondary_types || []
  
  respond_to do |format|
    format.atom_feed { render "cmis_server/atom_pub/secondary_types_feed", locals: { object: @object, secondary_types: secondary_types } }
    format.json { render json: format_secondary_types_for_json(secondary_types) }
  end
end

#remove_secondary_typeObject

DELETE /objects/id/types/typeId



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'app/controllers/cmis_server/atom_pub/secondary_types_controller.rb', line 72

def remove_secondary_type
  type_id = params[:typeId]
  
  begin
    @object.remove_secondary_type(type_id)
    @object.save
    
    respond_to do |format|
      format.atom_entry { render "cmis_server/atom_pub/entries/object_entry", locals: { object: @object.to_renderable_object } }
      format.json { render json: @object.to_json }
    end
  rescue => e
    render_error(e)
  end
end