Example usage for org.apache.wicket.ajax AbstractAjaxTimerBehavior AbstractAjaxTimerBehavior

List of usage examples for org.apache.wicket.ajax AbstractAjaxTimerBehavior AbstractAjaxTimerBehavior

Introduction

In this page you can find the example usage for org.apache.wicket.ajax AbstractAjaxTimerBehavior AbstractAjaxTimerBehavior.

Prototype

public AbstractAjaxTimerBehavior(final Duration updateInterval) 

Source Link

Document

Construct.

Usage

From source file:org.geoserver.backuprestore.web.BackupRestoreDataPage.java

License:Open Source License

/**
 * @param form/* www . ja  v  a  2s.  co  m*/
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
private void populateRestoreForm(Form form) {
    form.add(new CheckBox("restoreOptDryRun", new Model<Boolean>(false)));
    form.add(new CheckBox("restoreOptBestEffort", new Model<Boolean>(false)));
    form.add(statusLabel = new Label("status", new Model()).setOutputMarkupId(true));
    form.add(new AjaxSubmitLink("newRestoreStart", form) {
        @Override
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            tag.setName("a");
            tag.addBehavior(AttributeModifier.replace("class", "disabled"));
        }

        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.add(feedbackPanel);
        }

        protected void onSubmit(AjaxRequestTarget target, final Form<?> form) {

            //update status to indicate we are working
            statusLabel.add(AttributeModifier.replace("class", "working-link"));
            statusLabel.setDefaultModelObject("Working");
            target.add(statusLabel);

            //enable cancel and disable this
            Component cancel = form.get("cancel");
            cancel.setEnabled(true);
            target.add(cancel);

            setEnabled(false);
            target.add(this);

            final AjaxSubmitLink self = this;

            final Long jobid;
            try {
                jobid = launchRestoreExecution(form);
            } catch (Exception e) {
                error(e);
                LOGGER.log(Level.WARNING, "Error starting a new Restore", e);
                return;
            } finally {
                //update the button back to original state
                resetButtons(form, target, "newRestoreStart");

                target.add(feedbackPanel);
            }

            cancel.setDefaultModelObject(jobid);
            this.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(100)) {
                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    Backup backupFacade = BackupRestoreWebUtils.backupFacade();
                    RestoreExecutionAdapter exec = backupFacade.getRestoreExecutions().get(jobid);

                    if (!exec.isRunning()) {
                        try {
                            if (exec.getAllFailureExceptions() != null
                                    && !exec.getAllFailureExceptions().isEmpty()) {
                                getSession().error(exec.getAllFailureExceptions().get(0));
                                setResponsePage(BackupRestoreDataPage.class);
                            } else if (exec.isStopping()) {
                                //do nothing
                            } else {
                                PageParameters pp = new PageParameters();
                                pp.add("id", exec.getId());
                                pp.add("clazz", RestoreExecutionAdapter.class.getSimpleName());

                                setResponsePage(BackupRestorePage.class, pp);
                            }
                        } catch (Exception e) {
                            error(e);
                            LOGGER.log(Level.WARNING, "", e);
                        } finally {
                            stop(null);

                            //update the button back to original state
                            resetButtons(form, target, "newRestoreStart");

                            target.add(feedbackPanel);
                        }
                        return;
                    }

                    String msg = exec != null ? exec.getStatus().toString() : "Working";

                    statusLabel.setDefaultModelObject(msg);
                    target.add(statusLabel);
                };

                @Override
                public boolean canCallListenerInterface(Component component, Method method) {
                    if (self.equals(component)
                            && method.getDeclaringClass()
                                    .equals(org.apache.wicket.behavior.IBehaviorListener.class)
                            && method.getName().equals("onRequest")) {
                        return true;
                    }
                    return super.canCallListenerInterface(component, method);
                }
            });
        }

        private Long launchRestoreExecution(Form<?> form) throws Exception {
            ResourceFilePanel panel = (ResourceFilePanel) newBackupRestorePanel.get("backupResource");
            Resource archiveFile = null;
            try {
                archiveFile = panel.getResource();
            } catch (NullPointerException e) {
                throw new Exception("Restore Archive File is Mandatory!");
            }

            if (archiveFile == null || !Resources.exists(archiveFile) || archiveFile.getType() == Type.DIRECTORY
                    || FilenameUtils.getExtension(archiveFile.name()).isEmpty()) {
                throw new Exception(
                        "Restore Archive File is Mandatory, must exists and should not be a Directory or URI.");
            }

            Filter filter = null;
            WorkspaceInfo ws = (WorkspaceInfo) workspace.getObject();
            if (ws != null) {
                filter = ECQL.toFilter("name = '" + ws.getName() + "'");
            }

            Hints hints = new Hints(new HashMap(2));

            Boolean restoreOptDryRun = ((CheckBox) form.get("restoreOptDryRun")).getModelObject();

            if (restoreOptDryRun) {
                hints.add(new Hints(new Hints.OptionKey(Backup.PARAM_DRY_RUN_MODE), Backup.PARAM_DRY_RUN_MODE));
            }

            Boolean restoreOptBestEffort = ((CheckBox) form.get("restoreOptBestEffort")).getModelObject();

            if (restoreOptBestEffort) {
                hints.add(new Hints(new Hints.OptionKey(Backup.PARAM_BEST_EFFORT_MODE),
                        Backup.PARAM_BEST_EFFORT_MODE));
            }

            Backup backupFacade = BackupRestoreWebUtils.backupFacade();

            return backupFacade.runRestoreAsync(archiveFile, filter, hints).getId();
        }
    });

    form.add(new AjaxLink<Long>("cancel", new Model<Long>()) {
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            tag.setName("a");
            tag.addBehavior(AttributeModifier.replace("class", "disabled"));
        };

        @Override
        public void onClick(AjaxRequestTarget target) {
            Long jobid = getModelObject();

            if (jobid != null) {
                try {
                    BackupRestoreWebUtils.backupFacade().stopExecution(jobid);
                    setResponsePage(BackupRestoreDataPage.class);
                } catch (NoSuchJobExecutionException | JobExecutionNotRunningException e) {
                    LOGGER.log(Level.WARNING, "", e);
                }
            }

            setEnabled(false);

            target.add(this);
        }
    }.setOutputMarkupId(true).setEnabled(false));

    restoreExecutionsTable = new BackupRestoreExecutionsTable("restores",
            new BackupRestoreExecutionsProvider(true, RestoreExecutionAdapter.class) {
                @Override
                protected List<org.geoserver.web.wicket.GeoServerDataProvider.Property<AbstractExecutionAdapter>> getProperties() {
                    return Arrays.asList(ID, STATE, STARTED, PROGRESS, ARCHIVEFILE, OPTIONS);
                }
            }, true, RestoreExecutionAdapter.class) {
        protected void onSelectionUpdate(AjaxRequestTarget target) {
        };
    };
    restoreExecutionsTable.setOutputMarkupId(true);
    restoreExecutionsTable.setFilterable(false);
    restoreExecutionsTable.setSortable(false);
    form.add(restoreExecutionsTable);
}

