/** * Review the model and if there are alerts add them to the view. * * @param view the view where alerts should be added * @param model the model to review */ private void updateAlerts(final ViewDef view, final ClusterGeneralModel model) { // Clear all the alerts: view.clearAlerts(); // Review the alerts and add those that are active: if (model.getHasNewGlusterHostsAlert()) { addTextAndLinkAlert( view, messages.clusterHasNewGlusterHosts(), model.getImportNewGlusterHostsCommand(), model.getDetachNewGlusterHostsCommand()); } if (model.isConsoleAddressPartiallyOverridden()) { view.addAlert(new Label(constants.consolePartiallyOverridden())); } }
/** * Create a widget containing text and a link that triggers the execution of a command. * * @param view the view where the alert should be added * @param text the text content of the alert * @param commands the command that should be executed when the link is clicked */ private void addTextAndLinkAlert( final ViewDef view, final String text, final UICommand... commands) { // Create a flow panel containing the text and the link: final FlowPanel alertPanel = new FlowPanel(); int start = 0; for (final UICommand command : commands) { // Find the open and close positions of the link within the message: final int openIndex = text.indexOf("<a>", start); // $NON-NLS-1$ final int closeIndex = text.indexOf("</a>", start); // $NON-NLS-1$ if (openIndex == -1 || closeIndex == -1 || closeIndex < openIndex) { break; } // Extract the text before, inside and after the tags: final String beforeText = text.substring(start, openIndex); final String betweenText = text.substring(openIndex + 3, closeIndex); start = closeIndex + 4; // Create the label for the text before the tag: final Label beforeLabel = new Label(beforeText); beforeLabel .getElement() .getStyle() .setProperty("display", "inline"); // $NON-NLS-1$ //$NON-NLS-2$ alertPanel.add(beforeLabel); // Create the anchor: final Anchor betweenAnchor = new Anchor(betweenText); betweenAnchor .getElement() .getStyle() .setProperty("display", "inline"); // $NON-NLS-1$ //$NON-NLS-2$ alertPanel.add(betweenAnchor); // Add a listener to the anchor so that the command is executed when // it is clicked: betweenAnchor.addClickHandler( new ClickHandler() { @Override public void onClick(ClickEvent event) { command.execute(); } }); } if (start < text.length()) { final String afterText = text.substring(start); // Create the label for the text after the tag: final Label afterLabel = new Label(afterText); afterLabel .getElement() .getStyle() .setProperty("display", "inline"); // $NON-NLS-1$ //$NON-NLS-2$ alertPanel.add(afterLabel); } if (start > 0) { // Add the alert to the view: view.addAlert(alertPanel); } }