/* * RHQ Management Platform * Copyright 2011, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.server.plugin.pc.drift; import java.io.File; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.DriftChangeSetCriteria; import org.rhq.core.domain.criteria.DriftCriteria; import org.rhq.core.domain.drift.Drift; import org.rhq.core.domain.drift.DriftChangeSet; import org.rhq.core.domain.drift.DriftComposite; import org.rhq.core.domain.drift.DriftFile; import org.rhq.core.domain.util.PageList; /** * All drift server plugins must implement this facet. The methods here must all be defined in * DriftManagerLocal as well. See DriftManagerLocal for jdoc of these methods. * * Note that the Subject parameter is provided as a convenience to the plugin methods. It is not expected that * authz be performed by the plugin code. But, it may be useful to have the user name or session id for logging, or * for unknown need to interact with the RHQ SLSBs. * * @author Jay Shaughnessy * @author John Sanda */ public interface DriftServerPluginFacet { /** * <p> * Performs criteria-based search for change sets. * </p> * <p> * Note that there are really two types * of change sets - a delta change set and a snapshot or coverage change set. A snapshot * includes all files that are under drift detection. The delta snapshot just includes * references to those files that have changed (here change can be a modification, * addition, or deletion of a file). * </p> * <p> * Implementations of this method can assume that queries for snapshots and for delta * change sets will always be made in separate calls; in other words, this method should * return either only snapshots (i.e., coverage change sets) or only delta change sets. * This assumption/restriction is in place in large part because of how the UI queries * change sets. * </p> * * @param subject * @param criteria * @return The DriftChangeSets matching the criteria */ PageList<? extends DriftChangeSet<?>> findDriftChangeSetsByCriteria(Subject subject, DriftChangeSetCriteria criteria); PageList<DriftComposite> findDriftCompositesByCriteria(Subject subject, DriftCriteria criteria); /** * Standard criteria based fetch method * @param subject * @param criteria * @return The Drifts matching the criteria */ PageList<? extends Drift<?, ?>> findDriftsByCriteria(Subject subject, DriftCriteria criteria); /** * Simple get method for a DriftFile. Does not return the content. * @param subject * @param hashId * @return The DriftFile sans content. */ DriftFile getDriftFile(Subject subject, String hashId) throws Exception; /** * Parses the given change set file and persists its data. * * @param subject * @param resourceId * @param changeSetZip * @return a summary of what was in the change set file * @throws Exception */ DriftChangeSetSummary saveChangeSet(Subject subject, int resourceId, File changeSetZip) throws Exception; /** * Persists a new initial change set for a pinned snapshot. This can happen when pinning * a snapshot to a definition (resource level) or when pinning a snapshot to a template * (resource type level). The RHQ server takes a snapshot, converts it into a change * set, and then calls this method to persist the newly created change set. Note that * when the RHQ server is pinning a snapshot to a definition, the change set will have * a valid resource id associated with it, but when the snapshot is getting pinned to a * template, the {@link DriftChangeSet#getResourceId() resourceId} property can be * ignored. * * @param subject The user submitting the request * @param changeSet The change set to persist which may be a resource level change set meaning it belongs * to a drift definition, or it may be a type level change set meaning it belongs to * a {@link org.rhq.core.domain.drift.DriftDefinitionTemplate template} * @return The id of the newly persisted change set */ String persistChangeSet(Subject subject, DriftChangeSet<?> changeSet); /** * Creates a copy of the specified, existing change set. The new change set will be * persisted. The new change set will belong to the specified drift definition. * * @param subject * @param changeSetId * @param driftDefId * @param resourceId * @return */ String copyChangeSet(Subject subject, String changeSetId, int driftDefId, int resourceId); void saveChangeSetFiles(Subject subject, File changeSetFilesZip) throws Exception; /** * When a user wants to completely remove all data related to a drift definition, * this method will be called to give the plugin a chance to clean up any data related * to the drift definition that is going to be deleted. * @param subject * @param resourceId the resource whose drift definition is being purged * @param driftDefName identifies the data that is to be purged */ void purgeByDriftDefinitionName(Subject subject, int resourceId, String driftDefName) throws Exception; /** * This will remove all drift files that are no longer referenced by drift entries. This is a maintenance method * to help reclaim space on the backend. * * @param subject * @param purgeMillis only those unused drift files that are older than this (in epoch millis) will be purged. * @return number of orphaned drife files that were removed */ int purgeOrphanedDriftFiles(Subject subject, long purgeMillis); /** * Returns the content associated with the specified hash as a string * * @param hash The hash the uniquely identifies the requested content * @return The content as a string */ String getDriftFileBits(Subject subject, String hash); byte[] getDriftFileAsByteArray(Subject subject, String hash); }