/**
  * {@inheritdoc}
  */
 public function load(ObjectManager $manager)
 {
     $instruments = [['type' => 'guitar', 'name' => 'Classic guitar', 'specification' => ['leftHanded' => false, 'headstock' => 'top-bottom', 'body' => 'hollow', 'amplification' => 'acoustic', 'strings' => 6, 'frets' => 19, 'tuning' => $this->getReference('guitar-standard')]], ['type' => 'guitar', 'name' => 'Folk guitar', 'specification' => ['leftHanded' => false, 'headstock' => 'top-bottom', 'body' => 'hollow', 'amplification' => 'acoustic', 'strings' => 6, 'frets' => 20, 'tuning' => $this->getReference('guitar-standard')]], ['type' => 'guitar', 'name' => 'Electric guitar', 'specification' => ['leftHanded' => false, 'headstock' => 'in-line', 'body' => 'solid', 'amplification' => 'electric', 'strings' => 6, 'frets' => 24, 'tuning' => $this->getReference('guitar-standard')]], ['type' => 'bass', 'name' => 'Bass 4 strings', 'specification' => ['leftHanded' => false, 'headstock' => 'in-line', 'body' => 'solid', 'amplification' => 'electric', 'strings' => 4, 'frets' => 24, 'tuning' => $this->getReference('bass-standard')]], ['type' => 'bass', 'name' => 'Bass 5 strings', 'specification' => ['leftHanded' => false, 'headstock' => 'in-line', 'body' => 'solid', 'amplification' => 'electric', 'strings' => 5, 'frets' => 24, 'tuning' => null]], ['type' => 'ukulele', 'name' => 'Soprano Ukulele', 'specification' => ['leftHanded' => false, 'headstock' => 'top-bottom', 'body' => 'hollow', 'amplification' => 'acoustic', 'strings' => 4, 'frets' => 15, 'tuning' => $this->getReference('ukulele-c-tuning')]]];
     foreach ($instruments as $instrument) {
         /** @var \InstrumentBundle\Entity\InstrumentType $type */
         $type = $this->getReference($instrument['type']);
         if ($type) {
             $entity = new Instrument();
             $entity->setName($instrument['name']);
             $entity->setInstrumentType($type);
             $specificationClass = $type->getClass();
             /** @var \InstrumentBundle\Entity\Specification\AbstractSpecification $specification */
             $specification = new $specificationClass();
             // Set template properties
             if (!empty($instrument['specification'])) {
                 foreach ($instrument['specification'] as $propertyName => $propertyValue) {
                     $setter = 'set' . ucwords($propertyName);
                     if (method_exists($specification, $setter)) {
                         $specification->{$setter}($propertyValue);
                     }
                 }
             }
             $entity->setSpecification($specification);
             $manager->persist($entity);
             $manager->persist($specification);
         }
     }
     $manager->flush();
 }
 /**
  * PostLoad
  * Loads the linked Specification too when an Instrument is loaded from the DB.
  *
  * @param Instrument         $instrument
  * @param LifecycleEventArgs $event
  */
 public function postLoad(Instrument $instrument, LifecycleEventArgs $event)
 {
     $type = $instrument->getInstrumentType();
     if (!empty($type)) {
         $repository = $event->getEntityManager()->getRepository($type->getClass());
         /** @var \InstrumentBundle\Entity\Specification\AbstractSpecification $specification */
         $specification = $repository->findOneBy(array('instrument' => $instrument));
         if (!empty($specification)) {
             $instrument->setSpecification($specification);
         }
     }
 }