Fair enough.
I finally had some time to dig back into this today, and I tried a few implementations and none of them seemed to work.
So just for reference…
DistributeItemsButton.java
var b = new Button("Distribute Items");
b.addClickListener(e ->{
String setName = name.getValue();
String setPrice = price.getValue();
DistributeItems d = new DistributeItems();
d.distributeItems(progressBar,progressBarLabel,productImage,radioGroup,
setPrice,setName,setImages, users, programLogs, UI.getCurrent());
});
Then I have a for loop which uploads images to a server
Excerpt of DistributeItems.java
//Attempt to upload media
progressBarLabel.setText("Attempting to upload images: ");
for (int i = 0; i < setImages.size(); i++) {
final var counter = i;
BackEndTasks bet = new BackEndTasks();
bet.uploadMediaProcess(ui, setImages.get(i), programLogs);
bet.uploadMediaProcess(ui, setImages.get(counter), programLogs).addCallback(new ListenableFutureCallback<Integer>() {
@Override
public void onFailure(Throwable ex) {
}
@Override
public void onSuccess(Integer result) {
ui.access(() ->{
progressBarLabel.setText("Attempting to upload images: " + counter + 1 + "/" + setImages.size());
programLogs.setValue(programLogs.getValue() + "\r\nAttempting to upload images: " + (counter + 1) + "/" + setImages.size());
ui.push();
});
}
});
Which calls on my “BackEndTasks”
BackEndTasks.java
@Service
public class BackEndTasks {
@Async
public ListenableFuture<Integer> uploadMediaProcess(UI ui, File f, TextArea programLog){
String uri = "<redacted>";
String extension = "";
String mime = "";
String encoded_cred = Base64.getEncoder().encodeToString(("<redacted>").getBytes());
Integer mediaID = -1;
String fileName = f.getName();
System.out.println("FILENAME: " + fileName);
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i + 1);
}
if (extension.equalsIgnoreCase("png")) {
mime = "image/png";
}
if (extension.equalsIgnoreCase("jpeg") || extension.equalsIgnoreCase("jpg")) {
mime = "image/jpeg";
}
Path fp = f.toPath();
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(uri))
.POST(HttpRequest.BodyPublishers.ofFile(fp) )
.headers("AUTHORIZATION", "Basic " + encoded_cred,
"Content-Disposition", "attachment; filename=" + f.getName(),
"Content-Type", mime
)
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
mediaID = CreateItem.getId(response.body());
}catch (Exception e){e.printStackTrace(); programLog.setValue(programLog.getValue() + "\r\nUpload failed for file: " + f.getName());}
return AsyncResult.forValue(mediaID);
}
}