Example usage for com.google.gwt.user.client Window alert

List of usage examples for com.google.gwt.user.client Window alert

Introduction

In this page you can find the example usage for com.google.gwt.user.client Window alert.

Prototype

public static void alert(String msg) 

Source Link

Usage

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

public void updateGeneralFeedback(final String generalFeedback) {
    addLoading(true);/*from w ww.j  a v  a 2  s  . co m*/
    // Invokes the ajax Moodle interface to save the mark
    AjaxRequest.ajaxRequest("action=updgeneralfeedback" + "&feedback=" + URL.encode(generalFeedback),
            new AsyncCallback<AjaxData>() {
                @Override
                public void onSuccess(AjaxData result) {
                    // Parse json results and check if there was an error
                    if (!result.getError().equals("")) {
                        logger.severe(result.getError());
                        Window.alert(result.getError());
                        return;
                    }

                    finishLoading();
                }

                @Override
                public void onFailure(Throwable caught) {
                    if (EMarkingConfiguration.isDebugging()) {
                        caught.printStackTrace();
                        logger.severe(caught.getMessage());
                    }
                    finishLoading();
                }
            });
}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

/**
 * Add a mark to both the page and update the rubric interface
 * /*from ww  w. j  a  v a 2s . co m*/
 * @param mark the mark to add
 */
public void addMark(final Mark mark, final MarkingPage page) {

    RootPanel.get().getElement().getStyle().setCursor(Cursor.WAIT);

    Mark.loadingIcon.removeFromParent();
    page.getAbsolutePanel().add(Mark.loadingIcon, mark.getPosx(), mark.getPosy());
    Mark.loadingIcon.setVisible(true);

    //por defecto el criterionid = 0 y la clase para el color es criterion0
    int cid = 0;
    if (EMarkingConfiguration.isColoredRubric()) {
        Criterion c = EMarkingWeb.markingInterface.getToolbar().getMarkingButtons().getSelectedCriterion();
        if (c != null) {
            cid = c.getId();
        }
    }

    int markposx = mark.getPosx();
    int markposy = mark.getPosy();

    String path = "";
    if (mark instanceof HighlightMark) {
        HighlightMark hmark = (HighlightMark) mark;
        path = "&path=" + URL.encode(hmark.getEnd().getX() + "," + hmark.getEnd().getY());
        logger.fine("sending " + markposx + "," + markposy + " -> " + hmark.getEnd().getX() + ","
                + hmark.getEnd().getY() + " path:" + path);
    } else if (mark instanceof PathMark) {
        path = "&path=" + URL.encode(((PathMark) mark).getPath());
    }
    // Invokes the ajax Moodle interface to save the mark
    AjaxRequest.ajaxRequest("action=addcomment" + "&comment=" + URL.encode(mark.getRawtext()) + "&posx="
            + markposx + "&posy=" + markposy + "&width=" + page.getWidth() + "&height=" + page.getHeight()
            + "&format=" + mark.getFormat() + "&pageno=" + mark.getPageno() + "&criterionid=" + cid + path
            + "&colour=" + mark.getCriterionId() + "&windowswidth=" + page.getWidth() + "&windowsheight="
            + page.getHeight(), new AsyncCallback<AjaxData>() {

                @Override
                public void onFailure(Throwable caught) {
                    Mark.loadingIcon.setVisible(false);
                    logger.severe("Exception adding mark.");
                    logger.severe(caught.getMessage());
                    Window.alert(caught.getMessage());
                    RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                }

                @Override
                public void onSuccess(AjaxData result) {
                    Mark.loadingIcon.setVisible(false);

                    Map<String, String> values = AjaxRequest.getValueFromResult(result);

                    // Parse json results and check if there was an error
                    if (!result.getError().equals("")) {
                        Window.alert(messages.ErrorAddingMark());
                        RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                        return;
                    }

                    // Parses important values from result
                    int id = Integer.parseInt(values.get("id"));
                    long timemodified = Long.parseLong(values.get("timemodified"));
                    int markerid = Integer.parseInt(values.get("markerid"));
                    String markername = values.get("markername");
                    float newgrade = 0;
                    if (mark instanceof RubricMark) {
                        newgrade = Float.parseFloat(values.get("grade"));
                    } else {
                        newgrade = MarkingInterface.submissionData.getFinalgrade();
                    }

                    // Sets the values for the new mark
                    mark.setId(id);
                    mark.setMarkerid(markerid);
                    mark.setMarkername(markername);
                    mark.setTimeCreated(timemodified);

                    // Adds the mark to the marking interface
                    markingPagesInterface.addMarkWidget(mark, -1, page);

                    // If it is a comment And to the rubric interface
                    toolbar.getMarkingButtons().updateStats();

                    if (!(mark instanceof CustomMark) && mark.getFormat() != 5) {
                        EMarkingWeb.markingInterface.getRubricInterface().getToolsPanel().getPreviousComments()
                                .addMarkAsCommentToInterface(mark, true);
                    }

                    // Updates toolbar
                    setTimemodified(timemodified);

                    // Update the marking interface with the final grade and time
                    EMarkingWeb.markingInterface.setFinalgrade(newgrade, timemodified);

                    RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                }
            });

}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

