/* * RHQ Management Platform * Copyright (C) 2005-2009 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.plugin; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; /** * An agent plugin. * * This object contains information about the plugin jar itself (e.g. its name and MD5). * It may also contain the jar contents ({@link #getContent()}). */ @DiscriminatorValue("AGENT") @NamedQueries( { // // this query is how you enable and disable plugins @NamedQuery(name = Plugin.UPDATE_PLUGIN_ENABLED_BY_ID, query = "" // + "UPDATE Plugin p " // + " SET p.enabled = :enabled " // + " WHERE p.id = :id)"), // helps you determine if a plugin is installed or was deleted @NamedQuery(name = Plugin.QUERY_GET_STATUS_BY_NAME, query = "" // + " SELECT p.status " // + " FROM Plugin AS p " // + " WHERE p.name = :name)"), // // helps you determine which installed plugins are enabled or disabled @NamedQuery(name = Plugin.QUERY_GET_NAMES_BY_ENABLED, query = "" // + " SELECT p.name " // + " FROM Plugin AS p " // + " WHERE p.enabled = :enabled " // + " AND p.status = 'INSTALLED' "), // // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_BY_IDS, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin AS p " // + " WHERE p.id IN (:ids) " // + " AND p.status = 'INSTALLED' "), // // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_ALL_BY_IDS, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin AS p " // + " WHERE p.id IN (:ids) "), // // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_BY_NAME, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin AS p " // + " WHERE p.name=:name " // + " AND p.status = 'INSTALLED' "), // // gets the plugin, even if it is deleted // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_ANY_BY_NAME, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin AS p " // + " WHERE p.name=:name "), // @NamedQuery(name = Plugin.QUERY_FIND_ALL, query = " SELECT new org.rhq.core.domain.plugin.Plugin( " + " p.id, " + " p.name, " + " p.path, " + " p.displayName, " + " p.enabled, " + " p.status, " + " p.description, " + " p.help, " + " p.md5, " + " p.version, " + " p.ampsVersion, " + " p.ctime, " + " p.mtime) " + " FROM Plugin AS p "), // finds all installed - ignores those plugins marked as deleted // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_ALL_INSTALLED, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin AS p " // + " WHERE p.status = 'INSTALLED' "), // @NamedQuery(name = Plugin.QUERY_FIND_ALL_DELETED, query = " SELECT new org.rhq.core.domain.plugin.Plugin( " + " p.id, " + " p.name, " + " p.path, " + " p.displayName, " + " p.enabled, " + " p.status, " + " p.description, " + " p.help, " + " p.md5, " + " p.version, " + " p.ampsVersion, " + " p.ctime, " + " p.mtime) " + " FROM Plugin AS p " + " WHERE p.status = 'DELETED'"), // this query is how you enable and disable plugins @NamedQuery(name = Plugin.UPDATE_PLUGINS_ENABLED_BY_IDS, query = "" // + "UPDATE Plugin p " // + " SET p.enabled = :enabled " // + " WHERE p.id IN (:ids)"), // this query does not load the content blob, but loads everything else @NamedQuery(name = Plugin.QUERY_FIND_BY_RESOURCE_TYPE_AND_CATEGORY, query = "" // + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " // + " p.name, " // + " p.path, " // + " p.displayName, " // + " p.enabled, " // + " p.status, " // + " p.description, " // + " p.help, " // + " p.md5, " // + " p.version, " // + " p.ampsVersion, " // + " p.ctime, " // + " p.mtime) " // + " FROM Plugin p " // + " WHERE p.status = 'INSTALLED' AND " // + " p.name IN ( SELECT rt.plugin " // + " FROM Resource res " // + " JOIN res.resourceType rt " // + " WHERE ( rt.category = :resourceCategory OR :resourceCategory IS NULL ) " // + " AND ( rt.name = :resourceTypeName OR :resourceTypeName IS NULL ) ) " // + " ORDER BY p.name"), // @NamedQuery(name = Plugin.QUERY_FIND_ALL_TO_PURGE, query = "" + " SELECT new org.rhq.core.domain.plugin.Plugin( " // + " p.id, " + " p.name, " + " p.path, " + " p.displayName, " + " p.enabled, " + " p.status, " + " p.description, " + " p.help, " + " p.md5, " + " p.version, " + " p.ampsVersion, " + " p.ctime, " + " p.mtime) " + " FROM Plugin p " + " WHERE p.ctime = -1 AND p.status = 'DELETED'" ), @NamedQuery( name = Plugin.QUERY_UNACKED_DELETED_PLUGINS, query = "SELECT p FROM Plugin p WHERE p.status = 'DELETED' AND :serverId NOT MEMBER OF p.serversAcknowledgedDelete" ) }) @Entity public class Plugin extends AbstractPlugin { private static final long serialVersionUID = 1L; public static final String QUERY_GET_STATUS_BY_NAME = "Plugin.queryGetStatusByName"; public static final String QUERY_GET_NAMES_BY_ENABLED = "Plugin.queryGetNamesByEnabled"; public static final String QUERY_FIND_BY_IDS = "Plugin.findByIds"; public static final String QUERY_FIND_ALL_BY_IDS = "Plugin.findAllByIds"; public static final String QUERY_FIND_BY_NAME = "Plugin.findByName"; public static final String QUERY_FIND_ANY_BY_NAME = "Plugin.findAnyByName"; public static final String QUERY_FIND_ALL = "Plugin.findAll"; public static final String QUERY_FIND_ALL_INSTALLED = "Plugin.findAllInstalled"; public static final String QUERY_FIND_ALL_DELETED = "Plugin.findAllDeleted"; public static final String QUERY_FIND_ALL_TO_PURGE = "Plugin.findAllToPurge"; public static final String UPDATE_PLUGINS_ENABLED_BY_IDS = "Plugin.updatePluginsEnabledByIds"; public static final String QUERY_FIND_BY_RESOURCE_TYPE_AND_CATEGORY = "Plugin.findByResourceType"; public static final String UPDATE_PLUGIN_ENABLED_BY_ID = "Plugin.updatePluginEnabledById"; public static final String QUERY_UNACKED_DELETED_PLUGINS = "Plugin.unackedDeletedPlugins"; /** * @deprecated This used to identify a named query that no longer exist. Do not use this for anything. */ @Deprecated public static final String PURGE_PLUGINS = "Plugin.purgePlugins"; /** * @deprecated This is no longer used and means nothing now. */ @Deprecated public static final long PURGED = -1; public Plugin() { super(); setDeployment(PluginDeploymentType.AGENT); } public Plugin(String name, String path) { super(name, path); setDeployment(PluginDeploymentType.AGENT); } public Plugin(String name, String path, String md5) { super(name, path, md5); setDeployment(PluginDeploymentType.AGENT); } public Plugin(int id, String name, String path, String displayName, boolean enabled, PluginStatusType status, String description, String help, String md5, String version, String ampsVersion, long ctime, long mtime) { super(id, name, path, displayName, enabled, status, description, help, md5, version, ampsVersion, PluginDeploymentType.AGENT, ctime, mtime); } @Override public void setDeployment(PluginDeploymentType deployment) { if (deployment != PluginDeploymentType.AGENT) { throw new IllegalArgumentException("Plugin can only ever have deployment type of AGENT: " + deployment); } super.setDeployment(deployment); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if ((obj == null) || !(obj instanceof Plugin)) { return false; } return super.equals(obj); } @Override public int hashCode() { return super.hashCode(); } @Override public String toString() { return "AgentPlugin " + super.toString(); } }