protected void registerPrimaryEditor(WindowInfo windowInfo, AnnotationMetadata annotationMetadata) { Map<String, Object> primaryEditorAnnotation = annotationMetadata.getAnnotationAttributes(PrimaryEditorScreen.class.getName()); if (primaryEditorAnnotation != null) { Class entityClass = (Class) primaryEditorAnnotation.get("value"); if (entityClass != null) { MetaClass metaClass = metadata.getClass(entityClass); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); primaryEditors.put(originalMetaClass.getJavaClass(), windowInfo); } } }
protected void registerPrimaryLookup(WindowInfo windowInfo, AnnotationMetadata annotationMetadata) { Map<String, Object> primaryEditorAnnotation = annotationMetadata.getAnnotationAttributes(PrimaryLookupScreen.class.getName()); if (primaryEditorAnnotation != null) { Class entityClass = (Class) primaryEditorAnnotation.get("value"); if (entityClass != null) { MetaClass metaClass = metadata.getClass(entityClass); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); primaryLookups.put(originalMetaClass.getJavaClass(), windowInfo); } } }
protected List<ConstraintData> getConstraints(MetaClass metaClass) { UserSession userSession = userSessionSource.getUserSession(); MetaClass mainMetaClass = extendedEntities.getOriginalOrThisMetaClass(metaClass); List<ConstraintData> constraints = new ArrayList<>(); constraints.addAll(userSession.getConstraints(mainMetaClass.getName())); for (MetaClass parent : mainMetaClass.getAncestors()) { constraints.addAll(userSession.getConstraints(parent.getName())); } return constraints; }
public String getLookupScreenId(MetaClass metaClass) { MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); WindowInfo windowInfo = primaryLookups.get(originalMetaClass.getJavaClass()); if (windowInfo != null) { return windowInfo.getId(); } return getMetaClassScreenId(metaClass, Window.LOOKUP_WINDOW_SUFFIX); }
public String getEditorScreenId(MetaClass metaClass) { MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); WindowInfo windowInfo = primaryEditors.get(originalMetaClass.getJavaClass()); if (windowInfo != null) { return windowInfo.getId(); } return getMetaClassScreenId(metaClass, Window.EDITOR_WINDOW_SUFFIX); }
@Nullable @Override public LockInfo lock(Entity entity) { Preconditions.checkNotNullArgument(entity, "entity is null"); MetaClass metaClass = metadata.getClassNN(entity.getClass()); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); return lock(originalMetaClass.getName(), entity.getId().toString()); }
protected String getOriginalOrThisEntityName(String entityName) { MetaClass metaClass = metadata.getClass(entityName); if (metaClass == null) { return entityName; } return metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass).getName(); } }
@Override public void unlock(Entity entity) { Preconditions.checkNotNullArgument(entity, "entity is null"); MetaClass metaClass = metadata.getClassNN(entity.getClass()); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); unlock(originalMetaClass.getName(), entity.getId().toString()); }
public WindowInfo getEditorScreen(Entity entity) { MetaClass metaClass = entity.getMetaClass(); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); WindowInfo windowInfo = primaryEditors.get(originalMetaClass.getJavaClass()); if (windowInfo != null) { return windowInfo; } String editorScreenId = getEditorScreenId(metaClass); return getWindowInfo(editorScreenId); }
/** * Checks if attribute access enabled for the current entity type. * It's based on the existence of SetupAttributeAccessHandler for the metaClass. * * @param metaClass - entity metaClass */ public boolean isAttributeAccessEnabled(MetaClass metaClass) { Map<String, SetupAttributeAccessHandler> handlers = AppBeans.getAll(SetupAttributeAccessHandler.class); if (handlers != null) { metaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); for (SetupAttributeAccessHandler handler : handlers.values()) { if (handler.supports(metaClass.getJavaClass())) { return true; } } } return false; }
protected void invalidateQueryCache(Object command) { if (command instanceof MergeChangeSetCommand) { MergeChangeSetCommand changeSetCommand = (MergeChangeSetCommand) command; UnitOfWorkChangeSet changeSet = changeSetCommand.getChangeSet(null); if (changeSet != null && changeSet.getAllChangeSets() != null) { Set<String> typeNames = new HashSet<>(); changeSet.getAllChangeSets().values().stream().filter(obj -> obj.getClassName() != null).forEach(obj -> { MetaClass metaClass = metadata.getClass(ReflectionHelper.getClass(obj.getClassName())); if (metaClass != null) { metaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); typeNames.add(metaClass.getName()); } }); queryCacheManager.invalidate(typeNames, false); } } }
@Override public ResolvableType getResolvableType() { ExtendedEntities extendedEntities = AppBeans.get(ExtendedEntities.NAME); MetaClass metaClass = extendedEntities.getOriginalOrThisMetaClass(getEntity().getMetaClass()); return ResolvableType.forClassWithGenerics(getClass(), ResolvableType.forClass(metaClass.getJavaClass())); } }
/** * Returns the name of the pessimistic lock. */ protected String getLockName() { InstanceContainer<T> container = getEditContainer(); return getBeanLocator().get(ExtendedEntities.class) .getOriginalOrThisMetaClass(container.getEntityMetaClass()) .getName(); }
public TreeMap<String, String> getEntityMetaClasses() { TreeMap<String, String> options = new TreeMap<>(); for (MetaClass metaClass : metadata.getTools().getAllPersistentMetaClasses()) { if (metadata.getExtendedEntities().getExtendedClass(metaClass) == null) { MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); String originalName = originalMetaClass.getName(); Class javaClass = originalMetaClass.getJavaClass(); if (metadata.getTools().hasCompositePrimaryKey(metaClass) && !HasUuid.class.isAssignableFrom(javaClass)) { continue; } String caption = messages.getMessage(javaClass, javaClass.getSimpleName()) + " (" + originalName + ")"; options.put(caption, originalName); } } return options; }
/** * Get available lookup screen by class of entity * * @param entityClass entity class * @return id of lookup screen * @throws NoSuchScreenException if the screen with specified ID is not registered */ public WindowInfo getLookupScreen(Class<? extends Entity> entityClass) { MetaClass metaClass = metadata.getSession().getClass(entityClass); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass); WindowInfo windowInfo = primaryLookups.get(originalMetaClass.getJavaClass()); if (windowInfo != null) { return windowInfo; } String lookupScreenId = getAvailableLookupScreenId(metaClass); return getWindowInfo(lookupScreenId); }
protected String getLockName() { InstanceContainer<T> container = getEditedEntityContainer(); return getBeanLocator().get(ExtendedEntities.class) .getOriginalOrThisMetaClass(container.getEntityMetaClass()) .getName(); }
protected String getEntityName(Entity entity) { MetaClass metaClass; if (entity instanceof CategoryAttributeValue) { CategoryAttribute categoryAttribute = ((CategoryAttributeValue) entity).getCategoryAttribute(); Preconditions.checkNotNullArgument(categoryAttribute, "Category attribute is null"); metaClass = metadata.getClassNN(categoryAttribute.getCategoryEntityType()); } else { metaClass = metadata.getSession().getClassNN(entity.getClass()); } return metadata.getExtendedEntities().getOriginalOrThisMetaClass(metaClass).getName(); }
/** * INTERNAL. */ @Override public ResolvableType getResolvableType() { Metadata metadata = AppBeans.get(Metadata.NAME); ExtendedEntities extendedEntities = metadata.getExtendedEntities(); MetaClass metaClass = extendedEntities.getOriginalOrThisMetaClass(metadata.getClassNN(entityId.getEntityClass())); MetaProperty pkProperty = metadata.getTools().getPrimaryKeyProperty(metaClass); if (pkProperty == null) { throw new IllegalStateException("Unable to send EntityChangedEvent for " + metaClass + " because it has no primary key"); } return ResolvableType.forClassWithGenerics(getClass(), ResolvableType.forClass(metaClass.getJavaClass()), ResolvableType.forClass(pkProperty.getJavaType())); }
@Override public EntitySnapshot getLastEntitySnapshot(Entity entity) { checkCompositePrimaryKey(entity); MetaClass metaClass = extendedEntities.getOriginalOrThisMetaClass(entity.getMetaClass()); View view = metadata.getViewRepository().getView(EntitySnapshot.class, "entitySnapshot.browse"); LoadContext<EntitySnapshot> lx = LoadContext.create(EntitySnapshot.class).setQuery(LoadContext .createQuery(format("select e from sys$EntitySnapshot e where e.entityMetaClass = :metaClass and" + " e.entity.%s = :entityId order by e.snapshotDate desc", referenceToEntitySupport.getReferenceIdPropertyName(metaClass))) .setParameter("metaClass", metaClass.getName()) .setParameter("entityId", referenceToEntitySupport.getReferenceId(entity)) .setMaxResults(1)) .setView(view); return dataManager.load(lx); }
@Override public List<EntitySnapshot> getSnapshots(MetaClass metaClass, Object id) { metaClass = extendedEntities.getOriginalOrThisMetaClass(metaClass); Entity entity = dataManager.load(new LoadContext<>(metaClass).setId(id).setView(View.LOCAL)); checkCompositePrimaryKey(entity); List<EntitySnapshot> resultList = null; View view = metadata.getViewRepository().getView(EntitySnapshot.class, "entitySnapshot.browse"); Transaction tx = persistence.createTransaction(); try { EntityManager em = persistence.getEntityManager(); TypedQuery<EntitySnapshot> query = em.createQuery(format( "select s from sys$EntitySnapshot s where s.entity.%s = :entityId and s.entityMetaClass = :metaClass " + "order by s.snapshotDate desc", referenceToEntitySupport.getReferenceIdPropertyName(metaClass)), EntitySnapshot.class); query.setParameter("entityId", referenceToEntitySupport.getReferenceId(entity)); query.setParameter("metaClass", metaClass.getName()); query.setView(view); resultList = query.getResultList(); tx.commit(); } finally { tx.end(); } return resultList; }