use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class SqlDataStorePlugin method findAll.
/**
* {@inheritDoc}
*/
@Override
public <E extends Entity> DtList<E> findAll(final DtDefinition dtDefinition, final DtListURIForNNAssociation dtcUri) {
Assertion.checkNotNull(dtDefinition);
Assertion.checkNotNull(dtcUri);
// -----
final String tableName = getTableName(dtDefinition);
final String taskName = TASK.TK_SELECT + "_N_N_LIST_" + tableName + "_BY_URI";
// PK de la DtList recherchée
final String idFieldName = getIdField(dtDefinition).getName();
// FK dans la table nn correspondant à la collection recherchée. (clé de jointure ).
final AssociationNNDefinition associationNNDefinition = dtcUri.getAssociationDefinition();
final String joinTableName = associationNNDefinition.getTableName();
final DtDefinition joinDtDefinition = AssociationUtil.getAssociationNode(associationNNDefinition, dtcUri.getRoleName()).getDtDefinition();
final DtField joinDtField = getIdField(joinDtDefinition);
// La condition s'applique sur l'autre noeud de la relation (par rapport à la collection attendue)
final AssociationNode associationNode = AssociationUtil.getAssociationNodeTarget(associationNNDefinition, dtcUri.getRoleName());
final DtField fkField = getIdField(associationNode.getDtDefinition());
final String fkFieldName = fkField.getName();
final String request = new StringBuilder(" select t.* from ").append(tableName).append(" t").append(" join ").append(joinTableName).append(" j on j.").append(joinDtField.getName()).append(" = t.").append(idFieldName).append(" where j.").append(fkFieldName).append(" = #").append(fkFieldName).append('#').toString();
final TaskDefinition taskDefinition = TaskDefinition.builder(taskName).withEngine(TaskEngineSelect.class).withDataSpace(dataSpace).withRequest(request).addInRequired(fkFieldName, fkField.getDomain()).withOutRequired("dtc", Home.getApp().getDefinitionSpace().resolve(DOMAIN_PREFIX + SEPARATOR + dtDefinition.getName() + "_DTC", Domain.class)).build();
final URI uri = dtcUri.getSource();
final Task task = Task.builder(taskDefinition).addValue(fkFieldName, uri.getId()).build();
return taskManager.execute(task).getResult();
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class DbFileStorePlugin method read.
/**
* {@inheritDoc}
*/
@Override
public FileInfo read(final FileInfoURI uri) {
Assertion.checkNotNull(uri);
checkDefinitionStoreBinding(uri.getDefinition());
// -----
final URI<Entity> dtoUri = new URI<>(storeDtDefinition, uri.getKey());
final Entity fileInfoDto = getStoreManager().getDataStore().readOne(dtoUri);
final InputStreamBuilder inputStreamBuilder = new DataStreamInputStreamBuilder(getValue(fileInfoDto, DtoFields.FILE_DATA, DataStream.class));
final String fileName = getValue(fileInfoDto, DtoFields.FILE_NAME, String.class);
final String mimeType = getValue(fileInfoDto, DtoFields.MIME_TYPE, String.class);
final Instant lastModified = getValue(fileInfoDto, DtoFields.LAST_MODIFIED, Instant.class);
final Long length = getValue(fileInfoDto, DtoFields.LENGTH, Long.class);
final VFile vFile = fileManager.createFile(fileName, mimeType, lastModified, length, inputStreamBuilder);
return new DatabaseFileInfo(uri.getDefinition(), vFile);
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class TwoTablesDbFileStorePlugin method update.
/**
* {@inheritDoc}
*/
@Override
public void update(final FileInfo fileInfo) {
checkReadonly();
checkDefinitionStoreBinding(fileInfo.getDefinition());
Assertion.checkArgument(fileInfo.getURI() != null, "Only file with id can be updated");
// -----
final Entity fileMetadataDto = createMetaDataEntity(fileInfo);
final Entity fileDataDto = createFileEntity(fileInfo);
// -----
setValue(fileMetadataDto, DtoFields.FMD_ID, fileInfo.getURI().getKey());
// Chargement du FDT_ID
final URI<Entity> dtoMetaDataUri = new URI<>(storeMetaDataDtDefinition, fileInfo.getURI().getKey());
final DtObject fileMetadataDtoOld = getStoreManager().getDataStore().readOne(dtoMetaDataUri);
final Object fdtId = getValue(fileMetadataDtoOld, DtoFields.FDT_ID, Object.class);
setValue(fileMetadataDto, DtoFields.FDT_ID, fdtId);
setValue(fileDataDto, DtoFields.FDT_ID, fdtId);
getStoreManager().getDataStore().update(fileDataDto);
getStoreManager().getDataStore().update(fileMetadataDto);
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class TwoTablesDbFileStorePlugin method read.
/**
* {@inheritDoc}
*/
@Override
public FileInfo read(final FileInfoURI fileInfoUri) {
checkDefinitionStoreBinding(fileInfoUri.getDefinition());
// Ramène FileMetada
final URI<Entity> dtoMetaDataUri = new URI<>(storeMetaDataDtDefinition, fileInfoUri.getKey());
final DtObject fileMetadataDto = getStoreManager().getDataStore().readOne(dtoMetaDataUri);
final Object fdtId = getValue(fileMetadataDto, DtoFields.FDT_ID, Object.class);
// Ramène FileData
final URI<Entity> dtoDataUri = new URI<>(storeFileDtDefinition, fdtId);
final DtObject fileDataDto = getStoreManager().getDataStore().readOne(dtoDataUri);
// Construction du vFile.
final InputStreamBuilder inputStreamBuilder = new DataStreamInputStreamBuilder(getValue(fileDataDto, DtoFields.FILE_DATA, DataStream.class));
final String fileName = getValue(fileMetadataDto, DtoFields.FILE_NAME, String.class);
final String mimeType = getValue(fileMetadataDto, DtoFields.MIME_TYPE, String.class);
final Instant lastModified = getValue(fileMetadataDto, DtoFields.LAST_MODIFIED, Instant.class);
final Long length = getValue(fileMetadataDto, DtoFields.LENGTH, Long.class);
final VFile vFile = fileManager.createFile(fileName, mimeType, lastModified, length, inputStreamBuilder);
// TODO passer par une factory de FileInfo à partir de la FileInfoDefinition (comme DomainFactory)
final FileInfo fileInfo = new DatabaseFileInfo(fileInfoUri.getDefinition(), vFile);
fileInfo.setURIStored(fileInfoUri);
return fileInfo;
}
use of io.vertigo.dynamo.domain.model.URI in project vertigo by KleeGroup.
the class AbstractSqlSearchLoader method loadNextURI.
/**
* {@inheritDoc}
*/
@Override
@Transactional
protected final List<URI<S>> loadNextURI(final P lastId, final DtDefinition dtDefinition) {
try (final VTransactionWritable tx = transactionManager.createCurrentTransaction()) {
final String tableName = getTableName(dtDefinition);
final String taskName = "TK_SELECT_" + tableName + "_NEXT_SEARCH_CHUNK";
final DtField idField = dtDefinition.getIdField().get();
final String idFieldName = idField.getName();
final String request = getNextIdsSqlQuery(tableName, idFieldName);
final TaskDefinition taskDefinition = TaskDefinition.builder(taskName).withEngine(TaskEngineSelect.class).withDataSpace(dtDefinition.getDataSpace()).withRequest(request).addInRequired(idFieldName, idField.getDomain()).withOutRequired("dtc", Home.getApp().getDefinitionSpace().resolve(DOMAIN_PREFIX + SEPARATOR + dtDefinition.getName() + "_DTC", Domain.class)).build();
final Task task = Task.builder(taskDefinition).addValue(idFieldName, lastId).build();
final DtList<S> resultDtc = taskManager.execute(task).getResult();
final List<URI<S>> uris = new ArrayList<>(resultDtc.size());
for (final S dto : resultDtc) {
uris.add(new URI<S>(dtDefinition, DtObjectUtil.getId(dto)));
}
return uris;
}
}
Aggregations