/**
 * Adds a mark to current submission.//from www  . ja v  a 2s .  c  o  m
 * 
 * @param level the mark to assign
 * @param posx X coordinate where to draw mark in page
 * @param posy Y coordinate where to draw mark in page
 */
public void addRubricMark(final int level, final int posx, final int posy, final MarkingPage page) {

    // Shows comment dialog
    // 0 for regradeid as we are creating a mark
    final EditMarkDialog dialog = new EditMarkDialog(posx, posy, level, 0);
    if (this.setBonus >= 0) {
        dialog.setBonus(this.setBonus);
        this.setBonus = -1;
    }
    dialog.addCloseHandler(new CloseHandler<PopupPanel>() {
        @Override
        public void onClose(CloseEvent<PopupPanel> event) {

            // If dialog was not cancelled and contains a comment, try to add the mark
            if (!dialog.isCancelled()) {

                // Calculate parameters for adding mark
                final String comment = dialog.getTxtComment(); // Comment from dialog
                final float bonus = dialog.getBonus();
                final int levelid = dialog.getLevelId();
                final String feedbackToAjax;
                if (dialog.haveFeedback()) {
                    feedbackToAjax = dialog.getFeedback();
                } else {
                    feedbackToAjax = "";
                }
                // Ajax URL for adding mark
                String url = "action=addmark" + "&level=" + levelid + "&posx=" + posx + "&posy=" + posy
                        + "&pageno=" + (page.getPageNumber()) + "&sesskey=" + EMarkingConfiguration.getSessKey()
                        + "&bonus=" + bonus + "&comment=" + URL.encode(comment) + "&windowswidth="
                        + page.getWidth() + "&windowsheight=" + page.getHeight() + "&feedback="
                        + feedbackToAjax;

                // Add loading icon
                Mark.loadingIcon.removeFromParent();
                page.getAbsolutePanel().add(Mark.loadingIcon, posx, posy);
                Mark.loadingIcon.setVisible(true);

                rubricInterface.getRubricPanel().loadingRubricCriterion(levelid);

                // Make Ajax request 
                AjaxRequest.ajaxRequest(url, new AsyncCallback<AjaxData>() {

                    @Override
                    public void onFailure(Throwable caught) {
                        Mark.loadingIcon.setVisible(false);
                        rubricInterface.getRubricPanel().finishloadingRubricCriterion(levelid);

                        logger.severe("Error adding mark to Moodle!");
                        logger.severe(caught.getMessage());
                        Window.alert(caught.getMessage());
                    }

                    @Override
                    public void onSuccess(AjaxData result) {
                        Mark.loadingIcon.setVisible(false);
                        rubricInterface.getRubricPanel().finishloadingRubricCriterion(levelid);
                        Mark.hideIcons();

                        // Parse Json values
                        Map<String, String> values = AjaxRequest.getValueFromResult(result);

                        if (!values.get("error").equals("")) {
                            Mark.loadingIcon.setVisible(false);
                            rubricInterface.getRubricPanel().finishloadingRubricCriterion(levelid);

                            logger.severe("Error adding mark to Moodle!");
                            Window.alert(MarkingInterface.messages.ErrorAddingMark());
                            return;
                        }

                        // Get main values
                        int previd = Integer.parseInt(values.get("replaceid"));
                        int newid = Integer.parseInt(values.get("id"));
                        float newgrade = Float.parseFloat(values.get("grade"));
                        long timemodified = Long.parseLong(values.get("timemodified"));
                        String markername = values.get("markername");
                        int pageno = page.getPageNumber();
                        int regradeid = Integer.parseInt(values.get("regradeid"));
                        int regradeaccepted = Integer.parseInt(values.get("regradeaccepted"));
                        int regrademotive = Integer.parseInt(values.get("regrademotive"));
                        String regradecomment = values.get("regradecomment");
                        String regrademarkercomment = values.get("regrademarkercomment");
                        int criterionId = Integer.parseInt(values.get("criterionid"));

                        // If there was a previous mark with the same level, remove it
                        if (previd > 0) {
                            page.deleteMarkWidget(previd);
                        }

                        long unixtime = System.currentTimeMillis() / 1000L;

                        // Add mark to marking pages interface
                        RubricMark mark = new RubricMark(newid, posx, posy, pageno,
                                EMarkingConfiguration.getMarkerId(), dialog.getLevelId(), unixtime, criterionId,
                                markername, comment);

                        if (dialog.haveFeedback()) {
                            mark.setFeedback(dialog.getFeedbackArray());
                        }
                        mark.setRegradeid(regradeid);
                        mark.setRegradeaccepted(regradeaccepted);
                        mark.setRegradecomment(regradecomment);
                        mark.setRegrademarkercomment(regrademarkercomment);
                        mark.setRegrademotive(regrademotive);

                        Criterion criterion = MarkingInterface.submissionData.getLevelById(mark.getLevelId())
                                .getCriterion();
                        criterion.setSelectedLevel(mark.getLevelId());
                        criterion.setBonus(bonus);
                        markingPagesInterface.addMarkWidget(mark, previd, page);
                        rubricInterface.getRubricPanel().addMarkToRubric(mark);
                        toolbar.getMarkingButtons().updateStats();
                        toolbar.getMarkingButtons().changeColor(criterion.getId());

                        EMarkingWeb.markingInterface.getRubricInterface().getToolsPanel().getPreviousComments()
                                .addMarkAsCommentToInterface(mark, true);

                        setFinalgrade(newgrade, timemodified);
                    }
                });
            }
        }
    });
    dialog.center();
}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

