package multimonster.edit;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import multimonster.common.MMThread;
import multimonster.common.UserIdentifier;
import multimonster.common.edit.EditJobIdentifier;
import multimonster.common.edit.EditTaskIdentifier;
import multimonster.common.edit.FilterAction;
import multimonster.common.edit.FilterPlugInIdentifier;
import multimonster.common.media.MOIdentifier;
import multimonster.common.media.MediaObject;
import multimonster.common.media.MetaData;
import multimonster.common.resource.QueueTime;
import multimonster.common.resource.ResourceRequestIdentifier;
import multimonster.common.util.EjbCreator;
import multimonster.common.util.EjbHomeGetter;
import multimonster.edit.exceptions.EditException;
import multimonster.exceptions.MultiMonsterException;
import multimonster.systemadministration.interfaces.SystemAdministrationImpl;
import multimonster.systemadministration.interfaces.SystemAdministrationImplHome;
import org.apache.log4j.Logger;
/**
* @ejb.bean name = "EditImpl" display-name = "EditFacade SessionBean"
* description = "The Facade of the Edit-Package of MultiMonster" view-type =
* "remote" jndi-name = "multimonster/edit/EditFacade"
*
* @see multimonster.edit.EditFacade
*
* @author Holger Velke (sihovelk)
*
*/
public class EditImplBean implements EditFacade, SessionBean {
private static Logger log = Logger.getLogger(EditImplBean.class);
private Context context;
private SystemAdministrationImplHome systemAdministrationHome;
private EditJobList editJobList;
/**
* @see multimonster.edit.EditFacade#getJob(multimonster.common.UserIdentifier,
* multimonster.common.MOIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public EditJobIdentifier getJob(UserIdentifier uId, MOIdentifier mOId)
throws EditException {
log.debug("getJob()");
// check parameters
if (uId == null) {
throw new EditException("UserIdentifier is null");
}
if (mOId == null) {
throw new EditException("MOIdentifier is null");
}
// do work
EditJob job = null;
EditJobIdentifier jobId = null;
log.debug("getJob()");
// create new Edit Job
job = new EditJob(uId, mOId);
jobId = job.getId();
// Add job to joblist
editJobList.put(job);
return jobId;
}
/**
* @see multimonster.edit.EditFacade#addTaskToJob(multimonster.common.EditJobIdentifier,
* multimonster.common.FilterPlugInIdentifier,
* multimonster.common.FilterAction)
*
* @ejb.interface-method view-type = "remote"
*/
public EditTaskIdentifier addTaskToJob(
EditJobIdentifier jobId,
FilterPlugInIdentifier filterId,
FilterAction action)
throws EditException {
log.debug("addTaskToJob()");
// check parameters
if (jobId == null) {
throw new EditException("EditJobIdentifier is null");
}
if (filterId == null) {
throw new EditException("FilterPugInIdentifier is null");
}
if (action == null) {
throw new EditException("FilterAction is null");
}
// do work
EditTaskIdentifier taskId = null;
EditJob job = null;
EditTask task = null;
// get Job for Id
job = editJobList.get(jobId);
if (job == null) {
throw new EditException("no EditJob for this EditJobIdentifier");
}
//create new task for job with the instructions
task = new EditTask(jobId, filterId, action);
//add task to the job
job.addEditTask(task);
taskId = task.getTaskId();
return taskId;
}
/**
* @see multimonster.edit.EditFacade#finishJob(multimonster.common.EditJobIdentifier,
* multimonster.common.MetaData, multimonster.common.Duration)
*
* @ejb.interface-method view-type = "remote"
*/
public MOIdentifier finishJob(
EditJobIdentifier jobId,
MetaData metaData,
QueueTime maxQT)
throws EditException {
log.debug("finishJob()");
// check parameters
if (jobId == null) {
throw new EditException("EditJobIdentifier is null");
}
if (metaData == null) {
throw new EditException("MetaData is null");
}
// do work
MOIdentifier mOId = null;
MediaObject mO = null;
EditJob job = null;
EditHandler handler = null;
UserIdentifier uId = null;
SystemAdministrationImpl systemAdministration = null;
job = editJobList.get(jobId);
if (job == null) {
throw new EditException("no EditJob for this EditJobIdentifier");
}
// set the max job Queue Time
job.setMaxWait(maxQT);
// create mediaobject in systemadministration
mO = new MediaObject(metaData);
uId = job.getEditor();
try {
systemAdministration =
EjbCreator.createSystemAdministration(
systemAdministrationHome,
context);
mOId = systemAdministration.addMediaObject(mO, uId);
systemAdministration.remove();
} catch (MultiMonsterException e) {
log.error(e);
throw new EditException("unable to add new MediaObject", e);
} catch (Exception e) {
log.error(e);
throw new EditException("unable to add new MediaObject", e);
}
// start new edithandler
if (mOId == null) {
throw new EditException("got 'null' MOIdendtifier from SystemAdministration");
}
job.setNewMOId(mOId);
handler = new EditHandler(jobId);
(new MMThread(handler)).start();
return mOId;
}
/**
* @see multimonster.edit.EditFacade#removeTask(multimonster.common.EditJobIdentifier,
* multimonster.common.EditTaskIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public void removeTask(EditTaskIdentifier taskId) throws EditException {
log.debug("removeTask()");
// check parameter
if (taskId == null) {
throw new EditException("EditTaskIdentifier is null");
}
// do work
EditJob job = null;
// get job of the Task
job = editJobList.get(taskId.getEditJob());
if (job == null) {
throw new EditException("no EditJob for this EditTaskIdentifier");
}
// remove the task form the job
if (!job.removeEditTask(taskId)){
throw new EditException("unknown EditTaskIdenitfier");
}
}
/**
*
* @see multimonster.edit.EditFacade#abortJob(multimonster.common.EditJobIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public void abortJob(EditJobIdentifier jobId) throws EditException {
log.debug("abortJob()");
// check parameter
if (jobId == null) {
throw new EditException("EditJobIdentifier is null");
}
// do work
if (editJobList.remove(jobId) == null) {
throw new EditException("no EditJob for this EditTaskIdentifier");
}
}
/**
* @see multimonster.edit.EditFacade#getJobList(multimonster.common.UserIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public EditJobIdentifier[] getJobList(UserIdentifier uId)
throws EditException {
log.debug("getJobList()");
// check parameter
if (uId == null) {
throw new EditException("UserIdentifier is null");
}
// do work
return editJobList.getUsersList(uId);
}
/**
* @see multimonster.common.ResourceWaiter#grantResource(multimonster.common.ResourceRequestIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public void grantResource(ResourceRequestIdentifier rrId) {
log.debug("grantResource()");
EditResourceWaiters.getInstance().getWaiter(rrId).grantResource(rrId);
}
/**
* @see multimonster.common.ResourceWaiter#denyResource(multimonster.common.ResourceRequestIdentifier)
*
* @ejb.interface-method view-type = "remote"
*/
public void denyResource(ResourceRequestIdentifier rrId) {
log.debug("denyResource()");
EditResourceWaiters.getInstance().getWaiter(rrId).denyResource(rrId);
}
/*
* (non-Javadoc)
*
* @see javax.ejb.SessionBean#ejbActivate()
*/
public void ejbActivate() throws EJBException, RemoteException {
}
/*
* (non-Javadoc)
*
* @see javax.ejb.SessionBean#ejbPassivate()
*/
public void ejbPassivate() throws EJBException, RemoteException {
}
/*
* (non-Javadoc)
*
* @see javax.ejb.SessionBean#ejbRemove()
*/
public void ejbRemove() throws EJBException, RemoteException {
}
/*
* (non-Javadoc)
*
* @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
*/
public void setSessionContext(SessionContext arg0)
throws EJBException, RemoteException {
}
/**
* @ejb.create-method
*/
public void ejbCreate() {
this.editJobList = EditJobList.getInstance();
try {
context = new InitialContext();
systemAdministrationHome =
EjbHomeGetter.getSystemAdministrationHome(context);
} catch (NamingException e) {
log.error("unable to get SystemadministrationHome", e);
}
log.debug("CREATED");
}
}