001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.space; 020 021@SuppressWarnings("unchecked") 022public class SpaceTap implements SpaceListener { 023 LocalSpace ssp; 024 LocalSpace dsp; 025 Object key; 026 Object tapKey; 027 long tapTimeout; 028 029 /** 030 * @param sp space 031 * @param key key to monitor 032 * @param tapKey key to use when copying 033 * @param tapTimeout copy timeout in millis 034 */ 035 public SpaceTap (LocalSpace sp, Object key, Object tapKey, long tapTimeout) { 036 this (sp, sp, key, tapKey, tapTimeout); 037 } 038 /** 039 * @param ssp source space 040 * @param dsp destination space 041 * @param key key to monitor 042 * @param tapKey key to use when copying 043 * @param tapTimeout copy timeout in millis 044 */ 045 public SpaceTap (LocalSpace ssp, LocalSpace dsp, Object key, Object tapKey, long tapTimeout) { 046 super(); 047 this.ssp = ssp; 048 this.dsp = dsp; 049 this.key = key; 050 this.tapKey = tapKey; 051 this.tapTimeout = tapTimeout; 052 if (key.equals (tapKey) && ssp == dsp) 053 throw new IllegalArgumentException ("Possible deadlock - key equals tap-key within same space"); 054 ssp.addListener (key, this); 055 } 056 public void notify (Object key, Object value) { 057 dsp.out (tapKey, value, tapTimeout); 058 } 059 060 public void close() { 061 if (ssp != null) { 062 ssp.removeListener (key, this); 063 ssp = null; 064 } 065 } 066} 067