From source file:org.geoserver.importer.web.ImportDataPage.java

License:Open Source License

public ImportDataPage(PageParameters params) {
    Form form = new Form("form");
    add(form);//from   w  w  w.j a  v a 2 s .c o m

    sourceList = new AjaxRadioPanel<Source>("sources", Arrays.asList(Source.values()), Source.SPATIAL_FILES) {
        @Override
        protected void onRadioSelect(AjaxRequestTarget target, Source newSelection) {
            updateSourcePanel(newSelection, target);
        }

        @Override
        protected AjaxRadio<Source> newRadioCell(RadioGroup<Source> group, ListItem<Source> item) {
            AjaxRadio<Source> radio = super.newRadioCell(group, item);
            if (!item.getModelObject().isAvailable()) {
                radio.setEnabled(false);
            }
            return radio;
        }

        @Override
        protected Component createLabel(String id, ListItem<Source> item) {
            return new SourceLabelPanel(id, item.getModelObject());
        }
    };

    form.add(sourceList);

    sourcePanel = new WebMarkupContainer("panel");
    sourcePanel.setOutputMarkupId(true);
    form.add(sourcePanel);

    Catalog catalog = GeoServerApplication.get().getCatalog();

    // workspace chooser
    workspace = new WorkspaceDetachableModel(catalog.getDefaultWorkspace());
    workspaceChoice = new DropDownChoice("workspace", workspace, new WorkspacesModel(),
            new WorkspaceChoiceRenderer());
    workspaceChoice.setOutputMarkupId(true);
    workspaceChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            updateTargetStore(target);
        }
    });
    workspaceChoice.setNullValid(true);
    form.add(workspaceChoice);

    WebMarkupContainer workspaceNameContainer = new WebMarkupContainer("workspaceNameContainer");
    workspaceNameContainer.setOutputMarkupId(true);
    form.add(workspaceNameContainer);

    workspaceNameTextField = new TextField("workspaceName", new Model());
    workspaceNameTextField.setOutputMarkupId(true);
    boolean defaultWorkspace = catalog.getDefaultWorkspace() != null;
    workspaceNameTextField.setVisible(!defaultWorkspace);
    workspaceNameTextField.setRequired(!defaultWorkspace);
    workspaceNameContainer.add(workspaceNameTextField);

    //store chooser
    WorkspaceInfo ws = (WorkspaceInfo) workspace.getObject();
    store = new StoreModel(ws != null ? catalog.getDefaultDataStore(ws) : null);
    storeChoice = new DropDownChoice("store", store, new EnabledStoresModel(workspace),
            new StoreChoiceRenderer()) {
        protected String getNullValidKey() {
            return ImportDataPage.class.getSimpleName() + "." + super.getNullValidKey();
        };
    };
    storeChoice.setOutputMarkupId(true);

    storeChoice.setNullValid(true);
    form.add(storeChoice);

    form.add(statusLabel = new Label("status", new Model()).setOutputMarkupId(true));
    form.add(new AjaxSubmitLink("next", form) {
        @Override
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            tag.setName("a");
            tag.addBehavior(new SimpleAttributeModifier("class", "disabled"));
        }

        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.addComponent(feedbackPanel);
        }

        protected void onSubmit(AjaxRequestTarget target, final Form<?> form) {

            //update status to indicate we are working
            statusLabel.add(new SimpleAttributeModifier("class", "working-link"));
            statusLabel.setDefaultModelObject("Working");
            target.addComponent(statusLabel);

            //enable cancel and disable this
            Component cancel = form.get("cancel");
            cancel.setEnabled(true);
            target.addComponent(cancel);

            setEnabled(false);
            target.addComponent(this);

            final AjaxSubmitLink self = this;

            final Long jobid;
            try {
                jobid = createContext();
            } catch (Exception e) {
                error(e);
                LOGGER.log(Level.WARNING, "Error creating import", e);
                resetButtons(form, target);
                return;
            }

            cancel.setDefaultModelObject(jobid);
            this.add(new AbstractAjaxTimerBehavior(Duration.seconds(3)) {
                protected void onTimer(AjaxRequestTarget target) {
                    Importer importer = ImporterWebUtils.importer();
                    Task<ImportContext> t = importer.getTask(jobid);

                    if (t.isDone()) {
                        try {
                            if (t.getError() != null) {
                                error(t.getError());
                            } else if (t.isCancelled()) {
                                //do nothing
                            } else {
                                ImportContext imp = t.get();

                                //check the import for actual things to do
                                boolean proceed = !imp.getTasks().isEmpty();

                                if (proceed) {
                                    imp.setArchive(false);
                                    importer.changed(imp);

                                    PageParameters pp = new PageParameters();
                                    pp.put("id", imp.getId());

                                    setResponsePage(ImportPage.class, pp);
                                } else {
                                    info("No data to import was found");
                                    importer.delete(imp);
                                }
                            }
                        } catch (Exception e) {
                            error(e);
                            LOGGER.log(Level.WARNING, "", e);
                        } finally {
                            stop();

                            //update the button back to original state
                            resetButtons(form, target);

                            target.addComponent(feedbackPanel);
                        }
                        return;
                    }

                    ProgressMonitor m = t.getMonitor();
                    String msg = m.getTask() != null ? m.getTask().toString() : "Working";

                    statusLabel.setDefaultModelObject(msg);
                    target.addComponent(statusLabel);
                };
            });
        }
    });

    form.add(new AjaxLink<Long>("cancel", new Model<Long>()) {
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            ImporterWebUtils.disableLink(tag);
        };

        @Override
        public void onClick(AjaxRequestTarget target) {
            Importer importer = ImporterWebUtils.importer();
            Long jobid = getModelObject();
            Task<ImportContext> task = importer.getTask(jobid);
            if (task != null && !task.isDone() && !task.isCancelled()) {
                task.getMonitor().setCanceled(true);
                task.cancel(false);
                try {
                    task.get();
                } catch (Exception e) {
                }
            }

            setEnabled(false);

            Component next = getParent().get("next");
            next.setEnabled(true);

            target.addComponent(this);
            target.addComponent(next);
        }
    }.setOutputMarkupId(true).setEnabled(false));

    importTable = new ImportContextTable("imports", new ImportContextProvider(true) {
        @Override
        protected List<org.geoserver.web.wicket.GeoServerDataProvider.Property<ImportContext>> getProperties() {
            return Arrays.asList(ID, STATE, UPDATED);
        }
    }, true) {
        protected void onSelectionUpdate(AjaxRequestTarget target) {
            removeImportLink.setEnabled(!getSelection().isEmpty());
            target.addComponent(removeImportLink);
        };
    };
    importTable.setOutputMarkupId(true);
    importTable.setFilterable(false);
    importTable.setSortable(false);
    form.add(importTable);

    form.add(removeImportLink = new AjaxLink("remove") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            Importer importer = ImporterWebUtils.importer();
            for (ImportContext c : importTable.getSelection()) {
                try {
                    importer.delete(c);
                } catch (IOException e) {
                    LOGGER.log(Level.WARNING, "Error deleting context", c);
                }
            }
            importTable.clearSelection();
            target.addComponent(importTable);
        }
    });
    removeImportLink.setOutputMarkupId(true).setEnabled(false);

    AjaxLink jobLink = new AjaxLink("jobs") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            dialog.showOkCancel(target, new DialogDelegate() {
                @Override
                protected boolean onSubmit(AjaxRequestTarget target, Component contents) {
                    return true;
                }

                @Override
                protected Component getContents(String id) {
                    return new JobQueuePanel(id);
                }
            });
        }
    };
    jobLink.setVisible(ImporterWebUtils.isDevMode());
    form.add(jobLink);

    add(dialog = new GeoServerDialog("dialog"));
    dialog.setInitialWidth(600);
    dialog.setInitialHeight(400);
    dialog.setMinimalHeight(150);

    updateSourcePanel(Source.SPATIAL_FILES, null);
    updateTargetStore(null);
}

