com.google.appinventor.client.wizards.UrlImportWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.google.appinventor.client.wizards.UrlImportWizard.java

Source

// -*- mode: java; c-basic-offset: 2; -*-
// Copyright 2016-2017 MIT, All rights reserved
// Released under the Apache License, Version 2.0
// http://www.apache.org/licenses/LICENSE-2.0

package com.google.appinventor.client.wizards;

import static com.google.appinventor.client.Ode.MESSAGES;

import java.util.HashSet;
import java.util.Set;

import com.google.appinventor.client.Ode;
import com.google.appinventor.client.OdeAsyncCallback;
import com.google.appinventor.client.explorer.project.Project;
import com.google.appinventor.shared.rpc.project.FolderNode;
import com.google.appinventor.shared.rpc.project.ProjectNode;
import com.google.appinventor.shared.rpc.project.TextFile;
import com.google.appinventor.shared.rpc.project.youngandroid.YoungAndroidAssetNode;
import com.google.appinventor.shared.util.Base64Util;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class UrlImportWizard extends Wizard {
    private final Set<OnImportListener> listeners = new HashSet<OnImportListener>();

    public interface OnImportListener {
        void onSuccess(byte[] content);
    }

    public UrlImportWizard(final FolderNode assetsFolder, OnImportListener listener) {
        super(MESSAGES.urlImportWizardCaption(), true, false);

        listeners.add(listener);

        final Grid urlGrid = createUrlGrid();
        VerticalPanel panel = new VerticalPanel();
        panel.add(urlGrid);

        addPage(panel);

        getConfirmButton().setText("Import");

        setPagePanelHeight(150);
        setPixelSize(200, 150);
        setStylePrimaryName("ode-DialogBox");

        initFinishCommand(new Command() {
            @Override
            public void execute() {
                Ode ode = Ode.getInstance();
                final long projectId = ode.getCurrentYoungAndroidProjectId();
                final Project project = ode.getProjectManager().getProject(projectId);

                TextBox urlTextBox = (TextBox) urlGrid.getWidget(1, 0);
                String url = urlTextBox.getText();
                if (url.trim().isEmpty()) {
                    Window.alert(MESSAGES.noUrlError());
                    return;
                }

                ode.getProjectService().importMedia(ode.getSessionId(), projectId, url, true,
                        new OdeAsyncCallback<TextFile>() {
                            @Override
                            public void onSuccess(TextFile file) {
                                ProjectNode node = new YoungAndroidAssetNode(assetsFolder.getFileId(),
                                        file.getFileName().replaceFirst("assets/", ""));
                                project.addNode(assetsFolder, node);
                                byte[] content = Base64Util.decodeLines(file.getContent());
                                for (OnImportListener l : listeners) {
                                    l.onSuccess(content);
                                }
                                listeners.clear();
                            }
                        });
            }
        });
    }

    public void addImportListener(OnImportListener listener) {
        listeners.add(listener);
    }

    private static Grid createUrlGrid() {
        TextBox urlTextBox = new TextBox();
        urlTextBox.setWidth("100%");
        Grid grid = new Grid(2, 1);
        grid.setWidget(0, 0, new Label("Url:"));
        grid.setWidget(1, 0, urlTextBox);
        return grid;
    }
}