You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/12/02 11:41:08 UTC

[PATCH core] CIMI: Added Collection models

From: Michal Fojtik <mf...@redhat.com>

Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 server/lib/cimi/model.rb                           |    9 +++++
 server/lib/cimi/model/base.rb                      |    9 ++++-
 server/lib/cimi/model/machine.rb                   |    2 -
 server/lib/cimi/model/machine_admin.rb             |    6 ++-
 server/lib/cimi/model/machine_admin_collection.rb  |   34 ++++++++++++++++++
 server/lib/cimi/model/machine_collection.rb        |   34 ++++++++++++++++++
 server/lib/cimi/model/machine_configuration.rb     |    2 -
 .../cimi/model/machine_configuration_collection.rb |   34 ++++++++++++++++++
 server/lib/cimi/model/machine_image.rb             |    2 -
 server/lib/cimi/model/machine_image_collection.rb  |   34 ++++++++++++++++++
 server/lib/cimi/model/machine_template.rb          |    2 -
 .../lib/cimi/model/machine_template_collection.rb  |   34 ++++++++++++++++++
 server/lib/cimi/model/volume.rb                    |    2 -
 server/lib/cimi/model/volume_collection.rb         |   34 ++++++++++++++++++
 server/lib/cimi/model/volume_configuration.rb      |    4 +--
 .../cimi/model/volume_configuration_collection.rb  |   34 ++++++++++++++++++
 server/lib/cimi/model/volume_image.rb              |    2 -
 server/lib/cimi/model/volume_image_collection.rb   |   34 ++++++++++++++++++
 server/lib/cimi/model/volume_template.rb           |    2 -
 .../lib/cimi/model/volume_template_collection.rb   |   34 ++++++++++++++++++
 server/lib/cimi/server.rb                          |   36 ++++++++++----------
 21 files changed, 345 insertions(+), 39 deletions(-)
 create mode 100644 server/lib/cimi/model/machine_admin_collection.rb
 create mode 100644 server/lib/cimi/model/machine_collection.rb
 create mode 100644 server/lib/cimi/model/machine_configuration_collection.rb
 create mode 100644 server/lib/cimi/model/machine_image_collection.rb
 create mode 100644 server/lib/cimi/model/machine_template_collection.rb
 create mode 100644 server/lib/cimi/model/volume_collection.rb
 create mode 100644 server/lib/cimi/model/volume_configuration_collection.rb
 create mode 100644 server/lib/cimi/model/volume_image_collection.rb
 create mode 100644 server/lib/cimi/model/volume_template_collection.rb

diff --git a/server/lib/cimi/model.rb b/server/lib/cimi/model.rb
index 243f693..d11d77b 100644
--- a/server/lib/cimi/model.rb
+++ b/server/lib/cimi/model.rb
@@ -33,3 +33,12 @@ require 'cimi/model/machine_admin'
 require 'cimi/model/volume_configuration'
 require 'cimi/model/volume_image'
 require 'cimi/model/volume_template'
+require 'cimi/model/machine_template_collection'
+require 'cimi/model/machine_image_collection'
+require 'cimi/model/machine_configuration_collection'
+require 'cimi/model/machine_collection'
+require 'cimi/model/volume_collection'
+require 'cimi/model/machine_admin_collection'
+require 'cimi/model/volume_configuration_collection'
+require 'cimi/model/volume_image_collection'
+require 'cimi/model/volume_template_collection'
diff --git a/server/lib/cimi/model/base.rb b/server/lib/cimi/model/base.rb
index ddc1b8a..f8ee983 100644
--- a/server/lib/cimi/model/base.rb
+++ b/server/lib/cimi/model/base.rb
@@ -204,8 +204,13 @@ class CIMI::Model::Base
     scalar :name
   end
 
-  def self.act_as_root_entity
-    CIMI::Model.register_as_root_entity! xml_tag_name.pluralize.uncapitalize
+  def self.act_as_root_entity(name=nil)
+    if name
+      name = name.to_s.camelize.pluralize
+    else
+      name = xml_tag_name.pluralize.uncapitalize
+    end
+    CIMI::Model.register_as_root_entity! name
   end
 
   def self.all(_self); find(:all, _self); end
diff --git a/server/lib/cimi/model/machine.rb b/server/lib/cimi/model/machine.rb
index e77e3b7..cff2dd5 100644
--- a/server/lib/cimi/model/machine.rb
+++ b/server/lib/cimi/model/machine.rb
@@ -17,8 +17,6 @@ require 'deltacloud/models/instance_address'
 
 class CIMI::Model::Machine < CIMI::Model::Base
 
-  act_as_root_entity
-
   text :state
   text :cpu
 
diff --git a/server/lib/cimi/model/machine_admin.rb b/server/lib/cimi/model/machine_admin.rb
index 4f73223..dff5065 100644
--- a/server/lib/cimi/model/machine_admin.rb
+++ b/server/lib/cimi/model/machine_admin.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::MachineAdmin < CIMI::Model::Base
 
-  act_as_root_entity
-
   text :username
   text :password
   text :key
@@ -25,4 +23,8 @@ class CIMI::Model::MachineAdmin < CIMI::Model::Base
     scalar :rel, :href
   end
 
+  def self.find(id, context)
+    [] # TODO: Implement this
+  end
+
 end
diff --git a/server/lib/cimi/model/machine_admin_collection.rb b/server/lib/cimi/model/machine_admin_collection.rb
new file mode 100644
index 0000000..2705d82
--- /dev/null
+++ b/server/lib/cimi/model/machine_admin_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::MachineAdminCollection < CIMI::Model::Base
+
+  act_as_root_entity :machine_admin
+
+  array :machine_admin do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.machine_admins_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} MachineAdminCollection",
+      :machine_admin => MachineAdmin.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/machine_collection.rb b/server/lib/cimi/model/machine_collection.rb
new file mode 100644
index 0000000..d976e9a
--- /dev/null
+++ b/server/lib/cimi/model/machine_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::MachineCollection < CIMI::Model::Base
+
+  act_as_root_entity :machine
+
+  array :machine do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.machines_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} MachineCollection",
+      :machine => Machine.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/machine_configuration.rb b/server/lib/cimi/model/machine_configuration.rb
index 6bf76b8..d36ebdf 100644
--- a/server/lib/cimi/model/machine_configuration.rb
+++ b/server/lib/cimi/model/machine_configuration.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::MachineConfiguration < CIMI::Model::Base
 
