Skip to content

Commit

Permalink
AB#222: Ability to upload attachment
Browse files Browse the repository at this point in the history
  • Loading branch information
ce-simsoft committed Nov 8, 2022
1 parent 63eebdd commit 8085abc
Show file tree
Hide file tree
Showing 18 changed files with 700 additions and 275 deletions.
309 changes: 309 additions & 0 deletions client/yarn.lock

Large diffs are not rendered by default.

18 changes: 17 additions & 1 deletion src/main/java/mil/dds/anet/AnetApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,23 @@
import mil.dds.anet.config.AnetKeycloakConfiguration;
import mil.dds.anet.database.PersonDao;
import mil.dds.anet.database.StatementLogger;
import mil.dds.anet.resources.*;
import mil.dds.anet.resources.AdminResource;
import mil.dds.anet.resources.ApprovalStepResource;
import mil.dds.anet.resources.AttachmentResource;
import mil.dds.anet.resources.AuthorizationGroupResource;
import mil.dds.anet.resources.GraphQlResource;
import mil.dds.anet.resources.HomeResource;
import mil.dds.anet.resources.LocationResource;
import mil.dds.anet.resources.LoggingResource;
import mil.dds.anet.resources.NoteResource;
import mil.dds.anet.resources.OrganizationResource;
import mil.dds.anet.resources.PersonResource;
import mil.dds.anet.resources.PositionResource;
import mil.dds.anet.resources.ReportResource;
import mil.dds.anet.resources.SavedSearchResource;
import mil.dds.anet.resources.SubscriptionResource;
import mil.dds.anet.resources.SubscriptionUpdateResource;
import mil.dds.anet.resources.TaskResource;
import mil.dds.anet.threads.AccountDeactivationWorker;
import mil.dds.anet.threads.AnetEmailWorker;
import mil.dds.anet.threads.FutureEngagementWorker;
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/mil/dds/anet/AnetObjectEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import mil.dds.anet.database.AdminDao;
import mil.dds.anet.database.AdminDao.AdminSettingKeys;
import mil.dds.anet.database.ApprovalStepDao;
import mil.dds.anet.database.AttachmentDao;
import mil.dds.anet.database.AuthorizationGroupDao;
import mil.dds.anet.database.CommentDao;
import mil.dds.anet.database.CustomSensitiveInformationDao;
Expand Down Expand Up @@ -62,6 +63,7 @@ public class AnetObjectEngine {
private final OrganizationDao orgDao;
private final PositionDao positionDao;
private final ApprovalStepDao asDao;
private final AttachmentDao attachmentDao;
private final ReportActionDao reportActionDao;
private final ReportDao reportDao;
private final CommentDao commentDao;
Expand Down Expand Up @@ -107,6 +109,7 @@ public AnetObjectEngine(String dbUrl, Application<?> application, AnetConfigurat
emailDao = injector.getInstance(EmailDao.class);
authorizationGroupDao = injector.getInstance(AuthorizationGroupDao.class);
noteDao = injector.getInstance(NoteDao.class);
attachmentDao = injector.getInstance(AttachmentDao.class);
jobHistoryDao = injector.getInstance(JobHistoryDao.class);
subscriptionDao = injector.getInstance(SubscriptionDao.class);
subscriptionUpdateDao = injector.getInstance(SubscriptionUpdateDao.class);
Expand Down Expand Up @@ -185,6 +188,10 @@ public NoteDao getNoteDao() {
return noteDao;
}

public AttachmentDao getAttachmentDao() {
return attachmentDao;
}

public JobHistoryDao getJobHistoryDao() {
return jobHistoryDao;
}
Expand Down
103 changes: 92 additions & 11 deletions src/main/java/mil/dds/anet/beans/Attachment.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,122 @@
import io.leangen.graphql.annotations.GraphQLInputField;
import io.leangen.graphql.annotations.GraphQLQuery;
import io.leangen.graphql.annotations.GraphQLRootContext;

import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

import mil.dds.anet.AnetObjectEngine;
import mil.dds.anet.utils.IdDataLoaderKey;
import mil.dds.anet.views.AbstractAnetBean;
import mil.dds.anet.views.UuidFetcher;

public class Attachment extends AbstractAnetBean {

public static enum Classification {
NATO_UNCLASSIFIED, NATO_RESTRICTED
}

@GraphQLQuery
@GraphQLInputField
private String mimeType;

@GraphQLQuery
@GraphQLInputField
private byte[] content;

@GraphQLQuery
@GraphQLInputField
private String fileName;

@GraphQLQuery
@GraphQLInputField
private String description;

@GraphQLQuery
@GraphQLInputField
private String classificationUuid;

// annotated below
@GraphQLQuery
@GraphQLInputField
private Classification classification;

private List<AttachmentRelatedObject> attachmentRelatedObjects;

public String getMimeType() {
return mimeType;
}

public void setMimeType(String mimeType) {
this.mimeType = mimeType;
}

public byte[] getContent() {
return content;
}

public void setContent(byte[] content) {
this.content = content;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getClassificationUuid() {
return classificationUuid;
}

public void setClassificationUuid(String classificationUuid) {
this.classificationUuid = classificationUuid;
}

public void setClassification(Classification classification) {
this.classification = classification;
}

public Classification getClassification() {
return classification;
}

@GraphQLQuery(name = "attachmentRelatedObject")
public CompletableFuture<List<AttachmentRelatedObject>> loadRelatedObject(
public CompletableFuture<List<AttachmentRelatedObject>> loadAttachmentRelatedObjects(
@GraphQLRootContext Map<String, Object> context) {
if (attachmentRelatedObjects != null) {
return CompletableFuture.completedFuture(attachmentRelatedObjects);
}
return AnetObjectEngine.getInstance().getNoteDao().getRelatedObjects(context, this)
.thenApply(o -> {
attachmentRelatedObjects = o;
return o;
});
return AnetObjectEngine.getInstance().getAttachmentDao().getRelatedObjects(context, this)
.thenApply(o -> {
attachmentRelatedObjects = o;
return o;
});
}



public List<AttachmentRelatedObject> getAttachmentRelatedObjects() {
return attachmentRelatedObjects;
}

@GraphQLInputField(name = "attachmentRelatedObjects")
public void setAttachmentRelatedObjects(List<AttachmentRelatedObject> attachmentRelatedObjects) {
this.attachmentRelatedObjects = attachmentRelatedObjects;
}

@Override
public String toString() {
return String.format(
"[uuid:%s fileName:%s mime:%s description:%s relatedObjectType:%s relatedObjectUuid:%s]",
uuid, fileName, mimeType, description, relatedObjectType, relatedObjectUuid);
return attachmentRelatedObjects.toString();
}

}
30 changes: 0 additions & 30 deletions src/main/java/mil/dds/anet/beans/AttachmentClassification.java

This file was deleted.

106 changes: 106 additions & 0 deletions src/main/java/mil/dds/anet/beans/AttachmentRelatedObject.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package mil.dds.anet.beans;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.leangen.graphql.annotations.GraphQLIgnore;
import io.leangen.graphql.annotations.GraphQLInputField;
import io.leangen.graphql.annotations.GraphQLQuery;
import io.leangen.graphql.annotations.GraphQLRootContext;
import java.time.Instant;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import javax.ws.rs.WebApplicationException;
import mil.dds.anet.utils.IdDataLoaderKey;
import mil.dds.anet.views.AbstractAnetBean;
import mil.dds.anet.views.UuidFetcher;

public class AttachmentRelatedObject extends AbstractAnetBean {
@GraphQLQuery
@GraphQLInputField
private String attachmentUuid;

@GraphQLQuery
@GraphQLInputField
private String relatedObjectType;

@GraphQLQuery
@GraphQLInputField
private String relatedObjectUuid;

// annotated below
private RelatableObject relatedObject;

@Override
@JsonIgnore
@GraphQLIgnore
public String getUuid() {
throw new WebApplicationException("no UUID field on AttachmentRelatedObject");
}

@Override
public void setUuid(String uuid) {
// just ignore
}

@Override
@JsonIgnore
@GraphQLIgnore
public Instant getCreatedAt() {
throw new WebApplicationException("no createdAt field on AttachmentRelatedObject");
}

@Override
public void setCreatedAt(Instant createdAt) {
// just ignore
}

@Override
@JsonIgnore
@GraphQLIgnore
public Instant getUpdatedAt() {
throw new WebApplicationException("no updatedAt field on AttachmentRelatedObject");
}

@Override
public void setUpdatedAt(Instant updatedAt) {
// just ignore
}

public String getAttachmentUuid() {
return attachmentUuid;
}

public void setAttachmentUuid(String attachmentUuid) {
this.attachmentUuid = attachmentUuid;
}

public String getRelatedObjectType() {
return relatedObjectType;
}

public void setRelatedObjectType(String relatedObjectType) {
this.relatedObjectType = relatedObjectType;
}

public String getRelatedObjectUuid() {
return relatedObjectUuid;
}

public void setRelatedObjectUuid(String relatedObjectUuid) {
this.relatedObjectUuid = relatedObjectUuid;
}

@GraphQLQuery(name = "relatedObject")
public CompletableFuture<RelatableObject> loadRelatedObject(
@GraphQLRootContext Map<String, Object> context) {
if (relatedObject != null) {
return CompletableFuture.completedFuture(relatedObject);
}
return new UuidFetcher<AbstractAnetBean>()
.load(context, IdDataLoaderKey.valueOfTableName(relatedObjectType), relatedObjectUuid)
.thenApply(o -> {
relatedObject = (RelatableObject) o;
return relatedObject;
});
}

}
40 changes: 0 additions & 40 deletions src/main/java/mil/dds/anet/beans/FileUpload.java

This file was deleted.

Loading

0 comments on commit 8085abc

Please sign in to comment.