/** * INTERNAL: * Return whether or not is root parent descriptor */ public boolean isRootParentDescriptor() { return getParentDescriptor() == null; }
/** * INTERNAL: * call addChildTableJoinExpression on all parents */ public void addChildTableJoinExpressionToAllParents(DatabaseTable table, Expression expression) { ClassDescriptor parentDescriptor = getParentDescriptor(); while(parentDescriptor != null) { InheritancePolicy parentPolicy = parentDescriptor.getInheritancePolicy(); parentPolicy.addChildTableJoinExpression(table, expression); parentDescriptor = parentPolicy.getParentDescriptor(); } }
/** * Pass to this method a table mapped by query's descriptor. * Returns the highest descriptor in inheritance hierarchy that mapps this table. */ protected ClassDescriptor getHighestDescriptorMappingTable(DatabaseTable table) { // find the highest descriptor in inheritance hierarchy mapped to the table ClassDescriptor desc = getDescriptor(); ClassDescriptor parentDescriptor = getDescriptor().getInheritancePolicy().getParentDescriptor(); while(parentDescriptor != null && parentDescriptor.getTables().contains(table)) { desc = parentDescriptor; parentDescriptor = parentDescriptor.getInheritancePolicy().getParentDescriptor(); } return desc; } }
/** * INTERNAL: * The first table in the tables is always treated as default. */ protected DatabaseTable extractDefaultTable() { if (getTables().isEmpty()) { if (isChildDescriptor()) { return getInheritancePolicy().getParentDescriptor().extractDefaultTable(); } else { return null; } } return (DatabaseTable)getTables().firstElement(); }
/** * INTERNAL: * Get the parent DescriptorQueryManager. * Caution must be used in using this method as it expects the descriptor * to have inheritance. * Calling this when the descriptor that does not use inheritance will cause problems, #hasInheritance() must * always first be called. */ public DescriptorQueryManager getParentDescriptorQueryManager() { return getDescriptor().getInheritancePolicy().getParentDescriptor().getQueryManager(); }
/** * INTERNAL: * Return the root parent descriptor */ public ClassDescriptor getRootParentDescriptor() { if (isRootParentDescriptor()) { return getDescriptor(); } else { return getParentDescriptor().getInheritancePolicy().getRootParentDescriptor(); } }
/** * INTERNAL: * Recursively adds fields to all the parents */ protected void addFieldsToParent(Vector fields) { if (isChildDescriptor()) { if (getParentDescriptor().isInvalid()) { return; } ClassDescriptor parentDescriptor = getParentDescriptor(); if (parentDescriptor.getInheritancePolicy().shouldReadSubclasses()) { Helper.addAllUniqueToVector(parentDescriptor.getAllFields(), fields); } parentDescriptor.getInheritancePolicy().addFieldsToParent(fields); } }
currentDescriptor = currentDescriptor.getInheritancePolicy().getParentDescriptor();
/** * INTERNAL: * Notify the event listeners. */ public void notifyListeners(DescriptorEvent event) { if (hasAnyListeners()) { for (int index = 0; index < getEventListeners().size(); index++) { DescriptorEventListener listener = (DescriptorEventListener)getEventListeners().get(index); notifyListener(listener, event); } } // Also must notify any inherited listeners. if (getDescriptor().isChildDescriptor()) { getDescriptor().getInheritancePolicy().getParentDescriptor().getEventManager().notifyListeners(event); } }
/** * INTERNAL: * CR#3711: Check if the class for this descriptor has a parent class. * Then search this parent's descriptor for a query with the same name * and arguments. If nothing found, return null. * * This method should only be used recursively by getQuery(). */ protected DatabaseQuery getQueryFromParent(String name, Vector arguments) { ClassDescriptor descriptor = getDescriptor(); if (descriptor.hasInheritance()) { InheritancePolicy inheritancePolicy = descriptor.getInheritancePolicy(); ClassDescriptor parent = inheritancePolicy.getParentDescriptor(); // if parent exists, check for the query if (parent != null) { return parent.getQueryManager().getQuery(name, arguments); } } return null; }
DescriptorEventManager parentEventManager = getDescriptor().getInheritancePolicy().getParentDescriptor().getEventManager();
/** * INTERNAL: * Post initialize the child descriptors */ protected void addClassIndicatorTypeToParent(Object indicator) { ClassDescriptor parentDescriptor = getDescriptor().getInheritancePolicy().getParentDescriptor(); if (parentDescriptor.getInheritancePolicy().isChildDescriptor()) { if (parentDescriptor.getInheritancePolicy().shouldReadSubclasses()) { parentDescriptor.getInheritancePolicy().getAllChildClassIndicators().addElement(indicator); } parentDescriptor.getInheritancePolicy().addClassIndicatorTypeToParent(indicator); } }
/** * INTERNAL: * Setup the default classExtractionMethod, or if one was specified by the user make sure it is valid. */ protected void initializeClassExtractor(AbstractSession session) throws DescriptorException { if (getClassExtractor() == null) { if (isChildDescriptor()) { setClassExtractor(getParentDescriptor().getInheritancePolicy().getClassExtractor()); } } else { getClassExtractor().initialize(getDescriptor(), session); } }
boolean isChild = hasInheritance() && getInheritancePolicy().isChildDescriptor(); if (isChild) { additionalTablesSize = getTables().size() - getInheritancePolicy().getParentDescriptor().getTables().size();
public void removeLifecycle(EntityManagerFactory entityManagerFactory, JpaGpsDevice device) throws JpaGpsDeviceException { CompassGpsInterfaceDevice gps = (CompassGpsInterfaceDevice) device.getGps(); EntityManager entityManager = (EntityManager) entityManagerFactory.createEntityManager(); Session session = entityManager.getServerSession(); entityManager.close(); Map descriptors = session.getDescriptors(); for (Object o : descriptors.values()) { ClassDescriptor classDescriptor = (ClassDescriptor) o; Class mappedClass = classDescriptor.getJavaClass(); // if we have a parent class that is mapped in JPA and in Compass, then don't add an event listner // since we will add it to the parent descriptor and it will notify this class as well if (classDescriptor.isChildDescriptor()) { Class parentClass = classDescriptor.getInheritancePolicy().getParentDescriptor().getJavaClass(); if (gps.hasMappingForEntityForMirror(parentClass, Cascade.ALL)) { classDescriptor.getEventManager().removeListener(dummyEventListener); continue; } } if (gps.hasMappingForEntityForMirror(mappedClass, Cascade.ALL)) { classDescriptor.getDescriptorEventManager().removeListener(eventListener); } } } }
public void injectLifecycle(EntityManagerFactory entityManagerFactory, JpaGpsDevice device) throws JpaGpsDeviceException { CompassGpsInterfaceDevice gps = (CompassGpsInterfaceDevice) device.getGps(); if (eventListener == null) { eventListener = new TopLinkEssentialsEventListener(device); } EntityManager entityManager = (EntityManager) entityManagerFactory.createEntityManager(); Session session = entityManager.getServerSession(); entityManager.close(); Map descriptors = session.getDescriptors(); for (Object o : descriptors.values()) { ClassDescriptor classDescriptor = (ClassDescriptor) o; Class mappedClass = classDescriptor.getJavaClass(); // if we have a parent class that is mapped in JPA and in Compass, then don't add an event listner // since we will add it to the parent descriptor and it will notify this class as well if (classDescriptor.isChildDescriptor()) { Class parentClass = classDescriptor.getInheritancePolicy().getParentDescriptor().getJavaClass(); if (gps.hasMappingForEntityForMirror(parentClass, Cascade.ALL)) { classDescriptor.getEventManager().addListener(dummyEventListener); continue; } } if (gps.hasMappingForEntityForMirror(mappedClass, Cascade.ALL)) { classDescriptor.getDescriptorEventManager().addListener(eventListener); } } }
Vector<DatabaseTable> parentTables = getParentDescriptor().getTables(); Vector<DatabaseTable> uniqueTables = Helper.concatenateUniqueVectors(parentTables, childTables); getDescriptor().setTables(uniqueTables); setClassIndicatorMapping(getParentDescriptor().getInheritancePolicy().getClassIndicatorMapping(session.getDatasourcePlatform().getConversionManager())); setShouldUseClassNameAsIndicator(getParentDescriptor().getInheritancePolicy().shouldUseClassNameAsIndicator()); getDescriptor().setPrimaryKeyFields(getParentDescriptor().getPrimaryKeyFields()); getDescriptor().setAdditionalTablePrimaryKeyFields(Helper.concatenateMaps(getParentDescriptor().getAdditionalTablePrimaryKeyFields(), getDescriptor().getAdditionalTablePrimaryKeyFields())); Expression parentExpression = getParentDescriptor().getQueryManager().getMultipleTableJoinExpression(); Expression parentAdditionalExpression = getParentDescriptor().getQueryManager().getAdditionalJoinExpression(); setClassIndicatorField(getParentDescriptor().getInheritancePolicy().getClassIndicatorField()); getDescriptor().setSequenceNumberField(getParentDescriptor().getSequenceNumberField()); getDescriptor().setSequenceNumberName(getParentDescriptor().getSequenceNumberName());
getDescriptor().setMappings(Helper.concatenateVectors(getParentDescriptor().getMappings(), getDescriptor().getMappings())); getDescriptor().setQueryKeys(Helper.concatenateMaps(getParentDescriptor().getQueryKeys(), getDescriptor().getQueryKeys())); addFieldsToParent(getDescriptor().getFields()); Vector parentsFields = (Vector)getParentDescriptor().getFields().clone(); if (!getDescriptor().usesOptimisticLocking() && getParentDescriptor().usesOptimisticLocking()) { getDescriptor().setOptimisticLockingPolicy((OptimisticLockingPolicy)getParentDescriptor().getOptimisticLockingPolicy().clone()); getDescriptor().getOptimisticLockingPolicy().setDescriptor(getDescriptor()); CMPPolicy parentCMPPolicy = getDescriptor().getInheritancePolicy().getParentDescriptor().getCMPPolicy(); if (parentCMPPolicy != null) { CMPPolicy cmpPolicy = getDescriptor().getCMPPolicy();
throw DescriptorException.valueNotFoundInClassIndicatorMapping(getParentDescriptor(), getDescriptor()); throw DescriptorException.classIndicatorFieldNotFound(getParentDescriptor(), getDescriptor());
DescriptorQueryManager parentQueryManager = getDescriptor().getInheritancePolicy().getParentDescriptor().getQueryManager();