package pl.net.bluesoft.rnd.processtool.plugins;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import pl.net.bluesoft.rnd.processtool.ProcessToolContextCallback;
import pl.net.bluesoft.rnd.processtool.ProcessToolContextFactory;
import pl.net.bluesoft.rnd.processtool.ReturningProcessToolContextCallback;
import pl.net.bluesoft.rnd.processtool.bpm.ProcessToolBpmConstants;
import pl.net.bluesoft.rnd.processtool.dao.*;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessDefinitionConfig;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessQueueConfig;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessStateAction;
import pl.net.bluesoft.rnd.processtool.steps.ProcessToolProcessStep;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolActionButton;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.taskitem.TaskItemProvider;
import pl.net.bluesoft.rnd.util.func.Func;
import pl.net.bluesoft.rnd.util.i18n.I18NProvider;
import pl.net.bluesoft.util.eventbus.EventBusManager;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
/**
* @author tlipski@bluesoft.net.pl
*/
public interface ProcessToolRegistry extends ProcessToolBpmConstants {
void registerResource(String bundleSymbolicName, String path);
void removeRegisteredResources(String bundleSymbolicName);
InputStream loadResource(String bundleSymbolicName, String path);
InputStream loadResource(String path);
boolean registerModelExtension(Class<?>... cls);
boolean unregisterModelExtension(Class<?>... cls);
void commitModelExtensions();
void registerWidget(Class<?> cls);
void unregisterWidget(Class<?> cls);
void registerButton(Class<?> cls);
void unregisterButton(Class<?> cls);
void registerStep(String name, Func<? extends ProcessToolProcessStep> f);
void registerStep(Class<? extends ProcessToolProcessStep> cls);
void unregisterStep(String name);
void unregisterStep(Class<? extends ProcessToolProcessStep> cls);
Map<String,ProcessToolProcessStep> getAvailableSteps();
ProcessToolProcessStep getStep(String name);
void registerProcessDictionaries(InputStream dictionariesStream);
void registerGlobalDictionaries(InputStream dictionariesStream);
void deployOrUpdateProcessDefinition(InputStream jpdlStream,
ProcessDefinitionConfig cfg,
ProcessQueueConfig[] queues,
final InputStream imageStream,
InputStream logoStream);
void deployOrUpdateProcessDefinition(InputStream jpdlStream,
InputStream processToolConfigStream,
InputStream queueConfigStream,
InputStream imageStream,
InputStream logoStream);
<T extends ProcessToolWidget> T makeWidget(String name)
throws IllegalAccessException, InstantiationException;
<T extends ProcessToolActionButton> T makeButton(String name) throws IllegalAccessException, InstantiationException;
<T extends ProcessToolWidget> T makeWidget(Class<? extends ProcessToolWidget> aClass)
throws IllegalAccessException, InstantiationException;
void registerI18NProvider(I18NProvider p, String providerId);
void unregisterI18NProvider(String providerId);
Collection<I18NProvider> getI18NProviders();
boolean hasI18NProvider(String providerId);
<T> T withProcessToolContext(ReturningProcessToolContextCallback<T> callback);
<T> T withExistingOrNewContext(ReturningProcessToolContextCallback<T> callback);
// void withProcessToolContext(ProcessToolContextCallback callback);
ProcessDictionaryDAO getProcessDictionaryDAO(Session hibernateSession);
ProcessInstanceDAO getProcessInstanceDAO(Session hibernateSession);
ProcessInstanceFilterDAO getProcessInstanceFilterDAO(Session hibernateSession);
UserDataDAO getUserDataDAO(Session hibernateSession);
UserSubstitutionDAO getUserSubstitutionDAO(Session hibernateSession);
ProcessInstanceSimpleAttributeDAO getProcessInstanceSimpleAttributeDAO(Session hibernateSession);
ProcessStateActionDAO getProcessStateAction(Session hibernateSession);
ProcessDefinitionDAO getProcessDefinitionDAO(Session hibernateSession);
UserProcessQueueDAO getUserProcessQueueDAO(Session hibernateSession);
ProcessToolContextFactory getProcessToolContextFactory();
void setProcessToolContextFactory(ProcessToolContextFactory processToolContextFactory);
void unregisterProcessToolContextFactory(Class<?> cls);
SessionFactory getSessionFactory();
void addHibernateResource(String name, byte[] resource);
void removeHibernateResource(String name);
void addClassLoader(String name, ClassLoader loader);
ClassLoader getModelAwareClassLoader(ClassLoader parent);
void removeClassLoader(String name);
EventBusManager getEventBusManager();
PluginManager getPluginManager();
void setPluginManager(PluginManager pluginManager);
void addServiceLoader(ProcessToolServiceBridge serviceBridge);
void removeServiceLoader(ProcessToolServiceBridge serviceBridge);
List<ProcessToolServiceBridge> getServiceLoaders();
void removeRegisteredService(Class<?> serviceClass);
<T> void registerService(Class<T> serviceClass, T instance, Properties properties);
<T> T getRegisteredService(Class<T> serviceClass);
boolean isJta();
Map<String, Class<? extends ProcessToolWidget>> getAvailableWidgets();
Map<String,Class<? extends ProcessToolActionButton>> getAvailableButtons();
<T> T lookupService(String name);
String getBpmDefinitionLanguage();
ExecutorService getExecutorService();
<K, V> void registerCache(String cacheName, Map<K, V> cache);
<K, V> Map<K, V> getCache(String cacheName);
void registerTaskItemProvider(Class<?> cls);
void unregisterTaskItemProvider(Class<?> cls);
TaskItemProvider makeTaskItemProvider(String name) throws IllegalAccessException, InstantiationException;
Map<String, Class<? extends TaskItemProvider>> getAvailableTaskItemProviders();
//no way!
// public boolean createRoleIfNotExists(String roleName, String description);
public class ThreadUtil {
private static final ThreadLocal<ProcessToolRegistry> processToolRegistry = new ThreadLocal<ProcessToolRegistry>();
public static void setThreadRegistry(ProcessToolRegistry registry) {
processToolRegistry.set(registry);
}
public static ProcessToolRegistry getThreadRegistry() {
return processToolRegistry.get();
}
public static void removeThreadRegistry() {
processToolRegistry.remove();
}
}
}