/*
* 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.resource;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import javax.ejb.Local;
import org.rhq.core.clientapi.agent.inventory.CreateResourceResponse;
import org.rhq.core.clientapi.agent.inventory.DeleteResourceResponse;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.resource.CreateDeletePolicy;
import org.rhq.core.domain.resource.CreateResourceHistory;
import org.rhq.core.domain.resource.DeleteResourceHistory;
import org.rhq.core.domain.resource.ResourceCreationDataType;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
/**
* @author Jason Dobies
*/
@Local
public interface ResourceFactoryManagerLocal extends ResourceFactoryManagerRemote {
// Calls from the agent --------------------------------------------
/**
* For documentation, see
* {@link org.rhq.core.clientapi.server.inventory.ResourceFactoryServerService#completeCreateResource(org.rhq.core.clientapi.agent.inventory.CreateResourceResponse)}
* .
*/
void completeCreateResource(CreateResourceResponse response);
/**
* For documentation, see
* {@link org.rhq.core.clientapi.server.inventory.ResourceFactoryServerService#completeDeleteResourceRequest(org.rhq.core.clientapi.agent.inventory.DeleteResourceResponse)}
* .
*/
void completeDeleteResourceRequest(DeleteResourceResponse response);
// Use case logic --------------------------------------------
/**
* Creates a new physical resource. The resource will be created as a child of the specified parent. In other words,
* the resource component of the indicated parent will be used to create the new resource. This call should only be
* made for resource types that are defined with a create/delete policy of {@link CreateDeletePolicy#BOTH} or
* {@link CreateDeletePolicy#CREATE_ONLY}. If this call is made for a resource type that cannot be created based on
* this policy, the plugin container will throw an exception. This call should only be made for resource types that
* are defined with a creation data type of {@link ResourceCreationDataType#CONTENT}. If this call is made for a
* resource type that cannot be created via an package, the plugin container will throw an exception.
*
* @param user user requesting the creation
* @param parentResourceId parent resource under which the new resource should be created
* @param newResourceTypeId identifies the type of resource being created
* @param newResourceName name of the resource being created
* @param pluginConfiguration optional plugin configuration that may be needed in order to create the new
* resource
* @param packageName name of the package that will be created as a result of this resource create
* @param packageVersion machine formatted identifier of the specific version of the package
* @param architectureId ID of the architecture of the package, null indicates NoArch (any)
* @param deploymentTimeConfiguration dictates how the package will be deployed
* @param packageBitStream content of the package to create
*/
CreateResourceHistory createResource(Subject user, int parentResourceId, int newResourceTypeId,
String newResourceName, Configuration pluginConfiguration, String packageName, String packageVersion,
Integer architectureId, Configuration deploymentTimeConfiguration, InputStream packageBitStream);
CreateResourceHistory createResource(Subject user, int parentResourceId, int newResourceTypeId,
String newResourceName, Configuration pluginConfiguration, String packageName, String packageVersion,
Integer architectureId, Configuration deploymentTimeConfiguration, InputStream packageBitStream,
Map<String, String> packageUploadDetails);
// Internal Utilities --------------------------------------------
/**
* Returns the history item corresponding to the specified ID.
*
* @param historyItemId identifies the history item to return
*
* @return history item for the id; <code>null</code> if the id does not have a corresponding item
*/
CreateResourceHistory getCreateHistoryItem(int historyItemId);
/**
* Returns the number of requests to create a new child resource under the specified parent known to the system.
* These requests may be completed or still in progress; it represents the history of creation attempts for this
* parent resource.
*
* @param parentResourceId resource to check for child resource creation requests
* @param beginDate filter used to show only results occurring after this epoch millis parameter, nullable
* @param endDate filter used to show only results occurring before this epoch millis parameter, nullable
*
* @return number of requests in the resource creation history for the specified parent
*/
int getCreateChildResourceHistoryCount(int parentResourceId, Long beginDate, Long endDate);
/**
* Returns the number of requests to delete a child resource from the specified parent resource. These requests may
* be complete or still in progress; it represents the history of all delete attempts of child resources to this
* resource.
*
* @param parentResourceId resource to check for child resource delete requests
* @param beginDate filter used to show only results occurring after this epoch millis parameter, nullable
* @param endDate filter used to show only results occurring before this epoch millis parameter, nullable
*
* @return number of delete requests for child resources
*/
int getDeleteChildResourceHistoryCount(int parentResourceId, Long beginDate, Long endDate);
/**
* Persists a record in the resource history to indicate a request has been made to create a configuration-backed
* resource.
*
* @param user user performing the create
* @param parentResourceId parent resource under which the resource should be created
* @param resourceTypeId type of resource being created
* @param createResourceName name of the resource being created
* @param configuration resource configuration of the new resource
*
* @return persisted history entity (i.e. ID will be populated)
*/
CreateResourceHistory persistCreateHistory(Subject user, int parentResourceId, int resourceTypeId,
String createResourceName, Configuration configuration);
/**
* Persists a record in the resource history to indicate a request has been made to create an package-backed
* resource.
*
* @param user user performing the create
* @param parentResourceId parent resource under which the resource should be created
* @param resourceTypeId type of resource being created
* @param createResourceName name of the resource being created
* @param packageVersion package version being installed
* @param deploymentTimeConfiguration configuration of the package used when installing
*
* @return persisted history entity (i.e. ID will be populated)
*/
CreateResourceHistory persistCreateHistory(Subject user, int parentResourceId, int resourceTypeId,
String createResourceName, PackageVersion packageVersion, Configuration deploymentTimeConfiguration);
/**
* Persists a record in the resource history to indicate a request has been made to delete a resource.
*
* @param user use performing the delete
* @param resourceId resource being deleted
*
* @return persisted history entity (i.e. ID will be populated)
*/
DeleteResourceHistory persistDeleteHistory(Subject user, int resourceId);
/**
* Will check to see if any in progress resource creation jobs are taking too long to finish and if so marks them as
* failed. This method will be perodically called by the server.
*/
void checkForTimedOutRequests();
/**
* @see {@link ResourceFactoryManagerRemote#createResource(org.rhq.core.domain.auth.Subject, int, int, String, org.rhq.core.domain.configuration.Configuration, org.rhq.core.domain.configuration.Configuration, Integer)}.
*/
CreateResourceHistory createResource(Subject subject, int parentResourceId, int resourceTypeId,
String resourceName, Configuration pluginConfiguration, Configuration resourceConfiguration);
/**
* @see {@link ResourceFactoryManagerRemote#createPackageBackedResource(org.rhq.core.domain.auth.Subject, int, int, String, org.rhq.core.domain.configuration.Configuration, String, String, Integer, org.rhq.core.domain.configuration.Configuration, byte[], Integer)}.
*/
CreateResourceHistory createPackageBackedResource(Subject subject, int parentResourceId, int newResourceTypeId,
String newResourceName, Configuration pluginConfiguration, String packageName, String packageVersion,
Integer architectureId, Configuration deploymentTimeConfiguration, byte[] packageBits);
/**
* @see {@link ResourceFactoryManagerRemote#createPackageBackedResourceViaPackageVersion(org.rhq.core.domain.auth.Subject, int, int, String, org.rhq.core.domain.configuration.Configuration, org.rhq.core.domain.configuration.Configuration, int, Integer)}.
*/
public CreateResourceHistory createPackageBackedResourceViaPackageVersion(Subject subject, int parentResourceId,
int newResourceTypeId, String newResourceName, Configuration pluginConfiguration,
Configuration deploymentTimeConfiguration, int packageVersionId);
}