Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plume file integration #1

Merged
merged 15 commits into from
Dec 14, 2023
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,13 @@ Monitoring
- <http://localhost:8080/monitoring/metrics>

There is a basic authentication for security, the credentials are: `plume//rocks`.

File
----
[Plume File](https://github.com/Coreoz/Plume-file) is available through the library API:
- <http://localhost:8080/files/{file-unique-nama}>

2 files upload endpoints examples were added in FileUploadWs:
- <http://localhost:8080/files/pictures> that only accepts png files
- <http://localhost:8080/files/reports> that only accept Excel files

27 changes: 27 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<maven.compiler.target>17</maven.compiler.target>

<plume-dependencies.version>4.3.4</plume-dependencies.version>
<plume-file.version>3.0.1</plume-file.version>
</properties>

<build>
Expand Down Expand Up @@ -169,6 +170,32 @@
<artifactId>plume-admin-api-log</artifactId>
</dependency>

<dependency>
<groupId>com.coreoz</groupId>
<artifactId>plume-file-core</artifactId>
<version>${plume-file.version}</version>
</dependency>
<dependency>
<groupId>com.coreoz</groupId>
<artifactId>plume-file-metadata-database</artifactId>
<version>${plume-file.version}</version>
</dependency>
<dependency>
<groupId>com.coreoz</groupId>
<artifactId>plume-file-storage-database</artifactId>
<version>${plume-file.version}</version>
</dependency>
<dependency>
<groupId>com.coreoz</groupId>
<artifactId>plume-file-web-download-jersey</artifactId>
<version>${plume-file.version}</version>
</dependency>
<dependency>
<groupId>com.coreoz</groupId>
<artifactId>plume-file-web-upload-jersey</artifactId>
<version>${plume-file.version}</version>
</dependency>

<!-- unit testing -->
<dependency>
<groupId>junit</groupId>
Expand Down
19 changes: 14 additions & 5 deletions src/main/java/com/coreoz/db/QuerydslGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
import java.sql.SQLException;
import java.util.Locale;

import com.coreoz.plume.admin.db.generated.AdminUser;
import com.coreoz.plume.conf.guice.GuiceConfModule;
import com.coreoz.plume.db.querydsl.generation.IdBeanSerializer;
import com.coreoz.plume.db.transaction.TransactionManager;
import com.coreoz.plume.file.db.beans.FileDataQueryDsl;
import com.coreoz.plume.file.db.beans.FileMetadataQuerydsl;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.querydsl.codegen.EntityType;
Expand All @@ -23,11 +26,11 @@
/**
* Generate Querydsl classes for the database layer.
*
* Run the {@link #main()} method from your IDE to regenerate Querydsl classes.
* Run the {@link #main(String...)} method from your IDE to regenerate Querydsl classes.
*/
public class QuerydslGenerator {

private static final String TABLES_PREFIX = "plm_";
private static final String TABLES_PREFIX = "SWC_";

public static void main(String... args) {
Configuration configuration = new Configuration(SQLTemplates.DEFAULT);
Expand All @@ -47,9 +50,15 @@ public static void main(String... args) {
@Override
public String getClassName(String tableName) {
// uncomment if you are using plume file
// if("plm_file".equalsIgnoreCase(tableName)) {
// return FileEntityQuerydsl.class.getName();
// }
if("plm_file_data".equalsIgnoreCase(tableName)) {
return FileDataQueryDsl.class.getName();
}
if("plm_file".equalsIgnoreCase(tableName)) {
return FileMetadataQuerydsl.class.getName();
}
if("plm_user".equalsIgnoreCase(tableName)) {
return AdminUser.class.getName();
}
return super.getClassName(tableName.substring(TABLES_PREFIX.length()));
}

Expand Down
71 changes: 71 additions & 0 deletions src/main/java/com/coreoz/db/generated/QUserFile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.coreoz.db.generated;

import static com.querydsl.core.types.PathMetadataFactory.*;

import com.querydsl.core.types.dsl.*;

import com.querydsl.core.types.PathMetadata;
import javax.annotation.processing.Generated;
import com.querydsl.core.types.Path;

import com.querydsl.sql.ColumnMetadata;
import java.sql.Types;




/**
* QUserFile is a Querydsl query type for UserFile
*/
@Generated("com.querydsl.sql.codegen.MetaDataSerializer")
public class QUserFile extends com.querydsl.sql.RelationalPathBase<UserFile> {

private static final long serialVersionUID = 1022868767;

public static final QUserFile userFile = new QUserFile("SWC_USER_FILE");

public final StringPath excelUniqueName = createString("excelUniqueName");

public final StringPath pictureUniqueName = createString("pictureUniqueName");

public final NumberPath<Long> userId = createNumber("userId", Long.class);

public final com.querydsl.sql.ForeignKey<com.coreoz.plume.admin.db.generated.AdminUser> constraint4 = createForeignKey(userId, "ID");

public final com.querydsl.sql.ForeignKey<com.coreoz.plume.file.db.beans.FileMetadataQuerydsl> constraint4d = createForeignKey(pictureUniqueName, "UNIQUE_NAME");

public final com.querydsl.sql.ForeignKey<com.coreoz.plume.file.db.beans.FileMetadataQuerydsl> constraint4d0 = createForeignKey(excelUniqueName, "UNIQUE_NAME");

public QUserFile(String variable) {
super(UserFile.class, forVariable(variable), "PLUME_DEMO", "SWC_USER_FILE");
addMetadata();
}

public QUserFile(String variable, String schema, String table) {
super(UserFile.class, forVariable(variable), schema, table);
addMetadata();
}

public QUserFile(String variable, String schema) {
super(UserFile.class, forVariable(variable), schema, "SWC_USER_FILE");
addMetadata();
}

public QUserFile(Path<? extends UserFile> path) {
super(path.getType(), path.getMetadata(), "PLUME_DEMO", "SWC_USER_FILE");
addMetadata();
}

public QUserFile(PathMetadata metadata) {
super(UserFile.class, metadata, "PLUME_DEMO", "SWC_USER_FILE");
addMetadata();
}

public void addMetadata() {
addMetadata(excelUniqueName, ColumnMetadata.named("EXCEL_UNIQUE_NAME").withIndex(3).ofType(Types.VARCHAR).withSize(255).notNull());
addMetadata(pictureUniqueName, ColumnMetadata.named("PICTURE_UNIQUE_NAME").withIndex(2).ofType(Types.VARCHAR).withSize(255).notNull());
addMetadata(userId, ColumnMetadata.named("USER_ID").withIndex(1).ofType(Types.BIGINT).withSize(64).notNull());
}

}

48 changes: 48 additions & 0 deletions src/main/java/com/coreoz/db/generated/UserFile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.coreoz.db.generated;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import javax.annotation.processing.Generated;
import com.querydsl.sql.Column;

/**
* UserFile is a Querydsl bean type
*/
@Generated("com.coreoz.plume.db.querydsl.generation.IdBeanSerializer")
public class UserFile {

@Column("EXCEL_UNIQUE_NAME")
private String excelUniqueName;

@Column("PICTURE_UNIQUE_NAME")
private String pictureUniqueName;

@JsonSerialize(using=com.fasterxml.jackson.databind.ser.std.ToStringSerializer.class)
@Column("USER_ID")
private Long userId;

public String getExcelUniqueName() {
return excelUniqueName;
}

public void setExcelUniqueName(String excelUniqueName) {
this.excelUniqueName = excelUniqueName;
}

public String getPictureUniqueName() {
return pictureUniqueName;
}

public void setPictureUniqueName(String pictureUniqueName) {
this.pictureUniqueName = pictureUniqueName;
}

public Long getUserId() {
return userId;
}

public void setUserId(Long userId) {
this.userId = userId;
}

}

15 changes: 14 additions & 1 deletion src/main/java/com/coreoz/guice/ApplicationModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@
import com.coreoz.plume.conf.guice.GuiceConfModule;
import com.coreoz.plume.db.guice.DataSourceModule;
import com.coreoz.plume.db.querydsl.guice.GuiceQuerydslModule;
import com.coreoz.plume.jersey.monitoring.guice.GuiceJacksonWithMetricsModule;
import com.coreoz.plume.file.filetype.FileTypesProvider;
import com.coreoz.plume.file.guice.GuiceFileDownloadModule;
import com.coreoz.plume.file.guice.GuiceFileMetadataDatabaseModule;
import com.coreoz.plume.file.guice.GuiceFileModule;
import com.coreoz.plume.file.guice.GuiceFileStorageDatabaseModule;
import com.coreoz.plume.scheduler.guice.GuiceSchedulerModule;
import com.coreoz.services.file.ShowCaseFileTypesProvider;
import com.coreoz.plume.jersey.monitoring.guice.GuiceJacksonWithMetricsModule;
import com.coreoz.webservices.admin.permissions.ProjectAdminPermissionService;
import com.google.inject.AbstractModule;
import org.glassfish.jersey.server.ResourceConfig;
Expand All @@ -33,6 +39,13 @@ protected void configure() {
// API log configuration
install(new GuiceSchedulerModule());

// Plume File
install(new GuiceFileMetadataDatabaseModule());
install(new GuiceFileStorageDatabaseModule());
install(new GuiceFileDownloadModule());
install(new GuiceFileModule());
bind(FileTypesProvider.class).to(ShowCaseFileTypesProvider.class);

// database setup for the demo
install(new DataSourceModule());

Expand Down
7 changes: 6 additions & 1 deletion src/main/java/com/coreoz/jersey/JerseyConfigProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import javax.inject.Singleton;

import org.glassfish.hk2.utilities.binding.AbstractBinder;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.process.internal.RequestScoped;
import org.glassfish.jersey.server.ResourceConfig;

Expand Down Expand Up @@ -36,6 +37,8 @@ public JerseyConfigProvider(ObjectMapper objectMapper) {
config.packages("com.coreoz.webservices");
// admin web-services
config.packages("com.coreoz.plume.admin.webservices");
// plume file
config.packages("com.coreoz.plume.file.webservices");
// enable to fetch the current user as a web-service parameter
config.register(new AbstractBinder() {
@Override
Expand All @@ -54,6 +57,8 @@ protected void configure() {
config.register(AdminSecurityFeature.class);
// to debug web-service requests
// register(LoggingFeature.class);
// To use Multipart for file upload
config.register(MultiPartFeature.class);
amanteaux marked this conversation as resolved.
Show resolved Hide resolved

// java 8
config.register(TimeParamProvider.class);
Expand All @@ -73,4 +78,4 @@ public ResourceConfig get() {
return config;
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.coreoz.services.file;

import com.coreoz.plume.file.filetype.FileTypeDatabase;
import com.coreoz.plume.file.filetype.FileTypesProvider;

import java.util.Collection;
import java.util.List;

public class ShowCaseFileTypesProvider implements FileTypesProvider {
@Override
public Collection<FileTypeDatabase> fileTypesAvailable() {
return List.of(ShowcaseFileType.values());
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/coreoz/services/file/ShowcaseFileType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.coreoz.services.file;

import com.coreoz.db.generated.QUserFile;
import com.coreoz.plume.file.filetype.FileTypeDatabase;
import com.querydsl.core.types.EntityPath;
import com.querydsl.core.types.dsl.StringPath;

public enum ShowcaseFileType implements FileTypeDatabase {
PICTURE(QUserFile.userFile, QUserFile.userFile.pictureUniqueName),
EXCEL(QUserFile.userFile, QUserFile.userFile.excelUniqueName),
;

private final EntityPath<?> fileEntity;
private final StringPath joinColumn;

ShowcaseFileType(EntityPath<?> fileEntity, StringPath joinColumn) {
this.fileEntity = fileEntity;
this.joinColumn = joinColumn;
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Saut de ligne en trop


@Override
public EntityPath<?> getFileEntity() {
return fileEntity;
}

@Override
public StringPath getJoinColumn() {
return joinColumn;
}
}
Loading