private function injectBoundary(Container $container, $yStart = 0)
 {
     $parent = $container->getParent();
     $point = $parent->getFirstPoint();
     $boundary = new Boundary();
     $boundary->setNext($point->translate(0, $yStart))->setNext($point->translate($container->getWidth(), $yStart))->setNext($point->translate($container->getWidth(), $yStart + $container->getHeight()))->setNext($point->translate(0, $yStart + $container->getHeight()))->close();
     $this->invokeMethod($container, 'setBoundary', array($boundary));
 }
 private function translateProductOfBroke(Container $productOfBroke, Container $originalContainer)
 {
     $columnableContainer = $originalContainer->getParent();
     $numberOfContainers = count($columnableContainer->getChildren());
     $numberOfColumns = $columnableContainer->getAttribute('number-of-columns');
     $isInTheSameRowAsOriginalContainer = $numberOfContainers % $numberOfColumns != 1;
     if ($isInTheSameRowAsOriginalContainer) {
         $xCoordTranslate = $originalContainer->getWidth() + $columnableContainer->getAttribute('margin-between-columns');
         $firstPoint = $originalContainer->getFirstPoint()->translate($xCoordTranslate, 0);
     } else {
         $xCoordTranslate = $numberOfColumns * $originalContainer->getWidth() + ($numberOfColumns - 1) * $columnableContainer->getAttribute('margin-between-columns');
         $firstPoint = $originalContainer->getDiagonalPoint()->translate(-$xCoordTranslate, 0);
     }
     $xCoordTranslate = $firstPoint->getX() - $productOfBroke->getFirstPoint()->getX();
     $yCoordTranslate = $productOfBroke->getFirstPoint()->getY() - $firstPoint->getY();
     $productOfBroke->translate($xCoordTranslate, $yCoordTranslate);
 }