-  act_as_root_entity
-
   struct :memory do
     scalar :quantity
     scalar :units
diff --git a/server/lib/cimi/model/machine_configuration_collection.rb b/server/lib/cimi/model/machine_configuration_collection.rb
new file mode 100644
index 0000000..a8adf9d
--- /dev/null
+++ b/server/lib/cimi/model/machine_configuration_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::MachineConfigurationCollection < CIMI::Model::Base
+
+  act_as_root_entity :machine_configuration
+
+  array :machine_configuration do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.machine_configurations_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} MachineConfigurationCollection",
+      :machine_configuration => MachineConfiguration.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/machine_image.rb b/server/lib/cimi/model/machine_image.rb
index 3d75d8f..e9aedf6 100644
--- a/server/lib/cimi/model/machine_image.rb
+++ b/server/lib/cimi/model/machine_image.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::MachineImage < CIMI::Model::Base
 
-  act_as_root_entity
-
   href :image_location
   text :image_data
 
diff --git a/server/lib/cimi/model/machine_image_collection.rb b/server/lib/cimi/model/machine_image_collection.rb
new file mode 100644
index 0000000..7ce5623
--- /dev/null
+++ b/server/lib/cimi/model/machine_image_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::MachineImageCollection < CIMI::Model::Base
+
+  act_as_root_entity :machine_image
+
+  array :machine_images do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.machine_images_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} MachineImageCollection",
+      :machine_images => MachineImage.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/machine_template.rb b/server/lib/cimi/model/machine_template.rb
index ac23933..8a88052 100644
--- a/server/lib/cimi/model/machine_template.rb
+++ b/server/lib/cimi/model/machine_template.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::MachineTemplate < CIMI::Model::Base
 
-  act_as_root_entity
-
   href :machine_config
   href :machine_image
   href :machine_admin
diff --git a/server/lib/cimi/model/machine_template_collection.rb b/server/lib/cimi/model/machine_template_collection.rb
new file mode 100644
index 0000000..67344d5
--- /dev/null
+++ b/server/lib/cimi/model/machine_template_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::MachineTemplateCollection < CIMI::Model::Base
+
+  act_as_root_entity :machine_template
+
+  array :machine_template do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.machine_template_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} MachineTemplateCollection",
+      :machine_template => MachineTemplate.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/volume.rb b/server/lib/cimi/model/volume.rb
index b976027..4c19889 100644
--- a/server/lib/cimi/model/volume.rb
+++ b/server/lib/cimi/model/volume.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::Volume < CIMI::Model::Base
 
-  act_as_root_entity
-
   struct :capacity do
     scalar :quantity
     scalar :units
diff --git a/server/lib/cimi/model/volume_collection.rb b/server/lib/cimi/model/volume_collection.rb
new file mode 100644
index 0000000..afda19e
--- /dev/null
+++ b/server/lib/cimi/model/volume_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::VolumeCollection < CIMI::Model::Base
+
+  act_as_root_entity :volume
+
+  array :volume do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.volumes_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} VolumeCollection",
+      :volume => Volume.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/volume_configuration.rb b/server/lib/cimi/model/volume_configuration.rb
index 48fed59..b8f0155 100644
--- a/server/lib/cimi/model/volume_configuration.rb
+++ b/server/lib/cimi/model/volume_configuration.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
 
-  act_as_root_entity
-
   text :format
   struct :capacity do
     scalar :quantity
@@ -49,7 +47,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
 
   def self.create(size, context)
     self.new( {
-                :uri => context.machine_configuration_url(size),
+                :uri => context.volume_configuration_url(size),
                 :name => size,
                 :description => "volume configuration with #{size} GiB",
                 :created => Time.now.to_s,
diff --git a/server/lib/cimi/model/volume_configuration_collection.rb b/server/lib/cimi/model/volume_configuration_collection.rb
new file mode 100644
index 0000000..3e76c39
--- /dev/null
+++ b/server/lib/cimi/model/volume_configuration_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::VolumeConfigurationCollection < CIMI::Model::Base
+
+  act_as_root_entity :volume_configuration
+
+  array :volume_configuration do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.volume_configurations_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} VolumeConfigurationCollection",
+      :volume_configuration => VolumeConfiguration.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/volume_image.rb b/server/lib/cimi/model/volume_image.rb
index d7b3224..e32509e 100644
--- a/server/lib/cimi/model/volume_image.rb
+++ b/server/lib/cimi/model/volume_image.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::VolumeImage < CIMI::Model::Base
 
-  act_as_root_entity
-
   href :image_location
   text :image_data
   text :bootable
diff --git a/server/lib/cimi/model/volume_image_collection.rb b/server/lib/cimi/model/volume_image_collection.rb
new file mode 100644
index 0000000..95c63ac
--- /dev/null
+++ b/server/lib/cimi/model/volume_image_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::VolumeImageCollection < CIMI::Model::Base
+
+  act_as_root_entity :volume_image
+
+  array :volume_image do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.volume_images_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} VolumeImageCollection",
+      :volume_image => VolumeImage.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/model/volume_template.rb b/server/lib/cimi/model/volume_template.rb
index aa12435..b9c82db 100644
--- a/server/lib/cimi/model/volume_template.rb
+++ b/server/lib/cimi/model/volume_template.rb
@@ -15,8 +15,6 @@
 
 class CIMI::Model::VolumeTemplate < CIMI::Model::Base
 