/**
 * Deletes a mark from the interface//from  w  ww .  ja  v a  2 s  . co  m
 * 
 * @param mark The Mark to be deleted
 */
public void deleteMark(final Mark mark) {
    // Check if the mark is a rubric mark
    final RubricMark rubricMark = mark instanceof RubricMark ? (RubricMark) mark : null;

    logger.fine("Deleting comment " + mark.getId());

    // Delete from view for user
    mark.setVisible(false);

    // Set cursor waiting
    RootPanel.get().getElement().getStyle().setCursor(Cursor.WAIT);

    String url = null;

    if (rubricMark == null) {
        // Ajax URL for deleting comment
        url = "action=deletecomment" + "&id=" + mark.getId() + "&sesskey=" + EMarkingConfiguration.getSessKey();
    } else {
        // Ajax URL for deleting mark
        url = "action=deletemark" + "&level=" + rubricMark.getLevelId() + "&sesskey="
                + EMarkingConfiguration.getSessKey();

        rubricInterface.getRubricPanel().loadingRubricCriterion(rubricMark.getLevelId());
    }

    // Make Ajax request 
    AjaxRequest.ajaxRequest(url, new AsyncCallback<AjaxData>() {

        @Override
        public void onFailure(Throwable caught) {
            logger.severe("Exception deleting mark.");
            logger.severe(caught.getMessage());
            if (rubricMark != null)
                rubricInterface.getRubricPanel().finishloadingRubricCriterion(rubricMark.getLevelId());
            Window.alert(caught.getMessage());
            mark.setVisible(true);
            RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
        }

        @Override
        public void onSuccess(AjaxData result) {
            // Parse Json values
            Map<String, String> values = AjaxRequest.getValueFromResult(result);

            if (rubricMark != null)
                rubricInterface.getRubricPanel().finishloadingRubricCriterion(rubricMark.getLevelId());

            // Get main values
            float newgrade = 0;
            if (rubricMark != null)
                newgrade = Float.parseFloat(values.get("grade"));

            // Get main values
            long timemodified = Long.parseLong(values.get("timemodified"));

            if (rubricMark != null) {
                // Then add resulting mark it to the rubric interface
                rubricMark.getLevel().getCriterion().setSelectedLevel(0);
                rubricInterface.getRubricPanel().deleteMarkFromRubric(rubricMark);
                if (EMarkingConfiguration
                        .getMarkingType() == EMarkingConfiguration.EMARKING_TYPE_MARKER_TRAINING) {
                    rubricMark.removeCollaborativeButtons();
                }
                rubricInterface.getToolsPanel().getPreviousComments()
                        .deletePreviousComment(rubricMark.getRawtext());
                setFinalgrade(newgrade, timemodified);
                Mark.markPopup.setVisible(false);
            } else {
                markingPagesInterface.deleteMarkWidget(mark.getId());
                setTimemodified(timemodified);
            }

            toolbar.getMarkingButtons().updateStats();

            EMarkingWeb.markingInterface.getRubricInterface().getToolsPanel().loadSumissionData();

            RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
        }
    });

}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

