/**
*
*/
package org.nightlabs.jfire.reporting.trade.ui.textpart;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.jdo.FetchPlan;
import org.nightlabs.base.ui.entity.editor.EntityEditor;
import org.nightlabs.base.ui.entity.editor.EntityEditorPageController;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.ui.config.ConfigUtil;
import org.nightlabs.jfire.reporting.config.ReportLayoutAvailEntry;
import org.nightlabs.jfire.reporting.config.ReportLayoutConfigModule;
import org.nightlabs.jfire.reporting.dao.ReportRegistryItemDAO;
import org.nightlabs.jfire.reporting.layout.ReportRegistryItem;
import org.nightlabs.jfire.reporting.layout.id.ReportRegistryItemID;
import org.nightlabs.jfire.reporting.textpart.ReportTextPart;
import org.nightlabs.jfire.reporting.textpart.ReportTextPartConfiguration;
import org.nightlabs.jfire.reporting.textpart.dao.ReportTextPartConfigurationDAO;
import org.nightlabs.jfire.reporting.trade.ui.resource.Messages;
import org.nightlabs.jfire.reporting.trade.ui.util.ReportTradeUtil;
import org.nightlabs.jfire.trade.id.ArticleContainerID;
import org.nightlabs.jfire.trade.ui.articlecontainer.detail.ArticleContainerEditorInput;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
*
*/
public class ReportTextPartConfigurationPageController extends EntityEditorPageController {
private static final String[] FETCH_GROUPS_CONFIG = new String[] {
FetchPlan.DEFAULT, ReportTextPartConfiguration.FETCH_GROUP_REPORT_TEXT_PARTS,
ReportTextPart.FETCH_GROUP_NAME, ReportTextPart.FETCH_GROUP_CONTENT
};
private Map<ReportRegistryItemID, ReportTextPartConfiguration> configurations = new HashMap<ReportRegistryItemID, ReportTextPartConfiguration>();
private Set<ReportTextPartConfiguration> dirtyConfigurations = new HashSet<ReportTextPartConfiguration>();
private ArticleContainerID articleContainerID;
private Collection<ReportRegistryItem> reportRegistryItems;
private ReportRegistryItem defaultReportRegistryItem;
/**
* @param editor
*/
public ReportTextPartConfigurationPageController(EntityEditor editor) {
super(editor);
this.articleContainerID = ((ArticleContainerEditorInput) editor.getEditorInput()).getArticleContainerID();
}
/**
* @param editor
* @param startBackgroundLoading
*/
public ReportTextPartConfigurationPageController(EntityEditor editor, boolean startBackgroundLoading) {
super(editor, startBackgroundLoading);
}
/* (non-Javadoc)
* @see org.nightlabs.base.ui.entity.editor.IEntityEditorPageController#doLoad(org.nightlabs.progress.ProgressMonitor)
*/
@Override
public void doLoad(ProgressMonitor monitor) {
monitor.beginTask(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationPageController.loadPrerequisitesTaskName"), 10); //$NON-NLS-1$
ReportLayoutConfigModule cfMod = (ReportLayoutConfigModule)ConfigUtil.getUserCfMod(
ReportLayoutConfigModule.class,
new String[] {FetchPlan.DEFAULT, ReportLayoutConfigModule.FETCH_GROUP_AVAILABLE_LAYOUTS, ReportLayoutAvailEntry.FETCH_GROUP_AVAILABLE_REPORT_LAYOUT_KEYS},
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 5)
);
String reportRegistryItemType = ReportTradeUtil.getReportRegistryItemType(articleContainerID);
Collection<ReportRegistryItemID> allItems = cfMod.getAvailEntries(reportRegistryItemType);
reportRegistryItems = ReportRegistryItemDAO.sharedInstance().getReportRegistryItems(
new HashSet<ReportRegistryItemID>(allItems),
new String[] {FetchPlan.DEFAULT, ReportRegistryItem.FETCH_GROUP_NAME}, new SubProgressMonitor(monitor, 3));
ReportRegistryItemID defID = cfMod.getDefaultAvailEntry(reportRegistryItemType);
if (defID != null) {
defaultReportRegistryItem = ReportRegistryItemDAO.sharedInstance().getReportRegistryItem(
defID,
new String[] {FetchPlan.DEFAULT, ReportRegistryItem.FETCH_GROUP_NAME}, new SubProgressMonitor(monitor, 2));
}
fireModifyEvent(null, null);
}
/* (non-Javadoc)
* @see org.nightlabs.base.ui.entity.editor.IEntityEditorPageController#doSave(org.nightlabs.progress.ProgressMonitor)
*/
@Override
public boolean doSave(ProgressMonitor monitor) {
monitor.beginTask(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationPageController.saveTaskName"), dirtyConfigurations.size() * 5 + 1); //$NON-NLS-1$
monitor.worked(1);
try {
for (Map.Entry<ReportRegistryItemID, ReportTextPartConfiguration> configs : configurations.entrySet()) {
if (dirtyConfigurations.contains(configs.getValue())) {
ReportTextPartConfiguration storedConfig = ReportTextPartConfigurationDAO.sharedInstance().storeLinkedObjectReportTextPartConfiguration(
configs.getValue(), true, FETCH_GROUPS_CONFIG, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 5));
dirtyConfigurations.remove(configs.getValue());
configurations.put(configs.getKey(), storedConfig);
}
}
fireModifyEvent(null, null);
} finally {
monitor.done();
}
return dirtyConfigurations.size() == 0;
}
public ReportTextPartConfiguration getReportTextPartConfiguration(ReportRegistryItemID reportRegistryItemID, ProgressMonitor monitor) {
monitor.beginTask(Messages.getString("org.nightlabs.jfire.reporting.trade.ui.textpart.ReportTextPartConfigurationPageController.loadTaskName"), 10); //$NON-NLS-1$
try {
if (configurations.containsKey(reportRegistryItemID))
return configurations.get(reportRegistryItemID);
monitor.worked(5);
ReportTextPartConfiguration configuration = ReportTextPartConfigurationDAO.sharedInstance().getReportTextPartConfiguration(
reportRegistryItemID, articleContainerID, true,
FETCH_GROUPS_CONFIG, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 5));
configurations.put(reportRegistryItemID, configuration);
return configuration;
} finally {
monitor.done();
}
}
@Override
public void markUndirty() {
dirtyConfigurations.clear();
super.markUndirty();
}
public void markDirty(ReportTextPartConfiguration reportTextPartConfiguration) {
if (dirtyConfigurations.add(reportTextPartConfiguration)) {
super.markDirty();
}
}
public Collection<ReportRegistryItem> getReportRegistryItems() {
return reportRegistryItems;
}
public ReportRegistryItem getDefaultReportRegistryItem() {
return defaultReportRegistryItem;
}
}