Example usage for java.lang Long equals

List of usage examples for java.lang Long equals

Introduction

In this page you can find the example usage for java.lang Long equals.

Prototype

public boolean equals(Object obj) 

Source Link

Document

Compares this object to the specified object.

Usage

From source file:com.square.core.service.implementations.PersonneServiceImplementation.java

@Override
public CoordonneesDto creerOuMettreAJourCoordonnees(CoordonneesDto coordonnees, Boolean impacterFamille,
        Boolean forcerDesactivationEservices) {
    final RapportDto rapportCoordonnees = new RapportDto();

    if (coordonnees == null) {
        throw new BusinessException(
                messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_PERSONNE_DTO_NULL));
    }// ww  w.  j  ava  2s  .  c  om

    if (coordonnees.getIdPersonne() == null) {
        throw new BusinessException(
                messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_PERSONNE_NULL));
    }

    final Long idNatureMobilePrive = squareMappingService.getIdNatureMobilePrive();
    final Long idNatureMobileTravail = squareMappingService.getIdNatureMobileTravail();

    // Controles gnriques (Au moins 1 moyen de communication)
    boolean unEmailTrouve = false;
    boolean unTelephoneTrouve = false;
    if (coordonnees.getEmails() != null) {
        for (EmailDto email : coordonnees.getEmails()) {
            if (email.getAdresse() != null && !"".equals(email.getAdresse().trim())) {
                unEmailTrouve = true;
                break;
            }
        }
    }
    if (coordonnees.getTelephones() != null) {
        for (TelephoneDto telephone : coordonnees.getTelephones()) {
            if (telephone != null && telephone.getNumero() != null
                    && !"".equals(telephone.getNumero().trim())) {
                unTelephoneTrouve = true;
                break;
            }
        }
    }

    // Rcupration de la personne en base.
    final Personne personnePrincipale = personneDao.rechercherPersonneParId(coordonnees.getIdPersonne());
    if (personnePrincipale == null) {
        throw new BusinessException(
                messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_PERSONNE_INEXISTANTE));
    }
    final boolean isAdherent = personnePrincipale instanceof PersonnePhysique
            && ((PersonnePhysique) personnePrincipale).getNature().getId()
                    .equals(squareMappingService.getIdNaturePersonneAdherent());

    // Rcupration de la nature de la personne si personne physique
    Long idNaturePersonnePrincipale = null;
    final PersonnePhysique personnePrincipalePhysique = personnePhysiqueDao
            .rechercherPersonneParId(personnePrincipale.getId());
    if (personnePrincipalePhysique != null && personnePrincipalePhysique.getNature() != null) {
        idNaturePersonnePrincipale = personnePrincipalePhysique.getNature().getId();
    }
    final Long idNaturePersonneVivier = squareMappingService.getIdNaturePersonneVivier();
    final Long idNaturePersonneBeneficiaireVivier = squareMappingService
            .getIdNaturePersonneBeneficiaireVivier();

    // validationExpressionUtil
    // .verifierSiVrai(rapport, null, PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_COORDONNEE_OBLIGATOIRE, testUnMoyenDeCommMin,
    // CoordonneesDto.class.getSimpleName() + ".telephones")
    // .verifierSiVrai(rapport, null, PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_COORDONNEE_OBLIGATOIRE, testUnMoyenDeCommMin,
    // CoordonneesDto.class.getSimpleName() + ".emails");
    // FIXME Pour le moment, on leve une exception car non pris en charge pour l'affichage de l'interface
    if (!unEmailTrouve && !unTelephoneTrouve && !idNaturePersonneVivier.equals(idNaturePersonnePrincipale)
            && !idNaturePersonneBeneficiaireVivier.equals(idNaturePersonnePrincipale)) {
        throw new BusinessException(
                messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_COORDONNEE_OBLIGATOIRE));
    }

    final Set<Personne> personnes = new LinkedHashSet<Personne>();
    // On recherche les membres de la famille de la personne
    final Set<Personne> famille = getFamille(personnePrincipale);
    // Si le flag qui indique si l'on doit ajouter la nouvelle adresse aux bnficiaires n'est pas spcifi
    // Si la personne a une famille, on lve une exception car le flag impacterBeneficiaires doit tre renseign
    // pour dterminer si il faut ajouter l'adresse aux membres de la famille de la personne
    if (impacterFamille == null && famille.size() > 0) {
        throw new ConfirmationImpacterFamilleException(
                messageSourceUtil.get(PersonnePhysiqueKeyUtil.CONFIRMATION_IMPACTER_FAMILLE,
                        new String[] { String.valueOf(famille.size()) }));
    }
    personnes.add(personnePrincipale);
    if (BooleanUtils.isTrue(impacterFamille)) {
        // On ajoute les membres de la famille  la liste des personnes concernes par la cration de nouvelles coordonnes
        personnes.addAll(famille);
    }
    final Calendar maintenant = Calendar.getInstance();

    boolean desactiverEserviceTelephone = false;
    boolean desactiverEserviceEmail = false;

    // Traitement des tlphones
    int nbTelephonesMobile = 0;
    if (coordonnees.getTelephones() != null && !coordonnees.getTelephones().isEmpty()) {
        for (int i = 0; i < coordonnees.getTelephones().size(); i++) {
            final TelephoneDto telephoneDto = coordonnees.getTelephones().get(i);
            final boolean numeroRenseigne = StringUtils.isNotBlank(telephoneDto.getNumero());
            if (telephoneDto.getNature() != null
                    && (telephoneDto.getNature().getIdentifiant().equals(idNatureMobilePrive)
                            || telephoneDto.getNature().getIdentifiant().equals(idNatureMobileTravail))
                    && numeroRenseigne) {
                nbTelephonesMobile++;
            }
            boolean isTelephoneModifie = false;
            if (telephoneDto.getId() != null) {
                // On rcupre le tlphone  mettre  jour  partir de la base de donnes
                final Telephone telephoneAMaj = telephoneDao.rechercherTelephoneParId(telephoneDto.getId());
                // Si on recoit un id ici, mais que le numro n'est pas renseign, il faut supprimer le tlphone correspondant
                // Note : on ne supprime pas tous les tlphones car d'autres peuvent exister mais ne pas tre affichs dans Square
                if (!numeroRenseigne) {
                    // Si il faut impacter toute la famille, ou que le tlphone est li  la personne principale uniquement
                    if (BooleanUtils.isTrue(impacterFamille) || telephoneAMaj.getPersonnes().size() == 1) {
                        // On supprime le tlphone
                        supprimerTelephone(telephoneAMaj, maintenant);
                    } else {
                        // On enlve le tlphone de la liste des tlphones de la personne principale
                        personnePrincipale.removeTelephone(telephoneAMaj);
                        // on verifie si la personne est le porteur
                        if (telephoneAMaj.getPorteurUid() != null
                                && telephoneAMaj.getPorteurUid().equals(personnePrincipale.getId())) {
                            // on supprime l'identifiant externe et le porteur du telephone restant sur la famille
                            telephoneAMaj.setIdentifiantExterieur(null);
                            telephoneAMaj.setPorteurUid(null);
                        }
                    }
                    continue;
                } else {
                    // Sinon on dtermine si le tlphone a t modifi
                    isTelephoneModifie = isTelephoneModifie(telephoneAMaj, telephoneDto);
                    // Si le tlphone existe et a t modifi, et qu'il ne faut pas impacter la famille
                    if (BooleanUtils.isFalse(impacterFamille) && isTelephoneModifie
                            && telephoneAMaj.getPersonnes().size() > 1) {
                        // on supprime le telephone de la personne
                        personnePrincipale.removeTelephone(telephoneAMaj);
                        // on supprime l'identifiant pour crer un nouveau telephone
                        telephoneDto.setId(null);
                        // on verifie si la personne est le porteur
                        if (telephoneAMaj.getPorteurUid() != null
                                && telephoneAMaj.getPorteurUid().equals(personnePrincipale.getId())) {
                            // on supprime l'identifiant externe et le porteur du telephone restant sur la famille (pas de synchro aia)
                            telephoneAMaj.setIdentifiantExterieur(null);
                            telephoneAMaj.setPorteurUid(null);
                        } else {
                            // On supprime l'identifiant externe afin de ne pas synchroniser avec aia
                            telephoneDto.setIdext(null);
                        }
                    }
                }
            }
            if (numeroRenseigne) {
                final RapportDto rapportTelephone = new RapportDto();
                controlerTelephone(rapportTelephone, telephoneDto, i);
                if (rapportTelephone.getRapports() != null && !rapportTelephone.getRapports().isEmpty()) {
                    for (String key : rapportTelephone.getRapports().keySet()) {
                        final SousRapportDto sousRapport = rapportTelephone.getRapports().get(key);
                        rapportCoordonnees.ajoutRapport(sousRapport.getAttribut(), sousRapport.getMessage(),
                                sousRapport.getErreur());
                    }
                }
                if (!rapportTelephone.getEnErreur()) {
                    final Telephone telephone = creerOuMettreAJourTelephone(personnes, telephoneDto,
                            impacterFamille);
                    if (telephone.getId() == null) {
                        // On rattache le tlphone  la personne principale
                        personnePrincipale.addTelephone(telephone);
                        if (BooleanUtils.isTrue(impacterFamille)) {
                            // On rattache aussi le tlphone aux membres de sa famille
                            for (Personne personne : famille) {
                                // bug 8832 : on impacte que ceux qui n'ont pas deja de telephones
                                if (personne.getTelephones().size() == 0) {
                                    personne.addTelephone(telephone);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    // on desactive l'envoi par telephone
    if (nbTelephonesMobile == 0 && isAdherent) {
        // on verifie si la personne possede l'eservice
        final List<Long> optionsSouscrites = adherentService
                .getListeIdsTypesOptionsSouscrites(personnePrincipale.getId());
        boolean possedeEserviceTelephone = false;
        for (Long idTypeOption : optionsSouscrites) {
            if (idTypeOption.equals(adherentMappingService.getIdTypeOptionEnvoiSms())) {
                possedeEserviceTelephone = true;
                break;
            }
        }
        desactiverEserviceTelephone = possedeEserviceTelephone;
    }

    // Traitement des emails
    if (coordonnees.getEmails() != null && !coordonnees.getEmails().isEmpty()) {
        for (int i = 0; i < coordonnees.getEmails().size(); i++) {
            final EmailDto emailDto = coordonnees.getEmails().get(i);
            final boolean adresseEmailRenseignee = StringUtils.isNotBlank(emailDto.getAdresse());
            boolean isEmailModifie = false;

            // FIXME : La constante nature de l'email devrait elle etre fournie par le client ?
            emailDto.setNatureEmail(
                    new IdentifiantLibelleDto(squareMappingService.getIdNatureEmailPersonnel()));

            if (emailDto.getIdentifiant() != null) {
                // On rcupre l'email  mettre  jour  partir de la base de donnes
                final Email emailAMaj = emailDao.rechercherEmailParId(emailDto.getIdentifiant());
                // Si on recoit un id ici, mais que les infos ne sont pas renseignes, il faut supprimer le tlphone correspondant
                // Note : on ne supprime pas tous les tlphones car d'autres peuvent exister mais ne pas tre affichs dans Square
                if (!adresseEmailRenseignee) {
                    // Si il faut impacter toute la famille, ou que l'email est li  la personne principale uniquement
                    if (BooleanUtils.isTrue(impacterFamille) || emailAMaj.getPersonnes().size() == 1) {
                        // On supprime l'email
                        supprimerEmail(emailAMaj, maintenant);
                    } else {
                        // On enlve le tlphone de la liste des tlphones de la personne principale
                        personnePrincipale.removeEmail(emailAMaj);
                        // on verifie si la personne est le porteur
                        if (emailAMaj.getPorteurUid() != null
                                && emailAMaj.getPorteurUid().equals(personnePrincipale.getId())) {
                            // on supprime l'identifiant externe et le porteur de l'email restant sur la famille
                            emailAMaj.setIdentifiantExterieur(null);
                            emailAMaj.setPorteurUid(null);
                        }
                    }
                    if (isAdherent) {
                        // on verifie si la personne possede l'eservice
                        final List<Long> optionsSouscrites = adherentService
                                .getListeIdsTypesOptionsSouscrites(personnePrincipale.getId());
                        boolean possedeEserviceEmail = false;
                        for (Long idTypeOption : optionsSouscrites) {
                            if (idTypeOption
                                    .equals(adherentMappingService.getIdTypeOptionEnvoiMutuellementEmail())
                                    || idTypeOption.equals(adherentMappingService
                                            .getIdTypeOptionEnvoiRelevesPrestationEmail())) {
                                possedeEserviceEmail = true;
                                break;
                            }
                        }
                        desactiverEserviceEmail = possedeEserviceEmail;
                    }
                    continue;
                } else {
                    // Sinon on dtermine si l'email a t modifi
                    isEmailModifie = isEmailModifie(emailAMaj, emailDto);
                    // Si le tlphone existe et a t modifi, et qu'il ne faut pas impacter la famille
                    if (BooleanUtils.isFalse(impacterFamille) && isEmailModifie
                            && emailAMaj.getPersonnes().size() > 1) {
                        // on supprime l'email de la personne
                        personnePrincipale.removeEmail(emailAMaj);
                        // on supprime l'identifiant pour crer un nouvel email
                        emailDto.setIdentifiant(null);
                        // on verifie si la personne est le porteur
                        if (emailAMaj.getPorteurUid() != null
                                && emailAMaj.getPorteurUid().equals(personnePrincipale.getId())) {
                            // on supprime l'identifiant externe et le porteur de l'email restant sur la famille (pas de synchro aia)
                            emailAMaj.setIdentifiantExterieur(null);
                            emailAMaj.setPorteurUid(null);
                        } else {
                            // On supprime l'identifiant externe afin de ne pas synchroniser avec aia
                            emailDto.setIdext(null);
                        }
                    }
                }
            }
            if (adresseEmailRenseignee) {
                final RapportDto rapportEmail = new RapportDto();
                controlerEmail(rapportEmail, emailDto, i);
                if (rapportEmail.getRapports() != null && !rapportEmail.getRapports().isEmpty()) {
                    for (String key : rapportEmail.getRapports().keySet()) {
                        final SousRapportDto sousRapport = rapportEmail.getRapports().get(key);
                        rapportCoordonnees.ajoutRapport(sousRapport.getAttribut(), sousRapport.getMessage(),
                                sousRapport.getErreur());
                    }
                }
                if (!rapportEmail.getEnErreur()) {
                    final Email email = creerOuMettreAJourEmail(personnes, emailDto, impacterFamille);
                    // Si c'est un nouvel email
                    if (email.getId() == null) {
                        // On rattache le nouvel email  la personne principale
                        personnePrincipale.addEMail(email);
                        if (BooleanUtils.isTrue(impacterFamille)) {
                            // On rattache aussi le nouvel email aux membres de sa famille
                            for (Personne personne : famille) {
                                // bug 8832 : on impacte que ceux qui n'ont pas deja d'emails
                                if (personne.getEmails().size() == 0) {
                                    personne.addEMail(email);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    // on desactive les eservices suivant les besoins
    if (!BooleanUtils.isTrue(forcerDesactivationEservices)) {
        if (desactiverEserviceTelephone && desactiverEserviceEmail) {
            throw new ConfirmationDesactivationEserviceException(messageSourceUtil
                    .get(PersonneKeyUtil.MESSAGE_CONFIRMATION_DESACTIVATION_ESERVICE_TELEPHONE_ET_EMAIL));
        } else if (desactiverEserviceTelephone) {
            throw new ConfirmationDesactivationEserviceException(messageSourceUtil
                    .get(PersonneKeyUtil.MESSAGE_CONFIRMATION_DESACTIVATION_ESERVICE_TELEPHONE));
        } else if (desactiverEserviceEmail) {
            throw new ConfirmationDesactivationEserviceException(
                    messageSourceUtil.get(PersonneKeyUtil.MESSAGE_CONFIRMATION_DESACTIVATION_ESERVICE_EMAIL));
        }
    } else {
        if (desactiverEserviceTelephone) {
            adherentService.desactiverOptionsEnvoiParTelephone(personnePrincipale.getId());
        }
        if (desactiverEserviceEmail) {
            adherentService.desactiverOptionsEnvoiParEmail(personnePrincipale.getId());
        }
    }

    // Recherche de l'adresse principale en cours
    final AdresseCriteresRechercheDto criteresRechercheAdressePrincipale = new AdresseCriteresRechercheDto();
    criteresRechercheAdressePrincipale.setIdPersonne(personnePrincipale.getId());
    criteresRechercheAdressePrincipale.setIdNature(squareMappingService.getIdNatureAdressePrincipale());
    criteresRechercheAdressePrincipale.setActive(true);
    final List<Adresse> listAddressesPrin = adresseDao
            .rechercherAdresseParCritere(criteresRechercheAdressePrincipale);
    Adresse adressePrincipaleEnCours = new Adresse();
    boolean plusQueAdressePrincipale = false;
    boolean choixPasserEnSecondaire = false;
    if (listAddressesPrin != null && listAddressesPrin.size() > 0) {
        adressePrincipaleEnCours = listAddressesPrin.get(0);
    }
    Calendar dateFinAdressePrincipale = null;

    // Traitement des adresses
    if (coordonnees.getAdresses() != null && !coordonnees.getAdresses().isEmpty()) {
        final RapportDto rapportAdresses = new RapportDto();
        for (int i = 0; i < coordonnees.getAdresses().size(); i++) {
            final AdresseDto adresseDto = coordonnees.getAdresses().get(i);

            if (adresseDto.getNature() != null
                    && adresseDto.getNature().getIdentifiant()
                            .equals(squareMappingService.getIdNatureAdressePrincipale())
                    && adressePrincipaleEnCours.getId() != null
                    && !adressePrincipaleEnCours.getId().equals(adresseDto.getIdentifiant())
                    && (adresseDto.getDateFin() == null
                            || Calendar.getInstance().before(adresseDto.getDateFin()))) {

                dateFinAdressePrincipale = adresseDto.getDateDebut();
                if (!choixPasserEnSecondaire) {
                    choixPasserEnSecondaire = adresseDto.getChoixPasserEnSecondaire() == null ? false
                            : adresseDto.getChoixPasserEnSecondaire().booleanValue();
                }
                plusQueAdressePrincipale = true;
            }

            final RapportDto rapportAdresse = new RapportDto();
            controlerAdresse(rapportAdresse, adresseDto, i);
            if (rapportAdresse.getRapports() != null && !rapportAdresse.getRapports().isEmpty()) {
                for (String key : rapportAdresse.getRapports().keySet()) {
                    final SousRapportDto sousRapport = rapportAdresse.getRapports().get(key);
                    rapportCoordonnees.ajoutRapport(sousRapport.getAttribut(), sousRapport.getMessage(),
                            sousRapport.getErreur());
                }
            }
            if (!rapportAdresse.getEnErreur()) {
                if (adresseDto.getIdentifiant() != null) {
                    final Adresse adresseAMaj = adresseDao.rechercherAdresseParId(adresseDto.getIdentifiant());
                    final boolean isAdresseModifiee = isAdresseModifiee(adresseAMaj, adresseDto);
                    // Si l'adresse existe et a t modifie, et qu'il ne faut pas impacter la famille
                    if (BooleanUtils.isFalse(impacterFamille) && isAdresseModifiee
                            && adresseAMaj.getPersonnes().size() > 1) {
                        // on supprime l'adresse de la personne
                        personnePrincipale.removeAdresse(adresseAMaj);
                        // On supprime l'identifiant de l'adresse afin de crer une nouvelle adresse
                        adresseDto.setIdentifiant(null);
                        // on verifie si la personne est le porteur
                        if (adresseAMaj.getPorteurUid() != null
                                && adresseAMaj.getPorteurUid().equals(personnePrincipale.getId())) {
                            // on supprime l'identifiant externe et le porteur de l'adresse restante sur la famille (pas de synchro aia)
                            adresseAMaj.setIdentifiantExterieur(null);
                            adresseAMaj.setPorteurUid(null);
                        } else {
                            // On supprime l'identifiant externe pour ne pas synchroniser avec aia
                            adresseDto.setIdext(null);
                        }
                    }
                }
                final Adresse adresseCree = creerOuMettreAJourAdresse(personnes, adresseDto, impacterFamille);
                // on met l'id ext  jour apres la cration (probleme de flush a cause de la contrainte d'unicit)
                adresseCree.setIdentifiantExterieur(adresseDto.getIdext());
            }
        }
        final AdresseNature adresseNature = adresseNatureDao
                .rechercheAdresseNatureParId(squareMappingService.getIdNatureAdresseSecondaire());

        // si le rapport n'est pas en erreur, on met  jour l'adresse principale
        if (Boolean.FALSE.equals(rapportAdresses.getEnErreur())) {
            for (int i = 0; i < coordonnees.getAdresses().size(); i++) {
                final AdresseDto adresseDto = coordonnees.getAdresses().get(i);
                if (plusQueAdressePrincipale
                        && (adressePrincipaleEnCours.getId().equals(adresseDto.getIdentifiant()))) {
                    if (choixPasserEnSecondaire) {
                        adressePrincipaleEnCours.setNature(adresseNature);
                    } else {
                        dateFinAdressePrincipale.add(Calendar.DAY_OF_MONTH, -1);
                        adressePrincipaleEnCours.setDateFin(dateFinAdressePrincipale);
                    }
                    break;
                }
            }
        }
    }

    if (Boolean.TRUE.equals(rapportCoordonnees.getEnErreur())
            && !idNaturePersonneVivier.equals(idNaturePersonnePrincipale)
            && !idNaturePersonneBeneficiaireVivier.equals(idNaturePersonnePrincipale)) {
        RapportUtil.logRapport(rapportCoordonnees, logger);
        throw new ControleIntegriteException(rapportCoordonnees);
    }

    /*
     * // Un contact devra avoir au moins une adresse principal criteresRechercheAdressePrincipale = new AdresseCriteresRechercheDto();
     * criteresRechercheAdressePrincipale.setIdPersonne(personne.getId());
     * criteresRechercheAdressePrincipale.setIdNature(squareMappingService.getIdNatureAdressePrincipale()); long nbPrimaires =
     * adresseDao.rechercherIdAdressesParCriteres(criteresRechercheAdressePrincipale).size(); if (nbPrimaires == 0) { throw new
     * BusinessException(messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_AUCUNE_ADRESSE_PRINCIPALE)); } else if (nbPrimaires > 1) { throw new
     * BusinessException(messageSourceUtil.get(PersonnePhysiqueKeyUtil.MESSAGE_ERREUR_ADRESSE_PRINCIPALE_DUPLIQUEE)); }
     */

    // 2.13 Une date de fin ne pourra etre mis sur une adresse principal que s'il existe une adresse secondaire.
    // Dans ce cas l'adresse principal deviendra automatiquement secondaire et l'adresse secondaire deviendra principal
    Adresse adressePrincipale = null;
    Adresse adresseSecondaire = null;
    for (Adresse adresse : personnePrincipale.getAdresses()) {
        if (adresse.getNature().getId().equals(squareMappingService.getIdNatureAdressePrincipale())) {
            adressePrincipale = adresse;
        }
        if (adresse.getNature().getId().equals(squareMappingService.getIdNatureAdresseSecondaire())
                && adresse.getDateFin() == null) {
            adresseSecondaire = adresse;
        }
    }
    if (adressePrincipale != null && adressePrincipale.getDateFin() != null && adresseSecondaire != null) {
        // Changement adresse principale adresse secondaire
        adressePrincipale.setNature(adresseNatureDao
                .rechercheAdresseNatureParId(squareMappingService.getIdNatureAdresseSecondaire()));
        adresseSecondaire.setNature(adresseNatureDao
                .rechercheAdresseNatureParId(squareMappingService.getIdNatureAdressePrincipale()));
        // Enregistrement des adresses
        final AdresseDto adresseDtoPrincipal = mapperDozerBean.map(adressePrincipale, AdresseDto.class);
        final AdresseDto adresseDtoSecondaire = mapperDozerBean.map(adresseSecondaire, AdresseDto.class);
        creerOuMettreAJourAdresse(personnes, adresseDtoPrincipal, impacterFamille);
        creerOuMettreAJourAdresse(personnes, adresseDtoSecondaire, impacterFamille);
    }

    if (!idNaturePersonneVivier.equals(idNaturePersonnePrincipale)
            && !idNaturePersonneBeneficiaireVivier.equals(idNaturePersonnePrincipale)) {
        controlerPersonneAUneAdressePrincipale(personnePrincipale);
    }

    // si il s'agit d'une personne physique et vivier ou bnficiaire vivier, on transforme en prospect ou bnficiaire prospect
    boolean vivierToProspect = false;
    boolean hasNaturePersonneChanged = false;
    String ancienneNaturePersonne = "";
    String nouvelleNaturePersonne = "";
    if (personnePrincipalePhysique != null && personnePrincipalePhysique.getNature() != null) {
        ancienneNaturePersonne = personnePrincipalePhysique.getNature().getLibelle();
        Long idNaturePersonne = null;
        if (idNaturePersonneVivier.equals(idNaturePersonnePrincipale)
                && validationPersonneUtil.verifierContrainteProspect(personnePrincipalePhysique)) {
            idNaturePersonne = squareMappingService.getIdNaturePersonneProspect();
            vivierToProspect = true;
            hasNaturePersonneChanged = true;
        } else if (idNaturePersonneBeneficiaireVivier.equals(idNaturePersonnePrincipale)
                && validationPersonneUtil.verifierContrainteBeneficiaireProspect(personnePrincipalePhysique)) {
            idNaturePersonne = squareMappingService.getIdNaturePersonneBeneficiaireProspect();
            hasNaturePersonneChanged = true;
        }
        if (idNaturePersonne != null) {
            final PersonnePhysiqueNature naturePersonne = personnePhysiqueNatureDao
                    .rechercherPersonnePhysiqueParId(idNaturePersonne);
            if (naturePersonne != null) {
                nouvelleNaturePersonne = naturePersonne.getLibelle();
            }
            personnePrincipalePhysique.setNature(naturePersonne);
        }
    }

    // si la personne est passe de vivier  prospect et qu'elle a des bnficiaires vivier,
    // on essaye de les passer en bnficiaire prospect si c'est possible
    if (vivierToProspect && famille != null && famille.size() > 0) {
        for (Personne beneficiaire : famille) {
            final PersonnePhysique beneficiairePhysique = (PersonnePhysique) beneficiaire;
            if (beneficiairePhysique.getNature() != null
                    && idNaturePersonneBeneficiaireVivier.equals(beneficiairePhysique.getNature().getId())
                    && validationPersonneUtil.verifierContrainteBeneficiaireProspect(beneficiairePhysique)) {
                final PersonnePhysiqueNature naturePersonne = personnePhysiqueNatureDao
                        .rechercherPersonnePhysiqueParId(
                                squareMappingService.getIdNaturePersonneBeneficiaireProspect());
                beneficiairePhysique.setNature(naturePersonne);
            }
        }
    }

    final CoordonneesDto newCoordonnees = rechercherCoordonneesParIdPersonne(personnePrincipale.getId());
    newCoordonnees.setHasNaturePersonneChanged(hasNaturePersonneChanged);
    newCoordonnees.setAncienneNaturePersonne(ancienneNaturePersonne);
    newCoordonnees.setNouvelleNaturePersonne(nouvelleNaturePersonne);
    return newCoordonnees;
}

From source file:org.alfresco.repo.domain.node.AbstractNodeDAOImpl.java

@Override
public boolean isInCurrentTxn(Long nodeId) {
    Long currentTxnId = getCurrentTransactionId(false);
    if (currentTxnId == null) {
        // No transactional changes have been made to any nodes, therefore the node cannot
        // be part of the current transaction
        return false;
    }//from   ww  w.  j  a va2s.c  o m
    Node node = getNodeNotNull(nodeId, false);
    Long nodeTxnId = node.getTransaction().getId();
    return nodeTxnId.equals(currentTxnId);
}

From source file:jp.primecloud.auto.service.impl.LoadBalancerServiceImpl.java

/**
 * {@inheritDoc}// w w w. j a va 2  s  . com
 */
@Override
public void updateCloudstackLoadBalancer(Long loadBalancerNo, String loadBalancerName, String comment,
        Long componentNo, String algorithm, String pubricPort, String privatePort) {
    // ?
    if (loadBalancerNo == null) {
        throw new AutoApplicationException("ECOMMON-000003", "loadBalancerNo");
    }
    if (loadBalancerName == null || loadBalancerName.length() == 0) {
        throw new AutoApplicationException("ECOMMON-000003", "loadBalancerName");
    }
    if (componentNo == null) {
        throw new AutoApplicationException("ECOMMON-000003", "componentNo");
    }

    if (algorithm == null) {
        throw new AutoApplicationException("ECOMMON-000003", "algorithm");
    }

    if (pubricPort == null) {
        throw new AutoApplicationException("ECOMMON-000003", "pubricPort");
    }

    if (privatePort == null) {
        throw new AutoApplicationException("ECOMMON-000003", "privatePort");
    }

    // ??
    if (!Pattern.matches("^[0-9a-z]|[0-9a-z][0-9a-z-]*[0-9a-z]$", loadBalancerName)) {
        throw new AutoApplicationException("ECOMMON-000012", "loadBalancerName");
    }

    // TODO: ??

    // ???
    LoadBalancer loadBalancer = loadBalancerDao.read(loadBalancerNo);
    CloudstackLoadBalancer csloadBalancer = cloudstackLoadBalancerDao.read(loadBalancerNo);
    if (loadBalancer == null) {
        // ??????
        throw new AutoApplicationException("ESERVICE-000603", loadBalancerNo);
    }

    // ???????
    if (LoadBalancerStatus.fromStatus(loadBalancer.getStatus()) != LoadBalancerStatus.STOPPED) {
        // ??????????????????
        if (!StringUtils.equals(loadBalancer.getLoadBalancerName(), loadBalancerName)
                || !componentNo.equals(loadBalancer.getComponentNo())) {
            throw new AutoApplicationException("ESERVICE-000604", loadBalancer.getLoadBalancerName());
        }
        if (!StringUtils.equals(csloadBalancer.getAlgorithm(), algorithm)
                || !StringUtils.equals(csloadBalancer.getPublicport(), pubricPort)
                || !StringUtils.equals(csloadBalancer.getPrivateport(), privatePort)) {
            throw new AutoApplicationException("ESERVICE-000604", loadBalancer.getLoadBalancerName());
        }
    }

    // ?????
    if (!StringUtils.equals(loadBalancer.getLoadBalancerName(), loadBalancerName)) {
        // ??????
        LoadBalancer checkLoadBalancer = loadBalancerDao
                .readByFarmNoAndLoadBalancerName(loadBalancer.getFarmNo(), loadBalancerName);
        if (checkLoadBalancer != null && !loadBalancerNo.equals(checkLoadBalancer.getLoadBalancerNo())) {
            // ????????
            throw new AutoApplicationException("ESERVICE-000601", loadBalancerName);
        }

        // ????
        Instance checkInstance = instanceDao.readByFarmNoAndInstanceName(loadBalancer.getFarmNo(),
                loadBalancerName);
        if (checkInstance != null) {
            // ???????
            throw new AutoApplicationException("ESERVICE-000626", loadBalancerName);
        }
    }

    // ????
    long countComponent = componentDao.countByComponentNo(componentNo);
    if (countComponent == 0) {
        // ???????
        throw new AutoApplicationException("ESERVICE-000607", componentNo);
    }

    Farm farm = farmDao.read(loadBalancer.getFarmNo());
    // ??
    loadBalancer.setLoadBalancerName(loadBalancerName);
    loadBalancer.setComment(comment);
    loadBalancer.setFqdn(loadBalancerName + "." + farm.getDomainName());
    loadBalancer.setComponentNo(componentNo);
    loadBalancerDao.update(loadBalancer);

    // ??
    csloadBalancer.setAlgorithm(algorithm);
    csloadBalancer.setPublicport(pubricPort);
    csloadBalancer.setPrivateport(privatePort);
    cloudstackLoadBalancerDao.update(csloadBalancer);

    // 
    eventLogger.log(EventLogLevel.INFO, farm.getFarmNo(), farm.getFarmName(), null, null, null, null,
            "LoadBalancerUpdate", null, null, new Object[] { loadBalancerName });
}

From source file:org.alfresco.repo.domain.node.AbstractNodeDAOImpl.java

/**
 * Does differencing to add and/or remove properties.  Internally, the existing properties
 * will be retrieved and a difference performed to work out which properties need to be
 * created, updated or deleted./*  ww  w  .  java  2 s. c o  m*/
 * <p/>
 * Note: The cached properties are not updated
 * 
 * @param nodeId                the node ID
 * @param newProps              the properties to add or update
 * @param isAddOnly             <tt>true</tt> if the new properties are just an update or
 *                              <tt>false</tt> if the properties are a complete set
 * @return                      Returns <tt>true</tt> if any properties were changed
 */
private boolean setNodePropertiesImpl(Long nodeId, Map<QName, Serializable> newProps, boolean isAddOnly) {
    if (isAddOnly && newProps.size() == 0) {
        return false; // No point adding nothing
    }

    // Get the current node
    Node node = getNodeNotNull(nodeId, false);
    // Create an update node
    NodeUpdateEntity nodeUpdate = new NodeUpdateEntity();
    nodeUpdate.setId(nodeId);

    // Copy inbound values
    newProps = new HashMap<QName, Serializable>(newProps);

    // Copy cm:auditable
    if (!policyBehaviourFilter.isEnabled(node.getNodeRef(), ContentModel.ASPECT_AUDITABLE)) {
        // Only bother if cm:auditable properties are present
        if (AuditablePropertiesEntity.hasAuditableProperty(newProps.keySet())) {
            AuditablePropertiesEntity auditableProps = node.getAuditableProperties();
            if (auditableProps == null) {
                auditableProps = new AuditablePropertiesEntity();
            } else {
                auditableProps = new AuditablePropertiesEntity(auditableProps); // Unlocked instance
            }
            boolean containedAuditProperties = auditableProps.setAuditValues(null, null, newProps);
            if (!containedAuditProperties) {
                // Double-check (previous hasAuditableProperty should cover it)
                // The behaviour is disabled, but no audit properties were passed in
                auditableProps = null;
            }
            nodeUpdate.setAuditableProperties(auditableProps);
            nodeUpdate.setUpdateAuditableProperties(true);
        }
    }

    // Remove cm:auditable
    newProps.keySet().removeAll(AuditablePropertiesEntity.getAuditablePropertyQNames());

    // Check if the sys:localized property is being changed
    Long oldNodeLocaleId = node.getLocaleId();
    Locale newLocale = DefaultTypeConverter.INSTANCE.convert(Locale.class,
            newProps.get(ContentModel.PROP_LOCALE));
    if (newLocale != null) {
        Long newNodeLocaleId = localeDAO.getOrCreateLocalePair(newLocale).getFirst();
        if (!newNodeLocaleId.equals(oldNodeLocaleId)) {
            nodeUpdate.setLocaleId(newNodeLocaleId);
            nodeUpdate.setUpdateLocaleId(true);
        }
    }
    // else: a 'null' new locale is completely ignored.  This is the behaviour we choose.

    // Remove sys:localized
    LocalizedPropertiesEntity.removeLocalizedProperties(node, newProps);

    // Remove sys:referenceable
    ReferenceablePropertiesEntity.removeReferenceableProperties(node, newProps);
    // Load the current properties.
    // This means that we have to go to the DB during cold-write operations,
    // but usually a write occurs after a node has been fetched of viewed in
    // some way by the client code.  Loading the existing properties has the
    // advantage that the differencing code can eliminate unnecessary writes
    // completely.
    Map<QName, Serializable> oldPropsCached = getNodePropertiesCached(nodeId); // Keep pristine for caching
    Map<QName, Serializable> oldProps = new HashMap<QName, Serializable>(oldPropsCached);
    // If we're adding, remove current properties that are not of interest
    if (isAddOnly) {
        oldProps.keySet().retainAll(newProps.keySet());
    }
    // We need to convert the new properties to our internally-used format,
    // which is compatible with model i.e. people may have passed in data
    // which needs to be converted to a model-compliant format.  We do this
    // before comparisons to avoid false negatives.
    Map<NodePropertyKey, NodePropertyValue> newPropsRaw = nodePropertyHelper
            .convertToPersistentProperties(newProps);
    newProps = nodePropertyHelper.convertToPublicProperties(newPropsRaw);
    // Now find out what's changed
    Map<QName, MapValueComparison> diff = EqualsHelper.getMapComparison(oldProps, newProps);
    // Keep track of properties to delete and add
    Set<QName> propsToDelete = new HashSet<QName>(oldProps.size() * 2);
    Map<QName, Serializable> propsToAdd = new HashMap<QName, Serializable>(newProps.size() * 2);
    Set<QName> contentQNamesToDelete = new HashSet<QName>(5);
    for (Map.Entry<QName, MapValueComparison> entry : diff.entrySet()) {
        QName qname = entry.getKey();

        PropertyDefinition removePropDef = dictionaryService.getProperty(qname);
        boolean isContent = (removePropDef != null
                && removePropDef.getDataType().getName().equals(DataTypeDefinition.CONTENT));

        switch (entry.getValue()) {
        case EQUAL:
            // Ignore
            break;
        case LEFT_ONLY:
            // Not in the new properties
            propsToDelete.add(qname);
            if (isContent) {
                contentQNamesToDelete.add(qname);
            }
            break;
        case NOT_EQUAL:
            // Must remove from the LHS
            propsToDelete.add(qname);
            if (isContent) {
                contentQNamesToDelete.add(qname);
            }
            // Fall through to load up the RHS
        case RIGHT_ONLY:
            // We're adding this
            Serializable value = newProps.get(qname);
            if (isContent && value != null) {
                ContentData newContentData = (ContentData) value;
                Long newContentDataId = contentDataDAO.createContentData(newContentData).getFirst();
                value = new ContentDataWithId(newContentData, newContentDataId);
            }
            propsToAdd.put(qname, value);
            break;
        default:
            throw new IllegalStateException("Unknown MapValueComparison: " + entry.getValue());
        }
    }

    boolean modifyProps = propsToDelete.size() > 0 || propsToAdd.size() > 0;
    boolean updated = modifyProps || nodeUpdate.isUpdateAnything();

    // Bring the node into the current transaction
    if (nodeUpdate.isUpdateAnything()) {
        // We have to explicitly update the node (sys:locale or cm:auditable)
        if (updateNodeImpl(node, nodeUpdate, null)) {
            // Copy the caches across
            NodeVersionKey nodeVersionKey = node.getNodeVersionKey();
            NodeVersionKey newNodeVersionKey = getNodeNotNull(nodeId, false).getNodeVersionKey();
            copyNodeAspectsCached(nodeVersionKey, newNodeVersionKey);
            copyNodePropertiesCached(nodeVersionKey, newNodeVersionKey);
            copyParentAssocsCached(node);
        }
    } else if (modifyProps) {
        // Touch the node; all caches are fine
        touchNode(nodeId, null, null, false, false, false);
    }

    // Touch to bring into current txn
    if (modifyProps) {
        // Clean up content properties
        try {
            if (contentQNamesToDelete.size() > 0) {
                Set<Long> contentQNameIdsToDelete = qnameDAO.convertQNamesToIds(contentQNamesToDelete, false);
                contentDataDAO.deleteContentDataForNode(nodeId, contentQNameIdsToDelete);
            }
        } catch (Throwable e) {
            throw new AlfrescoRuntimeException("Failed to delete content properties: \n" + "  Node:          "
                    + nodeId + "\n" + "  Delete Tried:  " + contentQNamesToDelete, e);
        }

        try {
            // Apply deletes
            Set<Long> propQNameIdsToDelete = qnameDAO.convertQNamesToIds(propsToDelete, true);
            deleteNodeProperties(nodeId, propQNameIdsToDelete);
            // Now create the raw properties for adding
            newPropsRaw = nodePropertyHelper.convertToPersistentProperties(propsToAdd);
            insertNodeProperties(nodeId, newPropsRaw);
        } catch (Throwable e) {
            // Don't trust the caches for the node
            invalidateNodeCaches(nodeId);
            // Focused error
            throw new AlfrescoRuntimeException("Failed to write property deltas: \n" + "  Node:          "
                    + nodeId + "\n" + "  Old:           " + oldProps + "\n" + "  New:           " + newProps
                    + "\n" + "  Diff:          " + diff + "\n" + "  Delete Tried:  " + propsToDelete + "\n"
                    + "  Add Tried:     " + propsToAdd, e);
        }

        // Build the properties to cache based on whether this is an append or replace
        Map<QName, Serializable> propsToCache = null;
        if (isAddOnly) {
            // Copy cache properties for additions
            propsToCache = new HashMap<QName, Serializable>(oldPropsCached);
            // Combine the old and new properties
            propsToCache.putAll(propsToAdd);
        } else {
            // Replace old properties
            propsToCache = newProps;
            propsToCache.putAll(propsToAdd); // Ensure correct types
        }
        // Update cache
        setNodePropertiesCached(nodeId, propsToCache);
    }

    // Done
    if (isDebugEnabled && updated) {
        logger.debug("Modified node properties: " + nodeId + "\n" + "   Removed:     " + propsToDelete + "\n"
                + "   Added:       " + propsToAdd + "\n" + "   Node Update: " + nodeUpdate);
    }
    return updated;
}

From source file:com.funambol.server.engine.Sync4jStrategy.java

/**
 * Verifies that the given item the size of its content metches the
 * specified size, if specified. In the case of a mismatch, a
 * <code>SyncSourceException</code> is thrown with status code
 * OBJECT_SIZE_MISMATCH (424).//ww w .  ja va2s. c  om
 *
 * @param item item to check
 *
 * @throws ObjectSizeMismatchException if the content size does not match
       the declared size (if declared)
 */
private void checkSize(SyncItem item) throws ObjectSizeMismatchException {

    if (log.isTraceEnabled()) {
        log.trace("Check item size");
    }

    Long size = (Long) ((AbstractSyncItem) item).getPropertyValue(AbstractSyncItem.PROPERTY_DECLARED_SIZE);

    if (size == null) {
        if (log.isTraceEnabled()) {
            log.trace("Declared size is null...skip the check");
        }

        return;
    }

    if (log.isTraceEnabled()) {
        log.trace("Declared size: " + size);
    }

    Long contentSize = (Long) ((AbstractSyncItem) item)
            .getPropertyValue(AbstractSyncItem.PROPERTY_CONTENT_SIZE);

    if (contentSize == null) {
        contentSize = new Long(item.getContent().length);
    }

    if (log.isTraceEnabled()) {
        log.trace("Content size: " + contentSize);
    }

    //
    // We cannot check the content lenght (content.lenght) because the items
    // are already handled by the DataTransformationManager in the Sync4jEngine
    // See Sync4jEngine.applyDataTransformationOnIngoingItems
    //
    if (contentSize == null || !size.equals(contentSize)) {

        if (log.isTraceEnabled()) {
            log.trace("Size mismatch. The size of the received object (" + contentSize
                    + ") does not match the declared size (" + size + ")");
        }

        throw new ObjectSizeMismatchException("The size of the received object does not match the given size");
    }
}

From source file:jp.primecloud.auto.service.impl.InstanceServiceImpl.java

protected Long createInstance(Long farmNo, String instanceName, Long platformNo, String comment, Long imageNo) {
    // ?//from ww w. j a va 2  s  .c o  m
    if (farmNo == null) {
        throw new AutoApplicationException("ECOMMON-000003", "farmNo");
    }
    if (instanceName == null || instanceName.length() == 0) {
        throw new AutoApplicationException("ECOMMON-000003", "instanceName");
    }
    if (platformNo == null) {
        throw new AutoApplicationException("ECOMMON-000003", "platformNo");
    }
    if (imageNo == null) {
        throw new AutoApplicationException("ECOMMON-000003", "imageNo");
    }

    // ??
    if (!Pattern.matches("^[0-9a-z]|[0-9a-z][0-9a-z-]*[0-9a-z]$", instanceName)) {
        throw new AutoApplicationException("ECOMMON-000012", "instanceName");
    }

    // ???
    Image image = imageDao.read(imageNo);
    Platform platform = platformDao.read(platformNo);
    if (platformNo.equals(image.getPlatformNo()) == false) {
        throw new AutoApplicationException("ESERVICE-000405", imageNo, platform.getPlatformName());
    }

    // TODO: ??

    // ?????
    Instance checkInstance = instanceDao.readByFarmNoAndInstanceName(farmNo, instanceName);
    if (checkInstance != null) {
        // ???????
        throw new AutoApplicationException("ESERVICE-000401", instanceName);
    }

    // ?????
    LoadBalancer checkLoadBalancer = loadBalancerDao.readByFarmNoAndLoadBalancerName(farmNo, instanceName);
    if (checkLoadBalancer != null) {
        // ????????
        throw new AutoApplicationException("ESERVICE-000417", instanceName);
    }

    // ??
    Farm farm = farmDao.read(farmNo);
    if (farm == null) {
        throw new AutoApplicationException("ESERVICE-000406", farmNo);
    }

    // fqdn???
    String fqdn = instanceName + "." + farm.getDomainName();
    if (fqdn.length() > 63) {
        throw new AutoApplicationException("ESERVICE-000418", fqdn);
    }

    // TODO: ??

    // VMware??Windows???VMware??????Windows????????
    // TODO: OS??
    if (PCCConstant.PLATFORM_TYPE_VMWARE.equals(platform.getPlatformType())
            && StringUtils.startsWithIgnoreCase(image.getOs(), PCCConstant.OS_NAME_WIN)) {
        List<Instance> allInstances = instanceDao.readAll();
        for (Instance instance2 : allInstances) {
            if (StringUtils.equals(instanceName, instance2.getInstanceName())) {
                Platform platform2 = platformDao.read(instance2.getPlatformNo());
                if (PCCConstant.PLATFORM_TYPE_VMWARE.equals(platform2.getPlatformType())) {
                    Image image2 = imageDao.read(instance2.getImageNo());
                    if (StringUtils.startsWithIgnoreCase(image2.getOs(), PCCConstant.OS_NAME_WIN)) {
                        // VMware?????Windows???
                        throw new AutoApplicationException("ESERVICE-000419", instanceName);
                    }
                }
            }
        }
    }

    // ??
    String instanceCode = passwordGenerator.generate(20);

    // ??
    Instance instance = new Instance();
    instance.setFarmNo(farmNo);
    instance.setInstanceName(instanceName);
    instance.setPlatformNo(platformNo);
    instance.setImageNo(imageNo);
    instance.setEnabled(false);
    instance.setComment(comment);
    instance.setFqdn(fqdn);
    instance.setInstanceCode(instanceCode);
    instance.setStatus(InstanceStatus.STOPPED.toString());
    instanceDao.create(instance);

    // TODO: OS??
    if (!StringUtils.startsWithIgnoreCase(image.getOs(), PCCConstant.OS_NAME_WIN)
            || (StringUtils.startsWithIgnoreCase(image.getOs(), PCCConstant.OS_NAME_WIN)
                    && PCCConstant.PLATFORM_TYPE_VMWARE.equals(platform.getPlatformType()))
            || (StringUtils.startsWithIgnoreCase(image.getOs(), PCCConstant.OS_NAME_WIN)
                    && PCCConstant.PLATFORM_TYPE_AZURE.equals(platform.getPlatformType()))
            || (StringUtils.startsWithIgnoreCase(image.getOs(), PCCConstant.OS_NAME_WIN)
                    && PCCConstant.PLATFORM_TYPE_OPENSTACK.equals(platform.getPlatformType()))) {
        // OpenStack?Puppet?????
        //if (!PCCConstant.PLATFORM_TYPE_OPENSTACK.equals(platform.getPlatformType())) {
        // Puppet??
        PuppetInstance puppetInstance = new PuppetInstance();
        puppetInstance.setInstanceNo(instance.getInstanceNo());
        puppetInstanceDao.create(puppetInstance);
        //}
    }

    Boolean useZabbix = BooleanUtils.toBooleanObject(Config.getProperty("zabbix.useZabbix"));
    if (BooleanUtils.isTrue(useZabbix)) {
        // Zabbix??
        ZabbixInstance zabbixInstance = new ZabbixInstance();
        zabbixInstance.setInstanceNo(instance.getInstanceNo());
        zabbixInstanceDao.create(zabbixInstance);
    }

    return instance.getInstanceNo();
}

From source file:jp.primecloud.auto.service.impl.ComponentServiceImpl.java

/**
 * {@inheritDoc}//ww w  .  ja v a2s .c o m
 */
protected void doAssociate(Long componentNo, List<Long> instanceNos) {
    Component component = componentDao.read(componentNo);

    // ????
    List<Instance> allInstances = instanceDao.readByFarmNo(component.getFarmNo());
    List<ComponentInstance> componentInstances = componentInstanceDao.readByComponentNo(componentNo);
    for (Instance instance : allInstances) {
        // ???????
        ComponentInstance componentInstance = null;
        for (ComponentInstance tmpComponentInstance : componentInstances) {
            if (instance.getInstanceNo().equals(tmpComponentInstance.getInstanceNo())) {
                componentInstance = tmpComponentInstance;
                break;
            }
        }

        if (instanceNos.contains(instance.getInstanceNo())) {
            // ??????
            if (componentInstance == null) {
                // ????????
                componentInstance = new ComponentInstance();
                componentInstance.setComponentNo(componentNo);
                componentInstance.setInstanceNo(instance.getInstanceNo());
                componentInstance.setAssociate(true);
                componentInstance.setEnabled(false);
                componentInstance.setStatus(ComponentInstanceStatus.STOPPED.toString());
                componentInstanceDao.create(componentInstance);
            } else {
                // ???????
                if (BooleanUtils.isNotTrue(componentInstance.getAssociate())) {
                    componentInstance.setAssociate(true);
                    componentInstanceDao.update(componentInstance);
                }
            }
        } else {
            // ????????
            if (componentInstance != null) {
                // ????
                ComponentInstanceStatus status = ComponentInstanceStatus
                        .fromStatus(componentInstance.getStatus());
                if (status == ComponentInstanceStatus.STOPPED) {
                    // Zabbix???
                    if (zabbixInstanceDao.countByInstanceNo(componentInstance.getInstanceNo()) > 0) {
                        zabbixHostProcess.removeTemplate(componentInstance.getInstanceNo(), componentNo);
                    }

                    /******************************************************************
                     * ???????
                     * ??VCLOUDUSiZE?????
                     ******************************************************************/
                    List<VcloudDisk> vdisks = vcloudDiskDao.readByInstanceNo(instance.getInstanceNo());
                    for (VcloudDisk disk : vdisks) {
                        if (componentNo.equals(disk.getComponentNo())) {
                            //componentNo????????
                            Farm farm = farmDao.read(instance.getFarmNo());
                            IaasGatewayWrapper gateway = iaasGatewayFactory.createIaasGateway(farm.getUserNo(),
                                    instance.getPlatformNo());
                            try {
                                gateway.deleteVolume(String.valueOf(disk.getDiskNo()));
                            } catch (AutoException ignore) {
                                // ??????????????
                            }
                            //
                            vcloudDiskDao.delete(disk);
                        }
                    }

                    // ???????????
                    componentInstanceDao.delete(componentInstance);
                } else {
                    // ??
                    if (BooleanUtils.isTrue(componentInstance.getAssociate())) {
                        componentInstance.setAssociate(false);
                        componentInstanceDao.update(componentInstance);
                    }
                }
            }
        }
    }

    ComponentType componentType = componentTypeDao.read(component.getComponentTypeNo());

    // MySQL?????Master?Slave?
    if (MySQLConstants.COMPONENT_TYPE_NAME.equals(componentType.getComponentTypeName())) {
        // Master/Slave??
        Long masterInstanceNo = null;
        Set<Long> slaveInstanceNos = new LinkedHashSet<Long>();
        List<InstanceConfig> instanceConfigs = instanceConfigDao.readByComponentNo(componentNo);
        for (InstanceConfig instanceConfig : instanceConfigs) {
            if (MySQLConstants.CONFIG_NAME_MASTER_INSTANCE_NO.equals(instanceConfig.getConfigName())) {
                if (StringUtils.isEmpty(instanceConfig.getConfigValue())) {
                    masterInstanceNo = instanceConfig.getInstanceNo();
                } else {
                    slaveInstanceNos.add(instanceConfig.getInstanceNo());
                }
            }
        }

        // Master?????????Master??
        if (masterInstanceNo == null && instanceNos.size() > 0) {
            masterInstanceNo = instanceNos.get(0);

            InstanceConfig instanceConfig = new InstanceConfig();
            instanceConfig.setInstanceNo(masterInstanceNo);
            instanceConfig.setComponentNo(componentNo);
            instanceConfig.setConfigName(MySQLConstants.CONFIG_NAME_MASTER_INSTANCE_NO);
            instanceConfig.setConfigValue(null);
            instanceConfigDao.create(instanceConfig);
        }

        // Master/Slave??????Slave??
        if (masterInstanceNo != null) {
            for (Long instanceNo : instanceNos) {
                if (!instanceNo.equals(masterInstanceNo) && !slaveInstanceNos.contains(instanceNo)) {
                    InstanceConfig instanceConfig = new InstanceConfig();
                    instanceConfig.setInstanceNo(instanceNo);
                    instanceConfig.setComponentNo(componentNo);
                    instanceConfig.setConfigName(MySQLConstants.CONFIG_NAME_MASTER_INSTANCE_NO);
                    instanceConfig.setConfigValue(masterInstanceNo.toString());
                    instanceConfigDao.create(instanceConfig);
                }
            }
        }
    }
}

From source file:com.square.core.service.implementations.ActionServiceImplementation.java

@Override
public ActionResultatDto modifierAction(ActionModificationDto actionModificationDto) {
    // Dto null/*from w w w. j  av a 2s . co  m*/
    if (actionModificationDto == null) {
        throw new BusinessException(messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_DTO_NULL));
    }

    // Identifiant de l'action null
    if (actionModificationDto.getIdAction() == null) {
        throw new BusinessException(messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_IDACTION_NULL));
    }

    // Rcupration de l'action correspondant
    final Action actionAModifier = actionDao.rechercherActionParId(actionModificationDto.getIdAction());
    if (actionAModifier == null) {
        throw new BusinessException(messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_INEXISTANTE));
    }
    if (logger.isDebugEnabled()) {
        logger.debug("bug 0008864 : modifierAction(ActionModificationDto)");
        logger.debug("recuperation de l'action : " + actionModificationDto.getIdAction());
        logger.debug("dateCreation = " + (actionAModifier.getDateCreation() != null
                ? SDF.format(actionAModifier.getDateCreation().getTime())
                : "null"));
    }

    Agence agence = null;
    if (actionModificationDto.getAgence() != null
            && actionModificationDto.getAgence().getIdentifiant() != null) {
        agence = agenceDao.rechercheAgenceParId(actionModificationDto.getAgence().getIdentifiant());
        if (agence == null) {
            logger.error(
                    "L'agence id = " + actionModificationDto.getAgence().getIdentifiant() + "n'existe pas.");
            throw new TechnicalException(
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_AGENCE_INEXISTANTE));
        }
    }

    // Rcupration de la ressource correspondant au commercial (on permet dsormais le changement de ressource mme si existant)
    Ressource commercial = null;
    if (actionAModifier.getActionAttribution() != null && actionModificationDto.getRessource() != null
            && actionModificationDto.getRessource().getIdentifiant() != null) {
        commercial = ressourceDao
                .rechercherRessourceParId(actionModificationDto.getRessource().getIdentifiant());
        if (commercial == null) {
            logger.error(
                    "La ressource " + actionModificationDto.getRessource().getIdentifiant() + " n'existe pas");
            throw new BusinessException(
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_COMMERCIAL_INEXISTANTE));
        }
    }

    // Rcupration de la dure
    ActionDuree dureeAction = null;
    if (actionModificationDto.getIdDuree() != null) {
        dureeAction = actionDureeDao.rechercherDureeActionParId(actionModificationDto.getIdDuree());
        if (dureeAction == null) {
            throw new BusinessException(
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_DUREE_INEXISTANTE));
        }
    }

    final RapportDto rapport = new RapportDto();

    // Vrification de la nature
    if (actionModificationDto.getNatureAction() == null
            || actionModificationDto.getNatureAction().getIdentifiant() == null) {
        rapport.ajoutRapport(ActionModificationDto.class.getSimpleName() + ".nature",
                messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_NATURE_ACTION_NULL), true);
    }

    // Pour une action de nature "tlphone sortant" passant au statut "termin"
    if (actionModificationDto.getNatureAction() != null
            && squareMappingService.getIdNatureActionTelephoneSortant()
                    .equals(actionModificationDto.getNatureAction().getIdentifiant())
            && actionModificationDto.getStatut() != null && squareMappingService.getIdStatutActionTermine()
                    .equals(actionModificationDto.getStatut().getIdentifiant())) {
        // On vrifie que le rsultat de la nature est renseign
        if (actionModificationDto.getNatureResultat() == null
                || actionModificationDto.getNatureResultat().getIdentifiant() == null) {
            rapport.ajoutRapport(ActionModificationDto.class.getSimpleName() + ".natureResultat",
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_NATURE_RESULTAT_ACTION_NULL),
                    true);
        }
    }

    // vrification que la nature de resultat est selectionne pour la nature d'action visite sortante si on demande la vrification
    if (!BooleanUtils.isFalse(actionModificationDto.getVerifierResultatNatureAction())
            && actionModificationDto.getNatureAction() != null
            && squareMappingService.getIdNatureActionVisiteSortante()
                    .equals(actionModificationDto.getNatureAction().getIdentifiant())
            && actionModificationDto.getNatureResultat() == null && squareMappingService
                    .getIdStatutActionTermine().equals(actionModificationDto.getStatut().getIdentifiant())) {
        throw new BusinessException(
                messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_NATURE_RESULTAT_VISITE_SORTANTE));
    }

    // Contrle du statut
    final ValidationExpressionProp[] propsAction = new ValidationExpressionProp[] {
            new ValidationExpressionProp("statut", null,
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_STATUT_NULL)),
            new ValidationExpressionProp("dateAction", null,
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_DATE_ACTION_NULL)) };

    validationExpressionUtil.verifierSiVide(rapport, actionModificationDto, propsAction);

    if (actionModificationDto.getDateAction() != null) {
        // On copie la date de l'action enregistre en base
        final Calendar ancienneDateAction = DateUtils.truncate((Calendar) actionAModifier.getDate().clone(),
                Calendar.HOUR);
        // On copie la nouvelle date d'action
        final Calendar nouvelleDateAction = DateUtils
                .truncate((Calendar) actionModificationDto.getDateAction().clone(), Calendar.HOUR);
        // Si la date de l'action est modifie
        if (!ancienneDateAction.equals(nouvelleDateAction)) {
            // On vrifie que la date d'action est postrieure  la date courante
            if (DateUtils.truncate(nouvelleDateAction, Calendar.DAY_OF_MONTH)
                    .before(DateUtils.truncate(Calendar.getInstance(), Calendar.DAY_OF_MONTH))) {
                rapport.ajoutRapport(actionModificationDto.getClass().getSimpleName() + ".dateAction",
                        messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_DATE_ACTION_INVALIDE), true);
            }
        }
    }

    // Une action ne peut tre termine sans tre attribue
    if (actionModificationDto.getStatut() != null
            && squareMappingService.getIdStatutActionTermine()
                    .equals(actionModificationDto.getStatut().getIdentifiant())
            && (actionModificationDto.getRessource() == null
                    || actionModificationDto.getRessource().getIdentifiant() == null)) {
        rapport.ajoutRapport(ActionModificationDto.class.getSimpleName() + ".statut",
                messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_TERMINEE_SANS_ATTRIBUTION), true);
    }

    // On ne peut rendre visible une action dans l'agenda que si elle a une date de dbut, une dure
    if (actionModificationDto.getVisibleAgenda() != null
            && actionModificationDto.getVisibleAgenda().booleanValue()
            && (actionModificationDto.getDateAction() == null || actionModificationDto.getIdDuree() == null)) {
        rapport.ajoutRapport(actionModificationDto.getClass().getSimpleName() + ".isVisibleAgenda",
                messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_IMPOSSIBLE_VISIBLE_AGENDA), true);
    }

    // Prsence d'erreurs empchant la modification de l'action
    if (rapport.getEnErreur()) {
        // On retourne le rapport d'erreur
        RapportUtil.logRapport(rapport, logger);
        throw new ControleIntegriteException(rapport);
    }

    // Vrification de l'existance des nouveaux champs
    verificationExistanceModification(actionModificationDto, actionAModifier);

    // Vrification de la rgle de gestion de l'opportunit en cours
    if (Boolean.TRUE.equals(actionModificationDto.getVerifierRegleGestionOpportuniteEnCours())) {
        verifierRegleGestionOpportuniteOuverte(actionModificationDto, actionAModifier);
    }

    // Modification de l'action
    if (actionModificationDto.getNatureAction() != null
            && actionModificationDto.getNatureAction().getIdentifiant() != null) {
        final ActionNature nature = actionNatureDao
                .rechercherNatureActionParId(actionModificationDto.getNatureAction().getIdentifiant());
        if (nature == null) {
            throw new TechnicalException(
                    messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_ACTION_NATURE_ACTION_INEXISTANT));
        }
        actionAModifier.setNature(nature);
    }
    // modification du type d'action
    final IdentifiantLibelleDto typeAction = actionModificationDto.getTypeAction();
    if (actionModificationDto.getTypeAction() != null && typeAction.getIdentifiant() != null) {
        actionAModifier.setType(actionTypeDao.rechercherTypeActionParId(typeAction.getIdentifiant()));
    }

    // modificatio de l'objet d'action
    final IdentifiantLibelleDto objetAction = actionModificationDto.getObjetAction();
    if (actionModificationDto.getObjetAction() != null && objetAction.getIdentifiant() != null) {
        actionAModifier.setObjet(actionObjetDao.rechercherObjetActionParId(objetAction.getIdentifiant()));
    }
    // affectation au pot commun
    if (actionModificationDto.getAffectationPotCommun() != null
            && actionModificationDto.getAffectationPotCommun()) {
        actionAModifier.getActionAttribution()
                .setAgence(agenceDao.rechercheAgenceParId(squareMappingService.getIdentifiantAgenceFrance()));
        actionAModifier.getActionAttribution().setRessource(null);
    }
    if (actionModificationDto.getRappelMail() != null) {
        actionAModifier.setMailNotification(actionModificationDto.getRappelMail());
    }
    // action tlphone sortant ou visite sortante
    if (actionModificationDto.getNatureAction() != null
            && (squareMappingService.getIdNatureActionTelephoneSortant()
                    .equals(actionModificationDto.getNatureAction().getIdentifiant())
                    || squareMappingService.getIdNatureActionVisiteSortante()
                            .equals(actionModificationDto.getNatureAction().getIdentifiant()))) {
        if (actionModificationDto.getNatureResultat() != null
                && actionModificationDto.getNatureResultat().getIdentifiant() != null) {
            actionAModifier.setNatureResultat(actionNatureResultatDao.rechercherNatureResultatActionById(
                    actionModificationDto.getNatureResultat().getIdentifiant()));
        } else {
            actionAModifier.setNatureResultat(null);
        }
    }

    if (agence != null) {
        // si on affecte une action de relance (qui n'avait pas d'agence)  une agence, on affecte aussi l'opp  l'agence
        if (actionAModifier.getActionAttribution().getAgence() == null
                && actionAModifier.getType().getId().equals(squareMappingService.getIdTypeActionRelance())
                && actionAModifier.getActionAffectation().getOpportunite() != null) {
            actionAModifier.getActionAffectation().getOpportunite().getOpportuniteAttribution()
                    .setAgence(agence);
        }
        actionAModifier.getActionAttribution().setAgence(agence);
    }

    if (commercial != null) {
        // si on affecte une action de relance (qui n'avait pas de ressource)  une ressource, on affecte aussi l'opp  la ressource
        if (actionAModifier.getActionAttribution().getRessource() == null
                && actionAModifier.getType().getId().equals(squareMappingService.getIdTypeActionRelance())
                && actionAModifier.getActionAffectation().getOpportunite() != null) {
            actionAModifier.getActionAffectation().getOpportunite().getOpportuniteAttribution()
                    .setRessource(commercial);
        }
        actionAModifier.getActionAttribution().setRessource(commercial);
    }

    final Long idStatutTermine = squareMappingService.getIdStatutTerminer();

    // Rsultat
    // Cration d'une opportunit si le rsultat passe  opportunit
    OpportuniteDto opportuniteCree = null;
    if (actionAModifier.getResultat() == null) {
        if (actionModificationDto.getResultat() != null && actionModificationDto.getResultat().getIdentifiant()
                .equals(squareMappingService.getIdResultatOpportunite())) {
            actionAModifier.setStatut(actionStatutDao.rechercherStatutActionParId(idStatutTermine));
            opportuniteCree = creationOpportunite(actionAModifier);
        } else if (actionModificationDto.getResultat() != null && actionModificationDto.getResultat()
                .getIdentifiant().equals(squareMappingService.getIdResultatRelance())) {
            actionAModifier.setStatut(actionStatutDao.rechercherStatutActionParId(idStatutTermine));
        } else {
            actionAModifier.setStatut(actionStatutDao
                    .rechercherStatutActionParId(actionModificationDto.getStatut().getIdentifiant()));
        }
        if (actionModificationDto.getResultat() != null) {
            actionAModifier.setResultat(actionResultatDao
                    .rechercherActionResultatParId(actionModificationDto.getResultat().getIdentifiant()));
        }
    } else {
        if (actionModificationDto.getResultat() != null && actionModificationDto.getResultat().getIdentifiant()
                .equals(squareMappingService.getIdResultatOpportunite())) {
            if (!actionAModifier.getResultat().getId()
                    .equals(squareMappingService.getIdResultatOpportunite())) {
                actionAModifier.setStatut(actionStatutDao.rechercherStatutActionParId(idStatutTermine));
                opportuniteCree = creationOpportunite(actionAModifier);
            }
        } else if (actionModificationDto.getResultat() != null && actionModificationDto.getResultat()
                .getIdentifiant().equals(squareMappingService.getIdResultatRelance())) {
            actionAModifier.setStatut(actionStatutDao.rechercherStatutActionParId(idStatutTermine));
        } else {
            actionAModifier.setStatut(actionStatutDao
                    .rechercherStatutActionParId(actionModificationDto.getStatut().getIdentifiant()));
        }
        if (actionModificationDto.getResultat() != null) {
            actionAModifier.setResultat(actionResultatDao
                    .rechercherActionResultatParId(actionModificationDto.getResultat().getIdentifiant()));
        }
    }

    // Mise  jour de la date de l'action
    if (idStatutTermine.equals(actionModificationDto.getStatut().getIdentifiant())) {
        // Si l'action passe au statut "termin", on met  jour la date termine de l'action en prenant la date courante
        actionAModifier.setDateTerminee(Calendar.getInstance());
    } else {
        actionAModifier.setDate(actionModificationDto.getDateAction());
    }

    // Priorit
    if (actionModificationDto.getPriorite() != null
            && actionModificationDto.getPriorite().getIdentifiant() != null) {
        // Rcupration de la priorit
        final ActionPriorite priorite = actionPrioriteDao
                .rechercherPrioriteActionParId(actionModificationDto.getPriorite().getIdentifiant());
        if (priorite != null) {
            actionAModifier.setPriorite(priorite);
        }
    }

    // Dure de l'action
    if (dureeAction != null) {
        actionAModifier.setDuree(dureeAction);
    }

    // Action visible ou non dans l'agenda
    actionAModifier.setVisibleAgenda(actionModificationDto.getVisibleAgenda() != null
            && actionModificationDto.getVisibleAgenda().booleanValue());

    // Construction de la date de notification
    if (actionModificationDto.getRappel() != null && actionModificationDto.getRappel()) {
        if (actionModificationDto.getIdNotification() != null) {
            final ActionNotificationInfosDto notification = squareMappingService
                    .getActionNotificationParId(actionModificationDto.getIdNotification());
            final Calendar soustraction = Calendar.getInstance();
            soustraction.clear();
            final Long dateTime = -notification.getNotification().getTimeInMillis()
                    + actionAModifier.getDate().getTimeInMillis();
            soustraction.setTimeInMillis(dateTime);
            actionAModifier.setDateNotification(soustraction);
        } else {
            actionAModifier.setDateNotification(null);
        }
    } else {
        actionAModifier.setDateNotification(null);
    }
    // Constuction du commentaire
    if (actionModificationDto.getCommentaire() != null) {
        final Commentaire commentaire = mapperDozerBean.map(actionModificationDto.getCommentaire(),
                Commentaire.class);
        if (actionModificationDto.getCommentaire().getRessource() != null) {
            final Ressource ressource = ressourceDao
                    .rechercherRessourceParId(actionModificationDto.getCommentaire().getRessource().getId());
            commentaire.setRessource(ressource);
        }
        if (actionAModifier.getCommentaires() == null) {
            final List<Commentaire> list = new ArrayList<Commentaire>();
            list.add(commentaire);
            actionAModifier.setCommentaires(list);
        } else {
            actionAModifier.getCommentaires().add(commentaire);
        }
    }

    // Envoi d'un email si demand
    if (actionAModifier.isMailNotification()
            && squareMappingService.getIdStatutActionTermine().equals(actionAModifier.getStatut().getId())) {
        if (actionAModifier.getRessource() != null) {
            final Ressource createur = actionAModifier.getRessource();
            if (createur.getEmail() == null || "".equals(createur.getEmail())) {
                throw new BusinessException(
                        messageSourceUtil.get(ActionKeyUtil.MESSAGE_ERREUR_EMAIL_CREATEUR_ACTION_VIDE));
            }
            final List<String> listeDestinataires = new ArrayList<String>();
            listeDestinataires.add(createur.getEmail());
            final String titre = messageSourceUtil.get(ActionKeyUtil.TITRE_EMAIL_FIN_ACTION);
            String personneAction = "";
            String type = "";
            String objet = "";
            String sousObjet = "";
            String nature = "";
            String campagne = "";
            if (actionAModifier.getActionAffectation() != null
                    && actionAModifier.getActionAffectation().getPersonne() != null) {
                final Personne personne = actionAModifier.getActionAffectation().getPersonne();
                if (personne instanceof PersonnePhysique) {
                    final PersonnePhysique personnePhysique = (PersonnePhysique) actionAModifier
                            .getActionAffectation().getPersonne();
                    personneAction = personnePhysique.getNom() + ESPACE + personnePhysique.getPrenom();
                } else if (personne instanceof PersonneMorale) {
                    final PersonneMorale personneMorale = (PersonneMorale) actionAModifier
                            .getActionAffectation().getPersonne();
                    personneAction = personneMorale.getRaisonSociale();
                }
            }
            if (actionAModifier.getType() != null) {
                type = actionAModifier.getType().getLibelle();
            }
            if (actionAModifier.getObjet() != null) {
                objet = actionAModifier.getObjet().getLibelle();
            }
            if (actionAModifier.getSousObjet() != null) {
                sousObjet = actionAModifier.getSousObjet().getLibelle();
            }
            if (actionAModifier.getNature() != null) {
                nature = actionAModifier.getNature().getLibelle();
            }
            if (actionAModifier.getCampagne() != null) {
                campagne = actionAModifier.getCampagne().getLibelle();
            }
            final String message = messageSourceUtil.get(ActionKeyUtil.MESSAGE_EMAIL_FIN_ACTION,
                    new String[] { personneAction, type, objet, sousObjet, nature, campagne });
            final MailDto mailDto = new MailDto(expediteurNoReply, listeDestinataires, titre, message, null,
                    false);
            emailSquarePlugin.envoyerEmail(mailDto);
        }
    }
    // Renseignement de la date de modification
    actionAModifier.setDateModification(Calendar.getInstance());

    final ActionResultatDto resultat = new ActionResultatDto();
    if (opportuniteCree != null) {
        resultat.setIdOpportunite(opportuniteCree.getIdOpportunite());
    }
    return resultat;
}

