package org.nightlabs.jfire.asterisk.ui.asteriskserver;
import javax.jdo.FetchPlan;
import org.apache.log4j.Logger;
import org.nightlabs.base.ui.editor.JDOObjectEditorInput;
import org.nightlabs.base.ui.entity.editor.EntityEditor;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.asterisk.AsteriskServer;
import org.nightlabs.jfire.asterisk.ui.resource.Messages;
import org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController;
import org.nightlabs.jfire.pbx.dao.PhoneSystemDAO;
import org.nightlabs.jfire.pbx.id.PhoneSystemID;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* A controller that loads a asteriskServer
*
* @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de -->
*/
public class AsteriskServerEditorPageController extends ActiveEntityEditorPageController<AsteriskServer>
{
private static final String[] FETCH_GROUPS_ASTERISK_SERVER = new String[] {
FetchPlan.DEFAULT,
AsteriskServer.FETCH_GROUP_NAME,
AsteriskServer.FETCH_GROUP_CALL_FILE_PROPERTIES}
;
private static final long serialVersionUID = -1651161683093714800L;
/**
* LOG4J logger used by this class
*/
private static final Logger logger = Logger.getLogger(AsteriskServerEditorPageController.class);
/**
* The asteriskServer id.
*/
private PhoneSystemID asteriskServerID;
/**
* Create an instance of this controller for
* an {@link AsteriskServerEditor} and load the data.
*/
public AsteriskServerEditorPageController(EntityEditor editor)
{
super(editor);
this.asteriskServerID = (PhoneSystemID) ((JDOObjectEditorInput<?>)editor.getEditorInput()).getJDOObjectID();
}
@Override
protected AsteriskServer retrieveEntity(ProgressMonitor monitor) {
monitor.beginTask(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerEditorPageController.retrieveEntity.monitor.task.name"), 1); //$NON-NLS-1$
try {
if(asteriskServerID != null) {
// load asteriskServer
AsteriskServer asteriskServer = (AsteriskServer) PhoneSystemDAO.sharedInstance().getPhoneSystem(
asteriskServerID, getEntityFetchGroups(),
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 1)
);
monitor.worked(1);
return asteriskServer;
}
return null;
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
monitor.done();
}
}
@Override
protected AsteriskServer storeEntity(AsteriskServer controllerObject, ProgressMonitor monitor) {
monitor.beginTask(Messages.getString("org.nightlabs.jfire.asterisk.ui.asteriskserver.AsteriskServerEditorPageController.storeEntity.monitor.task.name"), 5); //$NON-NLS-1$
try {
monitor.worked(1);
return (AsteriskServer) PhoneSystemDAO.sharedInstance().storePhoneSystem(
controllerObject, true, getEntityFetchGroups(),
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 5)
);
} catch(Exception e) {
monitor.setCanceled(true);
throw new RuntimeException(e);
} finally {
monitor.done();
}
}
@Override
protected String[] getEntityFetchGroups() {
return FETCH_GROUPS_ASTERISK_SERVER;
}
}