| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more contributor license |
| * agreements. See the NOTICE file distributed with this work for additional information regarding |
| * copyright ownership. The ASF licenses this file to You 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.apache.geode.cache.query.cq.internal; |
| |
| |
| /** |
| * Interface for CqEvent. Offers methods to get information from CqEvent. |
| * |
| * @since GemFire 5.5 |
| */ |
| |
| import org.apache.geode.InvalidDeltaException; |
| import org.apache.geode.cache.Operation; |
| import org.apache.geode.cache.client.internal.QueueManager; |
| import org.apache.geode.cache.query.CqEvent; |
| import org.apache.geode.cache.query.CqQuery; |
| import org.apache.geode.internal.cache.EventID; |
| |
| public class CqEventImpl implements CqEvent { |
| |
| private final CqQuery cQuery; |
| private final Operation baseOp; |
| private final Operation queryOp; |
| private final Object newValue; |
| private final Object key; |
| private final byte[] delta; |
| private Throwable throwable = null; |
| private final QueueManager qManager; |
| private final EventID eventId; |
| |
| CqEventImpl(CqQuery cQuery, Operation baseOp, Operation cqOp, Object key, Object value, |
| byte[] deltaVal, QueueManager qManager, EventID eventId) { |
| this.cQuery = cQuery; |
| this.queryOp = cqOp; |
| this.baseOp = baseOp; |
| this.key = key; |
| this.newValue = value; |
| this.delta = deltaVal; |
| // Handle Exception event. |
| if (this.queryOp == null) { |
| setException(); |
| } |
| this.qManager = qManager; |
| this.eventId = eventId; |
| } |
| |
| @Override |
| public CqQuery getCq() { |
| return this.cQuery; |
| } |
| |
| /** |
| * Get the operation on the base region that triggered this event. |
| */ |
| @Override |
| public Operation getBaseOperation() { |
| return this.baseOp; |
| } |
| |
| /** |
| * Get the the operation on the query results. Supported operations include update, create, and |
| * destroy. |
| */ |
| @Override |
| public Operation getQueryOperation() { |
| return this.queryOp; |
| } |
| |
| /** |
| * Get the key relating to the event. |
| * |
| * @return Object key. |
| */ |
| @Override |
| public Object getKey() { |
| return this.key; |
| } |
| |
| /** |
| * Get the old value that was modified. If there is no old value because this is an insert, then |
| * return null. |
| */ |
| /* |
| * public Object getOldValue() { return this.oldValue; } |
| */ |
| |
| /** |
| * Get the new value of the modification. If there is no new value because this is a delete, then |
| * return null. |
| */ |
| @Override |
| public Object getNewValue() { |
| if (this.newValue == null && this.delta != null) { |
| throw new InvalidDeltaException(); |
| } |
| return this.newValue; |
| } |
| |
| /** |
| * If an error occurred, return the Throwable, otherwise return null. If an error occurred, then |
| * this event will be passed to the <code>onError</code> method of the CqListener instead of the |
| * <code>onEvent</code> method. |
| */ |
| @Override |
| public Throwable getThrowable() { |
| return this.throwable; |
| } |
| |
| @Override |
| public byte[] getDeltaValue() { |
| return this.delta; |
| } |
| |
| /** |
| * Checks if the Cq Event is for an exception. If so constructs the exception. |
| */ |
| public void setException() { |
| // Needs to be changed. |
| this.throwable = new Throwable( |
| "Exception occurred while applying query on a cache event."); |
| } |
| |
| public void setException(String exceptionText) { |
| this.throwable = new Throwable(exceptionText); |
| } |
| |
| public QueueManager getQueueManager() { |
| return this.qManager; |
| } |
| |
| public EventID getEventID() { |
| return this.eventId; |
| } |
| |
| @Override |
| public String toString() { |
| StringBuffer buffer = new StringBuffer(); |
| buffer.append("CqEvent [").append("CqName=").append(this.cQuery.getName()) |
| .append("; base operation=").append(this.baseOp).append("; cq operation=") |
| .append(this.queryOp).append("; key=").append(this.key).append("; value=") |
| .append(this.newValue).append("]"); |
| return buffer.toString(); |
| } |
| } |