package org.nightlabs.jfire.issuetimetracking.admin.ui;
import javax.jdo.FetchPlan;
import org.eclipse.ui.IEditorInput;
import org.nightlabs.base.ui.editor.JDOObjectEditorInput;
import org.nightlabs.base.ui.entity.editor.EntityEditor;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.accounting.Price;
import org.nightlabs.jfire.accounting.PriceFragment;
import org.nightlabs.jfire.base.ui.config.ConfigUtil;
import org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController;
import org.nightlabs.jfire.issue.project.Project;
import org.nightlabs.jfire.issue.project.ProjectDAO;
import org.nightlabs.jfire.issue.project.id.ProjectID;
import org.nightlabs.jfire.issuetimetracking.ProjectCost;
import org.nightlabs.jfire.issuetimetracking.ProjectCostValue;
import org.nightlabs.jfire.issuetimetracking.dao.ProjectCostDAO;
import org.nightlabs.jfire.issuetracking.ui.project.ProjectEditorInput;
import org.nightlabs.jfire.trade.config.TradeConfigModule;
import org.nightlabs.progress.NullProgressMonitor;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de
*/
public class ProjectCostEditorPageController
extends ActiveEntityEditorPageController<ProjectCost>
{
public ProjectCostEditorPageController(EntityEditor editor)
{
super(editor);
this.projectID = (ProjectID) ((JDOObjectEditorInput<?>)editor.getEditorInput()).getJDOObjectID();
}
@Override
protected String[] getEntityFetchGroups() {
return new String[] {
FetchPlan.DEFAULT,
Project.FETCH_GROUP_MEMBERS,
ProjectCost.FETCH_GROUP_PROJECT,
ProjectCost.FETCH_GROUP_CURRENCY,
ProjectCost.FETCH_GROUP_DEFAULT_COST,
ProjectCost.FETCH_GROUP_DEFAULT_REVENUE,
ProjectCost.fETCH_GROUP_PROJECT_COST_VALUES,
ProjectCostValue.FETCH_GROUP_COST,
ProjectCostValue.FETCH_GROUP_REVENUE,
ProjectCostValue.FETCH_GROUP_USER,
Price.FETCH_GROUP_CURRENCY,
Price.FETCH_GROUP_FRAGMENTS,
PriceFragment.FETCH_GROUP_PRICE_FRAGMENT_TYPE
};
}
private ProjectID projectID;
@Override
protected ProjectCost retrieveEntity(ProgressMonitor monitor)
{
monitor.beginTask("Loading project cost", 100);
try {
ProjectCost projectCost = ProjectCostDAO.sharedInstance().getProjectCost(
projectID,
getEntityFetchGroups(),
getEntityMaxFetchDepth(),
new SubProgressMonitor(monitor, 70)
);
if (projectCost == null) {
TradeConfigModule tradeConfigModule = ConfigUtil.getUserCfMod(
TradeConfigModule.class,
new String[] {
FetchPlan.DEFAULT,
TradeConfigModule.FETCH_GROUP_CURRENCY,
},
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 10)
);
projectCost = new ProjectCost(
getProject(),
tradeConfigModule.getCurrency()
);
projectCost = ProjectCostDAO.sharedInstance().storeProjectCost(projectCost,
getEntityFetchGroups(),
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 20)
);
}
else
monitor.worked(30);
return projectCost;
} finally {
monitor.done();
}
}
@Override
protected IEditorInput createNewInstanceEditorInput() {
return new ProjectEditorInput(projectID);
}
@Override
protected ProjectCost storeEntity(ProjectCost controllerObject,
ProgressMonitor monitor) {
monitor.beginTask("Saving Project Cost", 100);
try {
ProjectCost projectCost = ProjectCostDAO.sharedInstance().storeProjectCost(controllerObject, getEntityFetchGroups(), getEntityMaxFetchDepth(),
new SubProgressMonitor(monitor, 50));
return projectCost;
} finally {
monitor.done();
}
}
public Project getProject() {
return ProjectDAO.sharedInstance().getProject(projectID, getEntityFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
}
}