public function setSoftwareElement($software, $valor, $computador, $classObject)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     if (empty($software)) {
         $logger->error("COLETA: Erro na coleta de software. Elemento nulo {$software}");
         return false;
     }
     try {
         // FIX: alteração para igualar os campos nome do software e descrição
         $idSoftware = $software;
         if (array_key_exists('description', $valor)) {
             $software = $valor['description'];
         }
         // Recupera classProperty para o software
         $classProperty = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClass' => $classObject, 'nmPropertyName' => $idSoftware));
         if (empty($classProperty)) {
             $classProperty = new ClassProperty();
             $classProperty->setTePropertyDescription("Software detectado: {$software}");
             $classProperty->setNmPropertyName($idSoftware);
             $classProperty->setIdClass($classObject);
             $classProperty->setAtivo(true);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($classProperty);
             $em->flush();
         }
         $ativo = $classProperty->getAtivo();
         //$logger->debug("11111111111111111111111111111111111111111: |$ativo| |$propriedade|");
         if ($ativo === false) {
             // Só vou gravar o software se a propriedade estiver ativa
             $logger->debug("COLETA: Pulando software inativo: {$software}");
             return false;
         }
         // Eduardo: 2015-08-06
         // A propriedade passa a ser um identificador para o Software
         $softwareObject = $em->getRepository('CacicCommonBundle:Software')->getByNameOrProperty($software, $classProperty->getIdClassProperty());
         if (empty($softwareObject)) {
             // Se nao existir, cria
             $logger->info("COLETA: Cadastrando software não encontrado {$software}");
             $softwareObject = new Software();
             $softwareObject->setNmSoftware($software);
             $softwareObject->setIdClassProperty($classProperty);
             // Se não der o flush aqui, as consultas de baixo não encontram o objeto
             $em->persist($softwareObject);
             $em->flush();
         }
         // Adiciona software ao computador
         $propSoftware = $em->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy(array('classProperty' => $classProperty, 'computador' => $computador, 'software' => $softwareObject));
         if (empty($propSoftware)) {
             $propSoftware = new PropriedadeSoftware();
             $propSoftware->setComputador($computador);
             $propSoftware->setSoftware($softwareObject);
             $propSoftware->setClassProperty($classProperty);
         }
         // Garante que o software deve estar ativo
         $propSoftware->setAtivo(true);
         $propSoftware->setDataExclusao(null);
         // Encontra coleta já feita para o Computador
         $computadorColeta = $em->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $classProperty));
         if (empty($computadorColeta)) {
             //$logger->debug("COLETA: Registrando nova coleta para o software $software no computador ".$computador->getIdComputador());
             // Armazena no banco o objeto
             $computadorColeta = new ComputadorColeta();
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Gravo um histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         } elseif ($computadorColeta->getTeClassPropertyValue() != $software) {
             // Armazena no banco o objeto
             $computadorColeta->setComputador($computador);
             $computadorColeta->setClassProperty($classProperty);
             $computadorColeta->setTeClassPropertyValue($software);
             $computadorColeta->setIdClass($classObject);
             $computadorColeta->setDtHrInclusao(new \DateTime());
             $computadorColeta->setAtivo(true);
             $computadorColeta->setDtHrExclusao(null);
             $em->persist($computadorColeta);
             // Pega novo computador gerado no computador coleta
             $computador = $computadorColeta->getComputador();
             // Aqui é necessário uma entrada no histórico
             $computadorColetaHistorico = new ComputadorColetaHistorico();
             $computadorColetaHistorico->setComputadorColeta($computadorColeta);
             $computadorColetaHistorico->setComputador($computador);
             $computadorColetaHistorico->setClassProperty($classProperty);
             $computadorColetaHistorico->setTeClassPropertyValue($software);
             $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
             $em->persist($computadorColetaHistorico);
         }
         // Atualiza valores do Software
         // $softwareObject->setNmSoftware($software);
         if (array_key_exists('description', $valor)) {
             $softwareObject->setTeDescricaoSoftware($valor['description']);
             $propSoftware->setDisplayName($valor['description']);
             $classProperty->setPrettyName($valor['description']);
         }
         /*
         if (array_key_exists('name', $valor)) {
             $classProperty->setNmPropertyName($valor['name']);
         }
         */
         if (array_key_exists('url', $valor)) {
             $propSoftware->setUrlInfoAbout($valor['url']);
         }
         if (array_key_exists('version', $valor)) {
             $propSoftware->setDisplayVersion($valor['version']);
         }
         if (array_key_exists('publisher', $valor)) {
             $propSoftware->setPublisher($valor['publisher']);
         }
         // Persiste os objetos
         $em->persist($propSoftware);
         // Tem que adicionar isso aqui ou o Doctrine vai duplicar o software
         $em->flush();
     } catch (ORMException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro na inserçao de dados do software {$software}.");
         $logger->debug($e);
         return false;
     } catch (DBALException $e) {
         // Reopen Entity Manager
         if (!$em->isOpen()) {
             // reset the EM and all alias
             $container = $this->container;
             $container->set('doctrine.orm.entity_manager', null);
             $container->set('doctrine.orm.default_entity_manager', null);
         }
         $logger->error("COLETA: Erro impossível de software repetido para {$software}.");
         $logger->debug($e);
         return false;
     }
     return true;
 }
 public function cadastrarAction(Request $request, $idComputador)
 {
     $logger = $this->get('logger');
     $em = $this->getDoctrine()->getManager();
     // Cria array com dados anteriores de patrimonio
     $patrimonio_list = $em->getRepository('CacicCommonBundle:ComputadorColeta')->patrimonioComputador($idComputador);
     $patrimonio = array('ComputerName' => $patrimonio_list[0]['nmComputador']);
     foreach ($patrimonio_list as $elm) {
         $patrimonio[$elm['nmPropertyName']] = $elm['teClassPropertyValue'];
     }
     // Acha computador
     $computador = $em->getRepository('CacicCommonBundle:Computador')->find($idComputador);
     if (empty($patrimonio['IPComputer'])) {
         $patrimonio['IPComputer'] = $computador->getTeIpComputador();
     }
     if (empty($patrimonio['ComputerName'])) {
         $patrimonio['ComputerName'] = $computador->getNmComputador();
     }
     $form = $this->createForm(new PatrimonioType(), $patrimonio);
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             $data = $form->getData();
             $classe = $em->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => 'Patrimonio'));
             $idClass = $classe->getIdClass();
             foreach ($data as $classPropertyName => $classProperty) {
                 // Processa um campo do formulário de cada vez
                 $classPropertyObject = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('nmPropertyName' => $classPropertyName));
                 if (empty($classPropertyObject)) {
                     // Cria a propriedade se não existe
                     $classPropertyObject = new ClassProperty();
                     $classPropertyObject->setIdClass($classe);
                     $classPropertyObject->setNmPropertyName($classPropertyName);
                     $classPropertyObject->setTePropertyDescription('On the fly created Property');
                     $em->persist($classPropertyObject);
                 }
                 $computadorColeta = $em->getRepository('CacicCommonBundle:ComputadorColeta')->findOneBy(array('computador' => $computador, 'classProperty' => $classPropertyObject->getIdClassProperty()));
                 //$idClass = $classPropertyObject->getIdClass()->getIdClass();
                 if (empty($computadorColeta)) {
                     // Se não existir nenhuma ocorrência para esse atributo, apenas adiciono
                     //error_log("3333333333333333333333333333333333333333333: Criando objeto");
                     $computadorColeta = new ComputadorColeta();
                     $computadorColeta->setComputador($computador);
                     // Armazena no banco o objeto
                     $computadorColeta->setClassProperty($classPropertyObject);
                     $computadorColeta->setTeClassPropertyValue($classProperty);
                     $computadorColeta->setDtHrInclusao(new \DateTime());
                     // Mando salvar os dados do computador
                     $em->persist($computadorColeta);
                     // Persistencia de Historico
                     $computadorColetaHistorico = new ComputadorColetaHistorico();
                     $computadorColetaHistorico->setComputadorColeta($computadorColeta);
                     $computadorColetaHistorico->setComputador($computador);
                     $computadorColetaHistorico->setClassProperty($classPropertyObject);
                     $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
                     $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
                     $em->persist($computadorColetaHistorico);
                 } else {
                     //error_log("444444444444444444444444444444444444444444444444: Criando histórico");
                     // Caso exista, registro um histórico e atualiza o valor atual
                     $coletaOld = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
                     $computadorColeta->setComputador($computador);
                     // Pega o objeto para gravar
                     $classPropertyObject = $em->getRepository('CacicCommonBundle:ClassProperty')->findOneBy(array('idClassProperty' => $classPropertyObject->getIdClassProperty()));
                     // Armazena no banco o objeto
                     $computadorColeta->setClassProperty($classPropertyObject);
                     $computadorColeta->setTeClassPropertyValue($classProperty);
                     $computadorColeta->setDtHrInclusao(new \DateTime());
                     // Mando salvar os dados do computador
                     $em->persist($computadorColeta);
                     // Persistencia de Historico
                     $computadorColetaHistorico = new ComputadorColetaHistorico();
                     $computadorColetaHistorico->setComputadorColeta($computadorColeta);
                     $computadorColetaHistorico->setComputador($computador);
                     $computadorColetaHistorico->setClassProperty($classPropertyObject);
                     $computadorColetaHistorico->setTeClassPropertyValue($classProperty);
                     $computadorColetaHistorico->setDtHrInclusao(new \DateTime());
                     $em->persist($computadorColetaHistorico);
                     // Commit
                     $this->getDoctrine()->getManager()->flush();
                     // Notifica alteração
                     $coletaNew = "Classe WMI: " . $computadorColeta->getClassProperty()->getIdClass()->getNmClassName() . " | " . "Propriedade: " . $computadorColeta->getClassProperty()->getNmPropertyName() . " | Valor: " . $computadorColeta->getTeClassPropertyValue();
                     //$this->notificaAlteracao($coletaOld, $coletaNew, $computador);
                 }
             }
             // Commit
             $em->flush();
             $this->get('session')->getFlashBag()->add('success', 'Dados salvos com sucesso!');
         }
     }
     return $this->render('CacicCommonBundle:PatrimonioConfigInterface:cadastrar.html.twig', array('form' => $form->createView(), 'idComputador' => $idComputador));
 }
    public function load(ObjectManager $manager)
    {
        /*************************
         * Classe ComputerSystem
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Short description of the object—a one-line string. This property is inherited from CIM_ManagedSystemElement.');
        // Referência à classe
        $property->setIdClass($this->getReference('ComputerSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Domain');
        $property->setTePropertyDescription('Name of the domain to which a computer belongs.');
        // Referência à classe
        $property->setIdClass($this->getReference('ComputerSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('TotalPhysicalMemory');
        $property->setTePropertyDescription('Total size of physical memory. Be aware that, under some circumstances, this property may not return an accurate value for the physical memory. For example, it is not accurate if the BIOS is using some of the physical memory. For an accurate value, use the Capacity property in Win32_PhysicalMemory instead.');
        // Referência à classe
        $property->setIdClass($this->getReference('ComputerSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('UserName');
        $property->setTePropertyDescription('Name of a user that is logged on currently. This property must have a value. In a terminal services session, UserName returns the name of the user that is logged on to the console—not the user logged on during the terminal service session.');
        // Referência à classe
        $property->setIdClass($this->getReference('ComputerSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Grava todos os dados da classe
        $manager->flush();
        /*************************
         * Classe Win32_NetworkAdapterConfiguration
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DefaultIPGateway');
        $property->setTePropertyDescription('Array of IP addresses of default gateways that the computer system uses.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Description');
        $property->setTePropertyDescription('Description of the CIM_Setting object. This property is inherited from CIM_Setting.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DHCPServer');
        $property->setTePropertyDescription('IP address of the dynamic host configuration protocol (DHCP) server.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DNSDomain');
        $property->setTePropertyDescription('Organization name followed by a period and an extension that indicates the type of organization, such as microsoft.com. The name can be any combination of the letters A through Z, the numerals 0 through 9, and the hyphen (-), plus the period (.) character used as a separator.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DNSHostName');
        $property->setTePropertyDescription('Host name used to identify the local computer for authentication by some utilities. Other TCP/IP-based utilities can use this value to acquire the name of the local computer. Host names are stored on DNS servers in a table that maps names to IP addresses for use by DNS. The name can be any combination of the letters A through Z, the numerals 0 through 9, and the hyphen (-), plus the period (.) character used as a separator. By default, this value is the Microsoft networking computer name, but the network administrator can assign another host name without affecting the computer name.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DNSServerSearchOrder');
        $property->setTePropertyDescription('Array of server IP addresses to be used in querying for DNS servers.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('IPAddress');
        $property->setTePropertyDescription('Array of all of the IP addresses associated with the current network adapter. Starting with Windows Vista, this property can contain either IPv6 addresses or IPv4 addresses. For more information, see IPv6 and IPv4 Support in WMI.
Example IPv6 address: "2010:836B:4179::836B:4179"');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('IPSubnet');
        $property->setTePropertyDescription('Array of all of the subnet masks associated with the current network adapter.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('MACAddress');
        $property->setTePropertyDescription('Media Access Control (MAC) address of the network adapter. A MAC address is assigned by the manufacturer to uniquely identify the network adapter.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('WINSPrimaryServer');
        $property->setTePropertyDescription('IP address for the primary WINS server.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('WINSSecondaryServer');
        $property->setTePropertyDescription('IP address for the secondary WINS server.');
        // Referência à classe
        $property->setIdClass($this->getReference('Network'));
        // Grava o objeto
        $manager->persist($property);
        // Grava todos os dados da classe
        $manager->flush();
        /*************************
         * Classe Win32_OperatingSystem
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Short description of the object—a one-line string. The string includes the operating system version. For example, "Microsoft Windows XP Professional Version = 5.1.2500". This property can be localized.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('CSDVersion');
        $property->setTePropertyDescription('NULL-terminated string that indicates the latest service pack installed on a computer. If no service pack is installed, the string is NULL.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('InstallDate');
        $property->setTePropertyDescription('Date object was installed. This property does not require a value to indicate that the object is installed.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('LastBootUpTime');
        $property->setTePropertyDescription('Date and time the operating system was last restarted.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('NumberOfLicensedUsers');
        $property->setTePropertyDescription('Number of user licenses for the operating system. If unlimited, enter 0 (zero). If unknown, enter -1.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('OSArchitecture');
        $property->setTePropertyDescription('Architecture of the operating system, as opposed to the processor. This property can be localized.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('OSLanguage');
        $property->setTePropertyDescription('Language version of the operating system installed.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('ProductType');
        $property->setTePropertyDescription('Additional system information.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('SerialNumber');
        $property->setTePropertyDescription('Operating system product serial identification number.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Version');
        $property->setTePropertyDescription('Version number of the operating system.');
        // Referência à classe
        $property->setIdClass($this->getReference('OperatingSystem'));
        // Grava o objeto
        $manager->persist($property);
        // Commit
        $manager->flush();
        /*************************
         * Software List
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('IDSoftware');
        $property->setTePropertyDescription('Identificador do software no registro.');
        // Referência à classe
        $property->setIdClass($this->getReference('Software'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DisplayName');
        $property->setTePropertyDescription('Nome do software.');
        // Referência à classe
        $property->setIdClass($this->getReference('Software'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('DisplayVersion');
        $property->setTePropertyDescription('Versão identificada.');
        // Referência à classe
        $property->setIdClass($this->getReference('Software'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('URLInfoAbout');
        $property->setTePropertyDescription('URL do software.');
        // Referência à classe
        $property->setIdClass($this->getReference('Software'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Publisher');
        $property->setTePropertyDescription('Nome do fabricante.');
        // Referência à classe
        $property->setIdClass($this->getReference('Software'));
        // Grava o objeto
        $manager->persist($property);
        /*************************
         * Hardware Classes
         *
         * A classe precisa ter pelo menos uma propriedade pré cadastrada
         *
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome do teclado');
        // Referência à classe
        $property->setIdClass($this->getReference('Keyboard'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('PointingDevice'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('PhysicalMedia'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('BaseBoard'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('BIOS'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('MemoryDevice'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('PhysicalMemory'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('Processor'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('Printer'));
        // Grava o objeto
        $manager->persist($property);
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('Caption');
        $property->setTePropertyDescription('Nome');
        // Referência à classe
        $property->setIdClass($this->getReference('DesktopMonitor'));
        // Grava o objeto
        $manager->persist($property);
        /*************************
         * Patrimonio Classes
         *
         * A classe precisa ter pelo menos uma propriedade pré cadastrada
         *
         *************************/
        // Atributo
        $property = new ClassProperty();
        $property->setNmPropertyName('IDPatrimonio');
        $property->setTePropertyDescription('Número do patrimônio');
        // Referência à classe
        $property->setIdClass($this->getReference('Patrimonio'));
        // Grava o objeto
        $manager->persist($property);
        // Commit
        $manager->flush();
    }
