/** * @return true if passed MetaClass has a composite primary key */ public boolean hasCompositePrimaryKey(MetaClass metaClass) { MetaProperty primaryKeyProperty = getPrimaryKeyProperty(metaClass); return primaryKeyProperty != null && primaryKeyProperty.getAnnotatedElement().isAnnotationPresent(EmbeddedId.class); }
protected Object convertId(Object value, MetaClass metaClass, boolean handleHasUuid) { if (handleHasUuid && HasUuid.class.isAssignableFrom(metaClass.getJavaClass())) { return UuidProvider.fromString((String) value); } MetaProperty primaryKey = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKey != null) { Class type = primaryKey.getJavaType(); if (UUID.class.equals(type)) { return UuidProvider.fromString((String) value); } else if (Long.class.equals(type) || IdProxy.class.equals(type)) { return ((Integer) value).longValue(); } else if (Integer.class.equals(type)) { return value; } else if (String.class.equals(type)) { return value; } else { throw new IllegalStateException( String.format("Unsupported primary key type: %s for %s", type.getSimpleName(), metaClass.getName())); } } else { throw new IllegalStateException( String.format("Primary key not found for %s", metaClass.getName())); } }
/** * @param metaClass of entity * @return metaProperty name for storing corresponding primary key in the database */ public String getReferenceIdPropertyName(MetaClass metaClass) { if (HasUuid.class.isAssignableFrom(metaClass.getJavaClass())) { return "entityId"; } MetaProperty primaryKey = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKey != null) { Class type = primaryKey.getJavaType(); if (UUID.class.equals(type)) { return "entityId"; } else if (Long.class.equals(type) || IdProxy.class.equals(type)) { return "longEntityId"; } else if (Integer.class.equals(type)) { return "intEntityId"; } else if (String.class.equals(type)) { return "stringEntityId"; } else { throw new IllegalStateException( String.format("Unsupported primary key type: %s for %s", type.getSimpleName(), metaClass.getName())); } } else { throw new IllegalStateException( String.format("Primary key not found for %s", metaClass.getName())); } }
/** * Create a new info instance. * * @param entity entity instance * @param viewName view name, can be null * @return info instance */ public EntityLoadInfo create(Entity entity, @Nullable String viewName) { Objects.requireNonNull(entity, "entity is null"); MetaClass metaClass = metadata.getSession().getClassNN(entity.getClass()); MetaProperty primaryKeyProperty = metadata.getTools().getPrimaryKeyProperty(metaClass); boolean stringKey = primaryKeyProperty != null && primaryKeyProperty.getJavaType().equals(String.class); return new EntityLoadInfo(entity.getId(), metaClass, viewName, stringKey); }
/** * @param metaClass of entity * @return metaProperty name for loading entity from database by primary key stored in the database */ public String getPrimaryKeyForLoadingEntity(MetaClass metaClass) { if (HasUuid.class.isAssignableFrom(metaClass.getJavaClass())) { MetaProperty primaryKeyProperty = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKeyProperty != null && !UUID.class.isAssignableFrom(primaryKeyProperty.getJavaType())) return "uuid"; } return metadata.getTools().getPrimaryKeyName(metaClass); } }
@Nullable protected Object getItemId(CollectionDatasource datasource, String itemIdString) { MetaProperty pkProp = metadata.getTools().getPrimaryKeyProperty(datasource.getMetaClass()); if (pkProp != null) { Datatype<Object> datatype = pkProp.getRange().asDatatype(); try { return datatype.parse(itemIdString); } catch (ParseException e) { throw new RuntimeException("Error parsing item ID", e); } } return null; }
public void restrictByPreviousResults(UUID sessionId, int queryKey) { QueryTransformer transformer = QueryTransformerFactory.createTransformer(queryString); MetaClass metaClass = metadata.getClassNN(entityName); MetaProperty primaryKey = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKey == null) throw new IllegalStateException(String.format("Entity %s has no primary key", entityName)); Class type = primaryKey.getJavaType(); String entityIdField; if (UUID.class.equals(type)) { entityIdField = "entityId"; } else if (Long.class.equals(type)) { entityIdField = "longEntityId"; } else if (Integer.class.equals(type)) { entityIdField = "intEntityId"; } else if (String.class.equals(type)) { entityIdField = "stringEntityId"; } else { throw new IllegalStateException( String.format("Unsupported primary key type: %s for %s", type.getSimpleName(), entityName)); } transformer.addJoinAndWhere( ", sys$QueryResult _qr", String.format("_qr.%s = {E}.%s and _qr.sessionId = :_qr_sessionId and _qr.queryKey = %s", entityIdField, primaryKey.getName(), queryKey) ); queryString = transformer.getResult(); this.queryParams.put("_qr_sessionId", sessionId); }
@Override public MetaProperty getPrimaryKeyPropertyForFts(MetaClass metaClass) { if (metadata.getTools().hasCompositePrimaryKey(metaClass) && HasUuid.class.isAssignableFrom(metaClass.getJavaClass())) { return metaClass.getPropertyNN("uuid"); } return metadata.getTools().getPrimaryKeyProperty(metaClass); }
MetaProperty primaryKeyProp = metadata.getTools().getPrimaryKeyProperty(metaClass); boolean stringKey = primaryKeyProp != null && primaryKeyProp.getJavaType().equals(String.class); return new EntityLoadInfo(entity.getId(), metaClass, null, stringKey, true); boolean stringKey = false; MetaProperty primaryKeyProp = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKeyProp == null) return null;
protected void loadEntityId(Element element, InstanceLoader<Entity> loader) { String entityIdStr = element.attributeValue("entityId"); if (Strings.isNullOrEmpty(entityIdStr)) { return; } MetaProperty property = metadataTools.getPrimaryKeyProperty(loader.getContainer().getEntityMetaClass()); if (property == null) { throw new IllegalStateException("Cannot determine id property for " + loader.getContainer().getEntityMetaClass()); } if (property.getRange().isDatatype()) { try { Object value = property.getRange().asDatatype().parse(entityIdStr); loader.setEntityId(value); } catch (ParseException e) { throw new RuntimeException("Error parsing entityId for " + loader, e); } } else { throw new IllegalStateException("Cannot assign id to " + loader + " because the entity has a composite PK"); } }
private String generateId(String entityName) { Metadata metadata = AppBeans.get(Metadata.NAME); MetaClass metaClass = metadata.getSession().getClass(entityName); MetaProperty primaryKeyProp = metadata.getTools().getPrimaryKeyProperty(metaClass); if (primaryKeyProp == null) throw new UnsupportedOperationException("Cannot generate ID for " + entityName); if (primaryKeyProp.getJavaType().equals(UUID.class)) { UuidSource uuidSource = AppBeans.get(UuidSource.NAME); UUID uuid = uuidSource.createUuid(); return uuid.toString(); } else if (primaryKeyProp.getJavaType().equals(Long.class)) { NumberIdSource numberIdSource = AppBeans.get(NumberIdSource.NAME); Long longId = numberIdSource.createLongId(entityName); return longId.toString(); } else if (primaryKeyProp.getJavaType().equals(Integer.class)) { NumberIdSource numberIdSource = AppBeans.get(NumberIdSource.NAME); Integer intId = numberIdSource.createIntegerId(entityName); return intId.toString(); } else { throw new UnsupportedOperationException("Cannot generate ID for " + entityName); } } }
/** * Create a new info instance. * @param entity entity instance * @return info instance */ public static OriginalEntityLoadInfo create(Entity entity) { Objects.requireNonNull(entity, "entity is null"); Metadata metadata = AppBeans.get(Metadata.NAME); MetaClass metaClass = metadata.getSession().getClassNN(entity.getClass()); MetaClass originalMetaClass = metadata.getExtendedEntities().getOriginalMetaClass(metaClass); if (originalMetaClass != null) { metaClass = originalMetaClass; } MetaProperty primaryKeyProperty = metadata.getTools().getPrimaryKeyProperty(metaClass); boolean stringKey = primaryKeyProperty != null && primaryKeyProperty.getJavaType().equals(String.class); return new OriginalEntityLoadInfo((UUID) entity.getId(), metaClass, stringKey); } }
LoadContext<Entity> loadContext = new LoadContext<>(cdsrMetaClass); MetaProperty primaryKeyProperty = metadataTools.getPrimaryKeyProperty(cdsrMetaClass); if (primaryKeyProperty == null || !primaryKeyProperty.getRange().isClass()) { String queryString = String.format(
protected void writeIdField(Entity entity, JsonObject jsonObject) { MetaProperty primaryKeyProperty = metadataTools.getPrimaryKeyProperty(entity.getMetaClass()); if (primaryKeyProperty == null) { primaryKeyProperty = entity.getMetaClass().getProperty("id"); } if (primaryKeyProperty == null) throw new EntitySerializationException("Primary key property not found for entity " + entity.getMetaClass()); if (metadataTools.hasCompositePrimaryKey(entity.getMetaClass())) { JsonObject serializedIdEntity = serializeEntity((Entity) entity.getId(), null, Collections.emptySet()); jsonObject.add("id", serializedIdEntity); } else { Datatype idDatatype = Datatypes.getNN(primaryKeyProperty.getJavaType()); jsonObject.addProperty("id", idDatatype.format(entity.getId())); } }
/** * 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())); }
protected Object loadEntity(String id) { Metadata metadata = AppBeans.get(Metadata.class); MetaProperty pkProp = metadata.getTools().getPrimaryKeyProperty(metadata.getClassNN(javaClass)); Object objectId = null; if (pkProp != null) { Datatype<Object> datatype = pkProp.getRange().asDatatype(); try { objectId = datatype.parse(id); } catch (ParseException e) { throw new RuntimeException("Error parsing entity ID", e); } } LoadContext ctx = new LoadContext(javaClass).setId(objectId); DataService dataService = AppBeans.get(DataService.NAME); return dataService.load(ctx); }
MetaProperty primaryKeyProperty = metadataTools.getPrimaryKeyProperty(resultMetaClass); if (primaryKeyProperty != null) { if (idJsonElement != null) {
if (Entity.class.isAssignableFrom(metaProperty.getJavaType())) { MetaClass _metaClass = metadata.getClass(metaProperty.getJavaType()); MetaProperty primaryKeyProperty = metadata.getTools().getPrimaryKeyProperty(_metaClass); String pkName = primaryKeyProperty.getName(); propertyName += "." + pkName;
@SuppressWarnings("unchecked") protected void assignIdentifier(Entity entity) { if (!(entity instanceof BaseGenericIdEntity)) return; MetaClass metaClass = getClassNN(entity.getClass()); MetaProperty primaryKeyProperty = tools.getPrimaryKeyProperty(metaClass); if (primaryKeyProperty != null && tools.isEmbedded(primaryKeyProperty)) { // create an instance of embedded ID Entity key = create(primaryKeyProperty.getRange().asClass()); ((BaseGenericIdEntity) entity).setId(key); } else { if (!config.getEnableIdGenerationForEntitiesInAdditionalDataStores() && !Stores.MAIN.equals(tools.getStoreName(metaClass))) { return; } if (tools.isPersistent(metaClass)) { if (entity instanceof BaseLongIdEntity) { ((BaseGenericIdEntity<Long>) entity).setId(numberIdSource.createLongId(getEntityNameForIdGeneration(metaClass))); } else if (entity instanceof BaseIntegerIdEntity) { ((BaseGenericIdEntity<Integer>) entity).setId(numberIdSource.createIntegerId(getEntityNameForIdGeneration(metaClass))); } } } }
fieldGroup.setFrame(frame); MetadataTools tools = metadata.getTools(); MetaProperty primaryKeyProperty = tools.getPrimaryKeyProperty(metaClass);