blob: 1b0d4e877031c493d7807cd26542cf02e34a0ec0 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You 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 mx.net
{
import org.apache.royale.file.FileProxy;
import org.apache.royale.file.beads.FileBrowserWithFilter;
import mx.utils.ByteArray;
import org.apache.royale.file.beads.FileLoader;
import org.apache.royale.file.beads.FileModel;
import org.apache.royale.events.Event;
import org.apache.royale.net.URLRequest;
import org.apache.royale.file.beads.FileUploader;
import mx.net.beads.FileUploaderUsingFormData;
import mx.net.supportClasses.ByteArrayFileLoader;
import mx.net.beads.FileLoaderAndUploader;
public class FileReference extends FileProxy
{
private var _model:FileModel;
private var _browser:FileBrowserWithFilter;
private var _loader:FileLoader;
private var _uploader:FileLoaderAndUploader;
public function FileReference()
{
super();
_model = new FileModel();
_browser = new FileBrowserWithFilter();
_uploader = new FileLoaderAndUploader();
addBead(new FileUploaderUsingFormData());
addBead(_model);
addBead(_browser);
addBead(_uploader);
var uploadBead:FileUploader = getBeadByType(FileUploader) as FileUploader;
uploadBead.contentType = "multipart/form-data";
addEventListener("modelChanged", modelChangedHandler);
}
public function browse(typeFilter:Array = null):Boolean
{
var allFilters:Array = [];
if (typeFilter)
{
for (var i:int = 0; i < typeFilter.length; i++)
{
var fileFilter:FileFilter = typeFilter[i] as FileFilter;
var filters:Array = fileFilter.extension.split(";");
for (var j:int = 0; j < filters.length; j++)
{
var filter:String = filters[j];
if (filter.charAt(0) == '*')
{
filter = filter.substring(1);
filters[j] = filter;
}
}
allFilters = allFilters.concat(filters);
}
_browser.filter = allFilters.join(",");
}
_browser.browse();
return true;
}
public function load():void
{
if (!_loader)
{
// FileLoaderAndUploader has injected this
_loader = getBeadByType(ByteArrayFileLoader) as FileLoader;
if (!_loader)
{
_loader = new ByteArrayFileLoader();
addBead(_loader);
}
}
_loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);
_loader.load();
}
public function cancel():void
{
_uploader.cancel();
}
public function loaderCompleteHandler(event:Event):void
{
dispatchEvent(new Event(Event.COMPLETE));
}
public function get data():ByteArray
{
return blob as ByteArray; // need to create a model that actually returns a ByteArray
}
public function upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void
{
_uploader.referenceRequest = request;
_uploader.uploadDataFieldName = uploadDataFieldName;
_uploader.upload(request.url);
}
// not implemented
public function download(request:URLRequest, defaultFileName:String = null):void {}
private function modelChangedHandler(event:Event):void
{
dispatchEvent(new Event(Event.SELECT));
}
/**
* @royaleignorecoercion HTMLAnchorElement
*/
public function save(data:*, defaultFileName:String = null):void
{
COMPILE::JS
{
var a:HTMLAnchorElement = document.createElement("a") as HTMLAnchorElement;
a.href = URL.createObjectURL(new Blob([data]));
if (defaultFileName == null)
{
a.setAttribute("download", "download.pdf");
a.text = "download.pdf";
}
else
{
a.setAttribute("download", defaultFileName);
a.text = defaultFileName;
}
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
}
}
}