/**
  * Add ship groups to the request. For each address in the order, dispatch
  * an event for handling ship group destinations. For each ship group
  * destination added, trigger additional events for each item in the ship
  * group.
  *
  * @param Mage_Sales_Model_Order
  * @param IOrderCreateRequest
  * @return self
  */
 protected function _setShipGroups(Mage_Sales_Model_Order $order, IOrderCreateRequest $request)
 {
     $shipGroups = $request->getShipGroups();
     $orderItems = $request->getOrderItems();
     $destinations = $request->getDestinations();
     $itemCollection = $order->getItemsCollection();
     foreach ($order->getAddressesCollection() as $address) {
         $items = $this->_getItemsForAddress($address, $itemCollection);
         if ($items) {
             $shipGroups->offsetSet($this->_buildShipGroupForAddress($address, $items, $order, $shipGroups, $destinations, $orderItems));
         }
     }
     return $this;
 }
 /**
  * Validate the relationship references within an order create request
  * only reference known order items in the request.
  *
  * @param IOrderCreateRequest
  * @return self
  */
 protected function validateItemRelationshipReferences(IOrderCreateRequest $payload)
 {
     $relationships = $payload->getItemRelationships();
     $orderItems = $payload->getOrderItems();
     foreach ($relationships as $relationship) {
         $parentItem = $relationship->getParentItem();
         $this->validateOptionalPayloadReference($relationship, 'parent item', $orderItems, $parentItem)->validateOrderItemReferences($relationship, $orderItems);
     }
     return $this;
 }