-  act_as_root_entity
-
   href :volume_config
   href :volume_image
   array :operations do
diff --git a/server/lib/cimi/model/volume_template_collection.rb b/server/lib/cimi/model/volume_template_collection.rb
new file mode 100644
index 0000000..35c8ae0
--- /dev/null
+++ b/server/lib/cimi/model/volume_template_collection.rb
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you 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.
+
+class CIMI::Model::VolumeTemplateCollection < CIMI::Model::Base
+
+  act_as_root_entity :volume_template
+
+  array :volume_template do
+    scalar :href
+  end
+
+  def self.default(context)
+    self.new(
+      :uri => context.volume_template_url,
+      :name => 'default',
+      :created => Time.now,
+      :description => "#{context.driver.name.capitalize} VolumeTemplateCollection",
+      :volume_template => VolumeTemplate.all(context).map { |c| { :href => c.uri } }
+    )
+  end
+
+end
diff --git a/server/lib/cimi/server.rb b/server/lib/cimi/server.rb
index 1e85d0f..ac7d51f 100644
--- a/server/lib/cimi/server.rb
+++ b/server/lib/cimi/server.rb
@@ -94,10 +94,10 @@ global_collection :machine_configurations do
   operation :index do
     description "List all machine configurations"
     control do
-      machine_configs = MachineConfiguration.all(self)
+      machine_configs = MachineConfigurationCollection.default(self)
       respond_to do |format|
-        format.xml { machine_configs.to_xml_cimi_collection(self) }
-        format.json { machine_configs.to_json_cimi_collection(self) }
+        format.xml { machine_configs.to_xml }
+        format.json { machine_configs.to_json }
       end
     end
   end
@@ -126,10 +126,10 @@ global_collection :machine_images do
   operation :index do
     description "List all machine configurations"
     control do
-      machine_images = MachineImage.all(self)
+      machine_images = MachineImageCollection.default(self)
       respond_to do |format|
-        format.xml { machine_images.to_xml_cimi_collection(self) }
-        format.json { machine_images.to_json_cimi_collection(self) }
+        format.xml { machine_images.to_xml }
+        format.json { machine_images.to_json }
       end
     end
   end
@@ -155,10 +155,10 @@ global_collection :machines do
   operation :index do
     description "List all machines"
     control do
-      machines = Machine.all(self)
+      machines = MachineCollection.default(self)
       respond_to do |format|
-        format.xml { machines.to_xml_cimi_collection(self) }
-        format.json { machines.to_json_cimi_collection(self) }
+        format.xml { machines.to_xml }
+        format.json { machines.to_json }
       end
     end
   end
@@ -260,10 +260,10 @@ global_collection :volumes do
   operation :index do
     description "List all volumes"
     control do
-      volumes = Volume.all(self)
+      volumes = VolumeCollection.default(self)
       respond_to do |format|
-        format.xml { volumes.to_xml_cimi_collection(self) }
-        format.json { volumes.to_json_cimi_collection(self) }
+        format.xml { volumes.to_xml }
+        format.json { volumes.to_json }
       end
     end
   end
@@ -318,10 +318,10 @@ global_collection :volume_configurations do
   operation :index do
     description "Get list all VolumeConfigurations"
     control do
-      volume_configs = VolumeConfiguration.all(self)
+      volume_configuration = VolumeConfigurationCollection.default(self)
       respond_to do |format|
-        format.xml { volume_configs.to_xml_cimi_collection(self) }
-        format.json { volume_configs.to_json_cimi_collection(self) }
+        format.xml { volume_configuration.to_xml }
+        format.json { volume_configuration.to_json }
       end
     end
   end
@@ -344,10 +344,10 @@ global_collection :volume_images do
   operation :index do
     description "List all volumes images"
     control do
-      volume_images = VolumeImage.all(self)
+      volume_images = VolumeImageCollection.default(self)
       respond_to do |format|
-        format.xml { volume_images.to_xml_cimi_collection(self) }
-        format.json { volume_images.to_json_cimi_collection(self) }
+        format.xml { volume_images.to_xml }
+        format.json { volume_images.to_json }
       end
     end
   end
-- 
1.7.4.4


Re: [PATCH core] CIMI: Added Collection models

Posted by "marios@redhat.com" <ma...@redhat.com>.
ACK, only thing missing is to add operations to each collection -
especially the 'add' link which tells clients where to POST to create a
new Thing when looking at ThingCollection

