/* * RHQ Management Platform * Copyright (C) 2005-2013 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.enterprise.server.measurement; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceException; import javax.persistence.Query; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.MeasurementDefinitionCriteria; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.DisplayType; import org.rhq.core.domain.measurement.MeasurementDefinition; import org.rhq.core.domain.measurement.MeasurementSchedule; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.util.CriteriaQueryGenerator; import org.rhq.enterprise.server.util.CriteriaQueryRunner; /** * A manager for {@link MeasurementDefinition}s. */ @Stateless public class MeasurementDefinitionManagerBean implements MeasurementDefinitionManagerLocal, MeasurementDefinitionManagerRemote { private static final Log LOG = LogFactory.getLog(MeasurementDefinitionManagerBean.class); @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME) private EntityManager entityManager; @EJB private MeasurementOOBManagerLocal oobManager; @EJB private SubjectManagerLocal subjectManager; public MeasurementDefinition getMeasurementDefinition(Subject subject, int definitionId) { // no authz check, this is basically interrogating a plugin, logged in auth should be enough MeasurementDefinition definition = entityManager.find(MeasurementDefinition.class, definitionId); return definition; } /** * Remove the given definition with its attached schedules. * * @param def the MeasuremendDefinition to delete */ public void removeMeasurementDefinition(MeasurementDefinition def) { // First remove the schedules and associated OOBs. List<MeasurementSchedule> schedules = def.getSchedules(); Iterator<MeasurementSchedule> schedIter = schedules.iterator(); while (schedIter.hasNext()) { MeasurementSchedule sched = schedIter.next(); if (sched.getBaseline() != null) { entityManager.remove(sched.getBaseline()); sched.setBaseline(null); } oobManager.removeOOBsForSchedule(subjectManager.getOverlord(), sched); sched.getResource().setAgentSynchronizationNeeded(); entityManager.remove(sched); schedIter.remove(); } // Now remove the definition itself. try { if ((def.getId() != 0) && entityManager.contains(def)) { entityManager.remove(def); } } catch (EntityNotFoundException enfe) { if (LOG.isDebugEnabled()) { LOG.debug("Definition # " + def.getId() + " not found: " + enfe.getMessage()); } } catch (PersistenceException pe) { if (LOG.isDebugEnabled()) { LOG.debug("Exception when deleting Definition # " + def.getId() + ": " + pe.getMessage()); } } catch (Exception e) { LOG.warn(e.fillInStackTrace()); } } @SuppressWarnings("unchecked") public List<MeasurementDefinition> findMeasurementDefinitionsByResourceType(Subject user, int resourceTypeId, DataType dataType, DisplayType displayType) { Query query = entityManager .createNamedQuery(MeasurementDefinition.FIND_BY_RESOURCE_TYPE_DATA_TYPE_DISPLAY_TYPE); query.setParameter("resourceTypeId", resourceTypeId); query.setParameter("dataType", dataType); query.setParameter("displayType", displayType); List<MeasurementDefinition> results = query.getResultList(); return results; } @SuppressWarnings("unchecked") public List<MeasurementDefinition> findMeasurementDefinitionsByIds(Subject subject, Integer[] measurementDefinitionIds) { Query query = entityManager.createNamedQuery(MeasurementDefinition.FIND_BY_IDS); List<Integer> ids = Arrays.asList(measurementDefinitionIds); query.setParameter("ids", ids); List<MeasurementDefinition> results = query.getResultList(); return results; } public PageList<MeasurementDefinition> findMeasurementDefinitionsByCriteria(Subject subject, MeasurementDefinitionCriteria criteria) { CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); CriteriaQueryRunner<MeasurementDefinition> queryRunner = new CriteriaQueryRunner<MeasurementDefinition>( criteria, generator, entityManager); return queryRunner.execute(); } }