package org.nightlabs.jfire.trade.admin.ui.editor.authority; import javax.jdo.FetchPlan; import org.nightlabs.base.ui.entity.editor.EntityEditor; import org.nightlabs.inheritance.Inheritable; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.base.admin.ui.editor.authority.AuthorityPageControllerHelper; import org.nightlabs.jfire.base.admin.ui.editor.authority.InheritedSecuringAuthorityResolver; import org.nightlabs.jfire.security.id.AuthorityID; import org.nightlabs.jfire.store.ProductType; import org.nightlabs.jfire.store.ProductTypeLocal; 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.jfire.trade.admin.ui.resource.Messages; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.progress.SubProgressMonitor; public class AuthorityPageController extends AbstractProductTypePageController<ProductType> { public AuthorityPageController(EntityEditor editor) { super(editor); } @Override public ProductType getExtendedProductType(ProgressMonitor monitor, ProductTypeID extendedProductTypeID) { return ProductTypeDAO.sharedInstance().getProductType(extendedProductTypeID, FETCH_GROUPS_PRODUCT_TYPE_WITH_AUTHORITY, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } @Override protected String[] getEntityFetchGroups() { return FETCH_GROUPS_PRODUCT_TYPE_WITH_AUTHORITY; } private static final String[] FETCH_GROUPS_PRODUCT_TYPE_WITH_AUTHORITY = { FetchPlan.DEFAULT, ProductType.FETCH_GROUP_PRODUCT_TYPE_LOCAL, ProductType.FETCH_GROUP_EXTENDED_PRODUCT_TYPE_ID, ProductTypeLocal.FETCH_GROUP_FIELD_METADATA_MAP }; private ProductType loadProductType(ProgressMonitor monitor) { return ProductTypeDAO.sharedInstance().getProductType(getProductTypeID(), FETCH_GROUPS_PRODUCT_TYPE_WITH_AUTHORITY, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); } @Override protected ProductType retrieveEntity(ProgressMonitor monitor) { monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.authority.AuthorityPageController.job.loadAuthority"), 100); //$NON-NLS-1$ try { ProductType productType = loadProductType(new SubProgressMonitor(monitor, 30)); setControllerObject(productType); authorityPageControllerHelper.load(productType.getProductTypeLocal(), new SubProgressMonitor(monitor, 70)); return productType; } finally { monitor.done(); } } private AuthorityPageControllerHelper authorityPageControllerHelper = new AuthorityPageControllerHelper() { @Override protected InheritedSecuringAuthorityResolver createInheritedSecuringAuthorityResolver() { return new InheritedSecuringAuthorityResolver() { @Override public AuthorityID getInheritedSecuringAuthorityID(ProgressMonitor monitor) { if (getControllerObject().getExtendedProductTypeID() == null) return null; ProductType extendedProductType = getExtendedProductType( monitor, getControllerObject().getExtendedProductTypeID()); return extendedProductType.getProductTypeLocal().getSecuringAuthorityID(); } // // @Override // public boolean isInitiallyInherited(ProgressMonitor monitor) { // return getControllerObject().getProductTypeLocal().getFieldMetaData(FieldName.securingAuthorityID).isValueInherited(); // } @Override public Inheritable retrieveSecuredObjectInheritable(ProgressMonitor monitor) { return loadProductType(monitor).getProductTypeLocal(); } }; } }; public AuthorityPageControllerHelper getAuthorityPageControllerHelper() { return authorityPageControllerHelper; } @Override protected ProductType storeEntity(ProductType controllerObject, ProgressMonitor monitor) { monitor.beginTask(Messages.getString("org.nightlabs.jfire.trade.admin.ui.editor.authority.AuthorityPageController.job.saveAuthority"), 100); //$NON-NLS-1$ authorityPageControllerHelper.store(new SubProgressMonitor(monitor, 70)); return getControllerObject(); } }