Index: gallery/repository/src/main/resources/hippoecm-extension.xml =================================================================== --- gallery/repository/src/main/resources/hippoecm-extension.xml (revision 30175) +++ gallery/repository/src/main/resources/hippoecm-extension.xml (revision ) @@ -232,5 +232,34 @@ 2006.0 + + + hippo:initializeitem + + + /hippo:configuration/hippo:workflows/gallery/image-gallery/frontend:renderer/fileupload.maxItems + + + 25 + + + 2007.0 + - + + + + hippo:initializeitem + + + /hippo:configuration/hippo:workflows/gallery/asset-gallery/frontend:renderer/fileupload.maxItems + + + 25 + + + 2007.1 + + + + Index: gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/editor/ImageUploadPlugin.java =================================================================== --- gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/editor/ImageUploadPlugin.java (revision 30175) +++ gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/editor/ImageUploadPlugin.java (revision ) @@ -22,17 +22,13 @@ import javax.jcr.RepositoryException; import org.apache.commons.lang.StringUtils; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.upload.FileUpload; -import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.util.value.IValueMap; import org.apache.wicket.util.value.ValueMap; import org.hippoecm.frontend.behaviors.EventStoppingBehavior; import org.hippoecm.frontend.dialog.ExceptionDialog; -import org.hippoecm.frontend.dialog.IDialogService; import org.hippoecm.frontend.model.JcrNodeModel; import org.hippoecm.frontend.plugin.IPluginContext; import org.hippoecm.frontend.plugin.config.IPluginConfig; @@ -45,6 +41,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Plugin for uploading images. The plugin can be configured by setting configuration options found in the + * {@link FileUploadWidgetSettings}. + * + */ public class ImageUploadPlugin extends RenderPlugin { @SuppressWarnings("unused") private final static String SVN_ID = "$Id: ImageUploadPlugin.java 27296 2011-03-10 17:53:33Z mchatzidakis $"; @@ -54,7 +55,6 @@ static final Logger log = LoggerFactory.getLogger(ImageUploadPlugin.class); private IValueMap types; - private FileUploadForm form; public ImageUploadPlugin(final IPluginContext context, IPluginConfig config) { super(context, config); @@ -65,7 +65,8 @@ types = new ValueMap(typesConfig); } - add(form = new FileUploadForm("form", context)); + FileUploadForm form = new FileUploadForm("form"); + add(form); String mode = config.getString("mode", "edit"); form.setVisible("edit".equals(mode)); @@ -78,10 +79,10 @@ private FileUploadWidget widget; - public FileUploadForm(String name, final IPluginContext context) { + public FileUploadForm(String name) { super(name); - FileUploadWidgetSettings settings = new FileUploadWidgetSettings(); + FileUploadWidgetSettings settings = new FileUploadWidgetSettings(getPluginConfig()); settings.setAutoUpload(true); settings.setClearAfterUpload(true); settings.setClearTimeout(1000); @@ -91,13 +92,12 @@ add(widget = new FileUploadWidget("multifile", settings) { @Override protected void onFileUpload(FileUpload fileUpload) { - handleUpload(fileUpload, context); + handleUpload(fileUpload); } }); } - @Override protected void onSubmit() { widget.handleNonFlashSubmit(); @@ -106,7 +106,7 @@ } - private void handleUpload(FileUpload upload, IPluginContext context) { + private void handleUpload(FileUpload upload) { String fileName = upload.getClientFileName(); String mimeType = upload.getContentType(); @@ -128,7 +128,7 @@ JcrNodeModel nodeModel = (JcrNodeModel) ImageUploadPlugin.this.getDefaultModel(); Node node = nodeModel.getNode(); try { - GalleryProcessor processor = context.getService(getPluginConfig().getString("gallery.processor.id", + GalleryProcessor processor = getPluginContext().getService(getPluginConfig().getString("gallery.processor.id", "gallery.processor.service"), GalleryProcessor.class); if (processor == null) { processor = new DefaultGalleryProcessor(); Index: gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java =================================================================== --- gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java (revision 30175) +++ gallery/frontend/src/main/java/org/hippoecm/frontend/plugins/gallery/GalleryWorkflowPlugin.java (revision ) @@ -78,8 +78,8 @@ public class UploadDialog extends MultiFileUploadDialog { private static final long serialVersionUID = 1L; - public UploadDialog(String[] fileExtensions) { - super(fileExtensions); + public UploadDialog(IPluginConfig pluginConfig) { + super(pluginConfig); } public IModel getTitle() { @@ -139,7 +139,7 @@ String localName = getLocalizeCodec().encode(filename); Document document = workflow.createGalleryItem(nodeName, type); node = (HippoNode) (((UserSession) Session.get())).getJcrSession() - .getNodeByUUID(document.getIdentity()); + .getNodeByIdentifier(document.getIdentity()); DefaultWorkflow defaultWorkflow = (DefaultWorkflow) manager.getWorkflow("core", node); if (!node.getLocalizedName().equals(localName)) { defaultWorkflow.localizeName(localName); @@ -265,12 +265,7 @@ typeComponent = new Label("type", "default").setVisible(false); } - String[] fileExtensions = new String[0]; - if (getPluginConfig().containsKey("file.extensions")) { - fileExtensions = getPluginConfig().getStringArray("file.extensions"); - } - - UploadDialog dialog = new UploadDialog(fileExtensions); + UploadDialog dialog = new UploadDialog(getPluginConfig()); dialog.add(typeComponent); return dialog; } Index: yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidgetSettings.java =================================================================== --- yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidgetSettings.java (revision 30175) +++ yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidgetSettings.java (revision ) @@ -16,25 +16,47 @@ package org.hippoecm.frontend.plugins.yui.upload; import org.apache.wicket.IClusterable; +import org.hippoecm.frontend.plugin.config.IPluginConfig; +/** + * Settings for file uploads. Currently allowed configurable settings are: + * + */ public class FileUploadWidgetSettings implements IClusterable{ + @SuppressWarnings("unused") final static String SVN_ID = "$Id$"; - private String[] fileExtensions; - private int maxNumberOfFiles; + public static final String FILEUPLOAD_FLASH_ENABLED_SETTING = "fileupload.flashEnabled"; + public static final String FILEUPLOAD_MAX_ITEMS_SETTING = "fileupload.maxItems"; + public static final String FILEUPLOAD_AUTOUPLOAD_SETTING = "fileupload.autoUpload"; + public static final String FILEUPLOAD_ALLOWED_EXTENSIONS_SETTING = "fileupload.allowedExtensions"; + + //backwards compatibility + public static final String FILE_EXTENSIONS_SETTING = "file.extensions"; + + private String[] fileExtensions = new String[0]; + private int maxNumberOfFiles = 1; private boolean autoUpload; private boolean clearAfterUpload; - private int clearTimeout; + private int clearTimeout = 1000; private boolean hideBrowseDuringUpload; private String buttonWidth; private String buttonHeight; + private boolean flashUploadEnabled = true; public FileUploadWidgetSettings() { - fileExtensions = new String[0]; - maxNumberOfFiles = 1; - clearTimeout = 1000; - } + } + public FileUploadWidgetSettings(IPluginConfig pluginConfig) { + parsePluginConfig(pluginConfig); + } + public void setFileExtensions(String[] fileExtensions) { this.fileExtensions = fileExtensions; } @@ -99,4 +121,40 @@ this.buttonHeight = buttonHeight; } + /** + * Indicates if the upload widget should use Flash. + * @return true if flash should be used, false otherwise + */ + public boolean isFlashUploadEnabled() { + return flashUploadEnabled; -} + } + + /** + * If set to true (default) the upload plugin will use flash for file uploads, otherwise it will use a plain + * Javascript upload. + * @param flashUploadEnabled boolean indicating if flash should be used for file uploads. + */ + public void setFlashUploadEnabled(boolean flashUploadEnabled) { + this.flashUploadEnabled = flashUploadEnabled; + } + + private void parsePluginConfig(final IPluginConfig pluginConfig) { + if(pluginConfig.containsKey(FILEUPLOAD_FLASH_ENABLED_SETTING)) { + this.flashUploadEnabled = pluginConfig.getAsBoolean(FILEUPLOAD_FLASH_ENABLED_SETTING); + } + if(pluginConfig.containsKey(FILEUPLOAD_MAX_ITEMS_SETTING)) { + this.maxNumberOfFiles = pluginConfig.getAsInteger(FILEUPLOAD_MAX_ITEMS_SETTING); + } + // for backwards compatibility + if (pluginConfig.containsKey(FILE_EXTENSIONS_SETTING)) { + this.fileExtensions = pluginConfig.getStringArray(FILE_EXTENSIONS_SETTING); + } + if (pluginConfig.containsKey(FILEUPLOAD_ALLOWED_EXTENSIONS_SETTING)) { + this.fileExtensions = pluginConfig.getStringArray(FILEUPLOAD_ALLOWED_EXTENSIONS_SETTING); + } + if (pluginConfig.containsKey(FILEUPLOAD_AUTOUPLOAD_SETTING)) { + this.autoUpload = pluginConfig.getAsBoolean(FILEUPLOAD_AUTOUPLOAD_SETTING); + } + } + +} Index: editor/frontend/src/main/java/org/hippoecm/frontend/editor/plugins/resource/ResourceUploadPlugin.java =================================================================== --- editor/frontend/src/main/java/org/hippoecm/frontend/editor/plugins/resource/ResourceUploadPlugin.java (revision 30175) +++ editor/frontend/src/main/java/org/hippoecm/frontend/editor/plugins/resource/ResourceUploadPlugin.java (revision ) @@ -17,8 +17,6 @@ import java.io.IOException; import java.io.InputStream; -import java.util.Calendar; -import java.util.Collection; import javax.jcr.Node; import javax.jcr.RepositoryException; @@ -27,7 +25,6 @@ import org.apache.jackrabbit.JcrConstants; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.upload.FileUpload; -import org.apache.wicket.markup.html.form.upload.FileUploadField; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.util.value.IValueMap; import org.apache.wicket.util.value.ValueMap; @@ -38,7 +35,6 @@ import org.hippoecm.frontend.plugin.config.IPluginConfig; import org.hippoecm.frontend.plugins.yui.upload.FileUploadWidget; import org.hippoecm.frontend.plugins.yui.upload.FileUploadWidgetSettings; -import org.hippoecm.frontend.plugins.yui.upload.multifile.MultiFileUploadComponent; import org.hippoecm.frontend.service.render.RenderPlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,7 +53,6 @@ static final Logger log = LoggerFactory.getLogger(ResourceUploadPlugin.class); private IValueMap types; - private FileUploadForm form; public ResourceUploadPlugin(IPluginContext context, IPluginConfig config) { super(context, config); @@ -68,7 +63,8 @@ types = new ValueMap(typesConfig); } - add(form = new FileUploadForm("form")); + FileUploadForm form = new FileUploadForm("form"); + add(form); String mode = config.getString("mode", "edit"); form.setVisible("edit".equals(mode)); @@ -79,13 +75,12 @@ private class FileUploadForm extends Form { private static final long serialVersionUID = 1L; - //private FileUploadField fileUploadField; private FileUploadWidget widget; public FileUploadForm(String name) { super(name); - FileUploadWidgetSettings settings = new FileUploadWidgetSettings(); + FileUploadWidgetSettings settings = new FileUploadWidgetSettings(getPluginConfig()); settings.setAutoUpload(true); settings.setClearAfterUpload(true); settings.setClearTimeout(1000); Index: yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MultiFileUploadDialog.java =================================================================== --- yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MultiFileUploadDialog.java (revision 30175) +++ yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MultiFileUploadDialog.java (revision ) @@ -22,7 +22,11 @@ import org.apache.wicket.model.Model; import org.apache.wicket.util.value.IValueMap; import org.hippoecm.frontend.dialog.AbstractDialog; +import org.hippoecm.frontend.plugin.config.IPluginConfig; +/** + * A multi file upload dialog that can be configured by means of the {@link FileUploadWidgetSettings}. + */ public abstract class MultiFileUploadDialog extends AbstractDialog { private static final long serialVersionUID = 1L; @@ -32,7 +36,7 @@ private FileUploadWidget widget; private AjaxButton ajaxButton; - protected MultiFileUploadDialog(String[] fileExtensions) { + protected MultiFileUploadDialog(IPluginConfig pluginConfig) { setOutputMarkupId(true); setNonAjaxSubmit(); @@ -54,9 +58,7 @@ ajaxButton.setVisible(false); addButton(ajaxButton); - FileUploadWidgetSettings settings = new FileUploadWidgetSettings(); - settings.setFileExtensions(fileExtensions); - settings.setMaxNumberOfFiles(25); + FileUploadWidgetSettings settings = new FileUploadWidgetSettings(pluginConfig); widget = new FileUploadWidget("uploadWidget", settings) { @Override @@ -105,7 +107,7 @@ @Override protected void onOk() { - if (widget.isFlash()) { + if (widget.isFlashUpload()) { AjaxRequestTarget target = AjaxRequestTarget.get(); if (target != null) { ajaxButton.setEnabled(false); Index: yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidget.java =================================================================== --- yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidget.java (revision 30175) +++ yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/FileUploadWidget.java (revision ) @@ -32,7 +32,13 @@ import java.util.Collection; +/** + * Widget for uploading files. This widget allows both flash and non-flash uploads based on the configuration. + * By default the flash upload is used. For more configuration options please take a look at + * {@link FileUploadWidgetSettings}. + */ public class FileUploadWidget extends Panel { + @SuppressWarnings("unused") final static String SVN_ID = "$Id: FileUploadWidget.java 27296 2011-03-10 17:53:33Z mchatzidakis $"; private static final String COMPONENT_ID = "component"; @@ -58,24 +64,30 @@ protected void onBeforeRender() { super.onBeforeRender(); + if(settings.isFlashUploadEnabled()) { - if (detectedFlash == null) { - Page page = getPage(); - for (IBehavior behavior : page.getBehaviors()) { - if (behavior instanceof WebAppBehavior) { - WebAppBehavior webapp = (WebAppBehavior) behavior; - detectedFlash = webapp.getFlash(); - } - } - } + if (detectedFlash == null) { + Page page = getPage(); + for (IBehavior behavior : page.getBehaviors()) { + if (behavior instanceof WebAppBehavior) { + WebAppBehavior webapp = (WebAppBehavior) behavior; + detectedFlash = webapp.getFlash(); + } + } + } + } - if (isFlash()) { + if (isFlashUpload()) { renderFlashUpload(); } else { renderJavascriptUpload(); } } - public boolean isFlash() { + /** + * Detect if flash is installed and if the correct version of the flash plugin is found. + * @return true if flash and the correct version is detected, false otherwise + */ + public boolean isFlashUpload() { return detectedFlash != null && detectedFlash.isValid(VALID_FLASH); } @@ -127,7 +139,7 @@ } public void handleNonFlashSubmit() { - if (!isFlash()) { + if (!isFlashUpload()) { Collection uploads = ((MultiFileUploadComponent) panel).getUploads(); if (uploads != null) { for (FileUpload upload : uploads) {