package org.nightlabs.jfire.trade.admin.ui.tariffuserset; import javax.jdo.FetchPlan; import javax.jdo.JDOHelper; import org.nightlabs.base.ui.entity.editor.EntityEditor; import org.nightlabs.inheritance.FieldMetaData; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.accounting.tariffuserset.TariffUserSet; import org.nightlabs.jfire.base.jdo.IJDOObjectDAO; import org.nightlabs.jfire.entityuserset.id.EntityUserSetID; import org.nightlabs.jfire.entityuserset.ui.InheritedEntityUserSetResolver; import org.nightlabs.jfire.store.ProductType; import org.nightlabs.jfire.store.dao.ProductTypeDAO; import org.nightlabs.jfire.store.id.ProductTypeID; import org.nightlabs.jfire.trade.admin.ui.editor.AbstractProductTypePageController; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.progress.SubProgressMonitor; /** * @author Daniel Mazurek - Daniel.Mazurek [dot] nightlabs [dot] de * */ public class TariffUserSetPageController<ProductTypeType extends ProductType> extends AbstractProductTypePageController<ProductType> { private TariffUserSetPageControllerHelper tariffUserSetPageControllerHelper; private IJDOObjectDAO<ProductTypeType> productTypeDAO; /** * @param editor * @param startBackgroundLoading * @param productTypeDAO */ public TariffUserSetPageController(EntityEditor editor, boolean startBackgroundLoading, IJDOObjectDAO<ProductTypeType> productTypeDAO) { super(editor, startBackgroundLoading); this.productTypeDAO = productTypeDAO; } /** * @param editor * @param productTypeDAO */ public TariffUserSetPageController(EntityEditor editor, IJDOObjectDAO<ProductTypeType> productTypeDAO) { super(editor); this.productTypeDAO = productTypeDAO; } /* (non-Javadoc) * @see org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController#getEntityFetchGroups() */ @Override protected String[] getEntityFetchGroups() { return new String[] {FetchPlan.DEFAULT, ProductType.FETCH_GROUP_TARIFF_USER_SET, ProductType.FETCH_GROUP_EXTENDED_PRODUCT_TYPE_ID, ProductType.FETCH_GROUP_FIELD_METADATA_MAP}; } /* (non-Javadoc) * @see org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController#retrieveEntity(org.nightlabs.progress.ProgressMonitor) */ @Override protected ProductType retrieveEntity(ProgressMonitor monitor) { ProductType pt = loadProductType(monitor); TariffUserSet tariffUserSet = pt.getTariffUserSet(); EntityUserSetID entityUserSetID = (EntityUserSetID) JDOHelper.getObjectId(tariffUserSet); getTariffUserSetPageControllerHelper().load(entityUserSetID, null, new SubProgressMonitor(monitor, 50)); return pt; } /* (non-Javadoc) * @see org.nightlabs.jfire.base.ui.entity.editor.ActiveEntityEditorPageController#storeEntity(java.lang.Object, org.nightlabs.progress.ProgressMonitor) */ @Override protected ProductType storeEntity(ProductType controllerObject, ProgressMonitor monitor) { getTariffUserSetPageControllerHelper().store(new SubProgressMonitor(monitor, 70)); ProductTypeType pt = (ProductTypeType) controllerObject; pt.setTariffUserSet((TariffUserSet) getTariffUserSetPageControllerHelper().getEntityUserSet()); pt = productTypeDAO.storeJDOObject(pt, true, getEntityFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 30)); return pt; } /* (non-Javadoc) * @see org.nightlabs.jfire.trade.admin.ui.editor.AbstractProductTypePageController#getExtendedProductType(org.nightlabs.progress.ProgressMonitor, org.nightlabs.jfire.store.id.ProductTypeID) */ @Override public ProductType getExtendedProductType(ProgressMonitor monitor, ProductTypeID extendedProductTypeID) { return ProductTypeDAO.sharedInstance().getProductType(extendedProductTypeID, getEntityFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } private ProductType loadProductType(ProgressMonitor monitor) { return ProductTypeDAO.sharedInstance().getProductType(getProductTypeID(), getEntityFetchGroups(), NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } public TariffUserSetPageControllerHelper getTariffUserSetPageControllerHelper() { if (tariffUserSetPageControllerHelper == null) { tariffUserSetPageControllerHelper = new TariffUserSetPageControllerHelper(){ @Override protected InheritedEntityUserSetResolver createInheritedEntityUserSetResolver() { return new InheritedEntityUserSetResolver() { @Override public EntityUserSetID getInheritedEntityUserSetID(ProgressMonitor monitor) { if (getProductType().getExtendedProductTypeID() == null){ // ProductType is a root one return null; } ProductType extendedProductType = getExtendedProductType(monitor, getProductType().getExtendedProductTypeID()); if (extendedProductType != null) { TariffUserSet tariffUserSet = extendedProductType.getTariffUserSet(); // TODO: why is this tariffUserSet null, although the editor shows me an assigned tariffUserSet for the extended productType? return (EntityUserSetID) JDOHelper.getObjectId(tariffUserSet); } return null; } @Override public void setEntityUserSetInherited(boolean inherited) { ProductType productType = getProductType(); FieldMetaData fieldMetaData = productType.getFieldMetaData(ProductType.FieldName.tariffUserSet, true); fieldMetaData.setValueInherited(inherited); } @Override public boolean isEntityUserSetInherited() { ProductType productType = getProductType(); FieldMetaData fieldMetaData = productType.getFieldMetaData(ProductType.FieldName.tariffUserSet, true); return fieldMetaData.isValueInherited(); } }; } }; } return tariffUserSetPageControllerHelper; } }