On Aug 31, 2012, at 9:32 PM, [email protected] wrote:

ACK to serie, but please fix the tests before push:

http://tracker.deltacloud.org/build/39/build

Also in future we should consider using Rabbit subcollections
for things like 'operation :disks'.

It would be uber-cool if we can do things like:

collection :machines do
  subcollection :disks
end

and Rabbit then find that collection and 'mount' it into
the '/machine/:id/disks' automagically.

  -- Michal

> From: marios <[email protected]>
> 
> 
> Signed-off-by: marios <[email protected]>
> ---
> server/lib/cimi/models/machine_collection.rb           | 11 +++++++----
> .../cimi/models/machine_configuration_collection.rb    | 10 ++++++----
> server/lib/cimi/models/machine_image_collection.rb     | 10 ++++++----
> server/lib/cimi/models/machine_template_collection.rb  | 10 ++++++----
> server/lib/cimi/models/network_collection.rb           | 11 ++++++-----
> server/lib/cimi/models/schema.rb                       | 18 ++++++++++++++++++
> server/lib/cimi/models/volume_collection.rb            | 10 ++++++----
> .../lib/cimi/models/volume_configuration_collection.rb | 10 ++++++----
> server/lib/cimi/models/volume_image_collection.rb      | 10 ++++++----
> server/lib/cimi/models/volume_template_collection.rb   | 10 ++++++----
> 10 files changed, 73 insertions(+), 37 deletions(-)
> 
> diff --git a/server/lib/cimi/models/machine_collection.rb 
> b/server/lib/cimi/models/machine_collection.rb
> index 9154aa9..27c721d 100644
> --- a/server/lib/cimi/models/machine_collection.rb
> +++ b/server/lib/cimi/models/machine_collection.rb
> @@ -17,17 +17,20 @@ class CIMI::Model::MachineCollection < CIMI::Model::Base
> 
>   act_as_root_entity :machine
> 
> -  array :machines do
> -    scalar :href
> -  end
> +  text :count
> +
> +  #add machines array:
> +  self.schema.add_collection_member_array(CIMI::Model::Machine)
> 
>   def self.default(context)
> +    machines = CIMI::Model::Machine.all(context)
>     self.new(
>       :id => context.machines_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} MachineCollection",
> -      :machines => CIMI::Model::Machine.all_uri(context)
> +      :count => machines.size,
> +      :machines => machines
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/machine_configuration_collection.rb 
> b/server/lib/cimi/models/machine_configuration_collection.rb
> index 6d7ebad..e75bbb4 100644
> --- a/server/lib/cimi/models/machine_configuration_collection.rb
> +++ b/server/lib/cimi/models/machine_configuration_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::MachineConfigurationCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :machine_configuration
> 
> -  array :machine_configurations do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::MachineConfiguration)
> 
>   def self.default(context)
> +    machine_configurations = CIMI::Model::MachineConfiguration.all(context)
>     self.new(
>       :id => context.machine_configurations_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> MachineConfigurationCollection",
> -      :machine_configurations => 
> CIMI::Model::MachineConfiguration.all_uri(context)
> +      :count => machine_configurations.count,
> +      :machine_configurations => machine_configurations
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/machine_image_collection.rb 
> b/server/lib/cimi/models/machine_image_collection.rb
> index 70bdc7b..703e515 100644
> --- a/server/lib/cimi/models/machine_image_collection.rb
> +++ b/server/lib/cimi/models/machine_image_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::MachineImageCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :machine_image
> 
> -  array :machine_images do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::MachineImage)
> 
>   def self.default(context)
> +    machine_images = CIMI::Model::MachineImage.all(context)
>     self.new(
>       :id => context.machine_images_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> MachineImageCollection",
> -      :machine_images => CIMI::Model::MachineImage.all_uri(context)
> +      :count => machine_images.count,
> +      :machine_images => machine_images
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/machine_template_collection.rb 
> b/server/lib/cimi/models/machine_template_collection.rb
> index d2a3f23..bef9aaf 100644
> --- a/server/lib/cimi/models/machine_template_collection.rb
> +++ b/server/lib/cimi/models/machine_template_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::MachineTemplateCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :machine_template
> 
> -  array :machine_templates do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::MachineTemplate)
> 
>   def self.default(context)
> +    machine_templates = CIMI::Model::MachineTemplate.all(context)
>     self.new(
>       :id => context.machine_template_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> MachineTemplateCollection",
> -      :machine_templates => CIMI::Model::MachineTemplate.all_uri(context)
> +      :count => machine_templates.size,
> +      :machine_templates => machine_templates
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/network_collection.rb 
> b/server/lib/cimi/models/network_collection.rb
> index d76a3dd..c17c3f7 100644
> --- a/server/lib/cimi/models/network_collection.rb
> +++ b/server/lib/cimi/models/network_collection.rb
> @@ -12,22 +12,23 @@
> # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
> # License for the specific language governing permissions and limitations
> # under the License.
> -
> class CIMI::Model::NetworkCollection < CIMI::Model::Base
> 
>   act_as_root_entity :network
> +  text :count
> 
> -  array :networks do
> -    scalar :href
> -  end
> +#add networks Array:
> +  self.schema.add_collection_member_array(CIMI::Model::Network)
> 
>   def self.default(context)
> +    networks = CIMI::Model::Network.all(context)
>     self.new(
>       :id => context.networks_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} NetworkCollection",
> -      :networks => CIMI::Model::Network.all(context).map { |c| { :href => 
> c.id } }
> +      :count => networks.size,
> +      :networks => networks
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/schema.rb 
> b/server/lib/cimi/models/schema.rb
> index 57a190d..088e111 100644
> --- a/server/lib/cimi/models/schema.rb
> +++ b/server/lib/cimi/models/schema.rb
> @@ -81,6 +81,9 @@ class CIMI::Model::Schema
>   end
> 
>   class Struct < Attribute
> +
> +    attr_accessor :schema
> +
>     def initialize(name, opts, &block)
>       content = opts[:content]
>       super(name, opts)
> @@ -146,6 +149,9 @@ class CIMI::Model::Schema
>   end
> 
>   class Array < Attribute
> +
> +    attr_accessor :struct
> +
>     # For an array :funThings, we collect all <funThing/> elements (XmlSimple
>     # actually does the collecting)
>     def initialize(name, opts = {}, &block)
> @@ -208,6 +214,9 @@ class CIMI::Model::Schema
>   #
>   # The actual Schema class
>   #
> +
> +  attr_accessor :attributes
> +
>   def initialize
>     @attributes = []
>   end
> @@ -230,6 +239,15 @@ class CIMI::Model::Schema
>     xml
>   end
> 
> +  #For MachineCollection, copy over the schema of Machine to hold
> +  #each member of the collection - avoid duplicating the schemas
> +  def add_collection_member_array(model)
> +    member_symbol = model.name.split("::").last.underscore.pluralize.to_sym
> +    members = CIMI::Model::Schema::Array.new(member_symbol)
> +    members.struct.schema.attributes = model.schema.attributes
> +    self.attributes << members
> +  end
> +
>   def to_json(model, json = {})
>     @attributes.freeze
>     @attributes.each { |attr| attr.to_json(model, json) }
> diff --git a/server/lib/cimi/models/volume_collection.rb 
> b/server/lib/cimi/models/volume_collection.rb
> index 1f4152e..6bec78f 100644
> --- a/server/lib/cimi/models/volume_collection.rb
> +++ b/server/lib/cimi/models/volume_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::VolumeCollection < CIMI::Model::Base
> 
>   act_as_root_entity :volume
> 
> -  array :volumes do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::Volume)
> 
>   def self.default(context)
> +    volumes = CIMI::Model::Volume.all(context)
>     self.new(
>       :id => context.volumes_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} VolumeCollection",
> -      :volumes => CIMI::Model::Volume.all_uri(context)
> +      :count => volumes.count,
> +      :volumes => volumes
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/volume_configuration_collection.rb 
> b/server/lib/cimi/models/volume_configuration_collection.rb
> index 2120ae6..8800e35 100644
> --- a/server/lib/cimi/models/volume_configuration_collection.rb
> +++ b/server/lib/cimi/models/volume_configuration_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::VolumeConfigurationCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :volume_configuration
> 
> -  array :volume_configurations do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::VolumeConfiguration)
> 
>   def self.default(context)
> +    volume_configurations = CIMI::Model::VolumeConfiguration.all(context)
>     self.new(
>       :id => context.volume_configurations_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> VolumeConfigurationCollection",
> -      :volume_configurations => 
> CIMI::Model::VolumeConfiguration.all_uri(context)
> +      :count => volume_configurations.size,
> +      :volume_configurations => volume_configurations
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/volume_image_collection.rb 
> b/server/lib/cimi/models/volume_image_collection.rb
> index f3da877..78881d5 100644
> --- a/server/lib/cimi/models/volume_image_collection.rb
> +++ b/server/lib/cimi/models/volume_image_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::VolumeImageCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :volume_image
> 
> -  array :volume_images do
> -    scalar :href
> -  end
> +  text :count 
> +
> +  self.schema.add_collection_member_array(CIMI::Model::VolumeImage)
> 
>   def self.default(context)
> +      volume_images = CIMI::Model::VolumeImage.all(context)
>     self.new(
>       :id => context.volume_images_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> VolumeImageCollection",
> -      :volume_images => CIMI::Model::VolumeImage.all_uri(context)
> +      :count => volume_images.count,
> +      :volume_images => volume_images
>     )
>   end
> 
> diff --git a/server/lib/cimi/models/volume_template_collection.rb 
> b/server/lib/cimi/models/volume_template_collection.rb
> index f53547c..3f2ae02 100644
> --- a/server/lib/cimi/models/volume_template_collection.rb
> +++ b/server/lib/cimi/models/volume_template_collection.rb
> @@ -17,17 +17,19 @@ class CIMI::Model::VolumeTemplateCollection < 
> CIMI::Model::Base
> 
>   act_as_root_entity :volume_template
> 
> -  array :volume_templates do
> -    scalar :href
> -  end
> +  text :count
> +
> +  self.schema.add_collection_member_array(CIMI::Model::VolumeTemplate)
> 
>   def self.default(context)
> +    volume_templates = CIMI::Model::VolumeTemplate.all(context)
>     self.new(
>       :id => context.volume_template_url,
>       :name => 'default',
>       :created => Time.now,
>       :description => "#{context.driver.name.capitalize} 
> VolumeTemplateCollection",
> -      :volume_templates => CIMI::Model::VolumeTemplate.all_uri(context)
> +      :count => volume_templates.size,
> +      :volume_templates => volume_templates
>     )
>   end
> 
> -- 
> 1.7.11.4
> 

Michal Fojtik
http://deltacloud.org
[email protected]



Reply via email to