/* * Copyright 2002-2010 the original author or authors. * * 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 * * 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 express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.integration.security.channel; import org.aopalliance.intercept.MethodInvocation; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.util.Assert; /** * Secured object for {@link ChannelSecurityInterceptor}. Maintains a reference * to the original {@link MethodInvocation} instance and provides convenient * access to the secured {@link MessageChannel}. If the intercepted invocation * is a <em>send</em> operation, the {@link Message} is also available. * * @author Mark Fisher */ public class ChannelInvocation { private final MessageChannel channel; private final Message<?> message; private final MethodInvocation methodInvocation; /** * @param methodInvocation the intercepted MethodInvocation instance */ public ChannelInvocation(MethodInvocation methodInvocation) { Assert.notNull(methodInvocation, "MethodInvocation must not be null"); Assert.isAssignable(MessageChannel.class, methodInvocation.getThis().getClass(), "MethodInvocation must be on a MessageChannel"); this.channel = (MessageChannel) methodInvocation.getThis(); if (methodInvocation.getMethod().getName().equals("send")) { if (methodInvocation.getArguments().length < 1 || !(methodInvocation.getArguments()[0] instanceof Message<?>)) { throw new IllegalStateException("expected a Message as the first parameter of the channel's send method"); } this.message = (Message<?>) methodInvocation.getArguments()[0]; } else { this.message = null; } this.methodInvocation = methodInvocation; } public MessageChannel getChannel() { return this.channel; } public Message<?> getMessage() { return this.message; } public MethodInvocation getMethodInvocation() { return this.methodInvocation; } public boolean isSend() { return "send".equals(this.methodInvocation.getMethod().getName()); } public boolean isReceive() { return "receive".equals(this.methodInvocation.getMethod().getName()); } }