From source file:org.geoserver.importer.web.ImportPage.java

License:Open Source License

void initComponents(final IModel<ImportContext> model) {
    add(new Label("id", new PropertyModel(model, "id")));

    ImportContextProvider provider = new ImportContextProvider() {
        @Override/* w  ww. j av a  2  s. c om*/
        protected List<Property<ImportContext>> getProperties() {
            return Arrays.asList(STATE, CREATED, UPDATED);
        }

        @Override
        protected List<ImportContext> getItems() {
            return Collections.singletonList(model.getObject());
        }
    };

    add(new AjaxLink("raw") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            dialog.setInitialHeight(500);
            dialog.setInitialWidth(700);
            dialog.showOkCancel(target, new DialogDelegate() {
                @Override
                protected Component getContents(String id) {
                    XStreamPersister xp = importer().createXStreamPersisterXML();
                    ByteArrayOutputStream bout = new ByteArrayOutputStream();
                    try {
                        xp.save(model.getObject(), bout);
                    } catch (IOException e) {
                        bout = new ByteArrayOutputStream();
                        LOGGER.log(Level.FINER, e.getMessage(), e);
                        e.printStackTrace(new PrintWriter(bout));
                    }

                    return new TextAreaPanel(id, new Model(new String(bout.toByteArray())));
                }

                @Override
                protected boolean onSubmit(AjaxRequestTarget target, Component contents) {
                    return true;
                }
            });
        }
    }.setVisible(ImporterWebUtils.isDevMode()));

    final ImportContextTable headerTable = new ImportContextTable("header", provider);

    headerTable.setOutputMarkupId(true);
    headerTable.setFilterable(false);
    headerTable.setPageable(false);
    add(headerTable);

    final ImportContext imp = model.getObject();
    boolean selectable = imp.getState() != ImportContext.State.COMPLETE;
    final ImportTaskTable taskTable = new ImportTaskTable("tasks", new ImportTaskProvider(model), selectable) {
        @Override
        protected void onSelectionUpdate(AjaxRequestTarget target) {
            updateImportLink((AjaxLink) ImportPage.this.get("import"), this, target);
        }
    }.setFeedbackPanel(feedbackPanel);
    taskTable.setOutputMarkupId(true);
    taskTable.setFilterable(false);
    add(taskTable);

    final AjaxLink<Long> importLink = new AjaxLink<Long>("import", new Model<Long>()) {
        @Override
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            ImporterWebUtils.disableLink(tag);
        }

        @Override
        public void onClick(AjaxRequestTarget target) {
            ImportContext imp = model.getObject();

            BasicImportFilter filter = new BasicImportFilter();
            for (ImportTask t : taskTable.getSelection()) {
                filter.add(t);
            }

            //set running flag and update cancel link
            running.set(true);
            target.addComponent(cancelLink(this));

            final Long jobid = importer().runAsync(imp, filter, false);
            setDefaultModelObject(jobid);

            final AjaxLink self = this;

            // create a timer to update the table and reload the page when
            // necessary
            taskTable.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(500)) {
                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    Task<ImportContext> job = importer().getTask(jobid);
                    if (job == null || job.isDone()) {
                        // remove the timer
                        stop();

                        self.setEnabled(true);
                        target.addComponent(self);

                        running.set(false);
                        target.addComponent(cancelLink(self));

                        /*ImportContext imp = model.getObject();
                        if (imp.getState() == ImportContext.State.COMPLETE) {
                        // enable cancel, which will not be "done"
                        setLinkEnabled(cancelLink(self), true, target);
                        } else {
                        // disable cancel, import is not longer running, but
                        // also
                        // not complete
                        setLinkEnabled(cancelLink(self), false, target);
                        }*/
                    }

                    // update the table
                    target.addComponent(taskTable);
                    target.addComponent(headerTable);
                }
            });
            target.addComponent(taskTable);

            // disable import button
            setLinkEnabled(this, false, target);
            // enable cancel button
            //setLinkEnabled(cancelLink(this), true, target);
        }
    };
    importLink.setOutputMarkupId(true);
    importLink.setEnabled(doSelectReady(imp, taskTable, null));
    add(importLink);

    final AjaxLink cancelLink = new AjaxLink("cancel") {
        @Override
        protected void disableLink(ComponentTag tag) {
            super.disableLink(tag);
            ImporterWebUtils.disableLink(tag);
        }

        @Override
        public void onClick(AjaxRequestTarget target) {
            ImportContext imp = model.getObject();
            if (!running.get()) {
                //if (imp.getState() == ImportContext.State.COMPLETE) {
                setResponsePage(ImportDataPage.class);
                return;
            }

            Long jobid = importLink.getModelObject();
            if (jobid == null) {
                return;
            }

            Task<ImportContext> task = importer().getTask(jobid);
            if (task == null || task.isDone()) {
                return;
            }

            task.getMonitor().setCanceled(true);
            task.cancel(false);
            try {
                task.get();
            } catch (Exception e) {
            }

            // enable import button
            setLinkEnabled(importLink, true, target);
            // disable cancel button
            //setLinkEnabled(cancelLink(importLink), false, target);
        }

    };
    //cancelLink.setEnabled(imp.getState() == ImportContext.State.COMPLETE);
    cancelLink.add(new Label("text", new CancelTitleModel()));
    add(cancelLink);

    WebMarkupContainer selectPanel = new WebMarkupContainer("select");
    selectPanel.add(new AjaxLink<ImportContext>("select-all", model) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            taskTable.selectAll();
            target.addComponent(taskTable);
            updateImportLink(importLink, taskTable, target);
        }
    });
    selectPanel.add(new AjaxLink<ImportContext>("select-none", model) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            taskTable.clearSelection();
            target.addComponent(taskTable);
            updateImportLink(importLink, taskTable, target);
        }
    });
    selectPanel.add(new AjaxLink<ImportContext>("select-ready", model) {
        @Override
        public void onClick(AjaxRequestTarget target) {
            doSelectReady(getModelObject(), taskTable, target);
            target.addComponent(taskTable);
            updateImportLink(importLink, taskTable, target);
        }
    });
    add(selectPanel);

    add(new Icon("icon", new DataIconModel(imp.getData())));
    add(new Label("title", new DataTitleModel(imp))
            .add(new AttributeModifier("title", new DataTitleModel(imp, false))));

    add(dialog = new GeoServerDialog("dialog"));
}

