Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mark messages as favorites #137

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ public static synchronized PublishGlobalDispatcher getInstance() {
public void onPublishSuceeded(String connectionId, MessageDTO messageDTO) {
triggerFiltered(connectionId, o -> o.onPublishSucceeded(connectionId, messageDTO));
}

public void onPublishChangeFavoriteStatus(String connectionId, MessageDTO messageDTO) {
triggerFiltered(connectionId, o -> o.onPublishChangeFavoriteStatus(connectionId, messageDTO));
}
public void onPublishRemoved(String connectionId, MessageDTO messageDTO) {
triggerFiltered(connectionId, o -> o.onPublishRemoved(connectionId, messageDTO));
}

public void onPublishesCleared(String connectionId){
triggerFiltered(connectionId, o -> o.onPublishesCleared(connectionId));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ public interface PublishGlobalObserver extends BaseConnectionObserver {
void onPublishSucceeded(String connectionId, MessageDTO messageDTO);
void onPublishRemoved(String connectionId, MessageDTO messageDTO);
void onPublishesCleared(String connectionId);
void onPublishChangeFavoriteStatus(String connectionId, MessageDTO messageDTO);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public class MessageDTO implements Comparable<MessageDTO> {
private String topic;
private String payload;
private boolean isRetained;
private boolean isFavorited;
private Qos qos;
@MessageDateTimeFormatter
private LocalDateTime dateTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -79,7 +80,7 @@ public void onPublishSucceeded(String connectionId, MessageDTO messageDTO) {
List<String> topicsSet = getTopics(connectionId);
String topic = messageDTO.getTopic();
topicsSet.remove(topic);
topicsSet.add(topic);
topicsSet.add(0,topic);
while (topicsSet.size() > MAX_ENTRIES) {
LOGGER.info("Removing last entry from publish history, cause limit of {} is reached.", MAX_ENTRIES);
topicsSet.remove(topicsSet.iterator().next());
Expand Down Expand Up @@ -108,6 +109,11 @@ public void onPublishesCleared(String connectionId) {
// nothing to do
}

@Override
public void onPublishChangeFavoriteStatus(String connectionId, MessageDTO messageDTO) {
// nothing to do
}

@Override
public void onDisconnectFromConnectionDeleted(String connectionId) {
// nothing to do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
package org.correomqtt.business.provider;

import org.correomqtt.business.dispatcher.ConfigDispatcher;
import org.correomqtt.business.dispatcher.ConfigObserver;
import org.correomqtt.business.dispatcher.ConnectionLifecycleDispatcher;
import org.correomqtt.business.dispatcher.ConnectionLifecycleObserver;
import org.correomqtt.business.dispatcher.PersistPublishHistoryDispatcher;
import org.correomqtt.business.dispatcher.PublishGlobalDispatcher;
import org.correomqtt.business.dispatcher.PublishGlobalObserver;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.correomqtt.business.model.MessageDTO;
import org.correomqtt.business.model.PublishMessageHistoryListDTO;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.correomqtt.gui.model.MessagePropertiesDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

public class PersistPublishMessageHistoryProvider extends BasePersistHistoryProvider<PublishMessageHistoryListDTO>
implements PublishGlobalObserver,
Expand Down Expand Up @@ -68,20 +70,27 @@ void setDTO(String id, PublishMessageHistoryListDTO dto) {
historyDTOs.put(id, dto);
}

public List<MessageDTO> getMessages(String connectionId) {
public LinkedList<MessageDTO> getMessages(String connectionId) {
return historyDTOs.get(connectionId).getMessages();
}

@Override
public void onPublishSucceeded(String connectionId, MessageDTO messageDTO) {
LOGGER.info("Persisting new publish history entry: {}", messageDTO.getTopic());

List<MessageDTO> messageList = getMessages(connectionId);
messageList.add(0,messageDTO);
while (messageList.size() > MAX_ENTRIES) {
LinkedList<MessageDTO> messageList = getMessages(connectionId);
messageList.addFirst(messageDTO);

LinkedList<MessageDTO> nonFavorites = messageList.stream()
.filter(m->m.isFavorited()!=true)
.collect(Collectors.toCollection(LinkedList::new));

while (messageList.size() > MAX_ENTRIES){
LOGGER.info("Removing last entry from publish history, cause limit of {} is reached.", MAX_ENTRIES);
messageList.remove(messageList.size()-1);
messageList.remove(nonFavorites.getLast());
nonFavorites.clear();
}

saveHistory(connectionId);
}

Expand All @@ -101,12 +110,25 @@ public void onPublishRemoved(String connectionId, MessageDTO messageDTO) {
messageList.remove(messageDTO);
saveHistory(connectionId);
}
@Override
public void onPublishChangeFavoriteStatus(String connectionId, MessageDTO messageDTO) {
LOGGER.info("change {} in fervorites list for {}.", messageDTO.getTopic(), connectionId);
LinkedList<MessageDTO> messageList = getMessages(connectionId);
for(int i =0; i<messageList.size();i++){
if(messageList.get(i).getMessageId()==messageDTO.getMessageId()){
messageDTO.setFavorited(!messageList.get(i).isFavorited());
messageList.set(i,messageDTO);
}
}
saveHistory(connectionId);
}

@Override
public void onPublishesCleared(String connectionId) {
LOGGER.info("Clearing publish history for {}.", connectionId);
List<MessageDTO> messageList = getMessages(connectionId);
messageList.clear();
LinkedList<MessageDTO> messageList = getMessages(connectionId);
List<MessageDTO> nonFavoriteMessages =messageList.stream().filter(m-> !m.isFavorited()).collect(Collectors.toList());
messageList.removeAll(nonFavoriteMessages);
saveHistory(connectionId);
}

Expand Down
16 changes: 14 additions & 2 deletions src/main/java/org/correomqtt/gui/cell/MessageViewCell.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,17 @@ public class MessageViewCell extends ListCell<MessagePropertiesDTO> {
@FXML
private Label payloadLabel;

@FXML
private ToggleButton FavoriteStar;

@FXML
private Label subscriptionLabel;

private FXMLLoader loader;

private MessagePropertiesDTO messageDTO;

private ContextMenu contextMenu;

@FXML
private ResourceBundle resources;
Expand Down Expand Up @@ -123,7 +129,9 @@ private void setUpMessage(MessagePropertiesDTO messageDTO) {

subscriptionLabel.setVisible(false);
subscriptionLabel.setManaged(false);


this.messageDTO = messageDTO;

topicLabel.setText(messageDTO.getTopic());

if (messageDTO.getSubscription() != null) {
Expand All @@ -134,6 +142,10 @@ private void setUpMessage(MessagePropertiesDTO messageDTO) {

retainedLabel.setVisible(messageDTO.isRetained());
retainedLabel.setManaged(messageDTO.isRetained());

FavoriteStar.setVisible(messageDTO.isFavorited());
FavoriteStar.setSelected(messageDTO.isFavorited());

qosLabel.setText(messageDTO.getQos().toString());
String payload = messageDTO.getPayload();
payloadLabel.setText(payload.substring(0, Math.min(payload.length(), MAX_PAYLOAD_LENGTH))
Expand All @@ -145,7 +157,7 @@ private void setUpMessage(MessagePropertiesDTO messageDTO) {
private void executeOnCreateMessageEntryExtensions(MessagePropertiesDTO messageDTO) {
labelBox.getChildren().clear();
PluginManager.getInstance().getExtensions(MessageListHook.class)
.forEach(p -> p.onCreateEntry(new MessageExtensionDTO(messageDTO), labelBox));
.forEach(p -> p.onCreateEntry(new MessageExtensionDTO(messageDTO), labelBox));
}

private void validateMessage(MessagePropertiesDTO messageDTO) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class MessageListContextMenu extends BaseMessageContextMenu<MessageListCo
private MenuItem removeMessage;
private MenuItem saveMessage;
private MenuItem timeInfo;
private MenuItem markAsFavorite;

private SeparatorMenuItem separator1;
private SeparatorMenuItem separator2;
Expand All @@ -34,6 +35,9 @@ protected void initializeItems() {
saveMessage = new MenuItem(getResources().getString("messageListContextMenuSaveMenuItem"));
saveMessage.setOnAction(this::saveMessage);

markAsFavorite = new MenuItem(getResources().getString("messageListContextMenuMarkAsFavorite"));
markAsFavorite.setOnAction(this::markMessageAsFavorite);

timeInfo = new MenuItem();
timeInfo.setVisible(false);
timeInfo.setDisable(true);
Expand All @@ -49,6 +53,7 @@ protected void initializeItems() {
showDetails,
removeMessage,
saveMessage,
markAsFavorite,
separator1,
copyTopicToClipboard,
copyTimeToClipboard,
Expand All @@ -69,6 +74,14 @@ private void saveMessage(ActionEvent actionEvent) {
}
}

private void markMessageAsFavorite(ActionEvent actionEvent){
if (dto != null) {
delegate.markMessageAsFavorite(dto);
} else {
LOGGER.warn("Call to {}::removeMessage with empty message.", getClassName());
}
}


@Override
public void setObject(MessagePropertiesDTO messageDTO){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ public interface MessageListContextMenuDelegate extends BaseMessageContextMenuDe
void removeMessage(MessagePropertiesDTO messageDTO);

void saveMessage(MessagePropertiesDTO dto);

void markMessageAsFavorite(MessagePropertiesDTO dto);
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,8 @@ public class DetailViewController extends BaseConnectionController implements
private Label emptyLabel;
@FXML
private VBox metaHolder;
@FXML
private ToggleButton FavoriteStar;
private List<Search> results;
private int currentSearchResult;
private String currentSearchString = null;
Expand Down Expand Up @@ -215,6 +217,8 @@ private void initialize() {
}
});

FavoriteStar.setVisible(false );

detailViewVBox.addEventHandler(KeyEvent.KEY_PRESSED, event -> {
if (event.isShortcutDown() && KeyCode.F == event.getCode()) {
toggleSearchBar();
Expand Down Expand Up @@ -319,6 +323,9 @@ private void showMessage() {
emptyLabel.setManaged(false);
messageGroup.setVisible(true);
messageGroup.setManaged(true);
FavoriteStar.setVisible(messageDTO!=null && messageDTO.isFavorited());



detailViewTopicLabel.setText(messageDTO.getTopic());
detailViewTime.setText(messageDTO.getDateTime().toString()); //TODO formatter
Expand Down
Loading