/**
 * Loads submission data using global submission id
 *///  w w  w .ja  v a 2 s .c  o  m
public void loadSubmissionData() {

    // Checks that global submission id is valid
    if (MarkingInterface.draftId <= 0)
        return;

    addLoading(false);

    // Ajax requesto to submission data
    AjaxRequest.ajaxRequest("action=getsubmission", new AsyncCallback<AjaxData>() {

        @Override
        public void onFailure(Throwable caught) {
            logger.severe("Error getting submission from Moodle!");
            logger.severe(caught.getMessage());
            Window.alert(caught.getMessage());
            finishLoading();
        }

        @Override
        public void onSuccess(AjaxData result) {
            // Parse Json values
            Map<String, String> values = AjaxRequest.getValueFromResult(result);

            // Reset submission data
            submissionData = SubmissionGradeData.createFromConfiguration(values);

            if (submissionData != null) {
                EMarkingWeb.markingInterface.loadInterface();
            } else {
                Window.alert(MarkingInterface.messages.InvalidSubmissionData());
            }

            Window.setTitle(
                    "Emarking " + submissionData.getCoursename() + " " + submissionData.getActivityname());

            if (EMarkingConfiguration.isChatEnabled()) {
                activateChat();
            }

            finishLoading();

            Window.addResizeHandler(new ResizeHandler() {
                @Override
                public void onResize(ResizeEvent event) {
                    resizeTime = new Date();
                    if (!resizeTimeout) {
                        resizeTimeout = true;
                        resizeTimer.schedule(200);
                    }
                }
            });
        }
    });
}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

@Override
protected void onLoad() {

    // Ajax request to load submission data
    AjaxRequest.ajaxRequest("action=ping", new AsyncCallback<AjaxData>() {

        @Override/*from  w  w  w .j  a  v  a 2  s.  c o m*/
        public void onFailure(Throwable caught) {
            // Keep trying if something fails every few seconds
            timer.scheduleRepeating(1000);
        }

        @Override
        public void onSuccess(AjaxData result) {
            //Check if values are ok
            if (result.getError().equals("")) {

                // Parse Json values
                Map<String, String> value = AjaxRequest.getValueFromResult(result);

                try {
                    EMarkingConfiguration.loadConfiguration(value);
                } catch (Exception e) {
                    e.printStackTrace();
                    Window.alert(MarkingInterface.messages.ErrorLoadingSubmission());
                    return;
                }

                // Clear interface (submission and rubric interfaces)
                interfacePanel.clear();

                // Cancel timer, we don't need to ping again
                timer.cancel();

                // Load submission data
                loadSubmissionData();

                focusPanel.getElement().focus();

                // Schedule heartbeat if configured as
                if ((value.get("heartbeat") != null && value.get("heartbeat").equals("1"))) {
                    // Every two minutes
                    heartBeatTimer.scheduleRepeating(2 * 60 * 1000);
                }
            } else {
                // Keep trying if something fails every few seconds
                timer.scheduleRepeating(1000);
            }
        }
    });
}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

