Search in sources :

Example 16 with URI

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();
}
Also used : TaskDefinition(io.vertigo.dynamo.task.metamodel.TaskDefinition) Task(io.vertigo.dynamo.task.model.Task) TaskEngineSelect(io.vertigo.dynamox.task.TaskEngineSelect) DtDefinition(io.vertigo.dynamo.domain.metamodel.DtDefinition) URI(io.vertigo.dynamo.domain.model.URI) AssociationNNDefinition(io.vertigo.dynamo.domain.metamodel.association.AssociationNNDefinition) DtField(io.vertigo.dynamo.domain.metamodel.DtField) AssociationNode(io.vertigo.dynamo.domain.metamodel.association.AssociationNode)

Example 17 with URI

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);
}
Also used : Entity(io.vertigo.dynamo.domain.model.Entity) InputStreamBuilder(io.vertigo.dynamo.file.model.InputStreamBuilder) DataStream(io.vertigo.lang.DataStream) Instant(java.time.Instant) URI(io.vertigo.dynamo.domain.model.URI) FileInfoURI(io.vertigo.dynamo.domain.model.FileInfoURI) VFile(io.vertigo.dynamo.file.model.VFile)

Example 18 with URI

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);
}
Also used : Entity(io.vertigo.dynamo.domain.model.Entity) DtObject(io.vertigo.dynamo.domain.model.DtObject) DtObject(io.vertigo.dynamo.domain.model.DtObject) URI(io.vertigo.dynamo.domain.model.URI) FileInfoURI(io.vertigo.dynamo.domain.model.FileInfoURI)

Example 19 with URI

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;
}
Also used : Entity(io.vertigo.dynamo.domain.model.Entity) DataStream(io.vertigo.lang.DataStream) DtObject(io.vertigo.dynamo.domain.model.DtObject) Instant(java.time.Instant) URI(io.vertigo.dynamo.domain.model.URI) FileInfoURI(io.vertigo.dynamo.domain.model.FileInfoURI) VFile(io.vertigo.dynamo.file.model.VFile) FileInfo(io.vertigo.dynamo.file.model.FileInfo) InputStreamBuilder(io.vertigo.dynamo.file.model.InputStreamBuilder) DtObject(io.vertigo.dynamo.domain.model.DtObject)

Example 20 with URI

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;
    }
}
Also used : TaskDefinition(io.vertigo.dynamo.task.metamodel.TaskDefinition) Task(io.vertigo.dynamo.task.model.Task) TaskEngineSelect(io.vertigo.dynamox.task.TaskEngineSelect) ArrayList(java.util.ArrayList) VTransactionWritable(io.vertigo.commons.transaction.VTransactionWritable) URI(io.vertigo.dynamo.domain.model.URI) DtField(io.vertigo.dynamo.domain.metamodel.DtField) Transactional(io.vertigo.commons.transaction.Transactional)

Aggregations

URI (io.vertigo.dynamo.domain.model.URI)38 DtDefinition (io.vertigo.dynamo.domain.metamodel.DtDefinition)21 DtField (io.vertigo.dynamo.domain.metamodel.DtField)11 Entity (io.vertigo.dynamo.domain.model.Entity)10 ArrayList (java.util.ArrayList)10 DtObject (io.vertigo.dynamo.domain.model.DtObject)9 SearchIndexDefinition (io.vertigo.dynamo.search.metamodel.SearchIndexDefinition)8 DtListURI (io.vertigo.dynamo.domain.model.DtListURI)7 VTransactionWritable (io.vertigo.commons.transaction.VTransactionWritable)6 DtList (io.vertigo.dynamo.domain.model.DtList)5 Account (io.vertigo.account.account.Account)4 AccountGroup (io.vertigo.account.account.AccountGroup)4 Home (io.vertigo.app.Home)4 AssociationNNDefinition (io.vertigo.dynamo.domain.metamodel.association.AssociationNNDefinition)4 FileInfoURI (io.vertigo.dynamo.domain.model.FileInfoURI)4 KeyConcept (io.vertigo.dynamo.domain.model.KeyConcept)4 VFile (io.vertigo.dynamo.file.model.VFile)4 SearchIndex (io.vertigo.dynamo.search.model.SearchIndex)4 TaskDefinition (io.vertigo.dynamo.task.metamodel.TaskDefinition)4 Task (io.vertigo.dynamo.task.model.Task)4