下面列出了怎么用com.google.gwt.core.client.Callback的API类实例代码及写法,或者点击链接到github查看源代码。
private void injectTomatoScript() {
logger.info("Inject tomato.js");
ScriptInjector.fromUrl(TOMATO_JS_URL)
.setCallback(new Callback<Void, Exception>() {
@Override
public void onFailure(Exception reason) {
logger.info("Script load failed Info: " + reason);
}
@Override
public void onSuccess(Void result) {
logger.info(
"tomato.js loaded successfully and executed!");
}
}).setRemoveTag(true).setWindow(ScriptInjector.TOP_WINDOW)
.inject();
}
@Test
public void configure() throws Exception {
// Given
App app = new App();
FirebaseConfigParser configParser = PowerMockito.mock(FirebaseConfigParser.class);
PowerMockito.whenNew(FirebaseConfigParser.class).withAnyArguments().thenReturn(configParser);
ScriptInjector.FromUrl fromUrl = PowerMockito.mock(ScriptInjector.FromUrl.class);
Mockito.when(ScriptInjector.fromUrl(Mockito.nullable(String.class))).thenReturn(fromUrl);
Mockito.when(fromUrl.setCallback(Mockito.nullable(Callback.class))).thenReturn(fromUrl);
Mockito.when(fromUrl.setRemoveTag(Mockito.anyBoolean())).thenReturn(fromUrl);
Mockito.when(fromUrl.setWindow(Mockito.nullable(JavaScriptObject.class))).thenReturn(fromUrl);
// When
app.configure();
// Then
PowerMockito.verifyNew(FirebaseConfigParser.class, VerificationModeFactory.times(1)).withArguments(Mockito.anyString());
Mockito.verify(configParser, VerificationModeFactory.times(1)).getFirebaseScriptSrc();
}
private void injectJqueryScript() {
// Workaround: https://goo.gl/1OrFqj
ScriptInjector.fromUrl(JQUERY_UI_URL).setCallback(new Callback<Void, Exception>() {
@Override
public void onFailure(Exception reason) {
logger.info("Script load failed Info: " + reason);
}
@Override
public void onSuccess(Void result) {
logger.info("JQuery for Select loaded successful!");
init();
}
}).setRemoveTag(true).setWindow(ScriptInjector.TOP_WINDOW).inject();
}
private void addPremiumSupportHelpAction() {
// userVoice init
ScriptInjector.fromUrl(resources.userVoice().getSafeUri().asString())
.setWindow(ScriptInjector.TOP_WINDOW)
.setCallback(
new Callback<Void, Exception>() {
@Override
public void onSuccess(Void aVoid) {
// add action
actionManager.registerAction(
localizationConstant.createSupportTicketAction(), createSupportTicketAction);
helpGroup.addSeparator();
helpGroup.add(createSupportTicketAction);
}
@Override
public void onFailure(Exception e) {
Log.error(getClass(), "Unable to inject UserVoice", e);
}
})
.inject();
}
/**
* Will register the {@link ApiFeature} to the list of features providing also the Javascript Script element object
* for later removal / update.
*/
public static void register(ApiFeature apiFeature, Callback<Void, Exception> callback) {
if (apiFeature != null && apiFeature.getApiKey() != null && !apiFeature.getApiKey().isEmpty()) {
JavaScriptObject scriptObject = ScriptInjector.fromUrl(apiFeature.constructApiUrl())
.setWindow(ScriptInjector.TOP_WINDOW)
.setCallback(new Callback<Void, Exception>() {
@Override
public void onFailure(Exception e) {
callback.onFailure(e);
}
@Override
public void onSuccess(Void aVoid) {
callback.onSuccess(aVoid);
}
}).inject();
features.put(apiFeature, scriptObject);
}
}
private void prepareTemplate(DigitalObject templateObj, DescriptionMetadata templateDesc) {
if (templateDesc != null) {
prepareDescription(getCurrent(), templateDesc);
return ;
}
ModsCustomDataSource.getInstance().fetchDescription(templateObj, new Callback<DescriptionMetadata, String>() {
@Override
public void onFailure(String reason) {
stop(reason);
}
@Override
public void onSuccess(DescriptionMetadata result) {
templateDescriptions[getTemplateIndex()] = result;
prepareDescription(getCurrent(), result);
}
}, false);
}
private void initSearchList(String[] pids) {
expect();
SearchDataSource.getInstance().find(pids, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
searchList = new RecordList();
release();
}
@Override
public void onSuccess(ResultSet result) {
searchList = result;
release();
}
});
}
public void open(WorkflowManaging.WorkflowNewJobEditPlace place) {
MetaModelDataSource.getModels(false, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
Record modelRecord = MetaModelDataSource.getModels().findByKey(place.getModelPid());
MetaModelDataSource.MetaModelRecord.get(modelRecord);
MetaModelDataSource.MetaModelRecord metaModel = new MetaModelDataSource.MetaModelRecord(modelRecord);
Record record = new Record();
record.setAttribute(WorkflowModelConsts.JOB_ID, place.getJobId());
record.setAttribute(DigitalObjectDataSource.FIELD_MODEL, place.getModelPid());
record.setAttributeAsJavaObject(MetaModelDataSource.FIELD_MODELOBJECT, metaModel);
editor.edit(DigitalObjectDataSource.DigitalObject.create(record));
}
});
}
private void basicFetch(Criteria criteria, final Callback<ResultSet, Void> callback) {
final ResultSet resultSet = new ResultSet(this);
resultSet.setCriteria(criteria);
resultSet.setFetchMode(FetchMode.BASIC);
// resultSet.setCriteriaPolicy(CriteriaPolicy.DROPONCHANGE);
// server resource returns full result in case of SearchType.PIDS query
if (resultSet.lengthIsKnown()) {
callback.onSuccess(resultSet);
} else {
final HandlerRegistration[] handler = new HandlerRegistration[1];
handler[0] = resultSet.addDataArrivedHandler(new DataArrivedHandler() {
@Override
public void onDataArrived(DataArrivedEvent event) {
handler[0].removeHandler();
callback.onSuccess(resultSet);
}
});
resultSet.get(0);
}
}
public static void getModels(boolean reload, final Callback<ResultSet, Void> callback) {
final ResultSet models = getModels(reload);
if (models.lengthIsKnown()) {
callback.onSuccess(models);
} else {
final HandlerRegistration[] handler = new HandlerRegistration[1];
handler[0] = models.addDataArrivedHandler(new DataArrivedHandler() {
@Override
public void onDataArrived(DataArrivedEvent event) {
handler[0].removeHandler();
callback.onSuccess(models);
}
});
}
}
private void fetchSiblings(final String pid) {
SearchDataSource.getInstance().findParent(pid, null, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
if (result.isEmpty()) {
SC.warn(i18n.DigitalObjectNavigateAction_NoParent_Msg());
} else {
Record parent = result.first();
DigitalObject parentObj = DigitalObject.createOrNull(parent);
if (parentObj != null) {
scheduleFetchSiblings(parentObj.getPid(), pid);
}
}
}
});
}
private void validate(final Validatable validable, final Record[] digitalObjects) {
if (digitalObjects != null && digitalObjects.length > 0) {
// ensure models are fetched
MetaModelDataSource.getModels(false, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
new ValidateTask(validable, digitalObjects).execute();
}
});
} else {
// no-op
}
}
private void askForExportOptions(String[] pids) {
if (pids == null || pids.length == 0) {
return ;
}
Record export = new Record();
export.setAttribute(ExportResourceApi.DESA_PID_PARAM, pids);
ExportOptionsWidget.showOptions(export, new Callback<Record, Void>() {
@Override
public void onFailure(Void reason) {
// no-op
}
@Override
public void onSuccess(Record result) {
exportOrValidate(result);
}
});
}
private void loadParentSelection(final String pid, String batchId) {
if (pid == null && batchId == null) {
selectionView.setSelection(null);
return ;
}
SearchDataSource.getInstance().findParent(pid, batchId, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
if (result.isEmpty()) {
selectionView.setSelection(null);
} else {
newParent = oldParent = result.first();
selectionView.setSelection(newParent);
}
loadFailed = false;
}
});
}
@Inject
RecaptchaView(Binder uiBinder) {
initWidget(uiBinder.createAndBindUi(this));
// Load the Api
RecaptchaApi recaptchaApi = new RecaptchaApi("6LeZSRIUAAAAAE3JdZpdi6shhA87ZUG4U2ICsGlJ");
ApiRegistry.register(recaptchaApi, new Callback<Void, Exception>() {
@Override
public void onFailure(Exception reason) {
MaterialToast.fireToast(reason.getMessage());
}
@Override
public void onSuccess(Void result) {
recaptcha.load(recaptchaApi);
}
});
}
@Override
public void setup() {
ScriptInjector.fromUrl("https://maps.googleapis.com/maps/api/js?" + (iApiKey != null && !iApiKey.isEmpty() ? "key=" + iApiKey + "&" : "") +
"sensor=false&callback=setupGoogleMap").setWindow(ScriptInjector.TOP_WINDOW).setCallback(
new Callback<Void, Exception>() {
@Override
public void onSuccess(Void result) {
}
@Override
public void onFailure(Exception e) {
UniTimeNotifications.error(e.getMessage(), e);
setVisible(false);
iMapControl = null;
}
}).inject();
}
public void setup() {
loadCss(GWT.getHostPageBaseURL() + "leaflet/leaflet.css");
ScriptInjector.fromUrl(GWT.getHostPageBaseURL() + "leaflet/leaflet.js").setWindow(ScriptInjector.TOP_WINDOW).setCallback(
new Callback<Void, Exception>() {
@Override
public void onSuccess(Void result) {
setupLeafletMap(iTileUrl, iTileAttribution);
setLeafletMarker();
leafletReverseGeocode();
}
@Override
public void onFailure(Exception e) {
UniTimeNotifications.error(e.getMessage(), e);
setVisible(false);
iMapControl = null;
}
}).inject();
}
@Override
public void getDiffs(WaveletId waveletId, String docId, HashedVersion version,
Callback<DiffData, Exception> callback) {
callback.onSuccess(new DiffData() {
@Override
public String getDocId() {
return "";
}
@Override
public Range[] getRanges() {
return new Range[] {};
}
});
}
/**
* Method for tests which need injected scripts.
*/
protected void injectUrlAndTest(final TestWithInjection testWithInjection) {
this.delayTestFinish(this.testDelay);
this.loadScripts(this.scriptUrls, 0, new Callback<Void, Exception>() {
@Override
public void onSuccess(Void result) {
testWithInjection.test();
finishTest();
}
@Override
public void onFailure(Exception reason) {
assertNotNull(reason);
fail("Injection failed: " + reason.toString());
}
});
}
/**
* Request an access token from an OAuth 2.0 provider.
* <p/>
* <p> If it can be determined that the user has already granted access, and the token has not yet expired, and that
* the token will not expire soon, the existing token will be passed to the callback. </p>
* <p/>
* <p> Otherwise, a popup window will be displayed which may prompt the user to grant access. If the user has
* already granted access the popup will immediately close and the token will be passed to the callback. If access
* hasn't been granted, the user will be prompted, and when they grant, the token will be passed to the callback.
* </p>
*
* @param req Request for authentication.
* @param callback Callback to pass the token to when access has been granted.
*/
public void login(AuthRequest req, final Callback<TokenInfo, Throwable> callback) {
lastRequest = req;
lastCallback = callback;
String authUrl = req.toUrl(urlCodex) + "&redirect_uri=" + urlCodex.encode(oauthWindowUrl);
// Try to look up the token we have stored.
final TokenInfo info = getToken(req);
if (info == null || info.getExpires() == null || expiringSoon(info)) {
// Token wasn't found, or doesn't have an expiration, or is expired or
// expiring soon. Requesting access will refresh the token.
doLogin(authUrl, callback);
} else {
// Token was found and is good, immediately execute the callback with the
// access token.
scheduler.scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
callback.onSuccess(info);
}
});
}
}
public native void doFetchBlocksImage(Callback<String,String> callback) /*-{
var callb = $entry(function(result, error) {
if (error) {
[email protected]::onFailure(Ljava/lang/Object;)(error);
} else {
[email protected]::onSuccess(Ljava/lang/Object;)(result);
}
});
[email protected]anel::workspace
.exportBlocksImageToUri(callb);
}-*/;
private void injectMyFunctionScript() {
ScriptInjector.fromUrl(MYFUNCTION_URL).setCallback(new Callback<Void, Exception>() {
@Override
public void onFailure(Exception reason) {
logger.info("Script load failed Info: " + reason);
}
@Override
public void onSuccess(Void result) {
logger.info("MyFunction loaded successful!");
}
}).setRemoveTag(true).setWindow(ScriptInjector.TOP_WINDOW).inject();
}
private void fetchModels(final boolean reload) {
MetaModelDataSource.getModels(reload, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet modelResultSet) {
LinkedHashMap<?, ?> valueMap = ClientUtils.getValueMap(modelResultSet,
MetaModelDataSource.FIELD_PID, MetaModelDataSource.FIELD_DISPLAY_NAME);
treeView.setModels(valueMap);
foundView.setModels(valueMap);
if (!reload) {
//issue #499
Object previousId = Offline.get(LAST_SELECTED_MODEL_TAG);
if (previousId != null) {
foundView.setFilterModel(previousId);
} else if (!valueMap.isEmpty()) {
// init the view filter with the first modelId on first show
Object firstModel = valueMap.keySet().iterator().next();
foundView.setFilterModel(firstModel);
}
foundView.refresh();
}
}
});
}
private void fetchMods(final DigitalObject dobj) {
ModsCustomDataSource.getInstance().fetchDescription(dobj, new Callback<DescriptionMetadata, String>() {
@Override
public void onFailure(String reason) {
stop(reason);
}
@Override
public void onSuccess(DescriptionMetadata result) {
updatePage(result);
}
}, false);
}
private void prepareDescription(DigitalObject dobj, final DescriptionMetadata templateDesc) {
ModsCustomDataSource.getInstance().fetchDescription(dobj, new Callback<DescriptionMetadata, String>() {
@Override
public void onFailure(String reason) {
stop(reason);
}
@Override
public void onSuccess(DescriptionMetadata result) {
updatePage(result, templateDesc);
}
}, false);
}
public DeleteTask(DataSource ds, String batchId, String[] pids,
Callback<Record[], String> callback) {
this.ds = ds;
this.pids = pids;
this.callback = callback;
this.i18n = GWT.create(ClientMessages.class);
this.batchId = batchId;
this.deleted = new ArrayList<Record>(pids.length);
}
/**
* Finds digital object records.
* @param pids PIDs to find
* @param callback result set of found records; no paging
*/
public void find(final String[] pids, final Callback<ResultSet, Void> callback) {
Criteria criteria = new Criteria(
DigitalObjectResourceApi.SEARCH_TYPE_PARAM, SearchType.PIDS.toString());
if (pids != null && pids.length > 0) {
criteria.addCriteria(DigitalObjectResourceApi.SEARCH_PID_PARAM, pids);
} else {
throw new IllegalArgumentException("pids");
}
basicFetch(criteria, callback);
}
/**
* Finds parent object for a PID or a Batch Import.
*
* @param pid PID of digital object; {@code null} if looking for batch import
* @param batchId ID of batch import; {@code null} if looking for PID
* @param callback result set of found records
*/
public void findParent(String pid, String batchId, final Callback<ResultSet, Void> callback) {
Criteria criteria = new Criteria(
DigitalObjectResourceApi.SEARCH_TYPE_PARAM, SearchType.PARENT.toString());
if (pid != null && !pid.isEmpty()) {
criteria.addCriteria(DigitalObjectResourceApi.SEARCH_PID_PARAM, pid);
}
if (batchId != null && !batchId.isEmpty()) {
criteria.addCriteria(DigitalObjectResourceApi.SEARCH_BATCHID_PARAM, batchId);
}
basicFetch(criteria, callback);
}
private void openParent(final String childPid) {
if (childPid != null) {
SearchDataSource.getInstance().findParent(childPid, null, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
if (result.isEmpty()) {
SC.warn(i18n.DigitalObjectNavigateAction_NoParent_Msg());
} else {
Record parent = result.first();
DigitalObject parentObj = DigitalObject.createOrNull(parent);
if (parentObj != null) {
siblings = null;
DigitalObjectEditorPlace place = new DigitalObjectEditorPlace(
getLastEditorId(), parentObj);
place.setSelectChildPid(childPid);
places.goTo(place);
}
}
}
});
}
}
@Override
public void edit(DigitalObject digitalObject) {
this.digitalObject = digitalObject;
if (digitalObject == null) {
return ;
}
detachListFromEditor();
detachListResultSet();
String pid = digitalObject.getPid();
Criteria criteria = new Criteria(RelationDataSource.FIELD_ROOT, pid);
criteria.addCriteria(RelationDataSource.FIELD_PARENT, pid);
DigitalObjectCopyMetadataAction.resetSelection();
ResultSet resultSet = childrenListGrid.getResultSet();
if (resultSet != null) {
Boolean willFetchData = resultSet.willFetchData(criteria);
// init editor for cached record when DataArrivedHandler is not called
if (!willFetchData) {
showCopySelection(new Record[0]);
initOnEdit();
}
}
// use DataArrivedHandler instead of callback as it is not called
// for refresh in SmartGWT 3.0
childrenListGrid.fetchData(criteria);
MetaModelDataSource.getModels(false, new Callback<ResultSet, Void>() {
@Override
public void onFailure(Void reason) {
}
@Override
public void onSuccess(ResultSet result) {
Map<?,?> valueMap = result.getValueMap(
MetaModelDataSource.FIELD_PID, MetaModelDataSource.FIELD_DISPLAY_NAME);
childrenListGrid.getField(RelationDataSource.FIELD_MODEL).setValueMap(valueMap);
createAddMenu(result);
}
});
}