package com.idega.content.upload.presentation;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.idega.block.web2.business.Web2Business;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.business.IBOLookup;
import com.idega.content.business.ContentConstants;
import com.idega.content.business.ContentUtil;
import com.idega.core.builder.business.BuilderService;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Layer;
import com.idega.presentation.Span;
import com.idega.presentation.text.Heading1;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.slide.business.IWSlideSession;
import com.idega.user.data.User;
import com.idega.util.PresentationUtil;
import com.idega.util.StringUtil;
import com.idega.util.expression.ELUtil;
public class FilesUploader extends Block {
private boolean resolvePathFromUser, reloadPageAfterUpload;
private String parentPath;
private String componentToRerenderId;
@Override
public void main(IWContext iwc) {
PresentationUtil.addStyleSheetToHeader(iwc, ContentUtil.getBundle().getVirtualPathWithFileNameString("style/filesUploader.css"));
Layer container = new Layer();
add(container);
container.setStyleClass("filesUploaderContainerStyle");
resolvePath(iwc);
if (StringUtil.isEmpty(parentPath)) {
container.add(new Heading1(getResourceBundle(iwc).getLocalizedString("unkown_parent_path", "Provide parent path!")));
return;
}
Link uploadButton = new Link(new Span(new Text(getResourceBundle(iwc).getLocalizedString("upload", "Upload"))));
container.add(uploadButton);
uploadButton.setStyleClass("filesUploaderUploadButtonStyle");
uploadButton.setURL("javascript:void(0);");
uploadButton.setOnClick(new StringBuilder("MOOdalBox.open('").append(getUriToComponent(iwc)).append("', '")
.append(getResourceBundle(iwc).getLocalizedString("files_uploader.upload_files_window", "Files uploader")).append("', '400 300');")
.toString());
addResources(iwc, true);
}
private void resolvePath(IWContext iwc) {
if (!resolvePathFromUser) {
return;
}
if (!iwc.isLoggedOn()) {
return;
}
User currentUser = iwc.getCurrentUser();
if (currentUser == null) {
return;
}
String userPath = null;
try {
IWSlideSession slideSession = IBOLookup.getSessionInstance(iwc, IWSlideSession.class);
userPath = slideSession.getUserHomeFolder();
} catch(Exception e) {
e.printStackTrace();
}
if (StringUtil.isEmpty(userPath)) {
return;
}
parentPath = userPath;
}
private String getUriToComponent(IWContext iwc) {
BuilderService builderService = null;
try {
builderService = getBuilderService(iwc);
} catch (RemoteException e) {
e.printStackTrace();
}
if (builderService == null) {
return null;
}
List<AdvancedProperty> parameters = new ArrayList<AdvancedProperty>();
parameters.add(new AdvancedProperty(FilesUploaderForm.PARENT_PATH_FOLDER_CHOOSER_PARAMETER, parentPath));
if (!StringUtil.isEmpty(componentToRerenderId)) {
parameters.add(new AdvancedProperty(FilesUploaderForm.COMPONENT_TO_RERENDER_ID_PARAMETER, componentToRerenderId));
}
if (isReloadPageAfterUpload()) {
parameters.add(new AdvancedProperty(FilesUploaderForm.RELOAD_AFTER_UPLOAD, Boolean.TRUE.toString()));
}
return builderService.getUriToObject(FilesUploaderForm.class, parameters);
}
private void addResources(IWContext iwc, boolean useCompressedScript) {
Web2Business web2 = ELUtil.getInstance().getBean(Web2Business.SPRING_BEAN_IDENTIFIER);
try {
PresentationUtil.addJavaScriptSourcesLinesToHeader(iwc, Arrays.asList(web2.getBundleURIToMootoolsLib(!useCompressedScript),
web2.getMoodalboxScriptFilePath(!useCompressedScript)));
PresentationUtil.addStyleSheetToHeader(iwc, web2.getMoodalboxStyleFilePath());
} catch (RemoteException e) {
e.printStackTrace();
}
}
public String getParentPath() {
return parentPath;
}
public void setParentPath(String parentPath) {
this.parentPath = parentPath;
}
public String getComponentToRerenderId() {
return componentToRerenderId;
}
public void setComponentToRerenderId(String componentToRerenderId) {
this.componentToRerenderId = componentToRerenderId;
}
public boolean isResolvePathFromUser() {
return resolvePathFromUser;
}
public void setResolvePathFromUser(boolean resolvePathFromUser) {
this.resolvePathFromUser = resolvePathFromUser;
}
@Override
public String getBundleIdentifier() {
return ContentConstants.IW_BUNDLE_IDENTIFIER;
}
public boolean isReloadPageAfterUpload() {
return reloadPageAfterUpload;
}
public void setReloadPageAfterUpload(boolean reloadPageAfterUpload) {
this.reloadPageAfterUpload = reloadPageAfterUpload;
}
}