/
CategoryRegistry.rb
70 lines (61 loc) · 2.91 KB
/
CategoryRegistry.rb
1
2
3
4
5
6
7
8
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
##############################################################################
# Copyright 2011 Service Computing group, TU Dortmund
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##############################################################################
##############################################################################
# Description: registry for all Category/Kind/Mixin instances currently
# known to the OCCI server
# Author(s): Hayati Bice, Florian Feldhaus, Piotr Kasprzak
##############################################################################
require 'occi/Log'
module OCCI
# ---------------------------------------------------------------------------------------------------------------------
module CategoryRegistry
@@categories_by_id = {}
@@categories_by_location = {}
# ---------------------------------------------------------------------------------------------------------------------
def self.register(category)
@@categories_by_id[category.type_identifier] = category
@@categories_by_location[category.location] = category if category.respond_to?('location')
end
# ---------------------------------------------------------------------------------------------------------------------
def self.unregister(category)
@@categories_by_id.delete(category.type_identifier)
@@categories_by_location.delete(category.location)
end
# ---------------------------------------------------------------------------------------------------------------------
def self.get_by_id(id)
@@categories_by_id.fetch(id) { raise OCCI::CategoryNotFoundException, "Category with key " + id + " not found" }
end
def self.get_by_location(location)
@@categories_by_location.fetch(location) { raise "Category with location " + location + " not found" }
end
# Return all categories from category registry. If filter is present, return only the categories specified by filter
#
# @param [Hashie:Mash] filter
# @return [Array] categories
def self.get(filter)
categories = Array.new
filter.values.flatten(1).each do |category|
begin
occi_categories << self.get_by_id(category.type_identifier)
rescue OCCI::CategoryNotFoundException => e
OCCI::Log.warn(e.message)
end
end
return categories unless categories.empty?
return @@categories_by_id.values
end
end
end