On 02/12/11 12:41, mfojtik@redhat.com wrote:
> From: Michal Fojtik <mf...@redhat.com>
> 
> Signed-off-by: Michal fojtik <mf...@redhat.com>
> ---
>  server/lib/cimi/model.rb                           |    9 +++++
>  server/lib/cimi/model/base.rb                      |    9 ++++-
>  server/lib/cimi/model/machine.rb                   |    2 -
>  server/lib/cimi/model/machine_admin.rb             |    6 ++-
>  server/lib/cimi/model/machine_admin_collection.rb  |   34 ++++++++++++++++++
>  server/lib/cimi/model/machine_collection.rb        |   34 ++++++++++++++++++
>  server/lib/cimi/model/machine_configuration.rb     |    2 -
>  .../cimi/model/machine_configuration_collection.rb |   34 ++++++++++++++++++
>  server/lib/cimi/model/machine_image.rb             |    2 -
>  server/lib/cimi/model/machine_image_collection.rb  |   34 ++++++++++++++++++
>  server/lib/cimi/model/machine_template.rb          |    2 -
>  .../lib/cimi/model/machine_template_collection.rb  |   34 ++++++++++++++++++
>  server/lib/cimi/model/volume.rb                    |    2 -
>  server/lib/cimi/model/volume_collection.rb         |   34 ++++++++++++++++++
>  server/lib/cimi/model/volume_configuration.rb      |    4 +--
>  .../cimi/model/volume_configuration_collection.rb  |   34 ++++++++++++++++++
>  server/lib/cimi/model/volume_image.rb              |    2 -
>  server/lib/cimi/model/volume_image_collection.rb   |   34 ++++++++++++++++++
>  server/lib/cimi/model/volume_template.rb           |    2 -
>  .../lib/cimi/model/volume_template_collection.rb   |   34 ++++++++++++++++++
>  server/lib/cimi/server.rb                          |   36 ++++++++++----------
>  21 files changed, 345 insertions(+), 39 deletions(-)
>  create mode 100644 server/lib/cimi/model/machine_admin_collection.rb
>  create mode 100644 server/lib/cimi/model/machine_collection.rb
>  create mode 100644 server/lib/cimi/model/machine_configuration_collection.rb
>  create mode 100644 server/lib/cimi/model/machine_image_collection.rb
>  create mode 100644 server/lib/cimi/model/machine_template_collection.rb
>  create mode 100644 server/lib/cimi/model/volume_collection.rb
>  create mode 100644 server/lib/cimi/model/volume_configuration_collection.rb
>  create mode 100644 server/lib/cimi/model/volume_image_collection.rb
>  create mode 100644 server/lib/cimi/model/volume_template_collection.rb
> 
> diff --git a/server/lib/cimi/model.rb b/server/lib/cimi/model.rb
> index 243f693..d11d77b 100644
> --- a/server/lib/cimi/model.rb
> +++ b/server/lib/cimi/model.rb
> @@ -33,3 +33,12 @@ require 'cimi/model/machine_admin'
>  require 'cimi/model/volume_configuration'
>  require 'cimi/model/volume_image'
>  require 'cimi/model/volume_template'
> +require 'cimi/model/machine_template_collection'
> +require 'cimi/model/machine_image_collection'
> +require 'cimi/model/machine_configuration_collection'
> +require 'cimi/model/machine_collection'
> +require 'cimi/model/volume_collection'
> +require 'cimi/model/machine_admin_collection'
> +require 'cimi/model/volume_configuration_collection'
> +require 'cimi/model/volume_image_collection'
> +require 'cimi/model/volume_template_collection'
> diff --git a/server/lib/cimi/model/base.rb b/server/lib/cimi/model/base.rb
> index ddc1b8a..f8ee983 100644
> --- a/server/lib/cimi/model/base.rb
> +++ b/server/lib/cimi/model/base.rb
> @@ -204,8 +204,13 @@ class CIMI::Model::Base
>      scalar :name
>    end
>  
> -  def self.act_as_root_entity
> -    CIMI::Model.register_as_root_entity! xml_tag_name.pluralize.uncapitalize
> +  def self.act_as_root_entity(name=nil)
> +    if name
> +      name = name.to_s.camelize.pluralize
> +    else
> +      name = xml_tag_name.pluralize.uncapitalize
> +    end
> +    CIMI::Model.register_as_root_entity! name
>    end
>  
>    def self.all(_self); find(:all, _self); end
> diff --git a/server/lib/cimi/model/machine.rb b/server/lib/cimi/model/machine.rb
> index e77e3b7..cff2dd5 100644
> --- a/server/lib/cimi/model/machine.rb
> +++ b/server/lib/cimi/model/machine.rb
> @@ -17,8 +17,6 @@ require 'deltacloud/models/instance_address'
>  
>  class CIMI::Model::Machine < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    text :state
>    text :cpu
>  
> diff --git a/server/lib/cimi/model/machine_admin.rb b/server/lib/cimi/model/machine_admin.rb
> index 4f73223..dff5065 100644
> --- a/server/lib/cimi/model/machine_admin.rb
> +++ b/server/lib/cimi/model/machine_admin.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::MachineAdmin < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    text :username
>    text :password
>    text :key
> @@ -25,4 +23,8 @@ class CIMI::Model::MachineAdmin < CIMI::Model::Base
>      scalar :rel, :href
>    end
>  
> +  def self.find(id, context)
> +    [] # TODO: Implement this
> +  end
> +
>  end
> diff --git a/server/lib/cimi/model/machine_admin_collection.rb b/server/lib/cimi/model/machine_admin_collection.rb
> new file mode 100644
> index 0000000..2705d82
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_admin_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineAdminCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_admin
> +
> +  array :machine_admin do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_admins_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineAdminCollection",
> +      :machine_admin => MachineAdmin.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_collection.rb b/server/lib/cimi/model/machine_collection.rb
> new file mode 100644
> index 0000000..d976e9a
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine
> +
> +  array :machine do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machines_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineCollection",
> +      :machine => Machine.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_configuration.rb b/server/lib/cimi/model/machine_configuration.rb
> index 6bf76b8..d36ebdf 100644
> --- a/server/lib/cimi/model/machine_configuration.rb
> +++ b/server/lib/cimi/model/machine_configuration.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::MachineConfiguration < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    struct :memory do
>      scalar :quantity
>      scalar :units
> diff --git a/server/lib/cimi/model/machine_configuration_collection.rb b/server/lib/cimi/model/machine_configuration_collection.rb
> new file mode 100644
> index 0000000..a8adf9d
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_configuration_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineConfigurationCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_configuration
> +
> +  array :machine_configuration do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_configurations_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineConfigurationCollection",
> +      :machine_configuration => MachineConfiguration.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_image.rb b/server/lib/cimi/model/machine_image.rb
> index 3d75d8f..e9aedf6 100644
> --- a/server/lib/cimi/model/machine_image.rb
> +++ b/server/lib/cimi/model/machine_image.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::MachineImage < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    href :image_location
>    text :image_data
>  
> diff --git a/server/lib/cimi/model/machine_image_collection.rb b/server/lib/cimi/model/machine_image_collection.rb
> new file mode 100644
> index 0000000..7ce5623
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_image_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineImageCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_image
> +
> +  array :machine_images do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_images_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineImageCollection",
> +      :machine_images => MachineImage.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_template.rb b/server/lib/cimi/model/machine_template.rb
> index ac23933..8a88052 100644
> --- a/server/lib/cimi/model/machine_template.rb
> +++ b/server/lib/cimi/model/machine_template.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::MachineTemplate < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    href :machine_config
>    href :machine_image
>    href :machine_admin
> diff --git a/server/lib/cimi/model/machine_template_collection.rb b/server/lib/cimi/model/machine_template_collection.rb
> new file mode 100644
> index 0000000..67344d5
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_template_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineTemplateCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_template
> +
> +  array :machine_template do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_template_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineTemplateCollection",
> +      :machine_template => MachineTemplate.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume.rb b/server/lib/cimi/model/volume.rb
> index b976027..4c19889 100644
> --- a/server/lib/cimi/model/volume.rb
> +++ b/server/lib/cimi/model/volume.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::Volume < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    struct :capacity do
>      scalar :quantity
>      scalar :units
> diff --git a/server/lib/cimi/model/volume_collection.rb b/server/lib/cimi/model/volume_collection.rb
> new file mode 100644
> index 0000000..afda19e
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume
> +
> +  array :volume do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volumes_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeCollection",
> +      :volume => Volume.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_configuration.rb b/server/lib/cimi/model/volume_configuration.rb
> index 48fed59..b8f0155 100644
> --- a/server/lib/cimi/model/volume_configuration.rb
> +++ b/server/lib/cimi/model/volume_configuration.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    text :format
>    struct :capacity do
>      scalar :quantity
> @@ -49,7 +47,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
>  
>    def self.create(size, context)
>      self.new( {
> -                :uri => context.machine_configuration_url(size),
> +                :uri => context.volume_configuration_url(size),
>                  :name => size,
>                  :description => "volume configuration with #{size} GiB",
>                  :created => Time.now.to_s,
> diff --git a/server/lib/cimi/model/volume_configuration_collection.rb b/server/lib/cimi/model/volume_configuration_collection.rb
> new file mode 100644
> index 0000000..3e76c39
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_configuration_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeConfigurationCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_configuration
> +
> +  array :volume_configuration do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_configurations_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeConfigurationCollection",
> +      :volume_configuration => VolumeConfiguration.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_image.rb b/server/lib/cimi/model/volume_image.rb
> index d7b3224..e32509e 100644
> --- a/server/lib/cimi/model/volume_image.rb
> +++ b/server/lib/cimi/model/volume_image.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::VolumeImage < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    href :image_location
>    text :image_data
>    text :bootable
> diff --git a/server/lib/cimi/model/volume_image_collection.rb b/server/lib/cimi/model/volume_image_collection.rb
> new file mode 100644
> index 0000000..95c63ac
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_image_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeImageCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_image
> +
> +  array :volume_image do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_images_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeImageCollection",
> +      :volume_image => VolumeImage.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_template.rb b/server/lib/cimi/model/volume_template.rb
> index aa12435..b9c82db 100644
> --- a/server/lib/cimi/model/volume_template.rb
> +++ b/server/lib/cimi/model/volume_template.rb
> @@ -15,8 +15,6 @@
>  
>  class CIMI::Model::VolumeTemplate < CIMI::Model::Base
>  
> -  act_as_root_entity
> -
>    href :volume_config
>    href :volume_image
>    array :operations do
> diff --git a/server/lib/cimi/model/volume_template_collection.rb b/server/lib/cimi/model/volume_template_collection.rb
> new file mode 100644
> index 0000000..35c8ae0
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_template_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeTemplateCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_template
> +
> +  array :volume_template do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_template_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeTemplateCollection",
> +      :volume_template => VolumeTemplate.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/server.rb b/server/lib/cimi/server.rb
> index 1e85d0f..ac7d51f 100644
> --- a/server/lib/cimi/server.rb
> +++ b/server/lib/cimi/server.rb
> @@ -94,10 +94,10 @@ global_collection :machine_configurations do
>    operation :index do
>      description "List all machine configurations"
>      control do
> -      machine_configs = MachineConfiguration.all(self)
> +      machine_configs = MachineConfigurationCollection.default(self)
>        respond_to do |format|
> -        format.xml { machine_configs.to_xml_cimi_collection(self) }
> -        format.json { machine_configs.to_json_cimi_collection(self) }
> +        format.xml { machine_configs.to_xml }
> +        format.json { machine_configs.to_json }
>        end
>      end
>    end
> @@ -126,10 +126,10 @@ global_collection :machine_images do
>    operation :index do
>      description "List all machine configurations"
>      control do
> -      machine_images = MachineImage.all(self)
> +      machine_images = MachineImageCollection.default(self)
>        respond_to do |format|
> -        format.xml { machine_images.to_xml_cimi_collection(self) }
> -        format.json { machine_images.to_json_cimi_collection(self) }
> +        format.xml { machine_images.to_xml }
> +        format.json { machine_images.to_json }
>        end
>      end
>    end
> @@ -155,10 +155,10 @@ global_collection :machines do
>    operation :index do
>      description "List all machines"
>      control do
> -      machines = Machine.all(self)
> +      machines = MachineCollection.default(self)
>        respond_to do |format|
> -        format.xml { machines.to_xml_cimi_collection(self) }
> -        format.json { machines.to_json_cimi_collection(self) }
> +        format.xml { machines.to_xml }
> +        format.json { machines.to_json }
>        end
>      end
>    end
> @@ -260,10 +260,10 @@ global_collection :volumes do
>    operation :index do
>      description "List all volumes"
>      control do
> -      volumes = Volume.all(self)
> +      volumes = VolumeCollection.default(self)
>        respond_to do |format|
> -        format.xml { volumes.to_xml_cimi_collection(self) }
> -        format.json { volumes.to_json_cimi_collection(self) }
> +        format.xml { volumes.to_xml }
> +        format.json { volumes.to_json }
>        end
>      end
>    end
> @@ -318,10 +318,10 @@ global_collection :volume_configurations do
>    operation :index do
>      description "Get list all VolumeConfigurations"
>      control do
> -      volume_configs = VolumeConfiguration.all(self)
> +      volume_configuration = VolumeConfigurationCollection.default(self)
>        respond_to do |format|
> -        format.xml { volume_configs.to_xml_cimi_collection(self) }
> -        format.json { volume_configs.to_json_cimi_collection(self) }
> +        format.xml { volume_configuration.to_xml }
> +        format.json { volume_configuration.to_json }
>        end
>      end
>    end
> @@ -344,10 +344,10 @@ global_collection :volume_images do
>    operation :index do
>      description "List all volumes images"
>      control do
> -      volume_images = VolumeImage.all(self)
> +      volume_images = VolumeImageCollection.default(self)
>        respond_to do |format|
> -        format.xml { volume_images.to_xml_cimi_collection(self) }
> -        format.json { volume_images.to_json_cimi_collection(self) }
> +        format.xml { volume_images.to_xml }
> +        format.json { volume_images.to_json }
>        end
>      end
>    end


Re: [PATCH core] CIMI: Added Collection models

Posted by Michal Fojtik <mf...@redhat.com>.
Hi,

This patch lacks a brief explanation and motivation :-)
So:

Currently we generate all :index operations using two creepy helpers placed in the
cimi_helper.rb file (to_xml_cimi_collection, to_json_cimi_collection). This helpers
are basically constructing an '[Entity]Collection' output, we're using in order to list
all entities (:the :index operations).

I found this solution a bit 'unpractical' when you want to re-use models in 'client' app.
For existing models you can use 'Model.from_xml(RestClient.get('...'))' and the model
will be automagically constructed. However for Collection you cannot do it and you need
to fallback to XmlSimple/Nokogiri and parse 'raw' XML in order to get list of entities.

This patch will add 'Collection' models (MachineCollection, VolumeCollection, ...).
All models looks same in schema and they all define 'self.default(context)' method that
will return the 'default' collection. This makes the helpers obsolete.

Also since, in cloudEntryPoint the 'root entities' are all Collections, I removed the
'act_as_root_entity' from all our existing models and moved that into new Collection models.

  -- Michal


On Dec 2, 2011, at 11:41 AM, mfojtik@redhat.com wrote:

> From: Michal Fojtik <mf...@redhat.com>
> 
> Signed-off-by: Michal fojtik <mf...@redhat.com>
> ---
> server/lib/cimi/model.rb                           |    9 +++++
> server/lib/cimi/model/base.rb                      |    9 ++++-
> server/lib/cimi/model/machine.rb                   |    2 -
> server/lib/cimi/model/machine_admin.rb             |    6 ++-
> server/lib/cimi/model/machine_admin_collection.rb  |   34 ++++++++++++++++++
> server/lib/cimi/model/machine_collection.rb        |   34 ++++++++++++++++++
> server/lib/cimi/model/machine_configuration.rb     |    2 -
> .../cimi/model/machine_configuration_collection.rb |   34 ++++++++++++++++++
> server/lib/cimi/model/machine_image.rb             |    2 -
> server/lib/cimi/model/machine_image_collection.rb  |   34 ++++++++++++++++++
> server/lib/cimi/model/machine_template.rb          |    2 -
> .../lib/cimi/model/machine_template_collection.rb  |   34 ++++++++++++++++++
> server/lib/cimi/model/volume.rb                    |    2 -
> server/lib/cimi/model/volume_collection.rb         |   34 ++++++++++++++++++
> server/lib/cimi/model/volume_configuration.rb      |    4 +--
> .../cimi/model/volume_configuration_collection.rb  |   34 ++++++++++++++++++
> server/lib/cimi/model/volume_image.rb              |    2 -
> server/lib/cimi/model/volume_image_collection.rb   |   34 ++++++++++++++++++
> server/lib/cimi/model/volume_template.rb           |    2 -
> .../lib/cimi/model/volume_template_collection.rb   |   34 ++++++++++++++++++
> server/lib/cimi/server.rb                          |   36 ++++++++++----------
> 21 files changed, 345 insertions(+), 39 deletions(-)
> create mode 100644 server/lib/cimi/model/machine_admin_collection.rb
> create mode 100644 server/lib/cimi/model/machine_collection.rb
> create mode 100644 server/lib/cimi/model/machine_configuration_collection.rb
> create mode 100644 server/lib/cimi/model/machine_image_collection.rb
> create mode 100644 server/lib/cimi/model/machine_template_collection.rb
> create mode 100644 server/lib/cimi/model/volume_collection.rb
> create mode 100644 server/lib/cimi/model/volume_configuration_collection.rb
> create mode 100644 server/lib/cimi/model/volume_image_collection.rb
> create mode 100644 server/lib/cimi/model/volume_template_collection.rb
> 
> diff --git a/server/lib/cimi/model.rb b/server/lib/cimi/model.rb
> index 243f693..d11d77b 100644
> --- a/server/lib/cimi/model.rb
> +++ b/server/lib/cimi/model.rb
> @@ -33,3 +33,12 @@ require 'cimi/model/machine_admin'
> require 'cimi/model/volume_configuration'
> require 'cimi/model/volume_image'
> require 'cimi/model/volume_template'
> +require 'cimi/model/machine_template_collection'
> +require 'cimi/model/machine_image_collection'
> +require 'cimi/model/machine_configuration_collection'
> +require 'cimi/model/machine_collection'
> +require 'cimi/model/volume_collection'
> +require 'cimi/model/machine_admin_collection'
> +require 'cimi/model/volume_configuration_collection'
> +require 'cimi/model/volume_image_collection'
> +require 'cimi/model/volume_template_collection'
> diff --git a/server/lib/cimi/model/base.rb b/server/lib/cimi/model/base.rb
> index ddc1b8a..f8ee983 100644
> --- a/server/lib/cimi/model/base.rb
> +++ b/server/lib/cimi/model/base.rb
> @@ -204,8 +204,13 @@ class CIMI::Model::Base
>     scalar :name
>   end
> 
> -  def self.act_as_root_entity
> -    CIMI::Model.register_as_root_entity! xml_tag_name.pluralize.uncapitalize
> +  def self.act_as_root_entity(name=nil)
> +    if name
> +      name = name.to_s.camelize.pluralize
> +    else
> +      name = xml_tag_name.pluralize.uncapitalize
> +    end
> +    CIMI::Model.register_as_root_entity! name
>   end
> 
>   def self.all(_self); find(:all, _self); end
> diff --git a/server/lib/cimi/model/machine.rb b/server/lib/cimi/model/machine.rb
> index e77e3b7..cff2dd5 100644
> --- a/server/lib/cimi/model/machine.rb
> +++ b/server/lib/cimi/model/machine.rb
> @@ -17,8 +17,6 @@ require 'deltacloud/models/instance_address'
> 
> class CIMI::Model::Machine < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   text :state
>   text :cpu
> 
> diff --git a/server/lib/cimi/model/machine_admin.rb b/server/lib/cimi/model/machine_admin.rb
> index 4f73223..dff5065 100644
> --- a/server/lib/cimi/model/machine_admin.rb
> +++ b/server/lib/cimi/model/machine_admin.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::MachineAdmin < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   text :username
>   text :password
>   text :key
> @@ -25,4 +23,8 @@ class CIMI::Model::MachineAdmin < CIMI::Model::Base
>     scalar :rel, :href
>   end
> 
> +  def self.find(id, context)
> +    [] # TODO: Implement this
> +  end
> +
> end
> diff --git a/server/lib/cimi/model/machine_admin_collection.rb b/server/lib/cimi/model/machine_admin_collection.rb
> new file mode 100644
> index 0000000..2705d82
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_admin_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineAdminCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_admin
> +
> +  array :machine_admin do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_admins_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineAdminCollection",
> +      :machine_admin => MachineAdmin.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_collection.rb b/server/lib/cimi/model/machine_collection.rb
> new file mode 100644
> index 0000000..d976e9a
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine
> +
> +  array :machine do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machines_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineCollection",
> +      :machine => Machine.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_configuration.rb b/server/lib/cimi/model/machine_configuration.rb
> index 6bf76b8..d36ebdf 100644
> --- a/server/lib/cimi/model/machine_configuration.rb
> +++ b/server/lib/cimi/model/machine_configuration.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::MachineConfiguration < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   struct :memory do
>     scalar :quantity
>     scalar :units
> diff --git a/server/lib/cimi/model/machine_configuration_collection.rb b/server/lib/cimi/model/machine_configuration_collection.rb
> new file mode 100644
> index 0000000..a8adf9d
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_configuration_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineConfigurationCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_configuration
> +
> +  array :machine_configuration do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_configurations_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineConfigurationCollection",
> +      :machine_configuration => MachineConfiguration.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_image.rb b/server/lib/cimi/model/machine_image.rb
> index 3d75d8f..e9aedf6 100644
> --- a/server/lib/cimi/model/machine_image.rb
> +++ b/server/lib/cimi/model/machine_image.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::MachineImage < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   href :image_location
>   text :image_data
> 
> diff --git a/server/lib/cimi/model/machine_image_collection.rb b/server/lib/cimi/model/machine_image_collection.rb
> new file mode 100644
> index 0000000..7ce5623
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_image_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineImageCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_image
> +
> +  array :machine_images do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_images_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineImageCollection",
> +      :machine_images => MachineImage.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/machine_template.rb b/server/lib/cimi/model/machine_template.rb
> index ac23933..8a88052 100644
> --- a/server/lib/cimi/model/machine_template.rb
> +++ b/server/lib/cimi/model/machine_template.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::MachineTemplate < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   href :machine_config
>   href :machine_image
>   href :machine_admin
> diff --git a/server/lib/cimi/model/machine_template_collection.rb b/server/lib/cimi/model/machine_template_collection.rb
> new file mode 100644
> index 0000000..67344d5
> --- /dev/null
> +++ b/server/lib/cimi/model/machine_template_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::MachineTemplateCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :machine_template
> +
> +  array :machine_template do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.machine_template_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} MachineTemplateCollection",
> +      :machine_template => MachineTemplate.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume.rb b/server/lib/cimi/model/volume.rb
> index b976027..4c19889 100644
> --- a/server/lib/cimi/model/volume.rb
> +++ b/server/lib/cimi/model/volume.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::Volume < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   struct :capacity do
>     scalar :quantity
>     scalar :units
> diff --git a/server/lib/cimi/model/volume_collection.rb b/server/lib/cimi/model/volume_collection.rb
> new file mode 100644
> index 0000000..afda19e
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume
> +
> +  array :volume do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volumes_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeCollection",
> +      :volume => Volume.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_configuration.rb b/server/lib/cimi/model/volume_configuration.rb
> index 48fed59..b8f0155 100644
> --- a/server/lib/cimi/model/volume_configuration.rb
> +++ b/server/lib/cimi/model/volume_configuration.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   text :format
>   struct :capacity do
>     scalar :quantity
> @@ -49,7 +47,7 @@ class CIMI::Model::VolumeConfiguration < CIMI::Model::Base
> 
>   def self.create(size, context)
>     self.new( {
> -                :uri => context.machine_configuration_url(size),
> +                :uri => context.volume_configuration_url(size),
>                 :name => size,
>                 :description => "volume configuration with #{size} GiB",
>                 :created => Time.now.to_s,
> diff --git a/server/lib/cimi/model/volume_configuration_collection.rb b/server/lib/cimi/model/volume_configuration_collection.rb
> new file mode 100644
> index 0000000..3e76c39
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_configuration_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeConfigurationCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_configuration
> +
> +  array :volume_configuration do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_configurations_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeConfigurationCollection",
> +      :volume_configuration => VolumeConfiguration.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_image.rb b/server/lib/cimi/model/volume_image.rb
> index d7b3224..e32509e 100644
> --- a/server/lib/cimi/model/volume_image.rb
> +++ b/server/lib/cimi/model/volume_image.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::VolumeImage < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   href :image_location
>   text :image_data
>   text :bootable
> diff --git a/server/lib/cimi/model/volume_image_collection.rb b/server/lib/cimi/model/volume_image_collection.rb
> new file mode 100644
> index 0000000..95c63ac
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_image_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeImageCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_image
> +
> +  array :volume_image do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_images_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeImageCollection",
> +      :volume_image => VolumeImage.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/model/volume_template.rb b/server/lib/cimi/model/volume_template.rb
> index aa12435..b9c82db 100644
> --- a/server/lib/cimi/model/volume_template.rb
> +++ b/server/lib/cimi/model/volume_template.rb
> @@ -15,8 +15,6 @@
> 
> class CIMI::Model::VolumeTemplate < CIMI::Model::Base
> 
> -  act_as_root_entity
> -
>   href :volume_config
>   href :volume_image
>   array :operations do
> diff --git a/server/lib/cimi/model/volume_template_collection.rb b/server/lib/cimi/model/volume_template_collection.rb
> new file mode 100644
> index 0000000..35c8ae0
> --- /dev/null
> +++ b/server/lib/cimi/model/volume_template_collection.rb
> @@ -0,0 +1,34 @@
> +# Licensed to the Apache Software Foundation (ASF) under one or more
> +# contributor license agreements.  See the NOTICE file distributed with
> +# this work for additional information regarding copyright ownership.  The
> +# ASF licenses this file to you 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.
> +
> +class CIMI::Model::VolumeTemplateCollection < CIMI::Model::Base
> +
> +  act_as_root_entity :volume_template
> +
> +  array :volume_template do
> +    scalar :href
> +  end
> +
> +  def self.default(context)
> +    self.new(
> +      :uri => context.volume_template_url,
> +      :name => 'default',
> +      :created => Time.now,
> +      :description => "#{context.driver.name.capitalize} VolumeTemplateCollection",
> +      :volume_template => VolumeTemplate.all(context).map { |c| { :href => c.uri } }
> +    )
> +  end
> +
> +end
> diff --git a/server/lib/cimi/server.rb b/server/lib/cimi/server.rb
> index 1e85d0f..ac7d51f 100644
> --- a/server/lib/cimi/server.rb
> +++ b/server/lib/cimi/server.rb
> @@ -94,10 +94,10 @@ global_collection :machine_configurations do
>   operation :index do
>     description "List all machine configurations"
>     control do
> -      machine_configs = MachineConfiguration.all(self)
> +      machine_configs = MachineConfigurationCollection.default(self)
>       respond_to do |format|
> -        format.xml { machine_configs.to_xml_cimi_collection(self) }
> -        format.json { machine_configs.to_json_cimi_collection(self) }
> +        format.xml { machine_configs.to_xml }
> +        format.json { machine_configs.to_json }
>       end
>     end
>   end
> @@ -126,10 +126,10 @@ global_collection :machine_images do
>   operation :index do
>     description "List all machine configurations"
>     control do
> -      machine_images = MachineImage.all(self)
> +      machine_images = MachineImageCollection.default(self)
>       respond_to do |format|
> -        format.xml { machine_images.to_xml_cimi_collection(self) }
> -        format.json { machine_images.to_json_cimi_collection(self) }
> +        format.xml { machine_images.to_xml }
> +        format.json { machine_images.to_json }
>       end
>     end
>   end
> @@ -155,10 +155,10 @@ global_collection :machines do
>   operation :index do
>     description "List all machines"
>     control do
> -      machines = Machine.all(self)
> +      machines = MachineCollection.default(self)
>       respond_to do |format|
> -        format.xml { machines.to_xml_cimi_collection(self) }
> -        format.json { machines.to_json_cimi_collection(self) }
> +        format.xml { machines.to_xml }
> +        format.json { machines.to_json }
>       end
>     end
>   end
> @@ -260,10 +260,10 @@ global_collection :volumes do
>   operation :index do
>     description "List all volumes"
>     control do
> -      volumes = Volume.all(self)
> +      volumes = VolumeCollection.default(self)
>       respond_to do |format|
> -        format.xml { volumes.to_xml_cimi_collection(self) }
> -        format.json { volumes.to_json_cimi_collection(self) }
> +        format.xml { volumes.to_xml }
> +        format.json { volumes.to_json }
>       end
>     end
>   end
> @@ -318,10 +318,10 @@ global_collection :volume_configurations do
>   operation :index do
>     description "Get list all VolumeConfigurations"
>     control do
> -      volume_configs = VolumeConfiguration.all(self)
> +      volume_configuration = VolumeConfigurationCollection.default(self)
>       respond_to do |format|
> -        format.xml { volume_configs.to_xml_cimi_collection(self) }
> -        format.json { volume_configs.to_json_cimi_collection(self) }
> +        format.xml { volume_configuration.to_xml }
> +        format.json { volume_configuration.to_json }
>       end
>     end
>   end
> @@ -344,10 +344,10 @@ global_collection :volume_images do
>   operation :index do
>     description "List all volumes images"
>     control do
> -      volume_images = VolumeImage.all(self)
> +      volume_images = VolumeImageCollection.default(self)
>       respond_to do |format|
> -        format.xml { volume_images.to_xml_cimi_collection(self) }
> -        format.json { volume_images.to_json_cimi_collection(self) }
> +        format.xml { volume_images.to_xml }
> +        format.json { volume_images.to_json }
>       end
>     end
>   end
> -- 
> 1.7.4.4
> 

------------------------------------------------------
Michal Fojtik, mfojtik@redhat.com
Deltacloud API: http://deltacloud.org