/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.ui.ridgets.marker;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import org.eclipse.riena.ui.core.marker.IMessageMarker;
import org.eclipse.riena.ui.ridgets.IBasicMarkableRidget;
import org.eclipse.riena.ui.ridgets.IMessageBoxRidget;
/**
* Visualizes certain types of message markers by displaying the message in a
* message box.
*/
public class MessageBoxMessageMarkerViewer extends AbstractMessageMarkerViewer {
private final IMessageBoxRidget messageBoxRidget;
public MessageBoxMessageMarkerViewer(final IMessageBoxRidget messageBoxRidget) {
this.messageBoxRidget = messageBoxRidget;
setVisible(false);
}
/**
* @see org.eclipse.riena.ui.internal.ridgets.marker.AbstractMessageMarkerViewer#hideMessages(org.eclipse.riena.ui.internal.ridgets.IBasicMarkableRidget)
*/
@Override
protected void hideMessages(final IBasicMarkableRidget ridget) {
// automatically hidden when the message box is closed
}
/**
* @see org.eclipse.riena.ui.internal.ridgets.marker.AbstractMessageMarkerViewer#showMessages(org.eclipse.riena.ui.internal.ridgets.IBasicMarkableRidget)
*/
@Override
protected void showMessages(final IBasicMarkableRidget ridget) {
if (isVisible()) {
final String message = getMessage();
if (message.length() > 0) {
messageBoxRidget.setText(message);
messageBoxRidget.show();
}
setVisible(false);
}
}
@Override
protected String getMessageSeparator() {
return "\n"; //$NON-NLS-1$
}
/**
* Construct a Message of all Adapter for display, remove the marker!
*
* @return a complete Message
*/
private String getMessage() {
final Collection<IMessageMarker> allMessageMarker = new LinkedHashSet<IMessageMarker>();
IBasicMarkableRidget nextMarkableAdapter = null;
final Collection<IBasicMarkableRidget> localMarkableAdapter = new HashSet<IBasicMarkableRidget>();
localMarkableAdapter.addAll(getRidgets());
for (final Iterator<IBasicMarkableRidget> i = localMarkableAdapter.iterator(); i.hasNext();) {
nextMarkableAdapter = i.next();
allMessageMarker.addAll(getMessageMarker(nextMarkableAdapter, false));
}
final List<IMessageMarker> sortedMarkers = new ArrayList<IMessageMarker>(allMessageMarker);
Collections.sort(sortedMarkers, new MessageMarkerComparator());
return constructMessage(sortedMarkers, getMessageSeparator());
}
}