public void regradeMark(final RubricMark mark, final String comment, final int motive) {

    RootPanel.get().getElement().getStyle().setCursor(Cursor.WAIT);
    final MarkingPage page = markingPagesInterface.getPageByIndex(mark.getPageno() - 1);
    if (page == null) {
        logger.severe("Page is null for page index " + mark.getPageno());
        return;//from w  w  w  . jav  a  2s.c  o  m
    }
    Mark.loadingIcon.removeFromParent();
    page.getAbsolutePanel().add(Mark.loadingIcon, mark.getPosx(), mark.getPosy());
    Mark.loadingIcon.setVisible(true);

    // Invokes the ajax Moodle interface to save the mark
    AjaxRequest.ajaxRequest("action=addregrade" + "&comment=" + URL.encode(comment) + "&motive=" + motive
            + "&level=" + mark.getLevelId(), new AsyncCallback<AjaxData>() {

                @Override
                public void onFailure(Throwable caught) {
                    Mark.loadingIcon.setVisible(false);
                    logger.severe("Exception regrading mark.");
                    logger.severe(caught.getMessage());
                    Window.alert(caught.getMessage());
                    RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                }

                @Override
                public void onSuccess(AjaxData result) {
                    Mark.loadingIcon.setVisible(false);

                    Map<String, String> values = AjaxRequest.getValueFromResult(result);

                    // Parse json results and check if there was an error
                    if (!result.getError().equals("")) {
                        Window.alert(messages.ErrorAddingMark());
                        RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                        return;
                    }

                    // Parses important values from result
                    int regradeid = Integer.parseInt(values.get("regradeid"));
                    long timemodified = Long.parseLong(values.get("timemodified"));

                    // Sets the values for the new mark
                    mark.setRegradeid(regradeid);
                    mark.setRegradecomment(comment);
                    mark.setRegrademotive(motive);

                    // Add the mark to the rubric so it updates the information in the rubric panel
                    EMarkingWeb.markingInterface.getRubricInterface().getRubricPanel().addMarkToRubric(mark);
                    mark.setMarkHTML();

                    // Updates toolbar
                    setTimemodified(timemodified);

                    RootPanel.get().getElement().getStyle().setCursor(Cursor.AUTO);
                }
            });
}

From source file:cl.uai.client.MarkingInterface.java

License:Open Source License

/**
 * Reloads main interface for a new submission
 * /*  ww  w .j  a  v a 2  s.c  om*/
 * @param newSubmissionId the new submission id
 */
public void reload(int newSubmissionId) {

    // Validate new submission id value
    if (newSubmissionId < 0) {
        Window.alert("Invalid submission id value " + draftId);
        return;
    }

    draftId = newSubmissionId;

    reloadPage();
}

From source file:cl.uai.client.marks.Mark.java

License:Open Source License

/**
 * Updates a mark's comment, position or bonus
 * //  ww  w.ja  va  2  s .  co m
 * @param newcomment the new comment
 * @param newposx the new X coordinate in the page
 * @param newposy the new Y coordinate in the page
 * @param newbonus the new bonus
 */