From source file:org.geoserver.web.importer.ImportProgressPage.java

License:Open Source License

public ImportProgressPage(String importerKey) {
    this.importerId = importerKey;

    FeatureTypeImporter importer = getImporter();

    // construction
    add(new Label("project", importer.getProject()));
    add(info = new WebMarkupContainer("info"));
    info.setOutputMarkupId(true);//from   www .  j  ava  2 s  .c om
    info.add(bar = new Label("bar", "0"));
    widthModel = new Model("width: 5%;");
    bar.add(new AttributeModifier("style", widthModel));
    info.add(percentage = new Label("percentage", "5"));
    info.add(currentFile = new Label("currentFile", ""));
    info.add(new AjaxLink("cancel") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            FeatureTypeImporter importer = getImporter();
            importer.cancel();

            setResponsePage(new ImportSummaryPage(importer.getSummary()));
        }

    });

    // comment this out if you need to hack on the HTML of a live page
    info.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(500)) {

        @Override
        protected void onTimer(AjaxRequestTarget target) {
            FeatureTypeImporter importer = getImporter();

            ImportSummary summary = importer.getSummary();
            if (summary != null) {
                if (summary.isCompleted()) {
                    setResponsePage(new ImportSummaryPage(summary));
                }

                // we have the percentage go between 5 and 95. This way the user sees something is in progress
                // at the beginning and does not have to wonder why we keep at 100 for a few seconds (happens
                // if the last layer requires a costly SRS code lookup)
                long perc = 5
                        + Math.round(100.0 * (summary.getProcessedLayers() + 1) / summary.getTotalLayers());
                if (perc > 90) {
                    perc = 90;
                }
                widthModel.setObject("width: " + perc + "%;");
                percentage.setDefaultModelObject(perc);
                currentFile.setDefaultModelObject(summary.getCurrentLayer());

                target.addComponent(info);
            }
        }

    });
}

From source file:org.headsupdev.agile.framework.Tasks.java

License:Open Source License

public void layout() {
    super.layout();
    add(CSSPackageResource.getHeaderContribution(getClass(), "tasks.css"));

    final WebMarkupContainer taskLists = new WebMarkupContainer("taskLists");
    ListView<Task> projectTasks = new ListView<Task>("projecttasks",
            new AbstractReadOnlyModel<List<? extends Task>>() {
                public List<? extends Task> getObject() {
                    return getManager().getTasks();
                }/*from  w w w .  ja  v  a  2  s. co m*/
            }) {
        protected void populateItem(ListItem<Task> listItem) {
            Task task = listItem.getModelObject();
            if (task == null || task.getProject() == null || !task.getProject().equals(getProject())) {
                listItem.setVisible(false);
                return;
            }

            setVisible(true);
            listItem.add(new Label("time", new FormattedDurationModel(task.getStartTime(), new Date())));
            listItem.add(new Label("title", task.getTitle()));
            listItem.add(new Label("description", task.getDescription()));
        }
    };
    taskLists.add(projectTasks);

    ListView<Task> otherTasks = new ListView<Task>("othertasks",
            new AbstractReadOnlyModel<List<? extends Task>>() {
                public List<? extends Task> getObject() {
                    return getManager().getTasks();
                }
            }) {
        protected void populateItem(ListItem<Task> listItem) {
            Task task = listItem.getModelObject();
            if (task == null || (task.getProject() != null && task.getProject().equals(getProject()))) {
                listItem.setVisible(false);
                return;
            }

            setVisible(true);
            listItem.add(new Label("time", new FormattedDurationModel(task.getStartTime(), new Date())));
            listItem.add(new Label("title", task.getTitle()));

            if (task.getProject() != null) {
                ExternalLink projectLink = new ExternalLink("project-link",
                        "/" + task.getProject().getId() + "/tasks/");
                projectLink.add(new Label("project", task.getProject().getAlias()));
                listItem.add(projectLink);
            } else {
                listItem.add(new WebMarkupContainer("project-link").setVisible(false));
            }

            listItem.add(new Label("description", task.getDescription()));
        }
    };
    taskLists.add(otherTasks);

    taskLists.setOutputMarkupId(true);
    taskLists.add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
        protected void onTimer(AjaxRequestTarget target) {
            target.addComponent(taskLists);
        }
    });

    add(taskLists);
}

