package org.nightlabs.jfire.trade.ui.repository.editor;
import javax.jdo.FetchPlan;
import org.nightlabs.base.ui.entity.editor.EntityEditor;
import org.nightlabs.base.ui.entity.editor.EntityEditorPageController;
import org.nightlabs.base.ui.notification.NotificationAdapterJob;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.jdo.notification.JDOLifecycleManager;
import org.nightlabs.jfire.store.Repository;
import org.nightlabs.jfire.store.dao.RepositoryDAO;
import org.nightlabs.jfire.trade.ui.resource.Messages;
import org.nightlabs.jfire.transfer.id.AnchorID;
import org.nightlabs.notification.NotificationEvent;
import org.nightlabs.notification.NotificationListener;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
import org.nightlabs.util.Util;
class RepositoryGeneralPageController
extends EntityEditorPageController
{
private Repository repository;
public RepositoryGeneralPageController(EntityEditor editor)
{
super(editor, true);
JDOLifecycleManager.sharedInstance().addNotificationListener(Repository.class, repositoryChangedListener);
}
@Override
public void dispose()
{
JDOLifecycleManager.sharedInstance().removeNotificationListener(Repository.class, repositoryChangedListener);
super.dispose();
}
private NotificationListener repositoryChangedListener = new NotificationAdapterJob(Messages.getString("org.nightlabs.jfire.trade.ui.repository.editor.RepositoryGeneralPageController.loadingChangedRepositoryJob.name")) //$NON-NLS-1$
{
public void notify(NotificationEvent notificationEvent) {
doLoad(getProgressMonitor());
}
};
public Repository getRepository()
{
return repository;
}
@Override
public void doLoad(ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.ui.repository.editor.RepositoryGeneralPageController.loadingRepositoryJobMonitor.task.name"), 100); //$NON-NLS-1$
AnchorID repositoryID = ((RepositoryEditorInput)getEntityEditor().getEditorInput()).getJDOObjectID();
repository = Util.cloneSerializable(RepositoryDAO.sharedInstance().getRepository(
repositoryID, new String[] { FetchPlan.DEFAULT, Repository.FETCH_GROUP_NAME },
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 100)));
monitor.done();
setLoaded(true); // must be done before fireModifyEvent!
fireModifyEvent(null, repository);
}
@Override
public boolean doSave(ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.ui.repository.editor.RepositoryGeneralPageController.savingRepositoryJobMonitor.task.name"), 100); //$NON-NLS-1$
RepositoryDAO.sharedInstance().storeRepository(repository, false, null, 1,
new SubProgressMonitor(monitor, 100));
monitor.done();
return true;
}
}