Skip to content

Commit

Permalink
provide SPI for message logging #23
Browse files Browse the repository at this point in the history
  • Loading branch information
JacpFX committed Jul 16, 2015
1 parent 2d8bd50 commit 61224e8
Show file tree
Hide file tree
Showing 14 changed files with 338 additions and 79 deletions.
12 changes: 6 additions & 6 deletions JACP.API/src/main/java/org/jacpfx/api/message/MessageLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ public interface MessageLogger {
* Log message when send by any compinent/perspective/workbench
* @param m
*/
void onSend(Message m);
void onSend(final Message m);

void handleActive(Message m);
void handleActive(final Message m);

void handleInactive(Message m);
void handleInactive(final Message m);

void handleInCurrentPerspective(Message m);
void handleInCurrentPerspective(final Message m);

void delegate(Message m);
void delegate(final Message m);

void receive(Message m);
void receive(final Message m);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.jacpfx.rcp.perspective.FXPerspective;
import org.jacpfx.rcp.util.AccessUtil;
import org.jacpfx.rcp.util.FXUtil;
import org.jacpfx.rcp.util.MessageLoggerService;
import org.jacpfx.rcp.util.PerspectiveUtil;
import org.jacpfx.rcp.workbench.FXWorkbench;
import org.jacpfx.rcp.worker.AComponentWorker;
Expand Down Expand Up @@ -102,12 +103,17 @@ public final EventHandler<Event> getEventHandler(
@Override
public final void send(final String targetId, final Object message) {
try {
this.globalMessageQueue.put(new MessageImpl(this.fullyQualifiedId, targetId, message, null));
logAndPutMessage(new MessageImpl(this.fullyQualifiedId, targetId, message, null));
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}

private void logAndPutMessage(Message<Event, Object> m ) throws InterruptedException {
MessageLoggerService.getInstance().onSend(m);
this.globalMessageQueue.transfer(m);
}

/**
* {@inheritDoc}
*/
Expand All @@ -117,8 +123,7 @@ public final void send(final Object message) {
if (AccessUtil.hasAccess(callerClassName, FXWorkbench.class))
throw new IllegalStateException(" a FXWorkbench is no valid message target");
try {
this.globalMessageQueue.transfer(new MessageImpl(this.fullyQualifiedId,this.id, message, null));

logAndPutMessage(new MessageImpl(this.fullyQualifiedId, this.id, message, null));
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.jacpfx.rcp.registry.ComponentRegistry;
import org.jacpfx.rcp.registry.PerspectiveRegistry;
import org.jacpfx.rcp.util.FXUtil;
import org.jacpfx.rcp.util.MessageLoggerService;
import org.jacpfx.rcp.util.PerspectiveUtil;
import org.jacpfx.rcp.util.ShutdownThreadsHandler;

Expand Down Expand Up @@ -79,17 +80,21 @@ public TransferQueue<Message<Event, Object>> getMessageQueue() {
@Override
public void handleMessage(final String targetId, final Message<Event, Object> message) {
final MessageCoordinatorExecutionResult result = executeMessageHandling(targetId, message);
final Message<Event, Object> messageObject = result.getMessage();
switch (result.getState()) {
case HANDLE_ACTIVE:
handleActive(result.getTargetComponent(), result.getMessage());
MessageLoggerService.getInstance().handleActive(message);
handleActive(result.getTargetComponent(), messageObject);
break;
case HANDLE_INACTIVE:
handleInActive(result.getTargetComponent(), result.getParentPerspective(), result.getMessage());
MessageLoggerService.getInstance().handleInactive(message);
handleInActive(result.getTargetComponent(), result.getParentPerspective(), messageObject);
break;
case HANDLE_CURRENT_PERSPECTIVE:
handleCurrentPerspective(result.getTargetId(), result.getMessage());
handleCurrentPerspective(result.getTargetId(), message);
break;
case DELEGATE:
MessageLoggerService.getInstance().delegate(message);
delegateMessageToCorrectPerspective(result.getDto());
break;
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import org.jacpfx.rcp.perspective.AFXPerspective;
import org.jacpfx.rcp.registry.PerspectiveRegistry;
import org.jacpfx.rcp.util.FXUtil;
import org.jacpfx.rcp.util.MessageLoggerService;
import org.jacpfx.rcp.util.TearDownHandler;
import org.jacpfx.rcp.workbench.GlobalMediator;

Expand Down Expand Up @@ -379,6 +380,7 @@ private void handlePerspective(final Message<Event, Object> action,
// execute OnShow
onShow(perspective);
}
MessageLoggerService.getInstance().receive(action);
if (FXUtil.getTargetPerspectiveId(action.getTargetId()).equals(perspective.getContext().getId())) {
this.log("3.4.3.1: perspective handle with custom message");
perspective.handlePerspective(action);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import javafx.event.EventHandler;
import org.jacpfx.api.message.ActionListener;
import org.jacpfx.api.message.Message;
import org.jacpfx.rcp.util.MessageLoggerService;

import java.util.Objects;
import java.util.concurrent.TransferQueue;
Expand All @@ -52,13 +53,18 @@ public ActionListenerImpl(final Message<Event, Object> action,
public void notifyComponents(final Message<Event, Object> action) {
Objects.requireNonNull(action,"message cannot be null");
try {
this.globalMessageQueue.transfer(action);
logAndPutMessage(action);
} catch (InterruptedException e) {
e.printStackTrace();
//TODO handle exception global
}
}

private void logAndPutMessage(Message<Event, Object> m ) throws InterruptedException {
MessageLoggerService.getInstance().onSend(m);
this.globalMessageQueue.transfer(m);
}


@Override
public void handle(final Event t) {
Expand Down
141 changes: 75 additions & 66 deletions JACP.JavaFX/src/main/java/org/jacpfx/rcp/message/MessageImpl.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/************************************************************************
*
* Copyright (C) 2010 - 2014
*
* [FX2Action.java]
Expand All @@ -8,17 +7,15 @@
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*
*
************************************************************************/
package org.jacpfx.rcp.message;

Expand All @@ -28,83 +25,95 @@
/**
* represents an message which is fired by an component, has a target and a
* message targeting the component itself or an other component
*
*
* @author Andy Moncsek
*/
public final class MessageImpl implements Message<Event, Object> {

private Object message;
private final String sourceId;
private final Event event;
private String target;

public MessageImpl(final String sourceId) {
this.sourceId = sourceId;
this.event = null;
}
public MessageImpl(final String sourceId, final Event event) {
this.sourceId = sourceId;
this.event = event;
}

public MessageImpl(final String sourceId, final Object message) {
this.sourceId = sourceId;
this.setMessageBody(message);
this.event = null;
}

public MessageImpl(final String sourceId, final String targetId,
private Object message;
private final String sourceId;
private final Event event;
private String target;

public MessageImpl(final String sourceId) {
this.sourceId = sourceId;
this.event = null;
}

public MessageImpl(final String sourceId, final Event event) {
this.sourceId = sourceId;
this.event = event;
}

public MessageImpl(final String sourceId, final Object message) {
this.sourceId = sourceId;
this.setMessageBody(message);
this.event = null;
}

public MessageImpl(final String sourceId, final String targetId,
final Object message, final Event event) {
this.sourceId = sourceId;
this.target = targetId;
this.event = event;
this.setMessageBody(message);
}

private void setMessageBody(final Object message) {
this.message = message;
this.target = this.target != null ? this.target : this.sourceId;
}


@Override
public Object getMessageBody() {
return this.message;
}

@Override
public String getSourceId() {
return this.sourceId;
}

@Override
public Event getSourceEvent() {
return this.event;
}

@Override
public Message<Event, Object> cloneMessage() {
return new MessageImpl(this.sourceId,this.target, this.message, this.event);
}

@Override
public String getTargetId() {
return this.target;
}
this.sourceId = sourceId;
this.target = targetId;
this.event = event;
this.setMessageBody(message);
}


private void setMessageBody(final Object message) {
this.message = message;
this.target = this.target != null ? this.target : this.sourceId;
}


@Override
public Object getMessageBody() {
return this.message;
}

@Override
public String getSourceId() {
return this.sourceId;
}

@Override
public Event getSourceEvent() {
return this.event;
}

@Override
public Message<Event, Object> cloneMessage() {
return new MessageImpl(this.sourceId, this.target, this.message, this.event);
}

@Override
public String getTargetId() {
return this.target;
}

@Override
public <T> boolean isMessageBodyTypeOf(final Class<T> clazz) {
return clazz.isAssignableFrom(this.message.getClass());
}

@Override
public <T> T getTypedMessageBody(final Class<T> clazz) {
return clazz.cast(this.message);
}

@Override
public boolean messageBodyEquals(Object object) {
return object.equals(this.message);
}


@Override
public String toString() {
return "MessageImpl{" +
"message=" + message +
", sourceId='" + sourceId + '\'' +
", event=" + event +
", target='" + target + '\'' +
'}';
}
}

0 comments on commit 61224e8

Please sign in to comment.