Example #4
0
 /**
  * Processa informações de coleta
  *
  * @param $strNewClassValues
  * @param $arrCollectsDefClasses
  * @param $strCollectType
  * @param $strClassName
  * @param $computador
  */
 public function coletaGeral($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador)
 {
     $logger = $this->get('logger');
     $logger->debug("Processando classe WMI: {$strClassName}");
     // Armazeno todas as propriedades dessa classe enviadas pela requisição
     $arrTagsNames = TagValueHelper::getTagsFromValues($strNewClassValues);
     // Agora gravo todas as propriedades dessa classe na tabela de computadores
     foreach ($arrTagsNames as $classPropertyName) {
         $logger->debug("Processando a proriedade WMI {$classPropertyName} para a classe {$strClassName}");
         // Pega classe
         $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy(array('nmClassName' => $strClassName));
         // Caso a propriedade ainda não esteja cadastrada no banco, crio na hora
         if (array_key_exists($classPropertyName, $arrCollectsDefClasses[$strCollectType][$strClassName])) {
             // Somente armazeno o valor que já existe
             $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName]['idClassProperty'];
             $logger->debug("Propriedade encontrada: {$classPropertyName} id_class_property = {$idClassProperty}. Apenas atualizar");
         } else {
             // Se não existir cria a propriedade
             $logger->info("Criando propriedade {$classPropertyName} para a classe {$strClassName}");
             $classPropertyObject = new ClassProperty();
             $classPropertyObject->setIdClass($idClass);
             $classPropertyObject->setNmPropertyName($classPropertyName);
             $classPropertyObject->setTePropertyDescription('On the fly created Property');
             $this->getDoctrine()->getManager()->persist($classPropertyObject);
             $this->getDoctrine()->getManager()->flush();
             // Finalmente adiciono no array de classes e propriedades
             $idClassProperty = $classPropertyObject->getIdClassProperty();
             $property = array('idClassProperty' => $idClassProperty, 'nmFunctionPreDb' => null);
             $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName] = $property;
         }
         //error_log("888888888888888888888888888888888888888888888: $strClassName | $idClassProperty | $classPropertyName");
         // Chama função que grava a propriedade
         $this->gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador);
     }
 }