package org.swellrt.api.js.generic; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArrayString; import org.swellrt.api.SwellRTUtils; import org.swellrt.api.js.WaveClientJS; import org.swellrt.model.generic.FileType; import org.waveprotocol.wave.media.model.AttachmentId; public class FileTypeJS extends JavaScriptObject implements FileType.Listener { public native static FileTypeJS create(FileType delegate) /*-{ var jso = { _delegate: delegate, callbackMap: new Object(), eventHandlers: new Object(), registerEventHandler: function(event, handler) { this.eventHandlers[event] = handler; }, getDelegate: function() { return this._delegate; }, unregisterEventHandler: function(event, handler) { this.eventHandlers[event] = null; }, getValue: function() { return this.value(); }, value: function() { return delegate.@org.swellrt.model.generic.FileType::getValue()(); }, fileId: function() { return delegate.@org.swellrt.model.generic.FileType::getFileId()(); }, contentType: function() { return delegate.@org.swellrt.model.generic.FileType::getContentType()(); }, url: function() { return @org.swellrt.api.SwellRTUtils::buildAttachmentUrl(Lorg/swellrt/model/generic/FileType;)(this._delegate); }, getUrl: function() { return this.url(); }, getThumbnailUrl: function() { return @org.swellrt.api.SwellRTUtils::buildThumbnailUrl(Lorg/swellrt/model/generic/FileType;)(this._delegate); }, setValue: function(file) { this.set(file); }, set: function(file) { if (file && file.type && file.type() == "FileType") { this.clear(); delegate.@org.swellrt.model.generic.FileType::setValue(Lorg/waveprotocol/wave/media/model/AttachmentId;Ljava/lang/String;)(file.value(), file.contentType()); } }, clearValue: function() { this.clear(); }, clear: function() { var url = this.url(); delegate.@org.swellrt.model.generic.FileType::clearValue()(); var request = new XMLHttpRequest(); request.onload = function(event) { if (request.status == 200) { console.log("Attachment delete from server"); } else { console.log("Error, attachment not delete from server"); } }; request.open("DELETE", url); @org.swellrt.api.SwellRTUtils::addCommonRequestHeaders(Lcom/google/gwt/core/client/JavaScriptObject;)(request); request.send(); }, type: function() { return delegate.@org.swellrt.model.generic.FileType::getType()(); } }; // jso return jso; }-*/; protected FileTypeJS() { } private final native void fireEvent(String event, Object parameter) /*-{ if (this.eventHandlers[event] != null) { if (!parameter.constructor === Array){ this.eventHandlers[event](parameter); } else { this.eventHandlers[event].apply(this,parameter); } } }-*/; private final native FileType getDelegate() /*-{ return this._delegate; }-*/; @Override public final void onValueChanged(AttachmentId oldValue, AttachmentId newValue) { JsArrayString values = SwellRTUtils.createJsArrayString(); values.push(newValue.serialise()); values.push(oldValue.serialise()); fireEvent(WaveClientJS.ITEM_CHANGED, values); } }