/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.broadcast.server.plugin; import net.codjo.agent.AgentContainer; import net.codjo.agent.ContainerConfiguration; import net.codjo.agent.DFService; import net.codjo.broadcast.common.Context; import net.codjo.broadcast.common.Preferences; import net.codjo.broadcast.common.PreferencesManager; import net.codjo.broadcast.common.message.BroadcastRequest; import net.codjo.broadcast.server.api.BroadcastContextBuilder; import net.codjo.broadcast.server.audit.BroadcastStringifier; import net.codjo.plugin.server.ServerPlugin; import net.codjo.sql.server.JdbcServiceUtil; import net.codjo.workflow.server.api.JobAgent; import net.codjo.workflow.server.api.JobAgent.MODE; import net.codjo.workflow.server.api.ResourcesManagerAgent; import net.codjo.workflow.server.api.ResourcesManagerAgent.AgentFactory; import net.codjo.workflow.server.plugin.WorkflowServerPlugin; import java.io.File; import java.util.Date; /** * */ public final class BroadcastServerPlugin implements ServerPlugin { public static final String BROADCAST_JOB_TYPE = BroadcastRequest.BROADCAST_JOB_TYPE; private final PreferencesManager preferenceManager; private BroadcastServerPluginConfiguration configuration = new BroadcastServerPluginConfiguration(); public BroadcastServerPlugin() { this(null); } public BroadcastServerPlugin(WorkflowServerPlugin workflowServerPlugin) { this.preferenceManager = new DefaultPreferencesManager(); new BroadcastStringifier().install(workflowServerPlugin); } public void initContainer(ContainerConfiguration aConfiguration) { for (Object serverPreference : getConfiguration().getPreferences()) { Preferences preference = (Preferences)serverPreference; preferenceManager.addPreferences(preference); } } public void start(AgentContainer agentContainer) throws Exception { agentContainer.acceptNewAgent("broadcast-drh-agent", new ResourcesManagerAgent(new BroadcastAgentFactory(), DFService.createAgentDescription( BROADCAST_JOB_TYPE))).start(); agentContainer.acceptNewAgent("broadcast-job-agent", createBroadcastAgent(MODE.NOT_DELEGATE)).start(); } private BroadcastJobAgent createBroadcastAgent(MODE mode) { return new BroadcastJobAgent(new DefaultJobConfig(preferenceManager, new JdbcServiceUtil()), mode); } public BroadcastServerPluginConfiguration getConfiguration() { return configuration; } public void stop() { } PreferencesManager getPreferenceManager() { return preferenceManager; } private class DefaultPreferencesManager extends PreferencesManager { @Override public Context buildContext(final String user, final String fileName, final Date generationDate, final Date broadcastDate, final File outFolder) { BroadcastContextBuilder builder = getConfiguration().getBroadcastContextBuilder(); synchronized (builder) { builder.setBroadcastDate(broadcastDate); builder.setGenerationDate(generationDate); builder.setFileName(fileName); builder.setOutFolder(outFolder); builder.setUser(user); return builder.buildContext(); } } } private class BroadcastAgentFactory implements AgentFactory { public JobAgent create() throws Exception { return createBroadcastAgent(MODE.DELEGATE); } } }