From source file:org.headsupdev.agile.web.HeadsUpPage.java

License:Open Source License

public void layout() {
    WebManager.getInstance().checkPermissions(this);

    User user = WebLoginManager.getInstance()
            .getLoggedInUser(((WebRequest) getRequest()).getHttpServletRequest());
    if (user == null) {
        user = HeadsUpSession.ANONYMOUS_USER;
    }//from w w  w  .j a va2s  .c o m

    /* security check */
    if (getRequiredPermission() != null) {
        requirePermission(getRequiredPermission());
    }

    if (!isErrorPage()) {
        getSession().setProject(getProject());
    }

    for (MenuLink link : application.getLinks(getProject())) {
        addLink(link);
    }

    add(CSSPackageResource.getHeaderContribution(HeadsUpPage.class, "agile.css"));
    add(CSSPackageResource.getHeaderContribution(HeadsUpPage.class, "mobile.css",
            "handheld, only screen and (max-width: 767px)"));

    add(new WebMarkupContainer("headerlogo").add(new AttributeModifier("src", true,
            new PropertyModel<String>(WebManager.getInstance(), "headerLogo"))));

    WebMarkupContainer mainmenu = new WebMarkupContainer("mainmenu-container");
    mainmenu.setMarkupId("mainmenu");
    mainmenu.add(new ListView<Application>("mainmenu",
            ApplicationPageMapper.get().getApplications(getSession().getUser())) {
        protected void populateItem(ListItem<Application> listItem) {
            Project project = getProject();
            final Application app = listItem.getModelObject();
            if ("home".equals(app.getApplicationId())) {
                listItem.setVisible(false);
                return;
            }

            String link = "/" + project.getId() + "/" + app.getApplicationId() + "/";
            if (ApplicationPageMapper.isHomeApp(app)) {
                if (project.equals(StoredProject.getDefault())) {
                    link = "/";
                } else {
                    link = "/" + project.getId() + "/show/";
                }
            }
            ExternalLink applink = new ExternalLink("mainmenu-link", link);
            applink.add(new Label("mainmenu-label", app.getName()));
            listItem.add(applink);

            listItem.add(new AttributeModifier("class", new Model<String>() {
                public String getObject() {
                    if (app.equals(getHeadsUpApplication())) {
                        return "mainmenu-item-selected";
                    } else {
                        return "mainmenu-item";
                    }
                }
            }));
        }
    });

    addAnimatedSelect("mainlink", getHeadsUpApplication().getName() + "   \u25bc", mainmenu);
    add(mainmenu);

    submenu = new WebMarkupContainer("submenu-container");
    submenu.setMarkupId("submenu");
    addAnimatedSelect("sublink", "\u2699", submenu);
    add(submenu);

    submenu.add(new ListView<Link>("submenu", links) {
        protected void populateItem(ListItem<Link> listItem) {
            Link link = listItem.getModelObject();
            listItem.add(link);

            listItem.add(new AttributeModifier("class", new Model<String>() {
                public String getObject() {
                    if (getClass().equals( /* TODO find class of link */ null)) {
                        return "submenu-item-selected";
                    } else {
                        return "submenu-item";
                    }
                }
            }));
        }
    });

    WebMarkupContainer projectmenu = createProjectMenu(user);
    add(projectmenu);

    if (!getClass().getName().endsWith("Login") && !getClass().getName().endsWith("Logout")
            && !getClass().getName().endsWith("Error404Page")) {
        getSession().setPreviousPageClass(getClass());
        getSession().setPreviousPageParameters(getPageParameters());
    }
    WebMarkupContainer userpanel = new WebMarkupContainer("userpanel");
    userpanel.setOutputMarkupId(true);
    userpanel.setMarkupId("userpanel");
    if (!PrivateConfiguration.isInstalled() || user.equals(HeadsUpSession.ANONYMOUS_USER)) {
        userpanel.add(new Label("username", "you are not logged in"));
        userpanel.add(new WebMarkupContainer("account").setVisible(false));

        Link login = new AjaxFallbackLink("login-link") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                if (target == null) {
                    setResponsePage(getPageClass("login"), getProjectPageParameters());
                } else {
                    target.appendJavascript("document.getElementById('userpanelbutton').childNodes[1].click()");
                    showDialog(new LoginDialog(DIALOG_PANEL_ID, true, HeadsUpPage.this), target);
                }
            }
        };
        login.add(new Label("login-label", "login"));
        userpanel.add(login);
    } else {
        userpanel.add(new Label("username", "logged in as " + user.getFullnameOrUsername()));
        Class<? extends Page> userLink = getPageClass("account");
        if (userLink != null) {
            userpanel.add(new BookmarkablePageLink("account", userLink, getProjectPageParameters()));
        } else {
            userpanel.add(new WebMarkupContainer("account").setVisible(false));
        }

        Link login = new AjaxFallbackLink("login-link") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                if (target == null) {
                    setResponsePage(getPageClass("logout"), getProjectPageParameters());
                } else {
                    target.appendJavascript("document.getElementById('userpanelbutton').childNodes[1].click()");
                    showDialog(new LogoutDialog(DIALOG_PANEL_ID, true), target);
                }
            }
        };
        login.add(new Label("login-label", "logout"));
        userpanel.add(login);
    }

    if (ApplicationPageMapper.get().getSearchApp() != null) {
        userpanel.add(new BookmarkablePageLink("search", getPageClass("search"), getProjectPageParameters()));
    } else {
        userpanel.add(new WebMarkupContainer("search").setVisible(false));
    }
    if (ApplicationPageMapper.get().getSupportApp() != null) {
        userpanel.add(new BookmarkablePageLink("support",
                ApplicationPageMapper.get().getSupportApp().getHomePage(), getProjectPageParameters()));
    } else {
        userpanel.add(new WebMarkupContainer("support").setVisible(false));
    }

    WebMarkupContainer userpanelButton = new WebMarkupContainer("userpanelbutton");
    userpanelButton.add(new Label("label", "\u25bc"));
    add(userpanelButton);

    Animator animator = new Animator();
    animator.addCssStyleSubject(new MarkupIdModel(userpanel), "up", "down");
    animator.attachTo(userpanelButton, "onclick", Animator.Action.toggle());

    boolean showUserTools = getSession().getUser() != null
            && !getSession().getUser().equals(HeadsUpSession.ANONYMOUS_USER);
    if (showUserTools) {
        int userIssues = AccountSummaryPanel.getIssuesAssignedTo(getSession().getUser()).size();

        WebMarkupContainer userDashbutton = new WebMarkupContainer("userdashbutton");
        userpanel.add(userDashbutton.setVisible(userIssues > 0));

        Label totals = new Label("totals", String.valueOf(userIssues));
        totals.add(new AttributeModifier("class", true, new Model<String>() {
            @Override
            public String getObject() {
                if (AccountSummaryPanel.userHasOverdueMilestones(getSession().getUser())) {
                    return "totals overdue";
                }

                if (AccountSummaryPanel.userHasDueSoonMilestones(getSession().getUser())) {
                    return "totals duesoon";
                }

                return "totals";
            }
        }));
        userDashbutton.add(totals);

        UserDashboard dash = new UserDashboard("userdashboard", this);
        dash.setOutputMarkupId(true);
        dash.setMarkupId("userdashboard");
        add(dash);
        WebMarkupContainer dashBack = new WebMarkupContainer("userdashboardbackground");
        dashBack.setOutputMarkupId(true);
        dashBack.setMarkupId("userdashboardbackground");
        add(dashBack);

        animator = new Animator();
        animator.withEaseInOutTransition();
        animator.addCssStyleSubject(new MarkupIdModel(dash), "up", "down");
        animator.addCssStyleSubject(new MarkupIdModel(dashBack), "up", "down");
        animator.addSubject(new IAnimatorSubject() {
            public String getJavaScript() {
                return "function showBackground() {"
                        + "   var background = Wicket.$('userdashboardbackground');"
                        + "   if (userdashbuttonAnimator.state > 0) {"
                        + "       background.style.display=\"block\";"
                        + "       document.body.style.overflow=\"hidden\";" + "   } else {"
                        + "       background.style.display=\"none\";"
                        + "       document.body.style.overflow=\"auto\";" + "   }" + "}";
            }
        });
        animator.attachTo(userDashbutton, "onclick", Animator.Action.toggle());
    } else {
        WebMarkupContainer userDashbutton = new WebMarkupContainer("userdashbutton");
        userpanel.add(userDashbutton.setVisible(false));

        add(new WebMarkupContainer("userdashboard").setVisible(false));
        add(new WebMarkupContainer("userdashboardbackground").setVisible(false));
    }
    add(userpanel);

    Form form = new Form("quicksearch") {

        protected void onSubmit() {
            if (searchQuery == null) {
                return;
            }

            super.onSubmit();

            String quickLink = getQuickSearchResponse(searchQuery);
            if (quickLink != null) {
                getRequestCycle().getResponse().redirect(quickLink);

                throw new RedirectToUrlException(quickLink);
            }

            PageParameters params = getProjectPageParameters();
            params.add("query", searchQuery);
            setResponsePage(getPageClass("search"), params);
        }
    };
    add(form.setVisible(ApplicationPageMapper.get().getSearchApp() != null));
    form.add(new TextField<String>("query", new PropertyModel<String>(this, "searchQuery")));

    addAnimatedSelect("projectlink", getProject().getAlias() + "   \u25bc", projectmenu);

    WebMarkupContainer taskpanel = new WebMarkupContainer("taskpanel");
    Link taskLink = new BookmarkablePageLink("tasklink", getPageClass("tasks"), getProjectPageParameters());
    taskpanel.add(taskLink);
    final Image spinner = new Image("spinner",
            new ResourceReference(HeadsUpPage.class, "images/ajax-loader.gif"));
    spinner.add(new AttributeModifier("style", new Model<String>() {
        public String getObject() {
            if (getManager().getTasks() == null || getManager().getTasks().size() == 0) {
                return "display:none";
            }

            return "";
        }
    }));
    spinner.setOutputMarkupId(true);
    spinner.add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
        {
            onlyTargetActivePage();
        }

        protected void onTimer(AjaxRequestTarget target) {
            target.addComponent(spinner);
        }
    });
    taskLink.add(spinner);
    add(taskpanel);

    //        add( new Label( "producttitle", HeadsUpConfiguration.getProductName() ) );
    add(new Label("title", new PropertyModel(this, "title")) {
        @Override
        protected void onBeforeRender() {
            super.onBeforeRender();
            setVisible(getTitle() != null);
        }
    });
    add(new Label("pagetitle", new PropertyModel(this, "pageTitle")));
    add(new WebMarkupContainer("description").add(new AttributeModifier("content", true, new Model<String>() {
        @Override
        public String getObject() {
            return getStorage().getGlobalConfiguration().getProductDescription();
        }
    })));
    add(new FeedbackPanel("messages"));

    add(new Label("footer-description",
            WebManager.getInstance().getFooterDescriptionHTML(getSession().getTimeZone()))
                    .setEscapeModelStrings(false));
    add(new Label("footer-copyright", WebManager.getInstance().getFooterCopyrightHTML())
            .setEscapeModelStrings(false));

    String noteString = WebManager.getInstance().getFooterNoteHTML();
    add(new Label("footer-note", noteString).setVisible(noteString != null));

    add(new BookmarkablePageLink("footer-update", getPageClass("updates"))
            .setVisible(getManager().isUpdateAvailable()));

    dialog = new WebMarkupContainer(DIALOG_PANEL_ID);
    dialog.setVisible(false);
    dialog.setOutputMarkupId(true);
    dialog.setOutputMarkupPlaceholderTag(true);
    add(dialog);
}

