From 112eebf4d58d43895855613b5bdeecdc10a251ad Mon Sep 17 00:00:00 2001 From: Nick Grosenbacher Date: Thu, 24 Oct 2024 09:19:40 -0400 Subject: [PATCH] SWC-7064 - Use elemental2 models for JsInterop --- pom.xml | 14 +- .../web/client/GlobalApplicationState.java | 4 +- .../client/GlobalApplicationStateImpl.java | 96 +-- .../web/client/PortalGinModule.java | 705 +++++++++++++++++- .../web/client/SynapseJSNIUtils.java | 16 - .../web/client/SynapseJSNIUtilsImpl.java | 121 +-- .../web/client/SynapseJsInteropUtils.java | 18 + .../web/client/SynapseJsInteropUtilsImpl.java | 63 ++ .../web/client/jsinterop/JSON.java | 12 - .../web/client/jsinterop/JSONEntityUtils.java | 3 +- .../web/client/jsinterop/JsArray.java | 18 - .../web/client/jsinterop/JsObject.java | 17 - .../web/client/jsinterop/Promise.java | 29 - .../web/client/jsinterop/SRC.java | 5 +- .../web/client/jsinterop/react/HasStyle.java | 2 +- .../web/client/widget/aws/AwsSdk.java | 69 +- .../entity/download/S3DirectUploader.java | 19 +- .../widget/entity/download/Uploader.java | 49 +- .../upload/CroppedImageUploadViewImpl.java | 38 +- .../upload/FileHandleUploadWidgetImpl.java | 25 +- .../client/widget/upload/ImageUploadView.java | 3 +- .../widget/upload/ImageUploadViewImpl.java | 125 ++-- .../widget/upload/ImageUploadWidget.java | 35 +- .../widget/upload/MultipartUploader.java | 4 +- .../upload/MultipartUploaderImplV2.java | 12 +- .../widget/upload/SRCUploadFileWrapper.java | 6 +- .../upload/SRCUploadFileWrapperImpl.java | 6 +- .../client/widget/user/UserBadgeViewImpl.java | 4 +- .../org/sagebionetworks/web/Portal.gwt.xml | 3 +- .../entity/download/S3DirectUploaderTest.java | 31 +- .../widget/entity/download/UploaderTest.java | 76 +- .../FileHandleUploadWidgetImplTest.java | 71 +- .../upload/ImageUploadWidgetImplTest.java | 34 +- .../upload/MultipartUploaderImplV2Test.java | 42 +- .../widget/upload/MultipartUploaderStub.java | 4 +- 35 files changed, 1182 insertions(+), 597 deletions(-) create mode 100644 src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtils.java create mode 100644 src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtilsImpl.java delete mode 100644 src/main/java/org/sagebionetworks/web/client/jsinterop/JSON.java delete mode 100644 src/main/java/org/sagebionetworks/web/client/jsinterop/JsArray.java delete mode 100644 src/main/java/org/sagebionetworks/web/client/jsinterop/JsObject.java delete mode 100644 src/main/java/org/sagebionetworks/web/client/jsinterop/Promise.java diff --git a/pom.xml b/pom.xml index c99f998c2c..e4a057fe81 100644 --- a/pom.xml +++ b/pom.xml @@ -950,7 +950,19 @@ com.google.jsinterop base - 1.0.0 + 1.0.1 + + + + com.google.elemental2 + elemental2-core + 1.2.2 + + + + com.google.elemental2 + elemental2-dom + 1.2.2 diff --git a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationState.java b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationState.java index 59a204aa18..d9bb73dee5 100644 --- a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationState.java +++ b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationState.java @@ -1,9 +1,9 @@ package org.sagebionetworks.web.client; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceController; import com.google.gwt.user.client.rpc.AsyncCallback; +import elemental2.dom.FileList; import java.util.List; import org.sagebionetworks.repo.model.EntityHeader; import org.sagebionetworks.web.client.mvp.AppPlaceHistoryMapper; @@ -120,7 +120,7 @@ public void setAppPlaceHistoryMapper( void initializeToastContainer(); - void setDropZoneHandler(CallbackP fileListCallback); + void setDropZoneHandler(CallbackP fileListCallback); void clearDropZoneHandler(); diff --git a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java index cec872674b..972320780b 100644 --- a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java @@ -6,7 +6,6 @@ import static org.sagebionetworks.web.shared.WebConstants.REPO_SERVICE_URL_KEY; import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.Element; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.UmbrellaException; @@ -19,6 +18,7 @@ import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.datepicker.client.CalendarUtil; import com.google.inject.Inject; +import elemental2.dom.FileList; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -60,7 +60,7 @@ public class GlobalApplicationStateImpl implements GlobalApplicationState { private DateTimeUtils dateTimeUtils; private SynapseJavascriptClient jsClient; private SessionStorage sessionStorage; - private CallbackP fileListCallback; + private CallbackP fileListCallback; private SynapseProperties synapseProperties; private PortalGinInjector ginInjector; private final OneSageUtils oneSageUtils; @@ -459,7 +459,7 @@ public boolean isDragAndDropListenerSet() { return fileListCallback != null; } - public void onDrop(JavaScriptObject fileList) { + public void onDrop(FileList fileList) { if (isDragAndDropListenerSet()) { fileListCallback.invoke(fileList); } @@ -494,53 +494,53 @@ private static final native void _initializeDragDrop( Element dropZone, Element rootPanel ) /*-{ - try { - function showDropZone() { - dropZone.style.display = "block"; - } - - function hideDropZone() { - dropZone.style.display = "none"; - } - - $wnd - .addEventListener( - 'dragenter', - function(e) { - if (globalAppState.@org.sagebionetworks.web.client.GlobalApplicationStateImpl::isDragAndDropListenerSet()()) { - showDropZone(); - } - }); - - function allowDrag(e) { - e.dataTransfer.dropEffect = 'copy'; - e.preventDefault(); - } - - function handleDrop(e) { - e.preventDefault(); - hideDropZone(); - globalAppState.@org.sagebionetworks.web.client.GlobalApplicationStateImpl::onDrop(Lcom/google/gwt/core/client/JavaScriptObject;)(e.dataTransfer.files); - } - - dropZone.addEventListener('dragenter', allowDrag); - dropZone.addEventListener('dragover', allowDrag); - - dropZone.addEventListener('drop', handleDrop); - - //if files are dropped into the root panel, then ignore the event (do not open file contents if user does not have the upload dialog open). - rootPanel.addEventListener('drop', function(e) { - e.preventDefault(); - }); - rootPanel.addEventListener('dragenter', allowDrag); - rootPanel.addEventListener('dragover', allowDrag); - } catch (err) { - console.error(err); - } - }-*/; + try { + function showDropZone() { + dropZone.style.display = "block"; + } + + function hideDropZone() { + dropZone.style.display = "none"; + } + + $wnd + .addEventListener( + 'dragenter', + function(e) { + if (globalAppState.@org.sagebionetworks.web.client.GlobalApplicationStateImpl::isDragAndDropListenerSet()()) { + showDropZone(); + } + }); + + function allowDrag(e) { + e.dataTransfer.dropEffect = 'copy'; + e.preventDefault(); + } + + function handleDrop(e) { + e.preventDefault(); + hideDropZone(); + globalAppState.@org.sagebionetworks.web.client.GlobalApplicationStateImpl::onDrop(Lelemental2/dom/FileList;)(e.dataTransfer.files); + } + + dropZone.addEventListener('dragenter', allowDrag); + dropZone.addEventListener('dragover', allowDrag); + + dropZone.addEventListener('drop', handleDrop); + + //if files are dropped into the root panel, then ignore the event (do not open file contents if user does not have the upload dialog open). + rootPanel.addEventListener('drop', function(e) { + e.preventDefault(); + }); + rootPanel.addEventListener('dragenter', allowDrag); + rootPanel.addEventListener('dragover', allowDrag); + } catch (err) { + console.error(err); + } + }-*/; @Override - public void setDropZoneHandler(CallbackP fileListCallback) { + public void setDropZoneHandler(CallbackP fileListCallback) { this.fileListCallback = fileListCallback; } diff --git a/src/main/java/org/sagebionetworks/web/client/PortalGinModule.java b/src/main/java/org/sagebionetworks/web/client/PortalGinModule.java index a0af82410e..365a917967 100644 --- a/src/main/java/org/sagebionetworks/web/client/PortalGinModule.java +++ b/src/main/java/org/sagebionetworks/web/client/PortalGinModule.java @@ -10,29 +10,194 @@ import org.sagebionetworks.schema.adapter.AdapterFactory; import org.sagebionetworks.schema.adapter.JSONArrayAdapter; import org.sagebionetworks.schema.adapter.JSONObjectAdapter; -import org.sagebionetworks.web.client.cache.*; -import org.sagebionetworks.web.client.context.*; +import org.sagebionetworks.web.client.cache.ClientCache; +import org.sagebionetworks.web.client.cache.ClientCacheImpl; +import org.sagebionetworks.web.client.cache.EntityId2BundleCache; +import org.sagebionetworks.web.client.cache.EntityId2BundleCacheImpl; +import org.sagebionetworks.web.client.cache.SessionStorage; +import org.sagebionetworks.web.client.cache.SessionStorageImpl; +import org.sagebionetworks.web.client.cache.StorageImpl; +import org.sagebionetworks.web.client.cache.StorageWrapper; +import org.sagebionetworks.web.client.context.KeyFactoryProvider; +import org.sagebionetworks.web.client.context.KeyFactoryProviderImpl; +import org.sagebionetworks.web.client.context.QueryClientProvider; +import org.sagebionetworks.web.client.context.QueryClientProviderImpl; +import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider; +import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProviderImpl; import org.sagebionetworks.web.client.cookie.CookieProvider; import org.sagebionetworks.web.client.cookie.GWTCookieImpl; -import org.sagebionetworks.web.client.presenter.*; +import org.sagebionetworks.web.client.presenter.DownPresenter; +import org.sagebionetworks.web.client.presenter.EntityPresenter; +import org.sagebionetworks.web.client.presenter.EntityPresenterEventBinder; +import org.sagebionetworks.web.client.presenter.EntityPresenterEventBinderImpl; +import org.sagebionetworks.web.client.presenter.PersonalAccessTokensPresenter; +import org.sagebionetworks.web.client.presenter.ProfilePresenter; +import org.sagebionetworks.web.client.presenter.SignedTokenPresenter; import org.sagebionetworks.web.client.resources.ResourceLoader; import org.sagebionetworks.web.client.resources.ResourceLoaderImpl; import org.sagebionetworks.web.client.security.AuthenticationController; import org.sagebionetworks.web.client.security.AuthenticationControllerImpl; import org.sagebionetworks.web.client.transform.JsoProvider; import org.sagebionetworks.web.client.transform.JsoProviderImpl; -import org.sagebionetworks.web.client.view.*; -import org.sagebionetworks.web.client.view.users.*; -import org.sagebionetworks.web.client.widget.*; -import org.sagebionetworks.web.client.widget.accessrequirements.*; +import org.sagebionetworks.web.client.view.ACTAccessApprovalsView; +import org.sagebionetworks.web.client.view.ACTAccessApprovalsViewImpl; +import org.sagebionetworks.web.client.view.ACTDataAccessSubmissionsView; +import org.sagebionetworks.web.client.view.ACTDataAccessSubmissionsViewImpl; +import org.sagebionetworks.web.client.view.ACTView; +import org.sagebionetworks.web.client.view.ACTViewImpl; +import org.sagebionetworks.web.client.view.AccountView; +import org.sagebionetworks.web.client.view.AccountViewImpl; +import org.sagebionetworks.web.client.view.CertificationQuizView; +import org.sagebionetworks.web.client.view.CertificationQuizViewImpl; +import org.sagebionetworks.web.client.view.ChallengeOverviewView; +import org.sagebionetworks.web.client.view.ChallengeOverviewViewImpl; +import org.sagebionetworks.web.client.view.ChangeUsernameView; +import org.sagebionetworks.web.client.view.ChangeUsernameViewImpl; +import org.sagebionetworks.web.client.view.ChatView; +import org.sagebionetworks.web.client.view.ChatViewImpl; +import org.sagebionetworks.web.client.view.ComingSoonView; +import org.sagebionetworks.web.client.view.ComingSoonViewImpl; +import org.sagebionetworks.web.client.view.DataAccessApprovalTokenView; +import org.sagebionetworks.web.client.view.DataAccessApprovalTokenViewImpl; +import org.sagebionetworks.web.client.view.DataAccessManagementView; +import org.sagebionetworks.web.client.view.DataAccessManagementViewImpl; +import org.sagebionetworks.web.client.view.DivView; +import org.sagebionetworks.web.client.view.DivViewImpl; +import org.sagebionetworks.web.client.view.DownView; +import org.sagebionetworks.web.client.view.DownViewImpl; +import org.sagebionetworks.web.client.view.DownloadCartPageView; +import org.sagebionetworks.web.client.view.DownloadCartPageViewImpl; +import org.sagebionetworks.web.client.view.EmailInvitationView; +import org.sagebionetworks.web.client.view.EmailInvitationViewImpl; +import org.sagebionetworks.web.client.view.EntityView; +import org.sagebionetworks.web.client.view.EntityViewImpl; +import org.sagebionetworks.web.client.view.ErrorView; +import org.sagebionetworks.web.client.view.ErrorViewImpl; +import org.sagebionetworks.web.client.view.FollowingPageView; +import org.sagebionetworks.web.client.view.FollowingPageViewImpl; +import org.sagebionetworks.web.client.view.HelpView; +import org.sagebionetworks.web.client.view.HelpViewImpl; +import org.sagebionetworks.web.client.view.HomeView; +import org.sagebionetworks.web.client.view.HomeViewImpl; +import org.sagebionetworks.web.client.view.LoginView; +import org.sagebionetworks.web.client.view.LoginViewImpl; +import org.sagebionetworks.web.client.view.MapView; +import org.sagebionetworks.web.client.view.MapViewImpl; +import org.sagebionetworks.web.client.view.NewAccountView; +import org.sagebionetworks.web.client.view.NewAccountViewImpl; +import org.sagebionetworks.web.client.view.OAuthClientEditorView; +import org.sagebionetworks.web.client.view.OAuthClientEditorViewImpl; +import org.sagebionetworks.web.client.view.PasswordResetSignedTokenView; +import org.sagebionetworks.web.client.view.PasswordResetSignedTokenViewImpl; +import org.sagebionetworks.web.client.view.PeopleSearchView; +import org.sagebionetworks.web.client.view.PeopleSearchViewImpl; +import org.sagebionetworks.web.client.view.PlaceView; +import org.sagebionetworks.web.client.view.PlaceViewImpl; +import org.sagebionetworks.web.client.view.PlansView; +import org.sagebionetworks.web.client.view.PlansViewImpl; +import org.sagebionetworks.web.client.view.ProfileView; +import org.sagebionetworks.web.client.view.ProfileViewImpl; +import org.sagebionetworks.web.client.view.SearchView; +import org.sagebionetworks.web.client.view.SearchViewImpl; +import org.sagebionetworks.web.client.view.SignedTokenView; +import org.sagebionetworks.web.client.view.SignedTokenViewImpl; +import org.sagebionetworks.web.client.view.SubscriptionView; +import org.sagebionetworks.web.client.view.SubscriptionViewImpl; +import org.sagebionetworks.web.client.view.SynapseForumView; +import org.sagebionetworks.web.client.view.SynapseForumViewImpl; +import org.sagebionetworks.web.client.view.SynapseStandaloneWikiView; +import org.sagebionetworks.web.client.view.SynapseStandaloneWikiViewImpl; +import org.sagebionetworks.web.client.view.SynapseWikiView; +import org.sagebionetworks.web.client.view.SynapseWikiViewImpl; +import org.sagebionetworks.web.client.view.TeamSearchView; +import org.sagebionetworks.web.client.view.TeamSearchViewImpl; +import org.sagebionetworks.web.client.view.TeamView; +import org.sagebionetworks.web.client.view.TeamViewImpl; +import org.sagebionetworks.web.client.view.TrashView; +import org.sagebionetworks.web.client.view.TrashViewImpl; +import org.sagebionetworks.web.client.view.TrustCenterView; +import org.sagebionetworks.web.client.view.TrustCenterViewImpl; +import org.sagebionetworks.web.client.view.WikiDiffView; +import org.sagebionetworks.web.client.view.WikiDiffViewImpl; +import org.sagebionetworks.web.client.view.users.PasswordResetView; +import org.sagebionetworks.web.client.view.users.PasswordResetViewImpl; +import org.sagebionetworks.web.client.view.users.RegisterWidgetView; +import org.sagebionetworks.web.client.view.users.RegisterWidgetViewImpl; +import org.sagebionetworks.web.client.widget.Button; +import org.sagebionetworks.web.client.widget.ButtonImpl; +import org.sagebionetworks.web.client.widget.CommaSeparatedValuesParserView; +import org.sagebionetworks.web.client.widget.CommaSeparatedValuesParserViewImpl; +import org.sagebionetworks.web.client.widget.CopyTextModal; +import org.sagebionetworks.web.client.widget.CopyTextModalImpl; +import org.sagebionetworks.web.client.widget.DownloadSpeedTester; +import org.sagebionetworks.web.client.widget.DownloadSpeedTesterImpl; +import org.sagebionetworks.web.client.widget.EntityTypeIcon; +import org.sagebionetworks.web.client.widget.EntityTypeIconImpl; +import org.sagebionetworks.web.client.widget.FileHandleWidgetView; +import org.sagebionetworks.web.client.widget.FileHandleWidgetViewImpl; +import org.sagebionetworks.web.client.widget.LoadMoreWidgetContainerView; +import org.sagebionetworks.web.client.widget.LoadMoreWidgetContainerViewImpl; +import org.sagebionetworks.web.client.widget.QuarantinedEmailModal; +import org.sagebionetworks.web.client.widget.RadioWidget; +import org.sagebionetworks.web.client.widget.RadioWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.ACTAccessRequirementWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.ACTAccessRequirementWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.EntitySubjectsWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.EntitySubjectsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.LockAccessRequirementWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.LockAccessRequirementWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.ManagedACTAccessRequirementWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.ManagedACTAccessRequirementWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.SelfSignAccessRequirementWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.SelfSignAccessRequirementWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.TeamSubjectWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.TeamSubjectWidgetViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.TermsOfUseAccessRequirementWidgetView; +import org.sagebionetworks.web.client.widget.accessrequirements.TermsOfUseAccessRequirementWidgetViewImpl; import org.sagebionetworks.web.client.widget.accessrequirements.approval.AccessorGroupView; import org.sagebionetworks.web.client.widget.accessrequirements.approval.AccessorGroupViewImpl; -import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.*; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateAccessRequirementStep1View; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateAccessRequirementStep1ViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateBasicAccessRequirementStep2View; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateBasicAccessRequirementStep2ViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateManagedACTAccessRequirementStep2View; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateManagedACTAccessRequirementStep2ViewImpl; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateManagedACTAccessRequirementStep3View; +import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateManagedACTAccessRequirementStep3ViewImpl; import org.sagebionetworks.web.client.widget.accessrequirements.submission.ACTDataAccessSubmissionWidgetView; import org.sagebionetworks.web.client.widget.accessrequirements.submission.ACTDataAccessSubmissionWidgetViewImpl; import org.sagebionetworks.web.client.widget.accessrequirements.submission.OpenSubmissionWidgetView; import org.sagebionetworks.web.client.widget.accessrequirements.submission.OpenSubmissionWidgetViewImpl; -import org.sagebionetworks.web.client.widget.asynch.*; +import org.sagebionetworks.web.client.widget.asynch.AsynchronousJobTracker; +import org.sagebionetworks.web.client.widget.asynch.AsynchronousJobTrackerImpl; +import org.sagebionetworks.web.client.widget.asynch.AsynchronousProgressView; +import org.sagebionetworks.web.client.widget.asynch.AsynchronousProgressViewImpl; +import org.sagebionetworks.web.client.widget.asynch.AsynchronousProgressWidget; +import org.sagebionetworks.web.client.widget.asynch.EntityHeaderAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.EntityHeaderAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.FileHandleAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.FileHandleAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.IsACTMemberAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.IsACTMemberAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.JobTrackingWidget; +import org.sagebionetworks.web.client.widget.asynch.NumberFormatProvider; +import org.sagebionetworks.web.client.widget.asynch.NumberFormatProviderImpl; +import org.sagebionetworks.web.client.widget.asynch.PresignedAndFileHandleURLAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.PresignedAndFileHandleURLAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.PresignedURLAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.PresignedURLAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.TeamAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.TeamAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.TimerProvider; +import org.sagebionetworks.web.client.widget.asynch.TimerProviderImpl; +import org.sagebionetworks.web.client.widget.asynch.UserGroupHeaderAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.UserGroupHeaderAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.UserGroupHeaderFromAliasAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.UserGroupHeaderFromAliasAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.UserProfileAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.UserProfileAsyncHandlerImpl; +import org.sagebionetworks.web.client.widget.asynch.VersionedEntityHeaderAsyncHandler; +import org.sagebionetworks.web.client.widget.asynch.VersionedEntityHeaderAsyncHandlerImpl; import org.sagebionetworks.web.client.widget.biodalliance13.BiodallianceWidgetView; import org.sagebionetworks.web.client.widget.biodalliance13.BiodallianceWidgetViewImpl; import org.sagebionetworks.web.client.widget.biodalliance13.editor.BiodallianceEditorView; @@ -41,30 +206,246 @@ import org.sagebionetworks.web.client.widget.biodalliance13.editor.BiodallianceSourceEditorViewImpl; import org.sagebionetworks.web.client.widget.breadcrumb.BreadcrumbView; import org.sagebionetworks.web.client.widget.breadcrumb.BreadcrumbViewImpl; -import org.sagebionetworks.web.client.widget.clienthelp.*; +import org.sagebionetworks.web.client.widget.clienthelp.ContainerClientsHelp; +import org.sagebionetworks.web.client.widget.clienthelp.ContainerClientsHelpImpl; +import org.sagebionetworks.web.client.widget.clienthelp.FileClientsHelpView; +import org.sagebionetworks.web.client.widget.clienthelp.FileClientsHelpViewImpl; +import org.sagebionetworks.web.client.widget.clienthelp.FileViewClientsHelp; +import org.sagebionetworks.web.client.widget.clienthelp.FileViewClientsHelpImpl; import org.sagebionetworks.web.client.widget.csv.PapaCSVParser; -import org.sagebionetworks.web.client.widget.discussion.*; +import org.sagebionetworks.web.client.widget.discussion.DiscussionThreadListItemWidgetView; +import org.sagebionetworks.web.client.widget.discussion.DiscussionThreadListItemWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.DiscussionThreadListWidgetView; +import org.sagebionetworks.web.client.widget.discussion.DiscussionThreadListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.ForumWidgetView; +import org.sagebionetworks.web.client.widget.discussion.ForumWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.NewReplyWidgetView; +import org.sagebionetworks.web.client.widget.discussion.NewReplyWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.ReplyWidgetView; +import org.sagebionetworks.web.client.widget.discussion.ReplyWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.SingleDiscussionThreadWidgetView; +import org.sagebionetworks.web.client.widget.discussion.SingleDiscussionThreadWidgetViewImpl; +import org.sagebionetworks.web.client.widget.discussion.SubscribersWidgetView; +import org.sagebionetworks.web.client.widget.discussion.SubscribersWidgetViewImpl; import org.sagebionetworks.web.client.widget.discussion.modal.DiscussionThreadModalView; import org.sagebionetworks.web.client.widget.discussion.modal.DiscussionThreadModalViewImpl; import org.sagebionetworks.web.client.widget.discussion.modal.ReplyModalView; import org.sagebionetworks.web.client.widget.discussion.modal.ReplyModalViewImpl; -import org.sagebionetworks.web.client.widget.docker.*; +import org.sagebionetworks.web.client.widget.docker.DockerCommitListWidgetView; +import org.sagebionetworks.web.client.widget.docker.DockerCommitListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.docker.DockerCommitRowWidgetView; +import org.sagebionetworks.web.client.widget.docker.DockerCommitRowWidgetViewImpl; +import org.sagebionetworks.web.client.widget.docker.DockerRepoListWidgetView; +import org.sagebionetworks.web.client.widget.docker.DockerRepoListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.docker.DockerRepoWidgetView; +import org.sagebionetworks.web.client.widget.docker.DockerRepoWidgetViewImpl; import org.sagebionetworks.web.client.widget.docker.modal.AddExternalRepoModalView; import org.sagebionetworks.web.client.widget.docker.modal.AddExternalRepoModalViewImpl; import org.sagebionetworks.web.client.widget.doi.CreateOrUpdateDoiModalView; import org.sagebionetworks.web.client.widget.doi.CreateOrUpdateDoiModalViewImpl; import org.sagebionetworks.web.client.widget.doi.DoiWidgetV2View; import org.sagebionetworks.web.client.widget.doi.DoiWidgetV2ViewImpl; -import org.sagebionetworks.web.client.widget.entity.*; -import org.sagebionetworks.web.client.widget.entity.act.*; -import org.sagebionetworks.web.client.widget.entity.annotation.*; -import org.sagebionetworks.web.client.widget.entity.browse.*; -import org.sagebionetworks.web.client.widget.entity.controller.*; +import org.sagebionetworks.web.client.widget.entity.BigPromptModalView; +import org.sagebionetworks.web.client.widget.entity.BigPromptModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.ChallengeBadgeView; +import org.sagebionetworks.web.client.widget.entity.ChallengeBadgeViewImpl; +import org.sagebionetworks.web.client.widget.entity.ContainerItemCountWidgetView; +import org.sagebionetworks.web.client.widget.entity.ContainerItemCountWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.EditFileMetadataModalView; +import org.sagebionetworks.web.client.widget.entity.EditFileMetadataModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.EditFileMetadataModalWidget; +import org.sagebionetworks.web.client.widget.entity.EditFileMetadataModalWidgetImpl; +import org.sagebionetworks.web.client.widget.entity.EditProjectMetadataModalView; +import org.sagebionetworks.web.client.widget.entity.EditProjectMetadataModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.EditProjectMetadataModalWidget; +import org.sagebionetworks.web.client.widget.entity.EditProjectMetadataModalWidgetImpl; +import org.sagebionetworks.web.client.widget.entity.EditRegisteredTeamDialogView; +import org.sagebionetworks.web.client.widget.entity.EditRegisteredTeamDialogViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityBadgeView; +import org.sagebionetworks.web.client.widget.entity.EntityBadgeViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityListRowBadgeView; +import org.sagebionetworks.web.client.widget.entity.EntityListRowBadgeViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityMetadataView; +import org.sagebionetworks.web.client.widget.entity.EntityMetadataViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityModalWidgetView; +import org.sagebionetworks.web.client.widget.entity.EntityModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityPageTopView; +import org.sagebionetworks.web.client.widget.entity.EntityPageTopViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntitySearchBoxView; +import org.sagebionetworks.web.client.widget.entity.EntitySearchBoxViewImpl; +import org.sagebionetworks.web.client.widget.entity.EntityViewScopeEditorModalWidgetView; +import org.sagebionetworks.web.client.widget.entity.EntityViewScopeEditorModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.FavoriteWidgetView; +import org.sagebionetworks.web.client.widget.entity.FavoriteWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.MarkdownEditorWidgetView; +import org.sagebionetworks.web.client.widget.entity.MarkdownEditorWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.MarkdownWidgetView; +import org.sagebionetworks.web.client.widget.entity.MarkdownWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.ModifiedCreatedByWidgetView; +import org.sagebionetworks.web.client.widget.entity.ModifiedCreatedByWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.MoreTreeItemView; +import org.sagebionetworks.web.client.widget.entity.MoreTreeItemViewImpl; +import org.sagebionetworks.web.client.widget.entity.PreviewWidgetView; +import org.sagebionetworks.web.client.widget.entity.PreviewWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.ProjectBadgeView; +import org.sagebionetworks.web.client.widget.entity.ProjectBadgeViewImpl; +import org.sagebionetworks.web.client.widget.entity.PromptForValuesModalConfigurationImpl; +import org.sagebionetworks.web.client.widget.entity.PromptForValuesModalView; +import org.sagebionetworks.web.client.widget.entity.PromptForValuesModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.RegisterTeamDialogView; +import org.sagebionetworks.web.client.widget.entity.RegisterTeamDialogViewImpl; +import org.sagebionetworks.web.client.widget.entity.RenameEntityModalWidget; +import org.sagebionetworks.web.client.widget.entity.RenameEntityModalWidgetImpl; +import org.sagebionetworks.web.client.widget.entity.SharingAndDataUseConditionWidgetView; +import org.sagebionetworks.web.client.widget.entity.SharingAndDataUseConditionWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.SqlDefinedEditorModalWidgetView; +import org.sagebionetworks.web.client.widget.entity.SqlDefinedEditorModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.TutorialWizardView; +import org.sagebionetworks.web.client.widget.entity.TutorialWizardViewImpl; +import org.sagebionetworks.web.client.widget.entity.VersionHistoryRowView; +import org.sagebionetworks.web.client.widget.entity.VersionHistoryRowViewImpl; +import org.sagebionetworks.web.client.widget.entity.VersionHistoryWidgetView; +import org.sagebionetworks.web.client.widget.entity.VersionHistoryWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.WikiAttachmentsView; +import org.sagebionetworks.web.client.widget.entity.WikiAttachmentsViewImpl; +import org.sagebionetworks.web.client.widget.entity.WikiHistoryWidgetView; +import org.sagebionetworks.web.client.widget.entity.WikiHistoryWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.WikiMarkdownEditorView; +import org.sagebionetworks.web.client.widget.entity.WikiMarkdownEditorViewImpl; +import org.sagebionetworks.web.client.widget.entity.WikiPageDeleteConfirmationDialogView; +import org.sagebionetworks.web.client.widget.entity.WikiPageDeleteConfirmationDialogViewImpl; +import org.sagebionetworks.web.client.widget.entity.WikiPageWidgetView; +import org.sagebionetworks.web.client.widget.entity.WikiPageWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.act.ApproveUserAccessModalView; +import org.sagebionetworks.web.client.widget.entity.act.ApproveUserAccessModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.act.RejectDataAccessRequestModalView; +import org.sagebionetworks.web.client.widget.entity.act.RejectDataAccessRequestModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.act.RejectReasonView; +import org.sagebionetworks.web.client.widget.entity.act.RejectReasonViewImpl; +import org.sagebionetworks.web.client.widget.entity.act.RevokeUserAccessModalView; +import org.sagebionetworks.web.client.widget.entity.act.RevokeUserAccessModalViewImpl; +import org.sagebionetworks.web.client.widget.entity.act.UserBadgeListView; +import org.sagebionetworks.web.client.widget.entity.act.UserBadgeListViewImpl; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationCellFactory; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationCellFactoryImpl; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationEditorView; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationEditorViewImpl; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationTransformer; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationTransformerImpl; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationsRendererWidgetView; +import org.sagebionetworks.web.client.widget.entity.annotation.AnnotationsRendererWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.annotation.EditAnnotationsDialogView; +import org.sagebionetworks.web.client.widget.entity.annotation.EditAnnotationsDialogViewImpl; +import org.sagebionetworks.web.client.widget.entity.browse.EntityFinderWidget; +import org.sagebionetworks.web.client.widget.entity.browse.EntityFinderWidgetImpl; +import org.sagebionetworks.web.client.widget.entity.browse.EntityFinderWidgetView; +import org.sagebionetworks.web.client.widget.entity.browse.EntityFinderWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.browse.EntityTreeBrowserView; +import org.sagebionetworks.web.client.widget.entity.browse.EntityTreeBrowserViewImpl; +import org.sagebionetworks.web.client.widget.entity.browse.FilesBrowserView; +import org.sagebionetworks.web.client.widget.entity.browse.FilesBrowserViewImpl; +import org.sagebionetworks.web.client.widget.entity.browse.MyEntitiesBrowserView; +import org.sagebionetworks.web.client.widget.entity.browse.MyEntitiesBrowserViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.CertifiedUserController; +import org.sagebionetworks.web.client.widget.entity.controller.CertifiedUserControllerImpl; +import org.sagebionetworks.web.client.widget.entity.controller.EntityActionController; +import org.sagebionetworks.web.client.widget.entity.controller.EntityActionControllerImpl; +import org.sagebionetworks.web.client.widget.entity.controller.EntityActionControllerView; +import org.sagebionetworks.web.client.widget.entity.controller.EntityActionControllerViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.EntityRefProvEntryView; +import org.sagebionetworks.web.client.widget.entity.controller.EntityRefProvEntryViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.PreflightController; +import org.sagebionetworks.web.client.widget.entity.controller.PreflightControllerImpl; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceEditorWidgetView; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceEditorWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceListWidgetView; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceURLDialogWidgetView; +import org.sagebionetworks.web.client.widget.entity.controller.ProvenanceURLDialogWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.StorageLocationWidgetView; +import org.sagebionetworks.web.client.widget.entity.controller.StorageLocationWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.StuAlertView; +import org.sagebionetworks.web.client.widget.entity.controller.StuAlertViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlert; +import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlertImpl; +import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlertView; +import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlertViewImpl; +import org.sagebionetworks.web.client.widget.entity.controller.URLProvEntryView; +import org.sagebionetworks.web.client.widget.entity.controller.URLProvEntryViewImpl; import org.sagebionetworks.web.client.widget.entity.dialog.BaseEditWidgetDescriptorView; import org.sagebionetworks.web.client.widget.entity.dialog.BaseEditWidgetDescriptorViewImpl; -import org.sagebionetworks.web.client.widget.entity.download.*; -import org.sagebionetworks.web.client.widget.entity.editor.*; -import org.sagebionetworks.web.client.widget.entity.file.*; +import org.sagebionetworks.web.client.widget.entity.download.AddFolderDialogWidgetView; +import org.sagebionetworks.web.client.widget.entity.download.AddFolderDialogWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.download.AwsLoginView; +import org.sagebionetworks.web.client.widget.entity.download.AwsLoginViewImpl; +import org.sagebionetworks.web.client.widget.entity.download.CertificateWidgetView; +import org.sagebionetworks.web.client.widget.entity.download.CertificateWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.download.QuizInfoViewImpl; +import org.sagebionetworks.web.client.widget.entity.download.QuizInfoWidgetView; +import org.sagebionetworks.web.client.widget.entity.download.UploadDialogWidgetView; +import org.sagebionetworks.web.client.widget.entity.download.UploadDialogWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.download.UploaderView; +import org.sagebionetworks.web.client.widget.entity.download.UploaderViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.APITableColumnConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.APITableColumnConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.APITableColumnManagerView; +import org.sagebionetworks.web.client.widget.entity.editor.APITableColumnManagerViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.APITableConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.APITableConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.AttachmentConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.AttachmentConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ButtonLinkConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.ButtonLinkConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.CytoscapeConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.CytoscapeConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.DetailsSummaryConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.DetailsSummaryConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.EntityListConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.EntityListConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.EvaluationSubmissionConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.EvaluationSubmissionConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ImageConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.ImageConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ImageParamsPanelView; +import org.sagebionetworks.web.client.widget.entity.editor.ImageParamsPanelViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.LinkConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.LinkConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.PlotlyConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.PlotlyConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.PreviewConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.PreviewConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ProvenanceConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.ProvenanceConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.QueryTableConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.QueryTableConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ReferenceConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.ReferenceConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.ShinySiteConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.ShinySiteConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.SynapseFormConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.SynapseFormConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.TabbedTableConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.TabbedTableConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.TableQueryResultWikiView; +import org.sagebionetworks.web.client.widget.entity.editor.TableQueryResultWikiViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.TeamSelectEditorView; +import org.sagebionetworks.web.client.widget.entity.editor.TeamSelectEditorViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.UserSelectorView; +import org.sagebionetworks.web.client.widget.entity.editor.UserSelectorViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.UserTeamConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.UserTeamConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.editor.VideoConfigView; +import org.sagebionetworks.web.client.widget.entity.editor.VideoConfigViewImpl; +import org.sagebionetworks.web.client.widget.entity.file.AddToDownloadListV2; +import org.sagebionetworks.web.client.widget.entity.file.AddToDownloadListV2Impl; +import org.sagebionetworks.web.client.widget.entity.file.BasicTitleBarView; +import org.sagebionetworks.web.client.widget.entity.file.BasicTitleBarViewImpl; +import org.sagebionetworks.web.client.widget.entity.file.FileDownloadMenuItemView; +import org.sagebionetworks.web.client.widget.entity.file.FileDownloadMenuItemViewImpl; +import org.sagebionetworks.web.client.widget.entity.file.ProjectTitleBarView; +import org.sagebionetworks.web.client.widget.entity.file.ProjectTitleBarViewImpl; +import org.sagebionetworks.web.client.widget.entity.file.S3DirectLoginDialog; +import org.sagebionetworks.web.client.widget.entity.file.S3DirectLoginDialogImpl; import org.sagebionetworks.web.client.widget.entity.file.downloadlist.PackageSizeSummaryView; import org.sagebionetworks.web.client.widget.entity.file.downloadlist.PackageSizeSummaryViewImpl; import org.sagebionetworks.web.client.widget.entity.menu.v3.EntityActionMenu; @@ -73,11 +454,92 @@ import org.sagebionetworks.web.client.widget.entity.menu.v3.EntityActionMenuViewImpl; import org.sagebionetworks.web.client.widget.entity.registration.WidgetRegistrar; import org.sagebionetworks.web.client.widget.entity.registration.WidgetRegistrarImpl; -import org.sagebionetworks.web.client.widget.entity.renderer.*; +import org.sagebionetworks.web.client.widget.entity.renderer.AttachmentPreviewWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.AttachmentPreviewWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.BookmarkWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.BookmarkWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.ButtonLinkWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.ButtonLinkWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.ChallengeTeamsView; +import org.sagebionetworks.web.client.widget.entity.renderer.ChallengeTeamsViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.CytoscapeView; +import org.sagebionetworks.web.client.widget.entity.renderer.CytoscapeViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.EmptyWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.EmptyWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.EntityListWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.EntityListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.HtmlPreviewView; +import org.sagebionetworks.web.client.widget.entity.renderer.HtmlPreviewViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.IFrameView; +import org.sagebionetworks.web.client.widget.entity.renderer.IFrameViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.ImageWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.ImageWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.IntendedDataUseReportWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.IntendedDataUseReportWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.NbConvertPreviewView; +import org.sagebionetworks.web.client.widget.entity.renderer.NbConvertPreviewViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.PlotlyWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.PlotlyWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.ReferenceWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.ReferenceWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.SingleButtonView; +import org.sagebionetworks.web.client.widget.entity.renderer.SingleButtonViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.SubmitToEvaluationWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.SubmitToEvaluationWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.SynapseTableFormWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.SynapseTableFormWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.TIFFPreviewWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.TIFFPreviewWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.TableOfContentsWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.TableOfContentsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.TeamMemberCountView; +import org.sagebionetworks.web.client.widget.entity.renderer.TeamMemberCountViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.UserListRowWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.UserListRowWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.UserListView; +import org.sagebionetworks.web.client.widget.entity.renderer.UserListViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.VideoWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.VideoWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiFilesPreviewWidgetView; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiFilesPreviewWidgetViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpageNavigationTreeView; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpageNavigationTreeViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpageOrderEditorTreeView; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpageOrderEditorTreeViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpagesOrderEditorView; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpagesOrderEditorViewImpl; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpagesView; +import org.sagebionetworks.web.client.widget.entity.renderer.WikiSubpagesViewImpl; import org.sagebionetworks.web.client.widget.entity.restriction.v2.RestrictionWidgetView; import org.sagebionetworks.web.client.widget.entity.restriction.v2.RestrictionWidgetViewImpl; -import org.sagebionetworks.web.client.widget.entity.tabs.*; -import org.sagebionetworks.web.client.widget.evaluation.*; +import org.sagebionetworks.web.client.widget.entity.tabs.ChallengeTabView; +import org.sagebionetworks.web.client.widget.entity.tabs.ChallengeTabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.DiscussionTabView; +import org.sagebionetworks.web.client.widget.entity.tabs.DiscussionTabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.DockerTabView; +import org.sagebionetworks.web.client.widget.entity.tabs.DockerTabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.FilesTabView; +import org.sagebionetworks.web.client.widget.entity.tabs.FilesTabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.TabView; +import org.sagebionetworks.web.client.widget.entity.tabs.TabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.TablesTabView; +import org.sagebionetworks.web.client.widget.entity.tabs.TablesTabViewImpl; +import org.sagebionetworks.web.client.widget.entity.tabs.TabsView; +import org.sagebionetworks.web.client.widget.entity.tabs.TabsViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.AdministerEvaluationsListView; +import org.sagebionetworks.web.client.widget.evaluation.AdministerEvaluationsListViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.ChallengeWidgetView; +import org.sagebionetworks.web.client.widget.evaluation.ChallengeWidgetViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationEditorModalView; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationEditorModalViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationFinderView; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationFinderViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationListView; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationListViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationSubmitterView; +import org.sagebionetworks.web.client.widget.evaluation.EvaluationSubmitterViewImpl; +import org.sagebionetworks.web.client.widget.evaluation.SubmissionViewScopeEditorModalWidgetView; +import org.sagebionetworks.web.client.widget.evaluation.SubmissionViewScopeEditorModalWidgetViewImpl; import org.sagebionetworks.web.client.widget.footer.Footer; import org.sagebionetworks.web.client.widget.footer.FooterView; import org.sagebionetworks.web.client.widget.footer.FooterViewImpl; @@ -100,7 +562,18 @@ import org.sagebionetworks.web.client.widget.pageprogress.PageProgressWidgetViewImpl; import org.sagebionetworks.web.client.widget.pagination.BasicPaginationView; import org.sagebionetworks.web.client.widget.pagination.BasicPaginationViewImpl; -import org.sagebionetworks.web.client.widget.profile.*; +import org.sagebionetworks.web.client.widget.profile.EmailAddressesWidgetView; +import org.sagebionetworks.web.client.widget.profile.EmailAddressesWidgetViewImpl; +import org.sagebionetworks.web.client.widget.profile.ProfileCertifiedValidatedView; +import org.sagebionetworks.web.client.widget.profile.ProfileCertifiedValidatedViewImpl; +import org.sagebionetworks.web.client.widget.profile.ProfileImageView; +import org.sagebionetworks.web.client.widget.profile.ProfileImageViewImpl; +import org.sagebionetworks.web.client.widget.profile.ProfileImageWidget; +import org.sagebionetworks.web.client.widget.profile.ProfileImageWidgetImpl; +import org.sagebionetworks.web.client.widget.profile.UserProfileWidget; +import org.sagebionetworks.web.client.widget.profile.UserProfileWidgetImpl; +import org.sagebionetworks.web.client.widget.profile.UserProfileWidgetView; +import org.sagebionetworks.web.client.widget.profile.UserProfileWidgetViewImpl; import org.sagebionetworks.web.client.widget.provenance.v2.ProvenanceWidgetView; import org.sagebionetworks.web.client.widget.provenance.v2.ProvenanceWidgetViewImpl; import org.sagebionetworks.web.client.widget.refresh.RefreshAlertView; @@ -109,7 +582,22 @@ import org.sagebionetworks.web.client.widget.search.SearchBoxViewImpl; import org.sagebionetworks.web.client.widget.search.SynapseSuggestBoxView; import org.sagebionetworks.web.client.widget.search.SynapseSuggestBoxViewImpl; -import org.sagebionetworks.web.client.widget.sharing.*; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListEditorView; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListEditorViewImpl; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListModalWidget; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListModalWidgetImpl; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListModalWidgetView; +import org.sagebionetworks.web.client.widget.sharing.AccessControlListModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.sharing.EntityAccessControlListModalWidget; +import org.sagebionetworks.web.client.widget.sharing.EntityAccessControlListModalWidgetImpl; +import org.sagebionetworks.web.client.widget.sharing.EvaluationAccessControlListModalWidget; +import org.sagebionetworks.web.client.widget.sharing.EvaluationAccessControlListModalWidgetImpl; +import org.sagebionetworks.web.client.widget.sharing.OpenDataView; +import org.sagebionetworks.web.client.widget.sharing.OpenDataViewImpl; +import org.sagebionetworks.web.client.widget.sharing.PublicPrivateBadgeView; +import org.sagebionetworks.web.client.widget.sharing.PublicPrivateBadgeViewImpl; +import org.sagebionetworks.web.client.widget.sharing.SharingPermissionsGridView; +import org.sagebionetworks.web.client.widget.sharing.SharingPermissionsGridViewImpl; import org.sagebionetworks.web.client.widget.statistics.StatisticsPlotWidgetView; import org.sagebionetworks.web.client.widget.statistics.StatisticsPlotWidgetViewImpl; import org.sagebionetworks.web.client.widget.subscription.SubscribeButtonWidgetView; @@ -120,20 +608,163 @@ import org.sagebionetworks.web.client.widget.table.TableListWidgetViewImpl; import org.sagebionetworks.web.client.widget.table.api.APITableWidgetView; import org.sagebionetworks.web.client.widget.table.api.APITableWidgetViewImpl; -import org.sagebionetworks.web.client.widget.table.modal.download.*; -import org.sagebionetworks.web.client.widget.table.modal.fileview.*; -import org.sagebionetworks.web.client.widget.table.modal.upload.*; +import org.sagebionetworks.web.client.widget.table.modal.download.CreateDownloadPage; +import org.sagebionetworks.web.client.widget.table.modal.download.CreateDownloadPageImpl; +import org.sagebionetworks.web.client.widget.table.modal.download.CreateDownloadPageView; +import org.sagebionetworks.web.client.widget.table.modal.download.CreateDownloadPageViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadFilePage; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadFilePageImpl; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadFilePageView; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadFilePageViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadTableQueryModalWidget; +import org.sagebionetworks.web.client.widget.table.modal.download.DownloadTableQueryModalWidgetImpl; +import org.sagebionetworks.web.client.widget.table.modal.fileview.EntityContainerListWidgetView; +import org.sagebionetworks.web.client.widget.table.modal.fileview.EntityContainerListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.fileview.EntityViewScopeWidgetView; +import org.sagebionetworks.web.client.widget.table.modal.fileview.EntityViewScopeWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.fileview.SubmissionViewScopeWidgetView; +import org.sagebionetworks.web.client.widget.table.modal.fileview.SubmissionViewScopeWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.fileview.ViewDefaultColumns; +import org.sagebionetworks.web.client.widget.table.modal.upload.CSVOptionsView; +import org.sagebionetworks.web.client.widget.table.modal.upload.CSVOptionsViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVAppendPage; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVAppendPageImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVAppendPageView; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVAppendPageViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFilePage; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFilePageImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFinishPage; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFinishPageImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFinishPageView; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVFinishPageViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVPreviewPage; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVPreviewPageImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVPreviewPageView; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadCSVPreviewPageViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadPreviewView; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadPreviewViewImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadPreviewWidget; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadPreviewWidgetImpl; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadTableModalWidget; +import org.sagebionetworks.web.client.widget.table.modal.upload.UploadTableModalWidgetImpl; import org.sagebionetworks.web.client.widget.table.modal.wizard.ModalWizardView; import org.sagebionetworks.web.client.widget.table.modal.wizard.ModalWizardViewImpl; import org.sagebionetworks.web.client.widget.table.modal.wizard.ModalWizardWidget; import org.sagebionetworks.web.client.widget.table.modal.wizard.ModalWizardWidgetImpl; -import org.sagebionetworks.web.client.widget.table.v2.*; -import org.sagebionetworks.web.client.widget.table.v2.results.*; -import org.sagebionetworks.web.client.widget.table.v2.results.cell.*; -import org.sagebionetworks.web.client.widget.table.v2.schema.*; -import org.sagebionetworks.web.client.widget.team.*; -import org.sagebionetworks.web.client.widget.team.controller.*; -import org.sagebionetworks.web.client.widget.upload.*; +import org.sagebionetworks.web.client.widget.table.v2.QueryInputView; +import org.sagebionetworks.web.client.widget.table.v2.QueryInputViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.TableEntityWidgetView; +import org.sagebionetworks.web.client.widget.table.v2.TableEntityWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.TotalVisibleResultsWidgetView; +import org.sagebionetworks.web.client.widget.table.v2.TotalVisibleResultsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.QueryResultEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.QueryResultEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.RowFormView; +import org.sagebionetworks.web.client.widget.table.v2.results.RowFormViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.RowView; +import org.sagebionetworks.web.client.widget.table.v2.results.RowViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.SortableTableHeader; +import org.sagebionetworks.web.client.widget.table.v2.results.SortableTableHeaderImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.StaticTableHeader; +import org.sagebionetworks.web.client.widget.table.v2.results.StaticTableHeaderImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.TablePageView; +import org.sagebionetworks.web.client.widget.table.v2.results.TablePageViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.TableQueryResultWikiWidgetView; +import org.sagebionetworks.web.client.widget.table.v2.results.TableQueryResultWikiWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.CellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.CellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.DateCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.DateCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.DateListRendererCellView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.DateListRendererCellViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EditJSONListModalView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EditJSONListModalViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EntityIdCellRendererView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EntityIdCellRendererViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EntityIdListRendererCellView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.EntityIdListRendererCellViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.FileCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.FileCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.FileCellRendererView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.FileCellRendererViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.JSONListCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.JSONListCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.LargeStringCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.LargeStringCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.LinkCellRendererView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.LinkCellRendererViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.ListCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.ListCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.NumberCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.NumberCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.RadioCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.RadioCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.StringListRendererCellView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.StringListRendererCellViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.StringRendererCellView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.StringRendererCellViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.UserIdCellEditorView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.UserIdCellEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.UserIdListRendererCellView; +import org.sagebionetworks.web.client.widget.table.v2.results.cell.UserIdListRendererCellViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowEditorView; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowEditorViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowEditorWidget; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowEditorWidgetImpl; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowViewer; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelTableRowViewerImpl; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelsEditorWidgetView; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelsEditorWidgetViewImpl; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelsView; +import org.sagebionetworks.web.client.widget.table.v2.schema.ColumnModelsViewImpl; +import org.sagebionetworks.web.client.widget.team.BigTeamBadgeView; +import org.sagebionetworks.web.client.widget.team.BigTeamBadgeViewImpl; +import org.sagebionetworks.web.client.widget.team.EmailInvitationBadgeView; +import org.sagebionetworks.web.client.widget.team.EmailInvitationBadgeViewImpl; +import org.sagebionetworks.web.client.widget.team.InviteWidgetView; +import org.sagebionetworks.web.client.widget.team.InviteWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.JoinTeamConfigEditorView; +import org.sagebionetworks.web.client.widget.team.JoinTeamConfigEditorViewImpl; +import org.sagebionetworks.web.client.widget.team.JoinTeamWidgetView; +import org.sagebionetworks.web.client.widget.team.JoinTeamWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.MemberListWidgetView; +import org.sagebionetworks.web.client.widget.team.MemberListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.OpenMembershipRequestsWidgetView; +import org.sagebionetworks.web.client.widget.team.OpenMembershipRequestsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.OpenTeamInvitationsWidgetView; +import org.sagebionetworks.web.client.widget.team.OpenTeamInvitationsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.OpenUserInvitationsWidgetView; +import org.sagebionetworks.web.client.widget.team.OpenUserInvitationsWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.SelectTeamModalView; +import org.sagebionetworks.web.client.widget.team.SelectTeamModalViewImpl; +import org.sagebionetworks.web.client.widget.team.TeamBadgeView; +import org.sagebionetworks.web.client.widget.team.TeamBadgeViewImpl; +import org.sagebionetworks.web.client.widget.team.TeamListWidgetView; +import org.sagebionetworks.web.client.widget.team.TeamListWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.WizardProgressWidgetView; +import org.sagebionetworks.web.client.widget.team.WizardProgressWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.controller.TeamDeleteModalWidgetView; +import org.sagebionetworks.web.client.widget.team.controller.TeamDeleteModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.controller.TeamEditModalWidgetView; +import org.sagebionetworks.web.client.widget.team.controller.TeamEditModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.controller.TeamLeaveModalWidgetView; +import org.sagebionetworks.web.client.widget.team.controller.TeamLeaveModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.team.controller.TeamProjectsModalWidgetView; +import org.sagebionetworks.web.client.widget.team.controller.TeamProjectsModalWidgetViewImpl; +import org.sagebionetworks.web.client.widget.upload.FileHandleListView; +import org.sagebionetworks.web.client.widget.upload.FileHandleListViewImpl; +import org.sagebionetworks.web.client.widget.upload.FileHandleUploadView; +import org.sagebionetworks.web.client.widget.upload.FileHandleUploadViewImpl; +import org.sagebionetworks.web.client.widget.upload.FileHandleUploadWidget; +import org.sagebionetworks.web.client.widget.upload.FileHandleUploadWidgetImpl; +import org.sagebionetworks.web.client.widget.upload.FileInputView; +import org.sagebionetworks.web.client.widget.upload.FileInputViewImpl; +import org.sagebionetworks.web.client.widget.upload.ImageUploadView; +import org.sagebionetworks.web.client.widget.upload.ImageUploadViewImpl; +import org.sagebionetworks.web.client.widget.upload.MultipartUploader; +import org.sagebionetworks.web.client.widget.upload.MultipartUploaderImplV2; +import org.sagebionetworks.web.client.widget.upload.SRCUploadFileWrapper; +import org.sagebionetworks.web.client.widget.upload.SRCUploadFileWrapperImpl; import org.sagebionetworks.web.client.widget.user.UserBadgeView; import org.sagebionetworks.web.client.widget.user.UserBadgeViewImpl; @@ -212,6 +843,10 @@ protected void configure() { bind(SynapseJSNIUtils.class) .to(SynapseJSNIUtilsImpl.class) .in(Singleton.class); + + bind(SynapseJsInteropUtils.class) + .to(SynapseJsInteropUtilsImpl.class) + .in(Singleton.class); /* * Places */ diff --git a/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtils.java b/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtils.java index 4128439a77..ff024c7bf6 100644 --- a/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtils.java +++ b/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtils.java @@ -43,10 +43,6 @@ public LayoutResult nChartlayout( public void setPageDescription(String newDescription); - public JavaScriptObject getFileList(String fileFieldId); - - public JavaScriptObject getFileBlob(int index, JavaScriptObject fileList); - public void uploadFileChunk( String contentType, JavaScriptObject blob, @@ -57,16 +53,12 @@ public void uploadFileChunk( ProgressCallback callback ); - public String getContentType(JavaScriptObject fileList, int index); - public boolean isFileAPISupported(); public boolean isElementExists(String elementId); public String getFileUrl(String fileFieldId); - public void getFileMd5(JavaScriptObject blob, MD5Callback callback); - public void getFilePartMd5( JavaScriptObject blob, int currentChunk, @@ -74,12 +66,6 @@ public void getFilePartMd5( MD5Callback md5Callback ); - public double getFileSize(JavaScriptObject blob); - - String[] getMultipleUploadFileNames(JavaScriptObject fileList); - - String getWebkitRelativePath(JavaScriptObject fileList, int index); - public void consoleLog(String message); public void consoleError(String message); @@ -117,8 +103,6 @@ public void getFilePartMd5( boolean elementSupportsAttribute(Element el, String attribute); - Element getElementById(String elementId); - String getCdnEndpoint(); String getAccessTokenCookieUrl(); diff --git a/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtilsImpl.java b/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtilsImpl.java index 82a23c951a..85f6cd1ae3 100644 --- a/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtilsImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/SynapseJSNIUtilsImpl.java @@ -10,6 +10,7 @@ import com.google.gwt.user.client.Random; import com.google.gwt.user.client.Window.Location; import com.google.gwt.xhr.client.XMLHttpRequest; +import elemental2.dom.Blob; import org.sagebionetworks.repo.model.file.FileHandleAssociateType; import org.sagebionetworks.web.client.callback.MD5Callback; import org.sagebionetworks.web.client.jsinterop.SRC; @@ -219,9 +220,7 @@ public void setPageTitle(String newTitle) { @Override public void setPageDescription(String newDescription) { if (Document.get() != null) { - NodeList tags = Document - .get() - .getElementsByTagName("meta"); + NodeList tags = Document.get().getElementsByTagName("meta"); for (int i = 0; i < tags.getLength(); i++) { MetaElement metaTag = ((MetaElement) tags.getItem(i)); if (metaTag.getName().equals("description")) { @@ -246,33 +245,6 @@ public void uploadFileChunk( _directUploadBlob(contentType, blob, startByte, endByte, url, xhr); } - @Override - public JavaScriptObject getFileList(String fileFieldId) { - return _getFileList(fileFieldId); - } - - private static final native JavaScriptObject _getFileList( - String fileFieldId - ) /*-{ - var fileToUploadElement = $doc.getElementById(fileFieldId); - if (fileToUploadElement && 'files' in fileToUploadElement) { - return fileToUploadElement.files; - } - return null; - }-*/; - - @Override - public JavaScriptObject getFileBlob(int index, JavaScriptObject fileList) { - return _getFileBlob(index, fileList); - } - - private static final native JavaScriptObject _getFileBlob( - int index, - JavaScriptObject fileList - ) /*-{ - return fileList[index]; - }-*/; - private static final native void _directUploadBlob( String contentType, JavaScriptObject fileToUpload, @@ -324,64 +296,10 @@ private static final native double _getTotal(JavaScriptObject evt) /*-{ return 0; }-*/; - @Override - public String getContentType(JavaScriptObject fileList, int index) { - return _getContentType(fileList, index); - } - - private static final native String _getContentType( - JavaScriptObject fileList, - int index - ) /*-{ - return fileList[index].type; - }-*/; - - @Override - public String getWebkitRelativePath(JavaScriptObject fileList, int index) { - return _getWebkitRelativePath(fileList, index); - } - - private static final native String _getWebkitRelativePath( - JavaScriptObject fileList, - int index - ) /*-{ - return fileList[index].webkitRelativePath; - }-*/; - - @Override - public double getFileSize(JavaScriptObject blob) { - return _getFileSize(blob); - } - - private static final native double _getFileSize(JavaScriptObject blob) /*-{ - return blob.size; - }-*/; - - @Override - public String[] getMultipleUploadFileNames(JavaScriptObject fileList) { - String unSplitNames = _getFilesSelected(fileList); - if (unSplitNames.equals("")) return null; - return unSplitNames.split(";"); - } - - private static native String _getFilesSelected(JavaScriptObject fileList) /*-{ - var out = ""; - for (i = 0; i < fileList.length; i++) { - var file = fileList[i]; - out += file.name + ';'; - } - return out; - }-*/; - public boolean isElementExists(String elementId) { return Document.get().getElementById(elementId) != null; } - @Override - public Element getElementById(String elementId) { - return Document.get().getElementById(elementId); - } - /** * Return the last modified time of the File (in milliseconds since the UNIX epoch). -1 if undefined. */ @@ -399,31 +317,22 @@ private static final native double _getLastModified( return -1; }-*/; - /** - * Using SparkMD5 (https://github.com/satazor/SparkMD5) to (progressively by slicing the file) - * calculate the md5. - */ - @Override - public void getFileMd5(JavaScriptObject blob, MD5Callback md5Callback) { - _getFileMd5(blob, md5Callback); - } - private static final native void _getFileMd5( - JavaScriptObject file, + Blob file, MD5Callback md5Callback ) /*-{ - if ($wnd.Worker) { - if (!$wnd.calculateFileMd5Worker) { - $wnd.calculateFileMd5Worker = new $wnd.Worker("/workers/calculateFileMd5Worker.js"); - }; - $wnd.calculateFileMd5Worker.onmessage = function(event) { - md5Callback.@org.sagebionetworks.web.client.callback.MD5Callback::setMD5(Ljava/lang/String;)(event.data); - }; - $wnd.calculateFileMd5Worker.postMessage(file); - } else { - md5Callback.@org.sagebionetworks.web.client.callback.MD5Callback::setMD5(Ljava/lang/String;)(null); - } - }-*/; + if ($wnd.Worker) { + if (!$wnd.calculateFileMd5Worker) { + $wnd.calculateFileMd5Worker = new $wnd.Worker("/workers/calculateFileMd5Worker.js"); + }; + $wnd.calculateFileMd5Worker.onmessage = function(event) { + md5Callback.@org.sagebionetworks.web.client.callback.MD5Callback::setMD5(Ljava/lang/String;)(event.data); + }; + $wnd.calculateFileMd5Worker.postMessage(file); + } else { + md5Callback.@org.sagebionetworks.web.client.callback.MD5Callback::setMD5(Ljava/lang/String;)(null); + } + }-*/; /** * Using SparkMD5 (https://github.com/satazor/SparkMD5) to calculate the md5 of part of a file. diff --git a/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtils.java b/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtils.java new file mode 100644 index 0000000000..3c9bfc471e --- /dev/null +++ b/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtils.java @@ -0,0 +1,18 @@ +package org.sagebionetworks.web.client; + +import com.google.gwt.dom.client.Element; +import elemental2.dom.Blob; +import elemental2.dom.FileList; +import org.sagebionetworks.web.client.callback.MD5Callback; + +public interface SynapseJsInteropUtils { + public FileList getFileList(String fileFieldId); + + public void getFileMd5(Blob blob, MD5Callback callback); + + String[] getMultipleUploadFileNames(FileList fileList); + + String getWebkitRelativePath(FileList fileList, double index); + + Element getElementById(String elementId); +} diff --git a/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtilsImpl.java b/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtilsImpl.java new file mode 100644 index 0000000000..85e0ee978e --- /dev/null +++ b/src/main/java/org/sagebionetworks/web/client/SynapseJsInteropUtilsImpl.java @@ -0,0 +1,63 @@ +package org.sagebionetworks.web.client; + +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.Element; +import elemental2.dom.Blob; +import elemental2.dom.DomGlobal; +import elemental2.dom.File; +import elemental2.dom.FileList; +import elemental2.dom.HTMLInputElement; +import jsinterop.base.Js; +import org.sagebionetworks.web.client.callback.MD5Callback; + +public class SynapseJsInteropUtilsImpl implements SynapseJsInteropUtils { + + @Override + public FileList getFileList(String fileFieldId) { + elemental2.dom.Element fileToUploadElement = + DomGlobal.document.getElementById(fileFieldId); + if ( + fileToUploadElement instanceof HTMLInputElement && + ((HTMLInputElement) fileToUploadElement).files != null + ) return ((HTMLInputElement) fileToUploadElement).files; + + return null; + } + + private static String getFilesSelected(FileList fileList) { + StringBuilder out = new StringBuilder(); + for (double i = 0; i < fileList.length; i++) { + File file = fileList.item(i); + out.append(file.name).append(';'); + } + return out.toString(); + } + + /** + * Using SparkMD5 (https://github.com/satazor/SparkMD5) to (progressively by slicing the file) + * calculate the md5. + */ + @Override + public void getFileMd5(Blob blob, MD5Callback md5Callback) { + // _getFileMd5(blob, md5Callback); + } + + @Override + public String[] getMultipleUploadFileNames(FileList fileList) { + String unSplitNames = getFilesSelected(fileList); + if (unSplitNames.isEmpty()) return null; + return unSplitNames.split(";"); + } + + @Override + public String getWebkitRelativePath(FileList fileList, double index) { + return (String) Js + .asPropertyMap(fileList.item(index)) + .get("webkitRelativePath"); + } + + @Override + public Element getElementById(String elementId) { + return Document.get().getElementById(elementId); + } +} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/JSON.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/JSON.java deleted file mode 100644 index 63a36a26fc..0000000000 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/JSON.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.sagebionetworks.web.client.jsinterop; - -import jsinterop.annotations.JsPackage; -import jsinterop.annotations.JsType; - -@JsType(isNative = true, namespace = JsPackage.GLOBAL) -public class JSON { - - public static native Object parse(String json); - - public static native String stringify(Object obj); -} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/JSONEntityUtils.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/JSONEntityUtils.java index e256c30c00..00fa736a18 100644 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/JSONEntityUtils.java +++ b/src/main/java/org/sagebionetworks/web/client/jsinterop/JSONEntityUtils.java @@ -1,5 +1,6 @@ package org.sagebionetworks.web.client.jsinterop; +import elemental2.core.Global; import org.sagebionetworks.gwt.client.schema.adapter.JSONObjectGwt; import org.sagebionetworks.schema.adapter.JSONEntity; import org.sagebionetworks.schema.adapter.JSONObjectAdapter; @@ -20,6 +21,6 @@ public static Object toJsInteropCompatibleObject(JSONEntity entity) { } // This is a quick-and-dirty implementation--serialize the object to a string and use JSON.parse to deserialize it // It would be more efficient to update the JSONObjectGwt instance to directly create and return a native object. - return JSON.parse(adapter.toJSONString()); + return Global.JSON.parse(adapter.toJSONString()); } } diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/JsArray.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/JsArray.java deleted file mode 100644 index 1d836414eb..0000000000 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/JsArray.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.sagebionetworks.web.client.jsinterop; - -import jsinterop.annotations.JsConstructor; -import jsinterop.annotations.JsPackage; -import jsinterop.annotations.JsType; - -/** - * JsInterop class that represents the JavaScript Array builtin. - */ -@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Array") -public class JsArray { - - @SafeVarargs - @JsConstructor - public JsArray(T... items) {} - - public native void push(T item); -} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/JsObject.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/JsObject.java deleted file mode 100644 index aff936ab2e..0000000000 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/JsObject.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.sagebionetworks.web.client.jsinterop; - -import jsinterop.annotations.JsConstructor; -import jsinterop.annotations.JsPackage; -import jsinterop.annotations.JsType; - -/** - * JsInterop class that represents the JavaScript Object builtin. - */ -@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object") -public class JsObject { - - @JsConstructor - public JsObject() {} - - public static native JsObject assign(JsObject target, JsObject... sources); -} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/Promise.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/Promise.java deleted file mode 100644 index 1e5b292850..0000000000 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/Promise.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.sagebionetworks.web.client.jsinterop; - -import jsinterop.annotations.JsConstructor; -import jsinterop.annotations.JsFunction; -import jsinterop.annotations.JsMethod; -import jsinterop.annotations.JsPackage; -import jsinterop.annotations.JsType; - -@JsType(isNative = true, namespace = JsPackage.GLOBAL) -public class Promise { - - @JsFunction - public interface FunctionParam { - void exec(T o); - } - - @JsFunction - public interface ConstructorParam { - void exec(FunctionParam resolve, FunctionParam reject); - } - - @JsConstructor - public Promise(ConstructorParam parameters) {} - - public native Promise then(FunctionParam f); - - @JsMethod(name = "catch") - public native Promise catch_(FunctionParam f); -} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/SRC.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/SRC.java index c3922bc8bb..fef046ef37 100644 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/SRC.java +++ b/src/main/java/org/sagebionetworks/web/client/jsinterop/SRC.java @@ -1,7 +1,8 @@ package org.sagebionetworks.web.client.jsinterop; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArrayString; +import elemental2.dom.Blob; +import elemental2.promise.Promise; import jsinterop.annotations.JsFunction; import jsinterop.annotations.JsNullable; import jsinterop.annotations.JsPackage; @@ -192,7 +193,7 @@ public interface IsCancelled { public static native Promise uploadFile( String accessToken, String filename, - JavaScriptObject file, // blob + Blob file, int storageLocationId, String contentType, Progress progressCallback, diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/react/HasStyle.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/react/HasStyle.java index a7d5bd8f85..39c17c4ad7 100644 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/react/HasStyle.java +++ b/src/main/java/org/sagebionetworks/web/client/jsinterop/react/HasStyle.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.client.jsinterop.react; +import elemental2.core.JsObject; import jsinterop.base.JsPropertyMap; -import org.sagebionetworks.web.client.jsinterop.JsObject; import org.sagebionetworks.web.client.jsinterop.PropsWithStyle; import org.sagebionetworks.web.client.jsinterop.ReactComponentType; import org.sagebionetworks.web.client.widget.ReactComponentV2; diff --git a/src/main/java/org/sagebionetworks/web/client/widget/aws/AwsSdk.java b/src/main/java/org/sagebionetworks/web/client/widget/aws/AwsSdk.java index 39c1168e93..615eb382e5 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/aws/AwsSdk.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/aws/AwsSdk.java @@ -5,6 +5,7 @@ import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.inject.Inject; +import elemental2.dom.Blob; import org.sagebionetworks.web.client.ClientProperties; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.resources.ResourceLoader; @@ -52,7 +53,7 @@ public void init(final AsyncCallback callback) { */ public void upload( final String key, - JavaScriptObject file, + Blob file, String contentType, JavaScriptObject s3, S3DirectUploadHandler callback @@ -62,43 +63,43 @@ public void upload( private static native void _upload( String key, - JavaScriptObject file, + Blob file, String contentType, JavaScriptObject s3, S3DirectUploadHandler callback ) /*-{ - var parameters = { - Key : key, - ContentType : contentType, - Body : file - }; - var upload = new $wnd.AWS.S3.ManagedUpload({ - // partSize: 10 * 1024 * 1024, //default 5MB - // queueSize: 1, // default 4 - leavePartsOnError : true, - params : parameters, - service : s3 - }); - upload - .on( - 'httpUploadProgress', - function(evt) { - // report progress - callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::updateProgress(D)(evt.loaded/evt.total); - }); - var listener = function(err, data) { - if (err) { - //error - console.log("Upload error", err.code, err.message); - upload.abort(); - callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::uploadFailed(Ljava/lang/String;)(err.message); - } else { - //success - callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::uploadSuccess()(); - } - }; - upload.send(listener); - }-*/; + var parameters = { + Key : key, + ContentType : contentType, + Body : file + }; + var upload = new $wnd.AWS.S3.ManagedUpload({ + // partSize: 10 * 1024 * 1024, //default 5MB + // queueSize: 1, // default 4 + leavePartsOnError : true, + params : parameters, + service : s3 + }); + upload + .on( + 'httpUploadProgress', + function(evt) { + // report progress + callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::updateProgress(D)(evt.loaded/evt.total); + }); + var listener = function(err, data) { + if (err) { + //error + console.log("Upload error", err.code, err.message); + upload.abort(); + callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::uploadFailed(Ljava/lang/String;)(err.message); + } else { + //success + callback.@org.sagebionetworks.web.client.widget.upload.S3DirectUploadHandler::uploadSuccess()(); + } + }; + upload.send(listener); + }-*/; public String getPresignedURL( String key, diff --git a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/S3DirectUploader.java b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/S3DirectUploader.java index d9421e6406..ea62e1902e 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/S3DirectUploader.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/S3DirectUploader.java @@ -7,11 +7,12 @@ import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.inject.Inject; +import elemental2.dom.Blob; import org.sagebionetworks.repo.model.file.ExternalObjectStoreFileHandle; import org.sagebionetworks.web.client.DisplayConstants; import org.sagebionetworks.web.client.GWTWrapper; import org.sagebionetworks.web.client.SynapseClientAsync; -import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.callback.MD5Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.aws.AwsSdk; @@ -27,7 +28,7 @@ public class S3DirectUploader implements S3DirectUploadHandler { AwsSdk awsSdk; - SynapseJSNIUtils synapseJsniUtils; + SynapseJsInteropUtils jsinteropUtils; String accessKeyId; String secretAccessKey; String bucketName; @@ -35,7 +36,7 @@ public class S3DirectUploader implements S3DirectUploadHandler { String fileName; String contentType; String md5; - JavaScriptObject blob; + Blob blob; ProgressingFileUploadHandler handler; Long storageLocationId; HasAttachHandlers view; @@ -46,12 +47,12 @@ public class S3DirectUploader implements S3DirectUploadHandler { @Inject public S3DirectUploader( AwsSdk awsSdk, - SynapseJSNIUtils synapseJsniUtils, + SynapseJsInteropUtils jsinteropUtils, GWTWrapper gwt, SynapseClientAsync synapseClient ) { this.awsSdk = awsSdk; - this.synapseJsniUtils = synapseJsniUtils; + this.jsinteropUtils = jsinteropUtils; this.synapseClient = synapseClient; fixServiceEntryPoint(synapseClient); this.percentFormat = gwt.getNumberFormat("##"); @@ -80,8 +81,8 @@ public void uploadSuccess() { ExternalObjectStoreFileHandle fileHandle = new ExternalObjectStoreFileHandle(); fileHandle.setContentMd5(md5); - Double fileSize = synapseJsniUtils.getFileSize(blob); - fileHandle.setContentSize(fileSize.longValue()); + long fileSize = blob.size; + fileHandle.setContentSize(fileSize); fileHandle.setContentType(contentType); fileHandle.setFileKey(keyPrefixUUID + "/" + fileName); fileHandle.setFileName(fileName); @@ -118,7 +119,7 @@ public void configure( public void uploadFile( String fileName, String contentType, - JavaScriptObject blob, + Blob blob, final ProgressingFileUploadHandler handler, final String keyPrefixUUID, final Long storageLocationId, @@ -131,7 +132,7 @@ public void uploadFile( this.contentType = contentType; this.view = view; this.blob = blob; - synapseJsniUtils.getFileMd5( + jsinteropUtils.getFileMd5( blob, new MD5Callback() { @Override diff --git a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/Uploader.java b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/Uploader.java index 37a489e1e1..ed0a044657 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/entity/download/Uploader.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/entity/download/Uploader.java @@ -5,12 +5,13 @@ import static org.sagebionetworks.web.shared.WebConstants.VALID_ENTITY_NAME_REGEX; import com.google.common.util.concurrent.FutureCallback; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.shared.EventBus; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import elemental2.dom.File; +import elemental2.dom.FileList; import java.util.List; import org.sagebionetworks.repo.model.AccessControlList; import org.sagebionetworks.repo.model.Entity; @@ -35,6 +36,7 @@ import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.SynapseJavascriptFactory.OBJECT_TYPE; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.SynapseProperties; import org.sagebionetworks.web.client.events.CancelHandler; import org.sagebionetworks.web.client.events.EntityUpdatedEvent; @@ -76,6 +78,7 @@ public class Uploader private CallbackP fileHandleIdCallback; private SynapseClientAsync synapseClient; private SynapseJSNIUtils synapseJsniUtils; + private SynapseJsInteropUtils synapseJsInteropUtils; private GlobalApplicationState globalAppState; private GWTWrapper gwt; private MultipartUploader multiPartUploader; @@ -85,7 +88,7 @@ public class Uploader private String[] currentFilePath; private int currentFilePathElement; private int currIndex; - private JavaScriptObject fileList; + private FileList fileList; private NumberFormat percentFormat; private boolean fileHasBeenUploaded = false; private UploadType currentUploadType; @@ -102,6 +105,7 @@ public Uploader( UploaderView view, SynapseClientAsync synapseClient, SynapseJSNIUtils synapseJsniUtils, + SynapseJsInteropUtils jsInteropUtils, GWTWrapper gwt, AuthenticationController authenticationController, MultipartUploader multiPartUploader, @@ -116,6 +120,7 @@ public Uploader( this.synapseClient = synapseClient; fixServiceEntryPoint(synapseClient); this.synapseJsniUtils = synapseJsniUtils; + this.synapseJsInteropUtils = jsInteropUtils; this.gwt = gwt; this.percentFormat = gwt.getNumberFormat("##"); this.authenticationController = authenticationController; @@ -182,7 +187,7 @@ public void uploadFiles() { } public String[] getSelectedFileNames() { - return synapseJsniUtils.getMultipleUploadFileNames(fileList); + return synapseJsInteropUtils.getMultipleUploadFileNames(fileList); } public String getSelectedFilesText() { @@ -199,7 +204,8 @@ public void handleUploads() { // field validation if (fileList == null) { // setup upload process. - fileList = synapseJsniUtils.getFileList(UploaderViewImpl.FILE_FIELD_ID); + fileList = + synapseJsInteropUtils.getFileList(UploaderViewImpl.FILE_FIELD_ID); fileHasBeenUploaded = false; currIndex = 0; if ((fileNames = getSelectedFileNames()) == null) { @@ -215,13 +221,13 @@ public void handleUploads() { this.handleUploads(fileList); } - public void handleUploads(JavaScriptObject fileList) { + public void handleUploads(FileList fileList) { // SWC-5161: can't drag/drop another file set while this file list is being uploaded. globalAppState.clearDropZoneHandler(); view.disableSelectionDuringUpload(); this.fileList = fileList; view.setSelectedFilenames(getSelectedFilesText()); - fileNames = synapseJsniUtils.getMultipleUploadFileNames(fileList); + fileNames = synapseJsInteropUtils.getMultipleUploadFileNames(fileList); this.uploadBasedOnConfiguration(); } @@ -245,7 +251,7 @@ public void queryForUploadDestination() { currentUploadType = UploadType.S3; view.showUploadingToSynapseStorage(); } else { - // we have a parent entity, check to see where we are suppose to upload the file(s) + // we have a parent entity, check to see where we are supposed to upload the file(s) String uploadDestinationsEntityId = parentEntityId != null ? parentEntityId : entity.getId(); @@ -349,7 +355,7 @@ public void uploadBasedOnConfiguration() { // create necessary folders based on webkitRelativePath for the current item, and set parent entity // id to correct parent // reset the current file parent entity id to the original. - String relativePath = synapseJsniUtils.getWebkitRelativePath( + String relativePath = synapseJsInteropUtils.getWebkitRelativePath( fileList, currIndex ); @@ -421,7 +427,7 @@ public void onFailure(Throwable caught) { } else { uploadError( "Unable to create target folder structure: " + - synapseJsniUtils.getWebkitRelativePath(fileList, currIndex), + synapseJsInteropUtils.getWebkitRelativePath(fileList, currIndex), caught ); } @@ -455,7 +461,7 @@ public void onSuccess(Entity entity) { public void onFailure(Throwable caught) { uploadError( "Unable to create target folder structure: " + - synapseJsniUtils.getWebkitRelativePath(fileList, currIndex), + synapseJsInteropUtils.getWebkitRelativePath(fileList, currIndex), caught ); } @@ -564,11 +570,8 @@ public void setCurrentExternalUploadUrl(String currentExternalUploadUrl) { } public void checkFileSize() throws IllegalArgumentException { - JavaScriptObject blob = synapseJsniUtils.getFileBlob( - this.currIndex, - fileList - ); - long fileSize = (long) synapseJsniUtils.getFileSize(blob); + File blob = fileList.item(this.currIndex); + long fileSize = blob.size; // check if (fileSize > OLD_BROWSER_MAX_SIZE) { throw new IllegalArgumentException( @@ -647,11 +650,8 @@ public void onFailure(Throwable caught) { public void directUploadStep2(String fileName) { // use S3 direct uploader - JavaScriptObject currentFile = synapseJsniUtils.getFileBlob( - currIndex, - fileList - ); - String contentType = synapseJsniUtils.getContentType(fileList, currIndex); + File currentFile = fileList.item(currIndex); + String contentType = currentFile.type; contentType = ContentTypeUtils.fixDefaultContentType(contentType, fileName); if (endpointUrl != null) { s3DirectUploader.configure( @@ -1071,6 +1071,15 @@ public void setFileNames(String[] fileNames) { this.fileNames = fileNames; } + /** + * For testing purposes + * + * @return + */ + public void setFileList(FileList fileList) { + this.fileList = fileList; + } + @Override public void updateProgress( double currentProgress, diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/CroppedImageUploadViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/CroppedImageUploadViewImpl.java index 455eff8443..fe78a66087 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/CroppedImageUploadViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/CroppedImageUploadViewImpl.java @@ -1,6 +1,5 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.InputElement; import com.google.gwt.event.dom.client.ChangeEvent; @@ -15,6 +14,7 @@ import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import elemental2.dom.File; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Form; import org.gwtbootstrap3.client.ui.Image; @@ -184,33 +184,33 @@ private static native void _loadImage( private static native void _getCroppedImageBlob( CroppedImageUploadViewImpl v ) /*-{ - try { - $wnd.cropping - .result({ - type : 'blob', - format : 'png', - quality : 1, - circle : true - }) - .then( - function(blob) { - v.@org.sagebionetworks.web.client.widget.upload.CroppedImageUploadViewImpl::saveCroppedImage(Lcom/google/gwt/core/client/JavaScriptObject;)(blob); - }); - } catch (err) { - console.error(err); - } - }-*/; + try { + $wnd.cropping + .result({ + type : 'blob', + format : 'png', + quality : 1, + circle : true + }) + .then( + function(blob) { + v.@org.sagebionetworks.web.client.widget.upload.CroppedImageUploadViewImpl::saveCroppedImage(Lelemental2/dom/File;)(blob); + }); + } catch (err) { + console.error(err); + } + }-*/; public void saveCroppedImage() { // get the blob from the cropper _getCroppedImageBlob(this); } - public void saveCroppedImage(JavaScriptObject blob) { + public void saveCroppedImage(File blob) { // get the blob from the cropper loadingUI.setVisible(false); previewModal.hide(); - presenter.onFileProcessed(new JavaScriptObjectWrapper(blob), "image/png"); + presenter.onFileProcessed(blob, "image/png"); } public void cancelCropImage() { diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/FileHandleUploadWidgetImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/FileHandleUploadWidgetImpl.java index b729cd75bf..a956157520 100755 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/FileHandleUploadWidgetImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/FileHandleUploadWidgetImpl.java @@ -1,9 +1,10 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; -import org.sagebionetworks.web.client.SynapseJSNIUtils; +import elemental2.dom.Blob; +import elemental2.dom.FileList; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.shared.WebConstants; @@ -16,21 +17,21 @@ public class FileHandleUploadWidgetImpl private MultipartUploader multipartUploader; private CallbackP finishedUploadingCallback; private Callback startedUploadingCallback; - private SynapseJSNIUtils synapseJsniUtils; + private SynapseJsInteropUtils jsInteropUtils; private int count; private FileMetadata[] fileMetaArr; - private JavaScriptObject fileList; + private FileList fileList; @Inject public FileHandleUploadWidgetImpl( FileHandleUploadView view, MultipartUploader multipartUploader, - SynapseJSNIUtils synapseJsniUtils + SynapseJsInteropUtils jsInteropUtils ) { super(); this.view = view; this.multipartUploader = multipartUploader; - this.synapseJsniUtils = synapseJsniUtils; + this.jsInteropUtils = jsInteropUtils; this.view.setPresenter(this); this.view.allowMultipleFileUpload(false); } @@ -75,20 +76,18 @@ public void allowMultipleFileUpload(boolean value) { public FileMetadata[] getSelectedFileMetadata() { String inputId = view.getInputId(); FileMetadata[] results = null; - fileList = synapseJsniUtils.getFileList(inputId); - String[] fileNames = synapseJsniUtils.getMultipleUploadFileNames(fileList); + fileList = jsInteropUtils.getFileList(inputId); + String[] fileNames = jsInteropUtils.getMultipleUploadFileNames(fileList); if (fileNames != null) { results = new FileMetadata[fileNames.length]; for (int i = 0; i < fileNames.length; i++) { String name = fileNames[i]; String contentType = org.sagebionetworks.web.client.ContentTypeUtils.fixDefaultContentType( - synapseJsniUtils.getContentType(fileList, i), + fileList.item(i).type, name ); - double fileSize = synapseJsniUtils.getFileSize( - synapseJsniUtils.getFileBlob(i, fileList) - ); + double fileSize = fileList.item(i).size; results[i] = new FileMetadata(name, contentType, fileSize); } } @@ -161,7 +160,7 @@ private void uploadNext() { private void doMultipartUpload() { // The uploader does the real work - JavaScriptObject blob = synapseJsniUtils.getFileBlob(count, fileList); + Blob blob = fileList.item(count); FileMetadata fileMetadata = fileMetaArr[count]; multipartUploader.uploadFile( diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadView.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadView.java index f5e3f8efe0..e776de0f3b 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadView.java @@ -2,6 +2,7 @@ import com.google.gwt.event.logical.shared.HasAttachHandlers; import com.google.gwt.user.client.ui.IsWidget; +import elemental2.dom.Blob; import org.gwtbootstrap3.client.ui.constants.ButtonSize; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.IconType; @@ -10,7 +11,7 @@ public interface ImageUploadView extends IsWidget, HasAttachHandlers { public interface Presenter { void onFileSelected(); - void onFileProcessed(JavaScriptObjectWrapper blob, String contentType); + void onFileProcessed(Blob blob, String contentType); } void setPresenter(Presenter presenter); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadViewImpl.java index fd45390606..91396a8c46 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadViewImpl.java @@ -1,6 +1,5 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.CanvasElement; import com.google.gwt.dom.client.InputElement; import com.google.gwt.event.dom.client.ChangeEvent; @@ -15,6 +14,7 @@ import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import elemental2.dom.Blob; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Form; import org.gwtbootstrap3.client.ui.Input; @@ -143,75 +143,72 @@ private static native void _loadImage( CanvasElement originalCanvas, CanvasElement resizedCanvas ) /*-{ - var fileToUploadElement = $doc.getElementById(fileFieldId); - var file; - var canResize = true; - if (fileToUploadElement && 'files' in fileToUploadElement) { - file = fileToUploadElement.files[0]; - var ext = file.name.split('.').pop(); - // resize if it is a supported file type, and the file size > 3MB - canResize = [ 'bmp', 'jpg', 'jpeg', 'png' ].indexOf(ext) > -1 && file.size > 3145728; - } - - var imgElement = $doc.createElement('img'); - var onImageLoad = function() { - // Create an empty canvas element of the same dimensions as the original - originalCanvas.width = imgElement.width; - originalCanvas.height = imgElement.height; - // Copy the image contents to the canvas - var ctx = originalCanvas.getContext("2d"); - ctx.drawImage(imgElement, 0, 0); - var maxWidth = 2048; - var maxHeight = 2048; - if (imgElement.width > maxWidth) { - // continue resize based on width - var ratio = maxWidth / imgElement.width; // get ratio for scaling image - resizedCanvas.width = maxWidth; - resizedCanvas.height = imgElement.height * ratio; - } else { - // continue resize based on height - var ratio = maxHeight / imgElement.height; // get ratio for scaling image - resizedCanvas.height = maxHeight; - resizedCanvas.width = imgElement.width * ratio; - } - - // Resize & convert to blob - $wnd.resizer.resize(originalCanvas, resizedCanvas) - .then ( - function(result) { - $wnd.resizer.toBlob(result, 'image/jpeg', 90) - .then( - function(blob) { - v.@org.sagebionetworks.web.client.widget.upload.ImageUploadViewImpl::resizeComplete(Lcom/google/gwt/core/client/JavaScriptObject;)(blob); - }); - }); - }; - imgElement.addEventListener('load', onImageLoad, false); - - if (file && canResize) { - imgElement.src = $wnd.URL.createObjectURL(file); - } else { - // send back original content - v.@org.sagebionetworks.web.client.widget.upload.ImageUploadViewImpl::noResizeNecessary(Lcom/google/gwt/core/client/JavaScriptObject;)(file); - } - }-*/; + var fileToUploadElement = $doc.getElementById(fileFieldId) + var file + var canResize = true + if (fileToUploadElement && 'files' in fileToUploadElement) { + file = fileToUploadElement.files[0] + var ext = file.name.split('.').pop() + // resize if it is a supported file type, and the file size > 3MB + canResize = ['bmp', 'jpg', 'jpeg', 'png'].indexOf(ext) > -1 && file.size > 3145728 + } + var imgElement = $doc.createElement('img') + var onImageLoad = function() { + // Create an empty canvas element of the same dimensions as the original + originalCanvas.width = imgElement.width + originalCanvas.height = imgElement.height + // Copy the image contents to the canvas + var ctx = originalCanvas.getContext('2d') + ctx.drawImage(imgElement, 0, 0) + var maxWidth = 2048 + var maxHeight = 2048 + if (imgElement.width > maxWidth) { + // continue resize based on width + var ratio = maxWidth / imgElement.width // get ratio for scaling image + resizedCanvas.width = maxWidth + resizedCanvas.height = imgElement.height * ratio + } else { + // continue resize based on height + var ratio = maxHeight / imgElement.height // get ratio for scaling image + resizedCanvas.height = maxHeight + resizedCanvas.width = imgElement.width * ratio + } + // Resize & convert to blob + $wnd.resizer.resize(originalCanvas, resizedCanvas) + .then( + function(result) { + $wnd.resizer.toBlob(result, 'image/jpeg', 90) + .then( + function(blob) { + v.@org.sagebionetworks.web.client.widget.upload.ImageUploadViewImpl::resizeComplete(Lelemental2/dom/Blob;)(blob) + }) + }) + } + imgElement.addEventListener('load', onImageLoad, false) + if (file && canResize) { + imgElement.src = $wnd.URL.createObjectURL(file) + } else { + // send back original content + v.@org.sagebionetworks.web.client.widget.upload.ImageUploadViewImpl::noResizeNecessary(Lelemental2/dom/Blob;)(file) + } + }-*/; private static native void _initResizer() /*-{ - console.log('initializing pica resizer'); - $wnd.resizer = $wnd.pica({ - features : [ 'js', 'wasm', 'ww' ] - }); - console.log('pica resizer initialized'); - }-*/; - - public void resizeComplete(JavaScriptObject blob) { + console.log('initializing pica resizer'); + $wnd.resizer = $wnd.pica({ + features: ['js', 'wasm', 'ww'] + }); + console.log('pica resizer initialized'); + }-*/; + + public void resizeComplete(Blob blob) { loadingUI.setVisible(false); - presenter.onFileProcessed(new JavaScriptObjectWrapper(blob), "image/jpeg"); + presenter.onFileProcessed(blob, "image/jpeg"); } - public void noResizeNecessary(JavaScriptObject blob) { + public void noResizeNecessary(Blob blob) { loadingUI.setVisible(false); - presenter.onFileProcessed(new JavaScriptObjectWrapper(blob), null); + presenter.onFileProcessed(blob, null); } @Override diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadWidget.java index c5121d7dd3..d28306e83a 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/ImageUploadWidget.java @@ -1,14 +1,15 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; +import elemental2.dom.Blob; +import elemental2.dom.FileList; import org.gwtbootstrap3.client.ui.constants.ButtonSize; import org.gwtbootstrap3.client.ui.constants.ButtonType; import org.gwtbootstrap3.client.ui.constants.IconType; import org.sagebionetworks.web.client.PortalGinInjector; -import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlert; @@ -20,7 +21,7 @@ public class ImageUploadWidget implements ImageUploadView.Presenter, IsWidget { private SynapseAlert synAlert; private CallbackP finishedUploadingCallback; private Callback startedUploadingCallback; - private SynapseJSNIUtils synapseJsniUtils; + private SynapseJsInteropUtils synapseJsInteropUtils; private FileMetadata fileMeta; private ImageFileValidator validator = new ImageFileValidator(); private PortalGinInjector ginInjector; @@ -28,14 +29,14 @@ public class ImageUploadWidget implements ImageUploadView.Presenter, IsWidget { @Inject public ImageUploadWidget( MultipartUploader multipartUploader, - SynapseJSNIUtils synapseJsniUtils, + SynapseJsInteropUtils synapseJsInteropUtils, SynapseAlert synAlert, PortalGinInjector ginInjector ) { super(); this.synAlert = synAlert; this.multipartUploader = multipartUploader; - this.synapseJsniUtils = synapseJsniUtils; + this.synapseJsInteropUtils = synapseJsInteropUtils; this.ginInjector = ginInjector; } @@ -81,14 +82,14 @@ public void setUploadedFileText(String text) { public FileMetadata getSelectedFileMetadata() { String inputId = getView().getInputId(); - JavaScriptObject fileList = synapseJsniUtils.getFileList(inputId); - String[] fileNames = synapseJsniUtils.getMultipleUploadFileNames(fileList); + FileList fileList = synapseJsInteropUtils.getFileList(inputId); + String[] fileNames = synapseJsInteropUtils.getMultipleUploadFileNames( + fileList + ); if (fileNames != null && fileNames.length > 0) { String name = fileNames[0]; - double fileSize = synapseJsniUtils.getFileSize( - synapseJsniUtils.getFileBlob(0, fileList) - ); - String contentType = synapseJsniUtils.getContentType(fileList, 0); + double fileSize = fileList.item(0).size; + String contentType = fileList.item(0).type; return new FileMetadata(name, contentType, fileSize); } return null; @@ -118,10 +119,7 @@ public void onFileSelected() { } @Override - public void onFileProcessed( - JavaScriptObjectWrapper blob, - String forcedContentType - ) { + public void onFileProcessed(Blob blob, String forcedContentType) { synAlert.clear(); fileMeta = getSelectedFileMetadata(); if (fileMeta != null && blob != null) { @@ -161,15 +159,12 @@ public void setButtonIcon(IconType iconType) { getView().setButtonIcon(iconType); } - private void doMultipartUpload( - final FileMetadata fileMeta, - JavaScriptObjectWrapper blob - ) { + private void doMultipartUpload(final FileMetadata fileMeta, Blob blob) { // The uploader does the real work multipartUploader.uploadFile( fileMeta.getFileName(), fileMeta.getContentType(), - blob.get(), + blob, new ProgressingFileUploadHandler() { @Override public void uploadSuccess(String fileHandleId) { diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploader.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploader.java index 9d303e5159..5fe5b23bbf 100755 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploader.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploader.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.logical.shared.HasAttachHandlers; +import elemental2.dom.Blob; /** * Abstraction for a muti-part file uploader. @@ -20,7 +20,7 @@ public interface MultipartUploader { void uploadFile( String fileName, String contentType, - JavaScriptObject blob, + Blob blob, ProgressingFileUploadHandler handler, Long storageLocationId, HasAttachHandlers view diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java index 59aebb4858..6847256cf7 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/MultipartUploaderImplV2.java @@ -1,14 +1,14 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.logical.shared.HasAttachHandlers; import com.google.gwt.i18n.client.NumberFormat; import com.google.inject.Inject; +import elemental2.dom.Blob; +import elemental2.promise.Promise; import org.sagebionetworks.web.client.DateTimeUtils; import org.sagebionetworks.web.client.GWTWrapper; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseProperties; -import org.sagebionetworks.web.client.jsinterop.Promise; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.FileUploadComplete; import org.sagebionetworks.web.client.security.AuthenticationController; import org.sagebionetworks.web.shared.WebConstants; @@ -32,7 +32,7 @@ public class MultipartUploaderImplV2 implements MultipartUploader { private SynapseJSNIUtils synapseJsniUtils; private NumberFormat percentFormat; - JavaScriptObject blob; + Blob blob; HasAttachHandlers view; boolean isCanceled; DateTimeUtils dateTimeUtils; @@ -62,7 +62,7 @@ public MultipartUploaderImplV2( public void uploadFile( final String fileName, final String contentType, - final JavaScriptObject blob, + final Blob blob, ProgressingFileUploadHandler handler, final Long storageLocationId, HasAttachHandlers view @@ -80,7 +80,7 @@ public void uploadFile( this.view = view; isCanceled = false; - long fileSize = (long) synapseJsniUtils.getFileSize(blob); + long fileSize = blob.size; if (fileSize <= 0) { handler.uploadSuccess(null); return; @@ -104,9 +104,11 @@ public void uploadFile( ); p.then(fileUploadResolve -> { handler.uploadSuccess(fileUploadResolve.fileHandleId); + return null; }); p.catch_(error -> { handler.uploadFailed(error.toString()); + return null; }); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapper.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapper.java index b171ff6989..ab0c118a74 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapper.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapper.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; -import org.sagebionetworks.web.client.jsinterop.Promise; +import elemental2.dom.Blob; +import elemental2.promise.Promise; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.FileUploadComplete; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.IsCancelled; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.Progress; @@ -16,7 +16,7 @@ public interface SRCUploadFileWrapper { public Promise uploadFile( String accessToken, String filename, - JavaScriptObject file, // blob + Blob file, int storageLocationId, String contentType, Progress progressCallback, diff --git a/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapperImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapperImpl.java index 407286c4a0..2fe2bbf64a 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapperImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/upload/SRCUploadFileWrapperImpl.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.client.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; -import org.sagebionetworks.web.client.jsinterop.Promise; +import elemental2.dom.Blob; +import elemental2.promise.Promise; import org.sagebionetworks.web.client.jsinterop.SRC; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.IsCancelled; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.Progress; @@ -12,7 +12,7 @@ public class SRCUploadFileWrapperImpl implements SRCUploadFileWrapper { public Promise uploadFile( String accessToken, String filename, - JavaScriptObject file, + Blob file, int storageLocationId, String contentType, Progress progressCallback, diff --git a/src/main/java/org/sagebionetworks/web/client/widget/user/UserBadgeViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/user/UserBadgeViewImpl.java index 3be89c7b48..5179a9ec9a 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/user/UserBadgeViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/user/UserBadgeViewImpl.java @@ -7,6 +7,7 @@ import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.FocusPanel; import com.google.inject.Inject; +import elemental2.core.Global; import java.util.ArrayList; import java.util.List; import org.gwtbootstrap3.client.ui.constants.Emphasis; @@ -20,7 +21,6 @@ import org.sagebionetworks.web.client.PlaceChanger; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider; -import org.sagebionetworks.web.client.jsinterop.JSON; import org.sagebionetworks.web.client.jsinterop.MenuAction; import org.sagebionetworks.web.client.jsinterop.React; import org.sagebionetworks.web.client.jsinterop.ReactElement; @@ -101,7 +101,7 @@ public void configure( jsniUtils.consoleError(e); } - Object userProfileObject = JSON.parse(profileJson); + Object userProfileObject = Global.JSON.parse(profileJson); UserCardProps props = UserCardProps.create( userProfileObject, diff --git a/src/main/resources/org/sagebionetworks/web/Portal.gwt.xml b/src/main/resources/org/sagebionetworks/web/Portal.gwt.xml index 22e1fa9ac2..92beb9b008 100644 --- a/src/main/resources/org/sagebionetworks/web/Portal.gwt.xml +++ b/src/main/resources/org/sagebionetworks/web/Portal.gwt.xml @@ -79,9 +79,10 @@ + + property to your local maven settings.xml file (/.m2/settings.xml) --> md5Captor; @Mock - JavaScriptObject mockBlob; + Blob mockBlob; @Mock JavaScriptObject mockS3; @@ -77,18 +77,13 @@ public class S3DirectUploaderTest { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(mockView.isAttached()).thenReturn(true); - when( - mockSynapseJsniUtils.getFileBlob(anyInt(), any(JavaScriptObject.class)) - ) - .thenReturn(mockBlob); - when( - mockSynapseJsniUtils.getContentType(any(JavaScriptObject.class), anyInt()) - ) - .thenReturn(CONTENT_TYPE); + + mockBlob.type = CONTENT_TYPE; + uploader = new S3DirectUploader( mockAwsSdk, - mockSynapseJsniUtils, + mockSynapseJsInteropUtils, mockGwt, mockSynapseClient ); @@ -106,8 +101,8 @@ public void testUpload() { STORAGE_LOCATION_ID, mockView ); - verify(mockSynapseJsniUtils) - .getFileMd5(any(JavaScriptObject.class), md5Captor.capture()); + verify(mockSynapseJsInteropUtils) + .getFileMd5(any(Blob.class), md5Captor.capture()); MD5Callback md5Callback = md5Captor.getValue(); String md5 = "8782672c"; md5Callback.setMD5(md5); @@ -124,7 +119,7 @@ public void testUpload() { verify(mockAwsSdk) .upload( eq(KEY_PREFIX_UUID + "/" + FILE_NAME), - any(JavaScriptObject.class), + any(Blob.class), eq(CONTENT_TYPE), any(JavaScriptObject.class), eq(uploader) @@ -142,8 +137,8 @@ public void testUploadFolder() { STORAGE_LOCATION_ID, mockView ); - verify(mockSynapseJsniUtils) - .getFileMd5(any(JavaScriptObject.class), md5Captor.capture()); + verify(mockSynapseJsInteropUtils) + .getFileMd5(any(Blob.class), md5Captor.capture()); MD5Callback md5Callback = md5Captor.getValue(); // md5 calculation will fail if a directory is dropped into the uploader String md5 = null; diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploaderTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploaderTest.java index c8064eae3e..13dbdc931c 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploaderTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/download/UploaderTest.java @@ -4,8 +4,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doAnswer; @@ -19,9 +19,11 @@ import static org.sagebionetworks.web.client.utils.FutureUtils.getDoneFuture; import static org.sagebionetworks.web.client.utils.FutureUtils.getFailedFuture; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.shared.EventBus; import com.google.gwt.user.client.rpc.AsyncCallback; +import elemental2.dom.Blob; +import elemental2.dom.File; +import elemental2.dom.FileList; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -59,6 +61,7 @@ import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.SynapseJavascriptFactory.OBJECT_TYPE; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.SynapseProperties; import org.sagebionetworks.web.client.callback.MD5Callback; import org.sagebionetworks.web.client.events.CancelHandler; @@ -75,6 +78,7 @@ import org.sagebionetworks.web.shared.exceptions.RestServiceException; import org.sagebionetworks.web.test.helper.AsyncMockStubber; import org.sagebionetworks.web.unitclient.widget.upload.MultipartUploaderStub; +import org.springframework.test.util.ReflectionTestUtils; @RunWith(MockitoJUnitRunner.Silent.class) public class UploaderTest { @@ -96,6 +100,9 @@ public class UploaderTest { @Mock SynapseJSNIUtils mockSynapseJsniUtils; + @Mock + SynapseJsInteropUtils mockSynapseJsInteropUtils; + @Mock GlobalApplicationState mockGlobalApplicationState; @@ -134,16 +141,19 @@ public class UploaderTest { SynapseJavascriptClient mockSynapseJavascriptClient; @Mock - JavaScriptObject mockFileList; + FileList mockFileList; + + @Mock + File mockFile; @Mock - JavaScriptObject mockDroppedFileList; + FileList mockDroppedFileList; @Mock SynapseProperties mockSynapseProperties; @Captor - ArgumentCaptor> dragAndDropHandlerCaptor; + ArgumentCaptor> dragAndDropHandlerCaptor; @Mock Callback mockCallback; @@ -177,10 +187,9 @@ public void before() throws Exception { when(mockAuthenticationController.isLoggedIn()).thenReturn(true); when(mockAuthenticationController.getCurrentUserProfile()) .thenReturn(profile); - when( - mockSynapseJsniUtils.getContentType(any(JavaScriptObject.class), anyInt()) - ) - .thenReturn("image/png"); + when(mockFileList.item(anyDouble())).thenReturn(mockFile); + when(mockDroppedFileList.item(anyDouble())).thenReturn(mockFile); + ReflectionTestUtils.setField(mockFile, "type", "image/png"); when( mockSynapseProperties.getSynapseProperty( eq(WebConstants.DEFAULT_STORAGE_ID_PROPERTY_KEY) @@ -204,9 +213,7 @@ public void before() throws Exception { String[] fileNames = { "newFile.txt" }; when( - mockSynapseJsniUtils.getMultipleUploadFileNames( - any(JavaScriptObject.class) - ) + mockSynapseJsInteropUtils.getMultipleUploadFileNames(any(FileList.class)) ) .thenReturn(fileNames); AsyncMockStubber @@ -245,6 +252,7 @@ public void before() throws Exception { mockView, mockSynapseClient, mockSynapseJsniUtils, + mockSynapseJsInteropUtils, mockGwt, mockAuthenticationController, multipartUploader, @@ -263,8 +271,7 @@ public void before() throws Exception { // Simulate success. multipartUploader.setFileHandle(SUCCESS_FILE_HANDLE); - when(mockSynapseJsniUtils.getFileSize(any(JavaScriptObject.class))) - .thenReturn(1.0); + ReflectionTestUtils.setField(mockFile, "size", 1); when(mockSynapseJsniUtils.isFileAPISupported()).thenReturn(true); storageLocationId = 9090L; @@ -279,10 +286,10 @@ public Void answer(InvocationOnMock invocation) throws Throwable { } } ) - .when(mockSynapseJsniUtils) - .getFileMd5(any(JavaScriptObject.class), any(MD5Callback.class)); + .when(mockSynapseJsInteropUtils) + .getFileMd5(any(Blob.class), any(MD5Callback.class)); - when(mockSynapseJsniUtils.getFileList(anyString())) + when(mockSynapseJsInteropUtils.getFileList(anyString())) .thenReturn(mockFileList); } @@ -412,7 +419,7 @@ public void testDirectUploadHappyCase() throws Exception { verify(mockView).enableMultipleFileUploads(true); final String file1 = "file1.txt"; String[] fileNames = { file1 }; - when(mockSynapseJsniUtils.getMultipleUploadFileNames(mockFileList)) + when(mockSynapseJsInteropUtils.getMultipleUploadFileNames(mockFileList)) .thenReturn(fileNames); AsyncMockStubber .callSuccessWith(testEntity) @@ -541,7 +548,7 @@ public void testUpdateS3UploadBannerViewSet() throws Exception { @Test public void testDirectUploadNoFilesSelected() throws Exception { uploader.setFileNames(null); - when(mockSynapseJsniUtils.getMultipleUploadFileNames(mockFileList)) + when(mockSynapseJsInteropUtils.getMultipleUploadFileNames(mockFileList)) .thenReturn(null); uploader.handleUploads(); verify(mockView).hideLoading(); @@ -614,9 +621,7 @@ public void testDirectUploadSameNameFoundMultipleFiles() throws Exception { String file2 = "file2.txt"; String[] fileNames = { file1, file2 }; when( - mockSynapseJsniUtils.getMultipleUploadFileNames( - any(JavaScriptObject.class) - ) + mockSynapseJsInteropUtils.getMultipleUploadFileNames(any(FileList.class)) ) .thenReturn(fileNames); String duplicateNameEntityId = "syn128"; @@ -691,9 +696,7 @@ public void testMultipleFileUploads() throws Exception { final String file3 = "file3.txt"; String[] fileNames = { file1, file2, file3 }; when( - mockSynapseJsniUtils.getMultipleUploadFileNames( - any(JavaScriptObject.class) - ) + mockSynapseJsInteropUtils.getMultipleUploadFileNames(any(FileList.class)) ) .thenReturn(fileNames); AsyncMockStubber @@ -881,6 +884,8 @@ public void testQueryForUploadDestinationsWithUploadToExternalObjectStore() { when(mockView.getS3DirectAccessKey()).thenReturn(accessKey); when(mockView.getS3DirectSecretKey()).thenReturn(secretKey); + uploader.setFileList(mockFileList); + uploader.directUploadStep2(fileName); verify(mockS3DirectUploader) @@ -913,9 +918,7 @@ public void testDragAndDrop() throws RestServiceException { // simulate drop String fileName = "single file.txt"; when( - mockSynapseJsniUtils.getMultipleUploadFileNames( - any(JavaScriptObject.class) - ) + mockSynapseJsInteropUtils.getMultipleUploadFileNames(any(FileList.class)) ) .thenReturn(new String[] { fileName }); dragAndDropHandlerCaptor.getValue().invoke(mockDroppedFileList); @@ -1043,7 +1046,7 @@ public void testIsJschAuthorizationError() { @Test public void testGetSelectedFilesText() { String fileName = "single file.txt"; - when(mockSynapseJsniUtils.getMultipleUploadFileNames(any())) + when(mockSynapseJsInteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { fileName }); assertEquals(fileName, uploader.getSelectedFilesText()); } @@ -1051,9 +1054,7 @@ public void testGetSelectedFilesText() { @Test public void testGetSelectedFilesTextNoFiles() { when( - mockSynapseJsniUtils.getMultipleUploadFileNames( - any(JavaScriptObject.class) - ) + mockSynapseJsInteropUtils.getMultipleUploadFileNames(any(FileList.class)) ) .thenReturn(null); assert (uploader.getSelectedFilesText().isEmpty()); @@ -1061,7 +1062,7 @@ public void testGetSelectedFilesTextNoFiles() { @Test public void testGetSelectedFilesTextMultipleFiles() { - when(mockSynapseJsniUtils.getMultipleUploadFileNames(any())) + when(mockSynapseJsInteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "file1", "file2" }); assertEquals("2 files", uploader.getSelectedFilesText()); } @@ -1109,12 +1110,13 @@ public void testMkdirs() { String folder2NewSynId = "syn500"; String folder2 = "f1a"; String relativePath = folder1 + "/" + folder2 + "/test.txt"; - when(mockSynapseJsniUtils.getWebkitRelativePath(any(), anyInt())) + when(mockSynapseJsInteropUtils.getWebkitRelativePath(any(), anyDouble())) .thenReturn(relativePath); when(mockFolder.getId()).thenReturn(folder2NewSynId); when(mockSynapseJavascriptClient.createEntity(any(Entity.class))) .thenReturn(getDoneFuture(mockFolder)); String[] files = { "test.txt" }; + uploader.setFileList(mockFileList); uploader.setFileNames(files); uploader.uploadBasedOnConfiguration(); @@ -1145,9 +1147,11 @@ public void testMkdirsFailureToLookupChild() { String folder1 = "f1"; String folder2 = "f1a"; String relativePath = folder1 + "/" + folder2 + "/test.txt"; - when(mockSynapseJsniUtils.getWebkitRelativePath(any(), anyInt())) + + when(mockSynapseJsInteropUtils.getWebkitRelativePath(any(), anyDouble())) .thenReturn(relativePath); String[] files = { "test.txt" }; + uploader.setFileList(mockFileList); uploader.setFileNames(files); uploader.uploadBasedOnConfiguration(); @@ -1168,7 +1172,7 @@ public void testMkdirsFailureToCreateFolder() { String folder1 = "f1"; String folder2 = "f1a"; String relativePath = folder1 + "/" + folder2 + "/test.txt"; - when(mockSynapseJsniUtils.getWebkitRelativePath(any(), anyInt())) + when(mockSynapseJsInteropUtils.getWebkitRelativePath(any(), anyDouble())) .thenReturn(relativePath); String[] files = { "test.txt" }; uploader.setFileNames(files); diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/FileHandleUploadWidgetImplTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/FileHandleUploadWidgetImplTest.java index aeb9f8a96a..dc49840e26 100755 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/FileHandleUploadWidgetImplTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/FileHandleUploadWidgetImplTest.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.unitclient.widget.upload; +import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doAnswer; @@ -11,16 +11,19 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.gwt.core.client.JavaScriptObject; +import elemental2.dom.Blob; +import elemental2.dom.File; +import elemental2.dom.FileList; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.internal.verification.VerificationModeFactory; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; -import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.upload.AbstractFileValidator; @@ -32,18 +35,38 @@ import org.sagebionetworks.web.client.widget.upload.MultipartUploader; import org.sagebionetworks.web.client.widget.upload.ProgressingFileUploadHandler; import org.sagebionetworks.web.shared.WebConstants; +import org.springframework.test.util.ReflectionTestUtils; public class FileHandleUploadWidgetImplTest { - SynapseJSNIUtils jsniUtils; + @Mock + SynapseJsInteropUtils jsinteropUtils; + + @Mock FileHandleUploadView mockView; + + @Mock MultipartUploader mockMultipartUploader; + + @Mock CallbackP mockCallback; + FileHandleUploadWidgetImpl widget; - String inputId; + + String inputId = "987"; + + @Mock FileMetadata mockMetadata; + + @Mock Callback mockFailedValidationCallback; + @Mock + FileList mockFileList; + + @Mock + File mockFile; + @Captor ArgumentCaptor handleCaptor; @@ -53,24 +76,21 @@ public class FileHandleUploadWidgetImplTest { @Before public void before() { MockitoAnnotations.initMocks(this); - jsniUtils = mock(SynapseJSNIUtils.class); - mockView = mock(FileHandleUploadView.class); - mockMultipartUploader = mock(MultipartUploader.class); - mockCallback = mock(CallbackP.class); - mockFailedValidationCallback = mock(Callback.class); + + // The metadata returned should correspond to testFileName + when(mockView.getInputId()).thenReturn(inputId); + when(jsinteropUtils.getFileList(anyString())).thenReturn(mockFileList); + when(mockFileList.item(anyDouble())).thenReturn(mockFile); + when(jsinteropUtils.getMultipleUploadFileNames(any())) + .thenReturn(new String[] { "testName" }); + ReflectionTestUtils.setField(mockFile, "type", null); + widget = new FileHandleUploadWidgetImpl( mockView, mockMultipartUploader, - jsniUtils + jsinteropUtils ); - inputId = "987"; - - // The metadata returned should correspond to testFileName - when(mockView.getInputId()).thenReturn(inputId); - when(jsniUtils.getMultipleUploadFileNames(any())) - .thenReturn(new String[] { "testName" }); - when(jsniUtils.getContentType(any(), anyInt())).thenReturn(null); } @Test @@ -89,6 +109,7 @@ public void testFileSelected() { // Configure before the test widget.configure("button text", mockCallback); reset(mockView); + when(mockView.getInputId()).thenReturn(inputId); // method under test. widget.onFileSelected(); verify(mockView).updateProgress(1, "1%"); @@ -126,7 +147,7 @@ public void testSelectInvalidFileName() { FileValidator mockFileValidator = mock(FileValidator.class); when(mockFileValidator.getInvalidFileCallback()) .thenReturn(mockFailedValidationCallback); - when(jsniUtils.getMultipleUploadFileNames(any())) + when(jsinteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "testName#($*#.jpg" }); widget.configure("button text", mockCallback); widget.setValidation(mockFileValidator); @@ -139,7 +160,7 @@ public void testSelectInvalidFileName() { @Test public void testSelectInvalidFileNameNoValidator() { - when(jsniUtils.getMultipleUploadFileNames(any())) + when(jsinteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "testName#($*#.jpg" }); widget.configure("button text", mockCallback); @@ -151,12 +172,14 @@ public void testSelectInvalidFileNameNoValidator() { @Test public void testMultiFileSelected() { final String successFileHandle = "123"; - when(jsniUtils.getMultipleUploadFileNames(any())) + when(jsinteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "testName", "testName2" }); // Configure before the test widget.configure("button text", mockCallback); reset(mockView); + when(mockView.getInputId()).thenReturn(inputId); + // method under test. widget.onFileSelected(); verify(mockView).updateProgress(1, "1%"); @@ -215,7 +238,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { .uploadFile( anyString(), anyString(), - any(JavaScriptObject.class), + any(Blob.class), handleCaptor.capture(), any(Long.class), eq(mockView) @@ -237,6 +260,7 @@ public String getInvalidMessage() { validator.setInvalidFileCallback(mockFailedValidationCallback); widget.setValidation(validator); reset(mockView); + when(mockView.getInputId()).thenReturn(inputId); // method under test. widget.onFileSelected(); verify(mockView, never()).updateProgress(1, "1%"); @@ -274,7 +298,7 @@ public Void answer(InvocationOnMock invocation) throws Throwable { .uploadFile( anyString(), anyString(), - any(JavaScriptObject.class), + any(Blob.class), handleCaptor.capture(), any(Long.class), eq(mockView) @@ -294,6 +318,7 @@ public String getInvalidMessage() { }; widget.setValidation(validator); reset(mockView); + when(mockView.getInputId()).thenReturn(inputId); // method under test. widget.onFileSelected(); verify(mockView, never()).updateProgress(1, "1%"); diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/ImageUploadWidgetImplTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/ImageUploadWidgetImplTest.java index 833574d906..6c11d900ab 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/ImageUploadWidgetImplTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/ImageUploadWidgetImplTest.java @@ -1,8 +1,7 @@ package org.sagebionetworks.web.unitclient.widget.upload; +import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.never; @@ -10,7 +9,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.gwt.core.client.JavaScriptObject; +import elemental2.dom.File; +import elemental2.dom.FileList; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -18,21 +18,21 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.sagebionetworks.web.client.PortalGinInjector; -import org.sagebionetworks.web.client.SynapseJSNIUtils; +import org.sagebionetworks.web.client.SynapseJsInteropUtils; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.entity.controller.SynapseAlert; import org.sagebionetworks.web.client.widget.upload.FileMetadata; import org.sagebionetworks.web.client.widget.upload.FileUpload; import org.sagebionetworks.web.client.widget.upload.ImageUploadView; import org.sagebionetworks.web.client.widget.upload.ImageUploadWidget; -import org.sagebionetworks.web.client.widget.upload.JavaScriptObjectWrapper; import org.sagebionetworks.web.client.widget.upload.MultipartUploader; import org.sagebionetworks.web.client.widget.upload.ProgressingFileUploadHandler; +import org.springframework.test.util.ReflectionTestUtils; public class ImageUploadWidgetImplTest { @Mock - SynapseJSNIUtils mockJSNIUtils; + SynapseJsInteropUtils mockJsInteropUtils; @Mock ImageUploadView mockView; @@ -49,6 +49,9 @@ public class ImageUploadWidgetImplTest { @Mock FileMetadata mockMetadata; + @Mock + FileList mockFileList; + @Mock PortalGinInjector mockPortalGinInjector; @@ -59,7 +62,7 @@ public class ImageUploadWidgetImplTest { SynapseAlert mockSynAlert; @Mock - JavaScriptObjectWrapper mockBlob; + File mockFile; String fileHandleId = "222"; String testFileName = "testing.txt"; @@ -70,7 +73,7 @@ public void before() { widget = new ImageUploadWidget( mockMultipartUploader, - mockJSNIUtils, + mockJsInteropUtils, mockSynAlert, mockPortalGinInjector ); @@ -78,9 +81,11 @@ public void before() { // The metadata returned should correspond to testFileName when(mockView.getInputId()).thenReturn(inputId); - when(mockJSNIUtils.getMultipleUploadFileNames(any())) + when(mockJsInteropUtils.getFileList(inputId)).thenReturn(mockFileList); + when(mockFileList.item(anyDouble())).thenReturn(mockFile); + when(mockJsInteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "testName.png" }); - when(mockJSNIUtils.getContentType(any(), anyInt())).thenReturn("image/png"); + ReflectionTestUtils.setField(mockFile, "type", "image/png"); when(mockPortalGinInjector.getImageUploadView()).thenReturn(mockView); } @@ -101,7 +106,7 @@ public void testFileSelected() { widget.configure(mockCallback); // method under test. - widget.onFileProcessed(mockBlob, null); + widget.onFileProcessed(mockFile, null); verify(mockView).updateProgress(1, "1%"); verify(mockView).showProgress(true); verify(mockView).setInputEnabled(false); @@ -135,7 +140,7 @@ public void testFileSelected() { @Test public void testFileSelectedForceContentType() { widget.configure(mockCallback); - widget.onFileProcessed(mockBlob, "image/jpeg"); + widget.onFileProcessed(mockFile, "image/jpeg"); verify(mockMultipartUploader) .uploadFile( any(), @@ -159,10 +164,9 @@ public void testFileSelectedSuccess() { @Test public void testFileSelectedFailed() { - when(mockJSNIUtils.getMultipleUploadFileNames(any())) + when(mockJsInteropUtils.getMultipleUploadFileNames(any())) .thenReturn(new String[] { "testName.raw" }); - when(mockJSNIUtils.getContentType(any(), anyInt())) - .thenReturn("notanimage/raw"); + ReflectionTestUtils.setField(mockFile, "type", "notanimage/raw"); // Configure before the test widget.configure(mockCallback); diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java index c00fef0eaf..085dfd2eac 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderImplV2Test.java @@ -3,15 +3,16 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import static org.sagebionetworks.web.client.ContentTypeUtils.fixDefaultContentType; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.logical.shared.HasAttachHandlers; +import elemental2.dom.Blob; +import elemental2.promise.IThenable; +import elemental2.promise.Promise; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -24,8 +25,6 @@ import org.sagebionetworks.web.client.ProgressCallback; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseProperties; -import org.sagebionetworks.web.client.jsinterop.Promise; -import org.sagebionetworks.web.client.jsinterop.Promise.FunctionParam; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.FileUploadComplete; import org.sagebionetworks.web.client.jsinterop.SRC.SynapseClient.IsCancelled; import org.sagebionetworks.web.client.security.AuthenticationController; @@ -63,7 +62,7 @@ public class MultipartUploaderImplV2Test { ArgumentCaptor progressCaptor; @Mock - JavaScriptObject mockFileBlob; + Blob mockFileBlob; @Mock SRCUploadFileWrapper mockSRCUploadFileWrapper; @@ -81,11 +80,14 @@ public class MultipartUploaderImplV2Test { FileUploadComplete mockFileUploadComplete; @Captor - ArgumentCaptor promiseHandlerCaptor; + ArgumentCaptor promiseThenCaptor; + + @Captor + ArgumentCaptor promiseCatchCaptor; public static final String UPLOAD_ID = "39282"; public static final String RESULT_FILE_HANDLE_ID = "999999"; - public static final double FILE_SIZE = 9281; + public static final int FILE_SIZE = 9281; public static final String FILE_NAME = "file.txt"; public static final String CONTENT_TYPE = "text/plain"; public static final long defaultStorageLocationId = 1L; @@ -107,7 +109,7 @@ public void before() throws Exception { ) .thenReturn(mockPromise); - when(synapseJsniUtils.getFileSize(any())).thenReturn(FILE_SIZE); + mockFileBlob.size = FILE_SIZE; when( mockSynapseProperties.getSynapseProperty( @@ -132,8 +134,7 @@ public void before() throws Exception { @Test public void testDirectUploadEmptyFile() throws Exception { - when(synapseJsniUtils.getFileSize(any(JavaScriptObject.class))) - .thenReturn(0.0); + mockFileBlob.size = 0; uploader.uploadFile( FILE_NAME, CONTENT_TYPE, @@ -156,10 +157,11 @@ public void testDirectUploadSinglePart() throws Exception { mockView ); - verify(mockPromise).then(promiseHandlerCaptor.capture()); - FunctionParam thenHandler = promiseHandlerCaptor.getValue(); + verify(mockPromise).then(promiseThenCaptor.capture()); + IThenable.ThenOnFulfilledCallbackFn thenHandler = + promiseThenCaptor.getValue(); - thenHandler.exec(mockFileUploadComplete); + thenHandler.onInvoke(mockFileUploadComplete); // the handler should get the id. verify(mockHandler).uploadSuccess(RESULT_FILE_HANDLE_ID); @@ -176,10 +178,11 @@ public void testDirectUploadEmptyStorageLocationId() throws Exception { mockView ); - verify(mockPromise).then(promiseHandlerCaptor.capture()); - FunctionParam thenHandler = promiseHandlerCaptor.getValue(); + verify(mockPromise).then(promiseThenCaptor.capture()); + IThenable.ThenOnFulfilledCallbackFn thenHandler = + promiseThenCaptor.getValue(); - thenHandler.exec(mockFileUploadComplete); + thenHandler.onInvoke(mockFileUploadComplete); verify(mockSRCUploadFileWrapper) .uploadFile( @@ -240,10 +243,11 @@ public void testStartMultipartUploadFailure() throws Exception { mockView ); - verify(mockPromise).catch_(promiseHandlerCaptor.capture()); - FunctionParam errorHandler = promiseHandlerCaptor.getValue(); + verify(mockPromise).catch_(promiseCatchCaptor.capture()); + Promise.CatchOnRejectedCallbackFn errorHandler = + promiseCatchCaptor.getValue(); - errorHandler.exec(error); + errorHandler.onInvoke(error); verify(mockHandler).uploadFailed(error); } diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderStub.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderStub.java index c59ada5820..084f7d57c2 100755 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderStub.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/upload/MultipartUploaderStub.java @@ -1,7 +1,7 @@ package org.sagebionetworks.web.unitclient.widget.upload; -import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.event.logical.shared.HasAttachHandlers; +import elemental2.dom.Blob; import org.sagebionetworks.web.client.widget.upload.MultipartUploader; import org.sagebionetworks.web.client.widget.upload.ProgressingFileUploadHandler; @@ -59,7 +59,7 @@ public void setUploadSpeed(String... uploadSpeed) { public void uploadFile( String fileName, String contentType, - JavaScriptObject blob, + Blob blob, ProgressingFileUploadHandler handler, Long storageLocationId, HasAttachHandlers view