/*
* 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.util.List;
import javax.ejb.Remote;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
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;
/**
* Public ResourceFactory API.
*/
@Remote
public interface ResourceFactoryManagerRemote {
/**
* 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#CONFIGURATION}. If this call is made for
* a resource type that cannot be created via a configuration, the plugin container will throw an exception.
*
* @param subject user requesting the creation
* @param parentResourceId parent resource under which the new resource should be created
* @param resourceTypeId type of resource to create
* @param resourceName name of the resource being created
* @param pluginConfiguration optional plugin configuration that may be needed in order to create the new resource
* @param resourceConfiguration resource configuration for the new resource
* @param timeout number of milliseconds before the agent suffers a timeout when creating the resource. If null uses default.
* @return the create resource history record
*/
CreateResourceHistory createResource(Subject subject, int parentResourceId, int resourceTypeId,
String resourceName, Configuration pluginConfiguration, Configuration resourceConfiguration, Integer timeout);
/**
* 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 subject 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 Ignored, pass null. This is determined from the package.
* @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 The string version of the package. If null will be set to system timestamp (long)
* @param architectureId Id of the target architecture of the package, null indicates NoArch (any).
* @param deploymentTimeConfiguration dictates how the package will be deployed
* @param packageBits content of the package to create
* @param timeout number of milliseconds before the agent suffers a timeout when creating the resource. If null uses default.
* @return the create resource history record
*/
CreateResourceHistory createPackageBackedResource(Subject subject, int parentResourceId, int newResourceTypeId,
String newResourceName, Configuration pluginConfiguration, String packageName, String packageVersion,
Integer architectureId, Configuration deploymentTimeConfiguration, byte[] packageBits, Integer timeout);
/**
* Like {@link #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)}
* except that this method takes a <code>temporaryContentHandle</code> as parameter instead of a byte array.
*
* @param subject 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 Ignored, pass null. This is determined from the package.
* @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 The string version of the package. If null will be set to system timestamp (long)
* @param architectureId Id of the target architecture of the package, null indicates NoArch (any).
* @param deploymentTimeConfiguration dictates how the package will be deployed
* @param temporaryContentHandle content handle of the package to create
* @param timeout number of milliseconds before the agent suffers a timeout when creating the resource. If null uses default.
* @return the create resource history record
*
* @see org.rhq.enterprise.server.content.ContentManagerRemote#createTemporaryContentHandle()
* @see org.rhq.enterprise.server.content.ContentManagerRemote#uploadContentFragment(String, byte[], int, int)
* @see #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)
*
* @since 4.10
*/
CreateResourceHistory createPackageBackedResourceViaContentHandle(Subject subject, int parentResourceId,
int newResourceTypeId, String newResourceName, Configuration pluginConfiguration, String packageName,
String packageVersion, Integer architectureId, Configuration deploymentTimeConfiguration,
String temporaryContentHandle, Integer timeout);
/**
* 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 subject 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 Ignored, pass null. This is determined from the package.
* @param pluginConfiguration optional plugin configuration that may be needed in order to create the new
* resource
* @param deploymentTimeConfiguration dictates how the package will be deployed
* @param packageVersionId An existing package version to back this resource
* @param timeout number of milliseconds before the agent suffers a timeout when creating the resource. If null uses default.
* @return the create resource history record
*/
public CreateResourceHistory createPackageBackedResourceViaPackageVersion(Subject subject, int parentResourceId,
int newResourceTypeId, String newResourceName, Configuration pluginConfiguration,
Configuration deploymentTimeConfiguration, int packageVersionId, Integer timeout);
/**
* Deletes a physical resource from the agent machine. After this call, the resource will no longer be accessible
* not only to JON, but in general. It is up to the plugin to determine how to complete the delete, but a deleted
* resource will no longer be returned from resource discoveries.
*
* @param subject user requesting the deletion. must have resource delete perm on the resource.
* @param resourceId resource being deleted
* @return the delete resource history record
*/
DeleteResourceHistory deleteResource(Subject subject, int resourceId);
/**
* Deletes physical resources from the agent machine. After this call, the resource will no longer be accessible
* not only to JON, but in general. It is up to the plugin to determine how to complete the delete, but a deleted
* resource will no longer be returned from resource discoveries.
*
* @param subject user requesting the deletion. must have resource delete perm on the resources.
* @param resourceIds the resources being deleted
* @return not null
*/
List<DeleteResourceHistory> deleteResources(Subject subject, int[] resourceIds);
/**
* Returns a pagination enabled list of requests for the creation of new child resources to the specified parent.
* These requests may be completed or still in progress; it represents the history of creation attempts for this
* parent resource.
*
* @param subject the user making the request
* @param parentResourceId resource to check for child resource creations
* @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
* @param pageControl control for pagination
*
* @return list of requests
*/
PageList<CreateResourceHistory> findCreateChildResourceHistory(Subject subject, int parentResourceId,
Long beginDate, Long endDate, PageControl pageControl);
/**
* Returns a pagination enabled list of requests to delete a child resource on the specified parent. These requests
* may be complete or still in progress; it represents the history of all delete attempts of child resources to this
* resource.
*
* @param subject the user making the request
* @param parentResourceId resource to check for deleted child resources
* @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
* @param pageControl control for pagination
*
* @return list of requests
*/
PageList<DeleteResourceHistory> findDeleteChildResourceHistory(Subject subject, int parentResourceId,
Long beginDate, Long endDate, PageControl pageControl);
}