package org.exoplatform.sample.webui.component;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.exoplatform.download.DownloadResource;
import org.exoplatform.download.DownloadService;
import org.exoplatform.download.InputStreamDownloadResource;
import org.exoplatform.upload.UploadResource;
import org.exoplatform.upload.UploadService.UploadUnit;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormUploadInput;
import org.exoplatform.webui.form.input.UIUploadInput;
@ComponentConfig(lifecycle = UIFormLifecycle.class, template = "app:/groovy/webui/component/UISampleDownloadUpload.gtmpl", events = { @EventConfig(listeners = UISampleDownloadUpload.SubmitActionListener.class) })
public class UISampleDownloadUpload extends UIForm {
Map<String, String> data = new HashMap<String, String>();
private String[] downloadLink;
private String[] fileName;
private String[] inputName;
public UISampleDownloadUpload() {
addUIFormInput(new UIFormUploadInput("name0", "value0"));
addUIFormInput(new UIFormUploadInput("name1", "value1", 1));
addUIFormInput(new UIFormUploadInput("name2", "value2", 200));
addUIFormInput(new UIUploadInput("name3", "name3", 0, 300, UploadUnit.KB));
addUIFormInput(new UIUploadInput("name4", "name4", 1, 300, UploadUnit.MB));
}
public void setDownloadLink(String[] downloadLink) {
this.downloadLink = downloadLink;
}
public String[] getDownloadLink() {
return downloadLink;
}
public void setFileName(String[] fileName) {
this.fileName = fileName;
}
public String[] getFileName() {
return fileName;
}
public void setInputName(String[] inputName) {
this.inputName = inputName;
}
public String[] getInputName() {
return inputName;
}
public static class SubmitActionListener extends EventListener<UISampleDownloadUpload> {
public void execute(Event<UISampleDownloadUpload> event) throws Exception {
UISampleDownloadUpload uiForm = event.getSource();
DownloadService dservice = uiForm.getApplicationComponent(DownloadService.class);
List<String> downloadLink = new ArrayList<String>();
List<String> fileName = new ArrayList<String>();
List<String> inputName = new ArrayList<String>();
for (int index = 0; index <= 2; index++) {
UIFormUploadInput input = uiForm.getChildById("name" + index);
UploadResource uploadResource = input.getUploadResource();
if (uploadResource != null) {
DownloadResource dresource = new InputStreamDownloadResource(input.getUploadDataAsStream(),
uploadResource.getMimeType());
dresource.setDownloadName(uploadResource.getFileName());
downloadLink.add(dservice.getDownloadLink(dservice.addDownloadResource(dresource)));
fileName.add(uploadResource.getFileName());
inputName.add("name" + index);
}
}
for (int index = 3; index < 5; index++) {
UIUploadInput input = uiForm.getChildById("name" + index);
UploadResource[] uploadResources = input.getUploadResources();
for (UploadResource uploadResource : uploadResources) {
DownloadResource dresource = new InputStreamDownloadResource(new FileInputStream(new File(
uploadResource.getStoreLocation())), uploadResource.getMimeType());
dresource.setDownloadName(uploadResource.getFileName());
downloadLink.add(dservice.getDownloadLink(dservice.addDownloadResource(dresource)));
fileName.add(uploadResource.getFileName());
inputName.add("name" + index);
}
}
uiForm.setDownloadLink(downloadLink.toArray(new String[downloadLink.size()]));
uiForm.setFileName(fileName.toArray(new String[fileName.size()]));
uiForm.setInputName(inputName.toArray(new String[inputName.size()]));
event.getRequestContext().addUIComponentToUpdateByAjax(uiForm.getParent());
}
}
}