public void update(final String newcomment, int newposx, int newposy, final int newlevel, final float newbonus,
        final String newregrademarkercomment, final int newregradeaccepted, int widthPage, int heightPage) {

    final Mark mark = this;

    int regradeid = 0;
    if (mark instanceof RubricMark)
        regradeid = ((RubricMark) mark).getRegradeid();

    // This shouldn't happen so log it for debugging
    if (this.id == 0) {
        logger.severe("Fatal error! A comment with id 0!");
        return;
    }

    EMarkingWeb.markingInterface.addLoading(true);

    this.setLoading();

    final String feedbackToAjax;
    if (feedback.size() > 0) {
        feedbackToAjax = getFeedbackToAjax();
    } else {
        feedbackToAjax = "";
    }
    logger.severe(feedbackToAjax);
    // Call the ajax request to update the data
    AjaxRequest.ajaxRequest("action=updcomment&cid=" + this.id + "&posx=" + newposx + "&posy=" + newposy
            + "&bonus=" + newbonus + "&format=" + this.format + "&levelid=" + newlevel + "&regradeid="
            + regradeid + "&regradeaccepted=" + newregradeaccepted + "&regrademarkercomment="
            + newregrademarkercomment + "&markerid=" + EMarkingConfiguration.getMarkerId() + "&width="
            + this.width + "&height=" + this.height + "&comment=" + URL.encode(newcomment) + "&windowswidth="
            + widthPage + "&windowsheight=" + heightPage + "&feedback=" + URL.encode(feedbackToAjax),
            new AsyncCallback<AjaxData>() {

                @Override
                public void onFailure(Throwable caught) {
                    logger.severe("Error updating mark to Moodle!");
                    logger.severe(caught.getMessage());
                    Window.alert(caught.getMessage());
                    EMarkingWeb.markingInterface.finishLoading();
                }

                @Override
                public void onSuccess(AjaxData result) {
                    Map<String, String> value = AjaxRequest.getValueFromResult(result);

                    if (!result.getError().equals("")) {
                        Window.alert(result.getError());
                        setMarkHTML();
                        removeStyleName(Resources.INSTANCE.css().updating());
                        EMarkingWeb.markingInterface.finishLoading();
                        return;
                    }

                    // Parse json values from Moodle
                    long timemodified = Long.parseLong(value.get("timemodified"));
                    float newgrade = Float.parseFloat(value.get("newgrade"));
                    mark.setPreviousText(mark.getRawtext());
                    mark.setRawtext(newcomment);

                    if (mark instanceof RubricMark) {
                        RubricMark rmark = (RubricMark) mark;
                        // Update submission data
                        int previousLevelid = rmark.getLevelId();
                        float previousBonus = rmark.getBonus();
                        rmark.setLevelId(newlevel);
                        rmark.setBonus(newbonus);
                        rmark.setRegradeaccepted(newregradeaccepted);
                        rmark.setRegrademarkercomment(newregrademarkercomment);
                        if (rmark.getLevelId() != previousLevelid || rmark.getBonus() != previousBonus) {
                            rmark.setMarkername(MarkingInterface.submissionData.getMarkerfirstname() + " "
                                    + MarkingInterface.submissionData.getMarkerlastname());
                            rmark.setMarkerid(MarkingInterface.submissionData.getMarkerid());
                            Mark.showIcons(rmark, 0);
                        }
                        EMarkingWeb.markingInterface.getRubricInterface().getRubricPanel()
                                .addMarkToRubric(rmark);
                        EMarkingWeb.markingInterface.getRubricInterface().getRubricPanel()
                                .finishloadingRubricCriterion(newlevel);
                    }

                    // Update the marking interface with the final grade and time
                    EMarkingWeb.markingInterface.setFinalgrade(newgrade, timemodified);
                    setMarkHTML();

                    EMarkingWeb.markingInterface.getRubricInterface().getToolsPanel().getPreviousComments()
                            .addMarkAsCommentToInterface(mark, true);

                    removeStyleName(Resources.INSTANCE.css().updating());

                    EMarkingWeb.markingInterface.finishLoading();
                }
            });
}

From source file:cl.uai.client.page.EditMarkDialog.java

License:Open Source License

/**
 * Creates a comment dialog at a specific position
 * //w  ww. j  a  va2  s .  c o m
 * @param posx Top position for the dialog
 * @param posy Left position for the dialog
 * @param level An optional rubric level in case we are editing one
 */
