/*
* Copyright 2012 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.jbpm.services.task.commands;
import org.jbpm.services.task.events.TaskEventSupport;
import org.jbpm.services.task.impl.TaskAdminServiceImpl;
import org.jbpm.services.task.impl.TaskAttachmentServiceImpl;
import org.jbpm.services.task.impl.TaskCommentServiceImpl;
import org.jbpm.services.task.impl.TaskContentServiceImpl;
import org.jbpm.services.task.impl.TaskDeadlinesServiceImpl;
import org.jbpm.services.task.impl.TaskDefServiceImpl;
import org.jbpm.services.task.impl.TaskIdentityServiceImpl;
import org.jbpm.services.task.impl.TaskInstanceServiceImpl;
import org.jbpm.services.task.impl.TaskQueryServiceImpl;
import org.jbpm.services.task.internals.lifecycle.LifeCycleManager;
import org.jbpm.services.task.internals.lifecycle.MVELLifeCycleManager;
import org.jbpm.services.task.rule.TaskRuleService;
import org.jbpm.services.task.rule.impl.RuleContextProviderImpl;
import org.jbpm.services.task.rule.impl.TaskRuleServiceImpl;
import org.kie.api.KieBase;
import org.kie.api.runtime.Context;
import org.kie.api.runtime.Environment;
import org.kie.api.runtime.EnvironmentName;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.RequestContext;
import org.kie.api.task.UserGroupCallback;
import org.kie.api.task.model.Task;
import org.kie.internal.command.ContextManager;
import org.kie.internal.task.api.TaskAdminService;
import org.kie.internal.task.api.TaskAttachmentService;
import org.kie.internal.task.api.TaskCommentService;
import org.kie.internal.task.api.TaskContentService;
import org.kie.internal.task.api.TaskDeadlinesService;
import org.kie.internal.task.api.TaskDefService;
import org.kie.internal.task.api.TaskIdentityService;
import org.kie.internal.task.api.TaskInstanceService;
import org.kie.internal.task.api.TaskPersistenceContext;
import org.kie.internal.task.api.TaskQueryService;
/**
*
*/
public class TaskContext implements org.kie.internal.task.api.TaskContext, RequestContext {
private TaskPersistenceContext persistenceContext;
private Environment environment;
private TaskEventSupport taskEventSupport;
private org.kie.internal.task.api.TaskContext delegate;
public TaskContext() {
}
public TaskContext( Context context, Environment environment, TaskEventSupport taskEventSupport ) {
if (context instanceof org.kie.internal.task.api.TaskContext) {
this.delegate = ((org.kie.internal.task.api.TaskContext) context);
this.persistenceContext = ((org.kie.internal.task.api.TaskContext) context).getPersistenceContext();
}
this.environment = environment;
this.taskEventSupport = taskEventSupport;
}
public TaskInstanceService getTaskInstanceService() {
return new TaskInstanceServiceImpl(this, persistenceContext, getMvelLifeCycleManager(), taskEventSupport, environment);
}
public TaskDefService getTaskDefService() {
return new TaskDefServiceImpl(persistenceContext);
}
public TaskQueryService getTaskQueryService() {
return new TaskQueryServiceImpl(persistenceContext, getUserGroupCallback());
}
public TaskContentService getTaskContentService() {
return new TaskContentServiceImpl(this, persistenceContext, taskEventSupport);
}
public TaskCommentService getTaskCommentService() {
return new TaskCommentServiceImpl(persistenceContext);
}
public TaskAttachmentService getTaskAttachmentService() {
return new TaskAttachmentServiceImpl(persistenceContext);
}
public TaskIdentityService getTaskIdentityService() {
return new TaskIdentityServiceImpl(persistenceContext);
}
public TaskAdminService getTaskAdminService() {
return new TaskAdminServiceImpl(persistenceContext);
}
public TaskDeadlinesService getTaskDeadlinesService() {
return new TaskDeadlinesServiceImpl(persistenceContext);
}
public TaskRuleService getTaskRuleService() {
return new TaskRuleServiceImpl(RuleContextProviderImpl.get());
}
public TaskPersistenceContext getPersistenceContext() {
if (persistenceContext == null) {
throw new IllegalStateException("No task persistence context available");
}
return persistenceContext;
}
public void setPersistenceContext(TaskPersistenceContext persistenceContext) {
this.persistenceContext = persistenceContext;
}
public Object get(String string) {
if (string.startsWith("local:")) {
return delegate.get(string);
}
return this.environment.get(string);
}
public void set(String string, Object o) {
if (string.startsWith("local:")) {
delegate.set(string, o);
return;
}
if (this.environment.get(string) != null) {
throw new IllegalArgumentException("Cannot override value for property " + string);
}
this.environment.set(string, o);
}
@Override
public UserGroupCallback getUserGroupCallback() {
return (UserGroupCallback) get(EnvironmentName.TASK_USER_GROUP_CALLBACK);
}
private LifeCycleManager getMvelLifeCycleManager() {
return new MVELLifeCycleManager(this, persistenceContext, getTaskContentService(), taskEventSupport);
}
public TaskEventSupport getTaskEventSupport() {
return this.taskEventSupport;
}
/*
* currently not used methods
*/
public ContextManager getContextManager() {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
public String getName() {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
public void remove(String string) {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public boolean has( String identifier ) {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public Task loadTaskVariables(Task task) {
return getTaskContentService().loadTaskVariables(task);
}
@Override
public Object getResult() {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public void setResult(Object result) {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public RequestContext with( KieBase kieBase ) {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public RequestContext with( KieSession kieSession ) {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public Context getConversationContext() {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
@Override
public Context getApplicationContext() {
throw new UnsupportedOperationException("Not supported for this type of context.");
}
}