From source file:org.opengeo.data.importer.web.ImportDataPage.java

License:Open Source License

public ImportDataPage(PageParameters params) {
    Form form = new Form("form");
    add(form);/*w w w  .  ja va 2  s  .com*/

    sourceList = new ListView<Source>("sources", Arrays.asList(Source.values())) {
        @Override
        protected void populateItem(final ListItem<Source> item) {
            final Source source = (Source) item.getModelObject();
            AjaxLink link = new AjaxLink("link") {
                @Override
                public void onClick(AjaxRequestTarget target) {
                    updateSourcePanel(source);
                    updateModalLinks(this, target);
                    target.addComponent(sourcePanel);
                }
            };
            link.setOutputMarkupId(true);

            link.add(new Label("name", source.getName(ImportDataPage.this)));
            if (item == sourceList.get(0)) {
                link.add(new AttributeAppender("class", true, new Model("selected"), " "));
            }
            item.add(link);

            item.add(new Label("description", source.getDescription(ImportDataPage.this)));

            Image icon = new Image("icon", source.getIcon());
            icon.add(new AttributeModifier("alt", true, source.getDescription(ImportDataPage.this)));
            item.add(icon);

            if (!source.isAvailable()) {
                item.setEnabled(false);
                item.add(new SimpleAttributeModifier("title",
                        "Data source not available. Please " + "install required plug-in and drivers."));
            }
        }

    };
    form.add(sourceList);

    sourcePanel = new WebMarkupContainer("panel");
    sourcePanel.setOutputMarkupId(true);
    form.add(sourcePanel);

    Catalog catalog = GeoServerApplication.get().getCatalog();

    // workspace chooser
    workspace = new WorkspaceDetachableModel(catalog.getDefaultWorkspace());
    workspaceChoice = new DropDownChoice("workspace", workspace, new WorkspacesModel(),
            new WorkspaceChoiceRenderer());
    workspaceChoice.setOutputMarkupId(true);
    workspaceChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            updateDefaultStore(target);
        }
    });
    form.add(workspaceChoice);

    //store chooser
    store = new StoreModel(catalog.getDefaultDataStore((WorkspaceInfo) workspace.getObject()));
    storeChoice = new DropDownChoice("store", store, new EnabledStoresModel(workspace),
            new StoreChoiceRenderer()) {
        protected String getNullValidKey() {
            return ImportDataPage.class.getSimpleName() + "." + super.getNullValidKey();
        };
    };
    storeChoice.setOutputMarkupId(true);

    storeChoice.setNullValid(true);
    form.add(storeChoice);

    // new workspace
    form.add(new AjaxLink("newWorkspace") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            dialog.setTitle(new ParamResourceModel("newWorkspace", ImportDataPage.this));
            dialog.setInitialWidth(400);
            dialog.setInitialHeight(150);
            dialog.setMinimalHeight(150);

            dialog.showOkCancel(target, new DialogDelegate() {
                String wsName;

                @Override
                protected boolean onSubmit(AjaxRequestTarget target, Component contents) {
                    try {
                        Catalog catalog = GeoServerApplication.get().getCatalog();

                        NewWorkspacePanel panel = (NewWorkspacePanel) contents;
                        wsName = panel.workspace;

                        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
                        ws.setName(wsName);

                        NamespaceInfo ns = catalog.getFactory().createNamespace();
                        ns.setPrefix(wsName);
                        ns.setURI("http://opengeo.org/#" + URLEncoder.encode(wsName, "ASCII"));

                        catalog.add(ws);
                        catalog.add(ns);

                        return true;
                    } catch (Exception e) {
                        e.printStackTrace();
                        return false;
                    }
                }

                @Override
                public void onClose(AjaxRequestTarget target) {
                    Catalog catalog = GeoServerApplication.get().getCatalog();
                    workspace = new WorkspaceDetachableModel(catalog.getWorkspaceByName(wsName));
                    workspaceChoice.setModel(workspace);
                    target.addComponent(workspaceChoice);
                    target.addComponent(storeChoice);
                }

                @Override
                protected Component getContents(String id) {
                    return new NewWorkspacePanel(id);
                }
            });

        }
    });

    form.add(new AjaxSubmitLink("next", form) {

        protected void onError(AjaxRequestTarget target, Form<?> form) {
            target.addComponent(feedbackPanel);
        }

        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            //first update the button to indicate we are working
            add(new AttributeAppender("class", true, new Model("button-working icon"), " "));
            setEnabled(false);
            get(0).setDefaultModelObject("Working");

            target.addComponent(this);

            //start a timer to actually do the work, which will allow the link to update 
            // while the context is created
            final AjaxSubmitLink self = this;
            this.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(100)) {
                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    ImportSourcePanel panel = (ImportSourcePanel) sourcePanel.get("content");
                    ImportData source;
                    try {
                        source = panel.createImportSource();
                    } catch (IOException e) {
                        throw new WicketRuntimeException(e);
                    }
                    WorkspaceInfo targetWorkspace = (WorkspaceInfo) (workspace.getObject() != null
                            ? workspace.getObject()
                            : null);
                    StoreInfo targetStore = (StoreInfo) (store.getObject() != null ? store.getObject() : null);

                    Importer importer = ImporterWebUtils.importer();
                    try {
                        ImportContext imp = importer.createContext(source, targetWorkspace, targetStore);

                        //check the import for actual things to do
                        boolean proceed = !imp.getTasks().isEmpty();
                        if (proceed) {
                            //check that all the tasks are non-empty
                            proceed = false;
                            for (ImportTask t : imp.getTasks()) {
                                if (!t.getItems().isEmpty()) {
                                    proceed = true;
                                    break;
                                }
                            }
                        }

                        if (proceed) {
                            imp.setArchive(false);
                            importer.changed(imp);

                            PageParameters pp = new PageParameters();
                            pp.put("id", imp.getId());

                            setResponsePage(ImportPage.class, pp);
                        } else {
                            info("No data to import was found");
                            target.addComponent(feedbackPanel);

                            importer.delete(imp);

                            resetNextButton(self, target);
                        }
                    } catch (Exception e) {
                        LOGGER.log(Level.SEVERE, e.getLocalizedMessage(), e);
                        error(e);

                        target.addComponent(feedbackPanel);

                        //update the button back to original state
                        resetNextButton(self, target);
                    } finally {
                        stop();
                    }
                }
            });
        }
    }.add(new Label("message", new Model("Next"))));

    importTable = new ImportContextTable("imports", new ImportContextProvider() {
        @Override
        protected List<org.geoserver.web.wicket.GeoServerDataProvider.Property<ImportContext>> getProperties() {
            return Arrays.asList(ID, CREATED, STATE);
        }
    });
    importTable.setOutputMarkupId(true);
    importTable.setFilterable(false);
    importTable.setSortable(false);
    form.add(importTable);

    form.add(new AjaxLink("removeAll") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            Importer importer = ImporterWebUtils.importer();
            importer.getStore().removeAll();
            target.addComponent(importTable);
        }
    }.setVisible(ImporterWebUtils.isDevMode()));

    add(dialog = new GeoServerDialog("dialog"));

    updateSourcePanel(Source.SPATIAL_FILES);
    updateDefaultStore(null);
}

