/**
* Copyright (C) 2015 Born Informatik AG (www.born.ch)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wte4j.ui.client.templates.upload;
import java.util.ArrayList;
import java.util.List;
import org.wte4j.ui.shared.FileUploadResponse;
import org.wte4j.ui.shared.FileUploadResponseDto;
import org.wte4j.ui.shared.TemplateDto;
import com.google.gwt.core.client.JsonUtils;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler;
public class TemplateUploadPresenter {
private TemplateUploadDisplay templateUploadDisplay;
private List<FileUploadedHandler> fileUploadedHandlers;
public TemplateUploadPresenter() {
fileUploadedHandlers = new ArrayList<FileUploadedHandler>();
}
public void addFileUploadedHandler(FileUploadedHandler fileUploadedHandler) {
fileUploadedHandlers.add(fileUploadedHandler);
}
public void bindTo(TemplateUploadDisplay aTemplateUploadDisplay) {
this.templateUploadDisplay = aTemplateUploadDisplay;
templateUploadDisplay.addSubmitButtonClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
templateUploadDisplay.startLoadingAnimation();
templateUploadDisplay.submitForm();
}
});
templateUploadDisplay.addSubmitCompleteHandler(new SubmitCompleteHandler() {
@Override
public void onSubmitComplete(SubmitCompleteEvent event) {
onFileUploaded(event);
}
});
templateUploadDisplay.addCancelButtonClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
cancelFileUpload();
}
});
}
protected void cancelFileUpload() {
templateUploadDisplay.stopLoadingAnimation();
}
public void startUpload(TemplateDto currentTemplate,
String templateUploadRestURL) {
templateUploadDisplay.setAction(templateUploadRestURL);
templateUploadDisplay.setTemplateName(currentTemplate.getDocumentName());
templateUploadDisplay.setLanguage(currentTemplate.getLanguage());
templateUploadDisplay.stopLoadingAnimation();
}
private FileUploadResponse parseResponse(String results) {
if (results != null) {
// json is wrapped in <pre/> tag
String resultConent = results.replaceAll("\\<[^>]*>", "");
if (JsonUtils.safeToEval(resultConent)) {
return JsonUtils.<FileUploadResponseJso> safeEval(resultConent);
}
}
return new FileUploadResponseDto(false, results);
}
private void onFileUploaded(SubmitCompleteEvent event) {
templateUploadDisplay.stopLoadingAnimation();
FileUploadResponse response = parseResponse(event.getResults());
if (response.getDone()) {
fireSuccessfulFileUpload(response.getMessage());
}
else {
fireFailedFileUpload(response.getMessage());
}
}
private void fireFailedFileUpload(String errorMessage) {
for (FileUploadedHandler fileUploadHandler : fileUploadedHandlers) {
fileUploadHandler.onFailure(errorMessage);
}
}
private void fireSuccessfulFileUpload(String fileUpdateResponse) {
for (FileUploadedHandler fileUploadHandler : fileUploadedHandlers) {
fileUploadHandler.onSuccess(fileUpdateResponse);
}
}
public interface FileUploadedHandler {
public void onSuccess(String fileUpdateResponse);
public void onFailure(String errorMessage);
}
}