/* * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.guvnor.rest.backend; import java.util.HashMap; import java.util.Map; import static org.guvnor.rest.backend.cmd.AbstractJobCommand.JOB_REQUEST_KEY; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.guvnor.rest.backend.cmd.AbstractJobCommand; import org.guvnor.rest.backend.cmd.AddRepositoryToOrgUnitCmd; import org.guvnor.rest.backend.cmd.CompileProjectCmd; import org.guvnor.rest.backend.cmd.CreateOrCloneRepositoryCmd; import org.guvnor.rest.backend.cmd.CreateOrgUnitCmd; import org.guvnor.rest.backend.cmd.CreateProjectCmd; import org.guvnor.rest.backend.cmd.DeleteProjectCmd; import org.guvnor.rest.backend.cmd.DeployProjectCmd; import org.guvnor.rest.backend.cmd.InstallProjectCmd; import org.guvnor.rest.backend.cmd.RemoveOrgUnitCmd; import org.guvnor.rest.backend.cmd.RemoveRepositoryCmd; import org.guvnor.rest.backend.cmd.RemoveRepositoryFromOrgUnitCmd; import org.guvnor.rest.backend.cmd.TestProjectCmd; import org.guvnor.rest.backend.cmd.UpdateOrgUnitCmd; import org.guvnor.rest.client.AddRepositoryToOrganizationalUnitRequest; import org.guvnor.rest.client.CompileProjectRequest; import org.guvnor.rest.client.CreateOrCloneRepositoryRequest; import org.guvnor.rest.client.CreateOrganizationalUnitRequest; import org.guvnor.rest.client.CreateProjectRequest; import org.guvnor.rest.client.DeleteProjectRequest; import org.guvnor.rest.client.DeployProjectRequest; import org.guvnor.rest.client.InstallProjectRequest; import org.guvnor.rest.client.JobRequest; import org.guvnor.rest.client.JobStatus; import org.guvnor.rest.client.RemoveOrganizationalUnitRequest; import org.guvnor.rest.client.RemoveRepositoryFromOrganizationalUnitRequest; import org.guvnor.rest.client.RemoveRepositoryRequest; import org.guvnor.rest.client.TestProjectRequest; import org.guvnor.rest.client.UpdateOrganizationalUnitRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.uberfire.commons.async.SimpleAsyncExecutorService; /** * Utility class observing requests for various functions of the REST service */ @ApplicationScoped public class JobRequestScheduler { private static final Logger logger = LoggerFactory.getLogger( JobRequestScheduler.class ); @Inject private JobResultManager jobResultManager; @Inject private JobRequestHelper jobRequestHelper; public void createOrCloneRepositoryRequest( final CreateOrCloneRepositoryRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepository().getName()); params.put("Operation", "createOrCloneRepository"); scheduleJob(jobRequest, new CreateOrCloneRepositoryCmd(jobRequestHelper, jobResultManager, params)); } public void removeRepositoryRequest( final RemoveRepositoryRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Operation", "removeRepository"); scheduleJob(jobRequest, new RemoveRepositoryCmd(jobRequestHelper, jobResultManager, params)); } public void createProjectRequest( final CreateProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "createProject"); scheduleJob(jobRequest, new CreateProjectCmd(jobRequestHelper, jobResultManager, params)); } public void deleteProjectRequest( final DeleteProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "deleteProject"); scheduleJob(jobRequest, new DeleteProjectCmd(jobRequestHelper, jobResultManager, params)); } public void compileProjectRequest( final CompileProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "compileProject"); scheduleJob(jobRequest, new CompileProjectCmd(jobRequestHelper, jobResultManager, params)); } public void installProjectRequest( final InstallProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "installProject"); scheduleJob(jobRequest, new InstallProjectCmd(jobRequestHelper, jobResultManager, params)); } public void testProjectRequest( final TestProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "testProject"); scheduleJob(jobRequest, new TestProjectCmd(jobRequestHelper, jobResultManager, params)); } public void deployProjectRequest( final DeployProjectRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Project", jobRequest.getProjectName()); params.put("Operation", "deployProject"); scheduleJob(jobRequest, new DeployProjectCmd(jobRequestHelper, jobResultManager, params)); } public void createOrganizationalUnitRequest( final CreateOrganizationalUnitRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Operation", "createOrgUnit"); scheduleJob(jobRequest, new CreateOrgUnitCmd(jobRequestHelper, jobResultManager, params)); } public void updateOrganizationalUnitRequest( final UpdateOrganizationalUnitRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Operation", "updateOrgUnit"); scheduleJob(jobRequest, new UpdateOrgUnitCmd(jobRequestHelper, jobResultManager, params)); } public void addRepositoryToOrganizationalUnitRequest( final AddRepositoryToOrganizationalUnitRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Operation", "addRepositoryToOrgUnit"); scheduleJob(jobRequest, new AddRepositoryToOrgUnitCmd(jobRequestHelper, jobResultManager, params)); } public void removeRepositoryFromOrganizationalUnitRequest( final RemoveRepositoryFromOrganizationalUnitRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Repository", jobRequest.getRepositoryName()); params.put("Operation", "removeRepositoryFromOrgUnit"); scheduleJob(jobRequest, new RemoveRepositoryFromOrgUnitCmd(jobRequestHelper, jobResultManager, params)); } public void removeOrganizationalUnitRequest( final RemoveOrganizationalUnitRequest jobRequest ) { final Map<String, Object> params = getContext(jobRequest); params.put("Operation", "removeOrgUnit"); scheduleJob(jobRequest, new RemoveOrgUnitCmd(jobRequestHelper, jobResultManager, params)); } protected Map<String, Object> getContext(JobRequest jobRequest) { final Map<String, Object> params = new HashMap<String, Object>(); params.put(JOB_REQUEST_KEY, jobRequest); params.put("BusinessKey", jobRequest.getJobId()); params.put("Retries", 0); return params; } private void scheduleJob(final JobRequest jobRequest, final AbstractJobCommand command){ jobRequest.setStatus(JobStatus.APPROVED); logger.debug("Scheduling job request with id: {} and command class: {}", jobRequest.getJobId(), command.getClass().getName() ); SimpleAsyncExecutorService.getDefaultInstance().execute(command); } }