public EditMarkDialog(int posx, int posy, int level, int regradeid) {
    super(true, false);

    this.regradeId = regradeid;

    this.levelId = level;
    Level lvl = MarkingInterface.submissionData.getLevelById(levelId);

    if (EMarkingConfiguration.getKeywords() != null && EMarkingConfiguration.getKeywords().length() > 0) {
        logger.fine("Keywords: " + EMarkingConfiguration.getKeywords());
    }
    if (!EMarkingConfiguration.getKeywords().equals("") && (level > 0 || regradeid > 0)) {
        feedbackArray = new ArrayList<FeedbackObject>();
        feedbackPanel = new FeedbackInterface();
        feedbackPanel.setParent(this);
    } else {
        simplePanel = true;
    }

    superPanel = new HorizontalPanel();
    superPanel.addStyleName(Resources.INSTANCE.css().feedbackdialog());

    feedbackForStudent = new VerticalPanel();
    feedbackForStudent.addStyleName(Resources.INSTANCE.css().feedbackforstudent());

    feedbackSummary = new ScrollPanel(feedbackForStudent);
    feedbackSummary.addStyleName(Resources.INSTANCE.css().feedbacksummary());

    mainPanel = new VerticalPanel();
    mainPanel.addStyleName(Resources.INSTANCE.css().editmarkdialog());

    // Adds the CSS style and other settings
    this.addStyleName(Resources.INSTANCE.css().commentdialog());
    this.setAnimationEnabled(true);
    this.setGlassEnabled(true);

    bonusTxt = new TextBox();
    bonusTxt.addStyleName(Resources.INSTANCE.css().bonuslist());

    this.levelsList = new ListBox();
    this.levelsList.addStyleName(Resources.INSTANCE.css().levelslist());
    this.levelsList.addChangeHandler(new ChangeHandler() {
        @Override
        public void onChange(ChangeEvent event) {
            int levelid = Integer.parseInt(levelsList.getValue(levelsList.getSelectedIndex()));
            levelId = levelid;
            Level lvl = MarkingInterface.submissionData.getLevelById(levelId);
            setBonus(lvl.getBonus());
        }
    });

    // If there's a rubric level we should edit a Mark
    // otherwise we are just editing its comment
    if (this.levelId == 0) {
        this.setHTML(MarkingInterface.messages.AddEditComment());
    } else {
        this.setHTML(MarkingInterface.messages.AddEditMark() + "<br/>" + lvl.getCriterion().getDescription());
    }

    // Position the dialog
    if (simplePanel) {
        this.setPopupPosition(posx, posy);
    } else {
        // The Dialog is more big, so we need to fix the position
        this.setPopupPosition((int) (Window.getClientWidth() * 0.08), (int) (Window.getClientHeight() * 0.15));
    }

    if (this.levelId > 0) {

        loadLevelsList();

        HorizontalPanel hpanelLevels = new HorizontalPanel();
        hpanelLevels.setWidth("100%");
        Label messages = new Label(MarkingInterface.messages.Level());
        hpanelLevels.add(messages);
        hpanelLevels.add(levelsList);
        hpanelLevels.setCellHorizontalAlignment(levelsList, HasHorizontalAlignment.ALIGN_RIGHT);
        mainPanel.add(hpanelLevels);
        mainPanel.setCellHorizontalAlignment(hpanelLevels, HasHorizontalAlignment.ALIGN_RIGHT);
    }

    // Save button
    Button btnSave = new Button(MarkingInterface.messages.Save());
    btnSave.addStyleName(Resources.INSTANCE.css().btnsave());
    btnSave.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            if (levelId > 0 && !bonusIsValid()) {
                Window.alert(MarkingInterface.messages.InvalidBonusValue());
                return;
            }
            cancelled = false;
            hide();
        }
    });

    // Cancel button
    Button btnCancel = new Button(MarkingInterface.messages.Cancel());
    btnSave.addStyleName(Resources.INSTANCE.css().btncancel());
    btnCancel.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            cancelled = true;
            hide();
        }
    });

    // The comment text box
    TextArea txt = new TextArea();
    txt.setVisibleLines(5);
    txt.getElement().getStyle().setMarginBottom(5, Unit.PT);
    txtComment = new SuggestBox(EMarkingWeb.markingInterface.previousCommentsOracle, txt);
    txtComment.setAutoSelectEnabled(false);
    txtComment.addStyleName(Resources.INSTANCE.css().editmarksuggestbox());

    HorizontalPanel hpanelComment = new HorizontalPanel();
    hpanelComment.setWidth("100%");
    hpanelComment.add(new Label(MarkingInterface.messages.Comment()));
    hpanelComment.add(txtComment);
    hpanelComment.setCellHorizontalAlignment(txtComment, HasHorizontalAlignment.ALIGN_RIGHT);
    mainPanel.add(hpanelComment);
    mainPanel.setCellHorizontalAlignment(hpanelComment, HasHorizontalAlignment.ALIGN_RIGHT);

    // If the rubric level is not null then create the bonus list and add it to the dialog 
    if (this.levelId > 0) {
        setBonus(lvl.getBonus());

        HorizontalPanel hpanelBonus = new HorizontalPanel();
        hpanelBonus.setWidth("100%");
        hpanelBonus.add(new Label(MarkingInterface.messages.SetBonus()));
        hpanelBonus.add(bonusTxt);
        hpanelBonus.setCellHorizontalAlignment(bonusTxt, HasHorizontalAlignment.ALIGN_RIGHT);
        if (EMarkingConfiguration.isFormativeFeedbackOnly()) {
            hpanelBonus.setVisible(false);
        }
        mainPanel.add(hpanelBonus);
        mainPanel.setCellHorizontalAlignment(hpanelBonus, HasHorizontalAlignment.ALIGN_RIGHT);
    }

    // The regrade comment text box
    txt = new TextArea();
    txt.setVisibleLines(5);
    txt.getElement().getStyle().setMarginBottom(5, Unit.PT);
    txtRegradeComment = new SuggestBox(EMarkingWeb.markingInterface.previousCommentsOracle, txt);

    if (this.regradeId > 0) {

        mainPanel.add(new HTML("<hr>"));
        mainPanel.add(new Label(MarkingInterface.messages.Regrade()));

        // Add the textbox
        HorizontalPanel hpanelRegradeComment = new HorizontalPanel();
        hpanelRegradeComment.setWidth("100%");
        hpanelRegradeComment.add(new Label(MarkingInterface.messages.RegradeComment()));
        hpanelRegradeComment.add(txtRegradeComment);
        hpanelRegradeComment.setCellHorizontalAlignment(txtRegradeComment, HasHorizontalAlignment.ALIGN_RIGHT);
        mainPanel.add(hpanelRegradeComment);
        mainPanel.setCellHorizontalAlignment(hpanelRegradeComment, HasHorizontalAlignment.ALIGN_RIGHT);
    }

    // Add buttons
    HorizontalPanel hpanel = new HorizontalPanel();
    hpanel.setSpacing(2);
    hpanel.setWidth("100%");
    hpanel.add(btnSave);
    hpanel.add(btnCancel);
    hpanel.setCellWidth(btnSave, "100%");
    hpanel.setCellWidth(btnCancel, "0px");
    hpanel.setCellHorizontalAlignment(btnCancel, HasHorizontalAlignment.ALIGN_RIGHT);
    hpanel.setCellHorizontalAlignment(btnSave, HasHorizontalAlignment.ALIGN_RIGHT);
    mainPanel.add(hpanel);
    mainPanel.setCellHorizontalAlignment(hpanel, HasHorizontalAlignment.ALIGN_RIGHT);

    if (simplePanel) {
        // No feedback
        this.setWidget(mainPanel);
    } else {
        // Remove CSS Style
        mainPanel.removeStyleName(Resources.INSTANCE.css().editmarkdialog());
        mainPanel.addStyleName(Resources.INSTANCE.css().editmarkdialogWithFeedback());

        bonusTxt.removeStyleName(Resources.INSTANCE.css().bonuslist());
        bonusTxt.addStyleName(Resources.INSTANCE.css().bonuslistWithFeedback());

        this.levelsList.removeStyleName(Resources.INSTANCE.css().levelslist());
        this.levelsList.addStyleName(Resources.INSTANCE.css().levelslistWithFeedback());

        txtComment.removeStyleName(Resources.INSTANCE.css().editmarksuggestbox());
        txtComment.addStyleName(Resources.INSTANCE.css().editmarksuggestboxWithFeedback());

        // Add feedback panel
        mainPanel.add(new HTML("<h4>Feedback</h4>"));
        mainPanel.add(feedbackSummary);

        superPanel.add(mainPanel);
        superPanel.add(feedbackPanel);
        this.setWidget(superPanel);
    }
}