From source file:org.ops4j.pax.wicket.samples.blueprint.injection.simple.internal.view.Homepage.java

License:Apache License

public Homepage() {
    //String serviceText = serviceBean.someEchoMethod(HOMEPAGE_TEXT);
    add(new Label("oneComponent", "blub"));
    add(new AbstractAjaxTimerBehavior(seconds(1)) {
        @Override//w ww  .  j a  v  a 2 s  . c  om
        protected void onTimer(AjaxRequestTarget target) {
            System.out.println(getPageId());
        }
    });
}

From source file:org.wicketstuff.js.ext.MessageBox.java

License:Apache License

public MessageBox() {

    final ExtMessageBoxCallback showResult = new ExtMessageBoxCallback() {
        @Override/*w ww  .  j  a va2 s.c o  m*/
        public void onClick(AjaxRequestTarget target, String button, String text) {
            ExtExample.showResult(button);
        }
    };

    final ExtMessageBoxCallback showResultText = new ExtMessageBoxCallback() {
        @Override
        public void onClick(AjaxRequestTarget target, String button, String text) {
            ExtExample.showResultText(button, text);
        }
    };

    add(showResult);
    add(showResultText);

    WebMarkupContainer mb1 = new WebMarkupContainer("mb1");
    mb1.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            ExtMessageBox.confirm("Confirm", "Are you sure you want to do that?", showResult);
        }

    });
    add(mb1);

    WebMarkupContainer mb2 = new WebMarkupContainer("mb2");
    mb2.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBox.prompt("Name", "Please enter your name:", showResultText);
        }

    });
    add(mb2);

    final WebMarkupContainer mb3 = new WebMarkupContainer("mb3");
    mb3.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBoxOptions options = new ExtMessageBoxOptions();
            options.setTitle("Address");
            options.setMsg("Please enter your address:");
            options.setWidth(300);
            options.setButtons(Buttons.OKCANCEL);
            options.setMultiline(true);
            options.setFn(showResultText);
            options.setAnimEl(mb3);

            ExtMessageBox.show(options);
        }

    });
    add(mb3);

    final WebMarkupContainer mb4 = new WebMarkupContainer("mb4");
    mb4.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBoxOptions options = new ExtMessageBoxOptions();
            options.setTitle("Save Changes?");
            options.setMsg(
                    "You are closing a tab that has unsaved changes. <br />Would you like to save your changes?");
            options.setButtons(Buttons.YESNOCANCEL);
            options.setFn(showResult);
            options.setAnimEl(mb4);
            options.setIcon(Icons.QUESTION);

            ExtMessageBox.show(options);
        }

    });
    add(mb4);

    final WebMarkupContainer mb6 = new WebMarkupContainer("mb6");
    mb6.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBoxOptions options = new ExtMessageBoxOptions();
            options.setTitle("Please wait");
            options.setMsg("Loading items...");
            options.setProgressText("Initializing...");
            options.setWidth(300);
            options.setProgress(true);
            options.setCloseable(false);
            options.setAnimEl(mb6);

            ExtMessageBox.show(options);

            mb6.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(500)) {

                private int v = 1;

                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    if (v == 12) {
                        ExtMessageBox.hide();
                        ExtExample.msg("Done", "Your fake items were loaded!", null, null);
                        stop(target);
                    } else {
                        float i = ((float) v) / 11;
                        ExtMessageBox.updateProgress(i, Math.round(100 * i) + "% completed", null);
                        ++v;
                    }
                }

            });

            target.add(mb6);
        }

    });
    add(mb6);

    final WebMarkupContainer mb7 = new WebMarkupContainer("mb7");
    mb7.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBoxOptions options = new ExtMessageBoxOptions();
            options.setMsg("Saving your data, please wait...");
            options.setProgressText("Saving...");
            options.setWidth(300);
            options.setWait(true);
            ExtWaitConfig waitConfig = new ExtWaitConfig();
            waitConfig.setInterval(200);
            options.setWaitConfig(waitConfig);
            options.setIcon("ext-mb-download");
            options.setAnimEl(mb7);

            ExtMessageBox.show(options);

            mb6.add(new AbstractAjaxTimerBehavior(Duration.milliseconds(8000)) {

                @Override
                protected void onTimer(AjaxRequestTarget target) {
                    ExtMessageBox.hide();
                    ExtExample.msg("Done", "Your fake data was saved!", null, null);
                    stop(target);
                }

            });

            target.add(mb6);
        }

    });

    add(mb7);

    final WebMarkupContainer mb8 = new WebMarkupContainer("mb8");
    mb8.add(new AjaxEventBehavior("onclick") {

        @Override
        protected void onEvent(AjaxRequestTarget target) {

            ExtMessageBox.alert("Status", "Changes saved successfully.", showResult);
        }

    });
    add(mb8);

    Form<?> form = new Form<Void>("form");
    form.setOutputMarkupId(true);

    final IModel<Icons> icon = new Model<Icons>(Icons.ERROR);

    IChoiceRenderer<Icons> renderer = new IChoiceRenderer<Icons>() {
        @Override
        public Object getDisplayValue(Icons object) {
            if (Icons.INFO.equals(object)) {
                return "Informational";
            } else {
                return Character.toUpperCase(object.toString().charAt(0))
                        + object.toString().substring(1).toLowerCase();
            }
        }

        @Override
        public String getIdValue(Icons object, int index) {
            return object.toString();
        }
    };

    form.add(new DropDownChoice<Icons>("icons", icon, Arrays.asList(Icons.values()), renderer));

    final WebMarkupContainer mb9 = new AjaxButton("mb9") {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            ExtMessageBoxOptions options = new ExtMessageBoxOptions();
            options.setTitle("Icon Support");
            options.setMsg("Here is a message with an icon!");
            options.setButtons(Buttons.OK);
            options.setAnimEl(this);
            options.setFn(showResult);
            options.setIcon(icon.getObject());

            ExtMessageBox.show(options);
        }

    };
    form.add(mb9);

    add(form);
}