From source file:com.cloud.template.TemplateManagerImpl.java

@DB
@Override//  www  .ja  v a2  s .  c o  m
public boolean updateTemplateOrIsoPermissions(BaseUpdateTemplateOrIsoPermissionsCmd cmd) {
    // Input validation
    final Long id = cmd.getId();
    final Account caller = CallContext.current().getCallingAccount();
    List<String> accountNames = cmd.getAccountNames();
    List<Long> projectIds = cmd.getProjectIds();
    Boolean isFeatured = cmd.isFeatured();
    Boolean isPublic = cmd.isPublic();
    Boolean isExtractable = cmd.isExtractable();
    String operation = cmd.getOperation();
    String mediaType = "";

    VMTemplateVO template = _tmpltDao.findById(id);

    if (template == null) {
        throw new InvalidParameterValueException("unable to find " + mediaType + " with id " + id);
    }

    if (cmd instanceof UpdateTemplatePermissionsCmd) {
        mediaType = "template";
        if (template.getFormat().equals(ImageFormat.ISO)) {
            throw new InvalidParameterValueException("Please provide a valid template");
        }
    }
    if (cmd instanceof UpdateIsoPermissionsCmd) {
        mediaType = "iso";
        if (!template.getFormat().equals(ImageFormat.ISO)) {
            throw new InvalidParameterValueException("Please provide a valid iso");
        }
    }

    // convert projectIds to accountNames
    if (projectIds != null) {
        // CS-17842, initialize accountNames list
        if (accountNames == null) {
            accountNames = new ArrayList<String>();
        }
        for (Long projectId : projectIds) {
            Project project = _projectMgr.getProject(projectId);
            if (project == null) {
                throw new InvalidParameterValueException("Unable to find project by id " + projectId);
            }

            if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) {
                throw new InvalidParameterValueException(
                        "Account " + caller + " can't access project id=" + projectId);
            }
            accountNames.add(_accountMgr.getAccount(project.getProjectAccountId()).getAccountName());
        }
    }

    //_accountMgr.checkAccess(caller, AccessType.ModifyEntry, true, template);
    _accountMgr.checkAccess(caller, AccessType.OperateEntry, true, template); //TODO: should we replace all ModifyEntry as OperateEntry?

    // If the template is removed throw an error.
    if (template.getRemoved() != null) {
        s_logger.error(
                "unable to update permissions for " + mediaType + " with id " + id + " as it is removed  ");
        throw new InvalidParameterValueException(
                "unable to update permissions for " + mediaType + " with id " + id + " as it is removed ");
    }

    if (id.equals(Long.valueOf(1))) {
        throw new InvalidParameterValueException(
                "unable to update permissions for " + mediaType + " with id " + id);
    }

    boolean isAdmin = _accountMgr.isAdmin(caller.getId());
    // check configuration parameter(allow.public.user.templates) value for
    // the template owner
    boolean allowPublicUserTemplates = AllowPublicUserTemplates.valueIn(template.getAccountId());
    if (!isAdmin && !allowPublicUserTemplates && isPublic != null && isPublic) {
        throw new InvalidParameterValueException("Only private " + mediaType + "s can be created.");
    }

    if (accountNames != null) {
        if ((operation == null) || (!operation.equalsIgnoreCase("add") && !operation.equalsIgnoreCase("remove")
                && !operation.equalsIgnoreCase("reset"))) {
            throw new InvalidParameterValueException(
                    "Invalid operation on accounts, the operation must be either 'add' or 'remove' in order to modify launch permissions."
                            + "  Given operation is: '" + operation + "'");
        }
    }

    Long ownerId = template.getAccountId();
    if (ownerId == null) {
        // if there is no owner of the template then it's probably already a
        // public template (or domain private template) so
        // publishing to individual users is irrelevant
        throw new InvalidParameterValueException(
                "Update template permissions is an invalid operation on template " + template.getName());
    }

    //Only admin or owner of the template should be able to change its permissions
    if (caller.getId() != ownerId && !isAdmin) {
        throw new InvalidParameterValueException("Unable to grant permission to account "
                + caller.getAccountName() + " as it is neither admin nor owner or the template");
    }

    VMTemplateVO updatedTemplate = _tmpltDao.createForUpdate();

    if (isPublic != null) {
        updatedTemplate.setPublicTemplate(isPublic.booleanValue());
    }

    if (isFeatured != null) {
        updatedTemplate.setFeatured(isFeatured.booleanValue());
    }

    if (isExtractable != null) {
        // Only Root admins allowed to change it for templates
        if (!template.getFormat().equals(ImageFormat.ISO) && !_accountMgr.isRootAdmin(caller.getId())) {
            throw new InvalidParameterValueException(
                    "Only ROOT admins are allowed to modify isExtractable attribute.");
        } else {
            // For Isos normal user can change it, as their are no derivatives.
            updatedTemplate.setExtractable(isExtractable.booleanValue());
        }
    }

    _tmpltDao.update(template.getId(), updatedTemplate);

    //when operation is add/remove, accountNames can not be null
    if (("add".equalsIgnoreCase(operation) || "remove".equalsIgnoreCase(operation)) && accountNames == null) {
        throw new InvalidParameterValueException(
                "Operation " + operation + " requires accounts or projectIds to be passed in");
    }

    //Derive the domain id from the template owner as updateTemplatePermissions is not cross domain operation
    Account owner = _accountMgr.getAccount(ownerId);
    final Domain domain = _domainDao.findById(owner.getDomainId());
    if ("add".equalsIgnoreCase(operation)) {
        final List<String> accountNamesFinal = accountNames;
        final List<Long> accountIds = new ArrayList<Long>();
        Transaction.execute(new TransactionCallbackNoReturn() {
            @Override
            public void doInTransactionWithoutResult(TransactionStatus status) {
                for (String accountName : accountNamesFinal) {
                    Account permittedAccount = _accountDao.findActiveAccount(accountName, domain.getId());
                    if (permittedAccount != null) {
                        if (permittedAccount.getId() == caller.getId()) {
                            continue; // don't grant permission to the template
                            // owner, they implicitly have permission
                        }
                        accountIds.add(permittedAccount.getId());
                        LaunchPermissionVO existingPermission = _launchPermissionDao
                                .findByTemplateAndAccount(id, permittedAccount.getId());
                        if (existingPermission == null) {
                            LaunchPermissionVO launchPermission = new LaunchPermissionVO(id,
                                    permittedAccount.getId());
                            _launchPermissionDao.persist(launchPermission);
                        }
                    } else {
                        throw new InvalidParameterValueException(
                                "Unable to grant a launch permission to account " + accountName
                                        + " in domain id=" + domain.getUuid() + ", account not found.  "
                                        + "No permissions updated, please verify the account names and retry.");
                    }
                }
            }
        });

        // add ACL permission in IAM
        Map<String, Object> permit = new HashMap<String, Object>();
        permit.put(ApiConstants.ENTITY_TYPE, VirtualMachineTemplate.class);
        permit.put(ApiConstants.ENTITY_ID, id);
        permit.put(ApiConstants.ACCESS_TYPE, AccessType.UseEntry);
        permit.put(ApiConstants.IAM_ACTION, "listTemplates");
        permit.put(ApiConstants.ACCOUNTS, accountIds);
        _messageBus.publish(_name, EntityManager.MESSAGE_GRANT_ENTITY_EVENT, PublishScope.LOCAL, permit);
    } else if ("remove".equalsIgnoreCase(operation)) {
        List<Long> accountIds = new ArrayList<Long>();
        for (String accountName : accountNames) {
            Account permittedAccount = _accountDao.findActiveAccount(accountName, domain.getId());
            if (permittedAccount != null) {
                accountIds.add(permittedAccount.getId());
            }
        }
        _launchPermissionDao.removePermissions(id, accountIds);
        // remove ACL permission in IAM
        Map<String, Object> permit = new HashMap<String, Object>();
        permit.put(ApiConstants.ENTITY_TYPE, VirtualMachineTemplate.class);
        permit.put(ApiConstants.ENTITY_ID, id);
        permit.put(ApiConstants.ACCESS_TYPE, AccessType.UseEntry);
        permit.put(ApiConstants.IAM_ACTION, "listTemplates");
        permit.put(ApiConstants.ACCOUNTS, accountIds);
        _messageBus.publish(_name, EntityManager.MESSAGE_REVOKE_ENTITY_EVENT, PublishScope.LOCAL, permit);
    } else if ("reset".equalsIgnoreCase(operation)) {
        // do we care whether the owning account is an admin? if the
        // owner is an admin, will we still set public to false?
        updatedTemplate = _tmpltDao.createForUpdate();
        updatedTemplate.setPublicTemplate(false);
        updatedTemplate.setFeatured(false);
        _tmpltDao.update(template.getId(), updatedTemplate);
        _launchPermissionDao.removeAllPermissions(id);
        _messageBus.publish(_name, TemplateManager.MESSAGE_RESET_TEMPLATE_PERMISSION_EVENT, PublishScope.LOCAL,
                template.getId());
    }
    return true;
}

From source file:jp.co.opentone.bsol.linkbinder.view.correspon.CorresponIndexPage.java

/**
 * CorresponType??./*w  w  w  .j  a va  2s.c  om*/
 * @param id CorresponTypeId
 * @return CorresponType
 */
private String getViewCorresponType(Long id) {
    if (id != null) {
        for (CorresponType c : typeList) {
            if (id.equals(c.getProjectCorresponTypeId())) {
                return c.getCorresponType();
            }
        }
        return SystemConfig.getValue(KEY_UNKNOWN_TXT);
    }
    return null;
}