/* * RHQ Management Platform * Copyright (C) 2005-2008 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, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * 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 and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser 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.core.domain.configuration.group; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.ResourceConfigurationUpdate; import org.rhq.core.domain.resource.group.ResourceGroup; @DiscriminatorValue("resource") @Entity @NamedQueries( { @NamedQuery(name = GroupResourceConfigurationUpdate.QUERY_FIND_ALL_IN_STATUS, query = "" // + "SELECT arcu " // + " FROM GroupResourceConfigurationUpdate arcu " // + " WHERE arcu.status = :status"), @NamedQuery(name = GroupResourceConfigurationUpdate.QUERY_FIND_BY_GROUP_ID, query = "SELECT arcu " + " FROM GroupResourceConfigurationUpdate AS arcu " // + " WHERE arcu.group.id = :groupId"), @NamedQuery(name = GroupResourceConfigurationUpdate.QUERY_FIND_LATEST_BY_GROUP_ID, query = "" // + "SELECT cgu " // + " FROM GroupResourceConfigurationUpdate cgu " // + " WHERE cgu.group.id = :groupId " // + " AND cgu.modifiedTime = ( SELECT MAX(cgu2.modifiedTime) " // + " FROM GroupResourceConfigurationUpdate cgu2 " // + " WHERE cgu2.group.id = :groupId ) ") }) public class GroupResourceConfigurationUpdate extends AbstractGroupConfigurationUpdate { private static final long serialVersionUID = 1L; public static final String QUERY_FIND_ALL_IN_STATUS = "GroupResourceConfigurationUpdate.findAllInStatus"; public static final String QUERY_FIND_BY_GROUP_ID = "GroupResourceConfigurationUpdate.findByGroupId"; public static final String QUERY_FIND_LATEST_BY_GROUP_ID = "GroupResourceConfigurationUpdate.findLatestByGroupId"; @OneToMany(mappedBy = "groupConfigurationUpdate", cascade = { CascadeType.PERSIST, CascadeType.REMOVE }) private List<ResourceConfigurationUpdate> configurationUpdates = new ArrayList<ResourceConfigurationUpdate>(); protected GroupResourceConfigurationUpdate() { } // JPA public GroupResourceConfigurationUpdate(ResourceGroup group, String subjectName) { super(group, subjectName); /* * this.configuration = groupConfiguration.deepCopy(false); * * (ips, 02/13/09): This is a temporary workaround - we don't really need to store a Configuration at all, * since it can be recalculated from the member configs when needed, but the AbstractConfigurationUpdate * base class requires the configuration field to be non-null. */ this.configuration = new Configuration(); } public void setConfigurationUpdates(List<ResourceConfigurationUpdate> configurationUpdates) { this.configurationUpdates = configurationUpdates; } public List<ResourceConfigurationUpdate> getConfigurationUpdates() { return this.configurationUpdates; } public void addConfigurationUpdate(ResourceConfigurationUpdate groupMember) { this.configurationUpdates.add(groupMember); } @Override protected void appendToStringInternals(StringBuilder str) { super.appendToStringInternals(str); str.append(", resourceConfigurationUpdates=").append(getConfigurationUpdates()); } }