import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.argeo.eclipse.ui.EclipseUiUtils;
+import org.argeo.eclipse.ui.utils.SingleSourcingConstants;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.client.service.UrlLauncher;
/**
- * Rap specific command handler to open a file retrieved from the server. It
- * forwards the request to the correct service after encoding file name and path
- * in the request URI.
+ * RWT specific object to open a file retrieved from the server. It forwards the
+ * request to the correct service after encoding file name and path in the
+ * request URI.
*
+ * <p>
* The parameter "URI" is used to determine the correct file service, the path
- * and the file name. An optional file name can be precised to present a
- * different file name as the one used to retrieve it to the end user/
+ * and the file name. An optional file name can be added to present the end user
+ * with a different file name as the one used to retrieve it.
+ * </p>
*
- * Various instances of this handler with different command ID might coexist in
- * order to provide context specific download service.
*
+ * <p>
* The instance specific service is called by its ID and must have been
* externally created
+ * </p>
*/
public class OpenFile extends AbstractHandler {
private final static Log log = LogFactory.getLog(OpenFile.class);
+ public final static String ID = SingleSourcingConstants.OPEN_FILE_CMD_ID;
+ public final static String PARAM_FILE_NAME = SingleSourcingConstants.PARAM_FILE_NAME;
+ public final static String PARAM_FILE_URI = SingleSourcingConstants.PARAM_FILE_URI;;
+
/* DEPENDENCY INJECTION */
private String openFileServiceId;
- public final static String PARAM_FILE_NAME = OpenFileService.PARAM_FILE_NAME;
- public final static String PARAM_FILE_URI = OpenFileService.PARAM_FILE_URI; // "param.fileURI";
-
- public Object execute(ExecutionEvent event) throws ExecutionException {
+ public Object execute(ExecutionEvent event) {
String fileName = event.getParameter(PARAM_FILE_NAME);
String fileUri = event.getParameter(PARAM_FILE_URI);
-
- // sanity check
- if (fileUri == null || "".equals(fileUri.trim())
- || openFileServiceId == null
+ // Sanity check
+ if (fileUri == null || "".equals(fileUri.trim()) || openFileServiceId == null
|| "".equals(openFileServiceId.trim()))
return null;
+ org.argeo.eclipse.ui.specific.OpenFile openFileClient = new org.argeo.eclipse.ui.specific.OpenFile();
+ openFileClient.execute(openFileServiceId, fileUri, fileName);
+ return null;
+ }
+
+ public Object execute(String openFileServiceId, String fileUri, String fileName) {
StringBuilder url = new StringBuilder();
- url.append(RWT.getServiceManager().getServiceHandlerUrl(
- openFileServiceId));
+ url.append(RWT.getServiceManager().getServiceHandlerUrl(openFileServiceId));
- url.append("&").append(PARAM_FILE_NAME).append("=");
- url.append(fileName);
- url.append("&").append(PARAM_FILE_URI).append("=");
- url.append(fileUri);
+ if (EclipseUiUtils.notEmpty(fileName))
+ url.append("&").append(SingleSourcingConstants.PARAM_FILE_NAME).append("=").append(fileName);
+ url.append("&").append(SingleSourcingConstants.PARAM_FILE_URI).append("=").append(fileUri);
String downloadUrl = url.toString();
if (log.isTraceEnabled())
- log.debug("URL : " + downloadUrl);
+ log.trace("Calling OpenFileService with ID: " + openFileServiceId + " , with download URL: " + downloadUrl);
UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
launcher.openURL(downloadUrl);
-
- // These lines are useless in the current use case but might be
- // necessary with new browsers. Stored here for memo
- // response.setContentType("application/force-download");
- // response.setHeader("Content-Disposition", contentDisposition);
- // response.setHeader("Content-Transfer-Encoding", "binary");
- // response.setHeader("Pragma", "no-cache");
- // response.setHeader("Cache-Control", "no-cache, must-revalidate");
return null;
}
public void setOpenFileServiceId(String openFileServiceId) {
this.openFileServiceId = openFileServiceId;
}
-}
\ No newline at end of file
+}