Class: CaTissue::StorageContainer
- Inherits:
-
Object
- Object
- CaTissue::StorageContainer
- Includes:
- StorageTypeHolder
- Defined in:
- lib/catissue/domain/storage_container.rb
Overview
The caTissue
StorageContainer
domain class wrapper.
Instance Method Summary collapse
-
#add(storable, *coordinate) ⇒ StorageContainer
(also: #<<)
Adds the given storable to this container.
-
#all_occupied_positions ⇒ Object
Corrects the
caTissue
occupied_positions
method to includespecimen_positions
. -
#can_hold_child?(storable) ⇒ Boolean
Overrides Container#can_hold_child? to detect account for the potential instance-specific CaTissue::StorageTypeHolder#child_types override allowed by caTissue.
-
#create_subcontainer(name, type) ⇒ Container
A new container with the given name and type, located in this container.
-
#find_subcontainer(name, type) ⇒ Object
Finds the container with the given name, or creates a new container of the given type if necessary.
-
#initialize ⇒ StorageContainer
constructor
A new instance of StorageContainer.
-
#specimen_positions ⇒ Java::JavaUtil::Set
Initialize specimen_positions if necessary.
-
#storage_type=(type) ⇒ Object
Copies the given container type child types to this container instance child types.
Methods included from StorageTypeHolder
#add_child_type, #child_container_types, #child_specimen_array_types, #child_specimen_classes, #child_storage_types, #child_types
Constructor Details
#initialize ⇒ StorageContainer
Returns a new instance of StorageContainer.
49 50 51 52 53 54 55 |
# File 'lib/catissue/domain/storage_container.rb', line 49 def initialize super # @quirk JRuby specimen_positions is not recognized until respond_to? is called respond_to?(:specimen_positions) # work around caTissue Bug #64 self.specimen_positions ||= Java::JavaUtil::LinkedHashSet.new end |
Instance Method Details
#add(storable, *coordinate) ⇒ StorageContainer Also known as: <<
Adds the given storable to this container. If the storable has a current position, then the storable is moved from that position to this container. The new position is given by the given coordinate, if given to this method.
The default coordinate is the first available slot within this Container. If this container cannot hold the storable type, then the storable is added to a subcontainer which can hold the storable type.
83 84 85 86 87 |
# File 'lib/catissue/domain/storage_container.rb', line 83 def add(storable, *coordinate) return add_local(storable, *coordinate) unless coordinate.empty? add_to_existing_container(storable) or add_to_new_subcontainer(storable) or out_of_bounds(storable) self end |
#all_occupied_positions ⇒ Object
Corrects the caTissue
occupied_positions
method to include specimen_positions
.
58 59 60 |
# File 'lib/catissue/domain/storage_container.rb', line 58 def all_occupied_positions subcontainer_positions.union(specimen_positions) end |
#can_hold_child?(storable) ⇒ Boolean
Overrides Container#can_hold_child? to detect account for the potential instance-specific CaTissue::StorageTypeHolder#child_types override allowed by caTissue.
125 126 127 128 |
# File 'lib/catissue/domain/storage_container.rb', line 125 def can_hold_child?(storable) st = storable.storable_type not full? and child_types.any? { |ct| Jinx::Resource.value_equal?(ct, st) } end |
#create_subcontainer(name, type) ⇒ Container
Returns a new container with the given name and type, located in this container.
110 111 112 113 114 115 116 117 |
# File 'lib/catissue/domain/storage_container.rb', line 110 def create_subcontainer(name, type) logger.debug { "Creating #{qp} subcontainer of type #{type} with name #{name}..." } ctr = type.new_container(:name => name, :site => site) self << ctr ctr.create logger.debug { "Made #{self} subcontainer #{ctr}." } ctr end |
#find_subcontainer(name, type) ⇒ Object
Finds the container with the given name, or creates a new container of the given type if necessary.
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/catissue/domain/storage_container.rb', line 97 def find_subcontainer(name, type) logger.debug { "Finding box with name #{name}..." } ctr = CaTissue::StorageContainer.new(:name => name) if ctr.find then logger.debug { "Container found: #{ctr}." } else logger.debug { "Container not found: #{name}." } create_subcontainer(name, type) end box end |
#specimen_positions ⇒ Java::JavaUtil::Set
Initialize specimen_positions if necessary.
15 16 17 |
# File 'lib/catissue/domain/storage_container.rb', line 15 def specimen_positions getSpecimenPositionCollection or (self.specimen_positions = Java::JavaUtil::LinkedHashSet.new) end |
#storage_type=(type) ⇒ Object
Copies the given container type child types to this container instance child types.
26 27 28 29 30 |
# File 'lib/catissue/domain/storage_container.rb', line 26 def storage_type=(type) setStorageType(type) copy_child_types(type) if type type end |