Search in sources :

Example 1 with HttpCallback

use of com.google.gerrit.client.rpc.HttpCallback in project gerrit by GerritCodeReview.

the class EditScreen method onLoad.

@Override
protected void onLoad() {
    super.onLoad();
    prefs = EditPreferences.create(Gerrit.getEditPreferences());
    CallbackGroup group1 = new CallbackGroup();
    final CallbackGroup group2 = new CallbackGroup();
    final CallbackGroup group3 = new CallbackGroup();
    CodeMirror.initLibrary(group1.add(new AsyncCallback<Void>() {

        final AsyncCallback<Void> themeCallback = group3.addEmpty();

        @Override
        public void onSuccess(Void result) {
            // Load theme after CM library to ensure theme can override CSS.
            ThemeLoader.loadTheme(prefs.theme(), themeCallback);
            group2.done();
            new AddonInjector().add(Addons.I.merge_bundled().getName()).inject(new AsyncCallback<Void>() {

                @Override
                public void onFailure(Throwable caught) {
                }

                @Override
                public void onSuccess(Void result) {
                    if (!prefs.showBase() || revision.get() > 0) {
                        group3.done();
                    }
                }
            });
        }

        @Override
        public void onFailure(Throwable caught) {
        }
    }));
    ChangeApi.detail(revision.getParentKey().get(), group1.add(new AsyncCallback<ChangeInfo>() {

        @Override
        public void onSuccess(ChangeInfo c) {
            project.setInnerText(c.project());
            SafeHtml.setInnerHTML(filePath, Header.formatPath(path));
        }

        @Override
        public void onFailure(Throwable caught) {
        }
    }));
    if (revision.get() == 0) {
        ChangeEditApi.getMeta(revision, path, group1.add(new AsyncCallback<EditFileInfo>() {

            @Override
            public void onSuccess(EditFileInfo editInfo) {
                editFileInfo = editInfo;
            }

            @Override
            public void onFailure(Throwable e) {
            }
        }));
        if (prefs.showBase()) {
            ChangeEditApi.get(revision, path, true, /* base */
            group1.addFinal(new HttpCallback<NativeString>() {

                @Override
                public void onSuccess(HttpResponse<NativeString> fc) {
                    baseContent = fc;
                    group3.done();
                }

                @Override
                public void onFailure(Throwable e) {
                }
            }));
        } else {
            group1.done();
        }
    } else {
        // TODO(davido): We probably want to create dedicated GET EditScreenMeta
        // REST endpoint. Abuse GET diff for now, as it retrieves links we need.
        DiffApi.diff(revision, path).webLinksOnly().get(group1.addFinal(new AsyncCallback<DiffInfo>() {

            @Override
            public void onSuccess(DiffInfo diffInfo) {
                diffLinks = diffInfo.webLinks();
            }

            @Override
            public void onFailure(Throwable e) {
            }
        }));
    }
    ChangeEditApi.get(revision, path, group2.add(new HttpCallback<NativeString>() {

        final AsyncCallback<Void> modeCallback = group3.addEmpty();

        @Override
        public void onSuccess(HttpResponse<NativeString> fc) {
            content = fc;
            if (revision.get() > 0) {
                baseContent = fc;
            }
            if (prefs.syntaxHighlighting()) {
                injectMode(fc.getContentType(), modeCallback);
            } else {
                modeCallback.onSuccess(null);
            }
        }

        @Override
        public void onFailure(Throwable e) {
            // "Not Found" means it's a new file.
            if (RestApi.isNotFound(e)) {
                content = null;
                modeCallback.onSuccess(null);
            } else {
                GerritCallback.showFailure(e);
            }
        }
    }));
    group3.addListener(new ScreenLoadCallback<Void>(this) {

        @Override
        protected void preDisplay(Void result) {
            initEditor();
            renderLinks(editFileInfo, diffLinks);
            editFileInfo = null;
            diffLinks = null;
            showBase.setValue(prefs.showBase(), true);
            cmBase.refresh();
        }
    });
}
Also used : ChangeInfo(com.google.gerrit.client.info.ChangeInfo) AsyncCallback(com.google.gwt.user.client.rpc.AsyncCallback) HttpCallback(com.google.gerrit.client.rpc.HttpCallback) CallbackGroup(com.google.gerrit.client.rpc.CallbackGroup) HttpResponse(com.google.gerrit.client.rpc.HttpResponse) AddonInjector(net.codemirror.addon.AddonInjector) DiffInfo(com.google.gerrit.client.diff.DiffInfo)

Aggregations

DiffInfo (com.google.gerrit.client.diff.DiffInfo)1 ChangeInfo (com.google.gerrit.client.info.ChangeInfo)1 CallbackGroup (com.google.gerrit.client.rpc.CallbackGroup)1 HttpCallback (com.google.gerrit.client.rpc.HttpCallback)1 HttpResponse (com.google.gerrit.client.rpc.HttpResponse)1 AsyncCallback (com.google.gwt.user.client.rpc.AsyncCallback)1 AddonInjector (net.codemirror.addon.AddonInjector)1