001/* 002 * HA-JDBC: High-Availability JDBC 003 * Copyright (C) 2013 Paul Ferraro 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Lesser General Public License as published by 007 * the Free Software Foundation, either version 3 of the License, or 008 * (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 Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018package net.sf.hajdbc.sql; 019 020import java.util.SortedMap; 021 022import net.sf.hajdbc.Database; 023import net.sf.hajdbc.invocation.Invoker; 024 025/** 026 * 027 * @author Paul Ferraro 028 */ 029public class ProxyInvocationResultFactory<Z, D extends Database<Z>, P, R, E extends Exception> implements InvocationResultFactory<Z, D, R> 030{ 031 private final ProxyFactoryFactory<Z, D, P, E, R, ? extends Exception> factory; 032 private final P parentProxy; 033 private final ProxyFactory<Z, D, P, E> parent; 034 private final Invoker<Z, D, P, R, E> invoker; 035 036 public ProxyInvocationResultFactory(ProxyFactoryFactory<Z, D, P, E, R, ? extends Exception> factory, P parentProxy, ProxyFactory<Z, D, P, E> parent, Invoker<Z, D, P, R, E> invoker) 037 { 038 this.factory = factory; 039 this.parentProxy = parentProxy; 040 this.parent = parent; 041 this.invoker = invoker; 042 } 043 044 @Override 045 public boolean differs(R primaryResult, R backupResult) 046 { 047 return ((primaryResult != null) && (backupResult == null)) || ((primaryResult == null) && (backupResult != null)); 048 } 049 050 @Override 051 public R createResult(SortedMap<D, R> results) 052 { 053 return this.factory.createProxyFactory(this.parentProxy, this.parent, this.invoker, results).createProxy(); 054 } 055}