001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     Florent Guillaume
011 */
012package org.nuxeo.ecm.core.storage.sql;
013
014import java.io.Serializable;
015import java.util.Calendar;
016import java.util.Collection;
017import java.util.Map;
018import java.util.Set;
019
020import javax.transaction.xa.XAException;
021import javax.transaction.xa.XAResource;
022import javax.transaction.xa.Xid;
023
024import org.nuxeo.ecm.core.api.IterableQueryResult;
025import org.nuxeo.ecm.core.api.Lock;
026import org.nuxeo.ecm.core.api.PartialList;
027import org.nuxeo.ecm.core.query.QueryFilter;
028
029/**
030 * A {@link Mapper} that uses a {@link SoftRefCachingRowMapper} for row-related operation, and delegates to the
031 * {@link Mapper} for others.
032 */
033public class SoftRefCachingMapper extends SoftRefCachingRowMapper implements CachingMapper {
034
035    /**
036     * The {@link Mapper} to which operations are delegated.
037     */
038    public Mapper mapper;
039
040    @Override
041    public void initialize(String repositoryName, Model model, Mapper mapper, InvalidationsPropagator cachePropagator,
042            Map<String, String> properties) {
043        super.initialize(repositoryName, model, mapper, cachePropagator, properties);
044        this.mapper = mapper;
045    }
046
047    @Override
048    public Identification getIdentification() {
049        return mapper.getIdentification();
050    }
051
052    @Override
053    public void close() {
054        super.close();
055        mapper.close();
056    }
057
058    @Override
059    public int getTableSize(String tableName) {
060        return mapper.getTableSize(tableName);
061    }
062
063    @Override
064    public void createDatabase() {
065        mapper.createDatabase();
066    }
067
068    @Override
069    public Serializable getRootId(String repositoryId) {
070        return mapper.getRootId(repositoryId);
071    }
072
073    @Override
074    public void setRootId(Serializable repositoryId, Serializable id) {
075        mapper.setRootId(repositoryId, id);
076    }
077
078    @Override
079    public PartialList<Serializable> query(String query, String queryType, QueryFilter queryFilter,
080            boolean countTotal) {
081        return mapper.query(query, queryType, queryFilter, countTotal);
082    }
083
084    @Override
085    public PartialList<Serializable> query(String query, String queryType, QueryFilter queryFilter, long countUpTo) {
086        return mapper.query(query, queryType, queryFilter, countUpTo);
087    }
088
089    @Override
090    public IterableQueryResult queryAndFetch(String query, String queryType, QueryFilter queryFilter,
091            Object... params) {
092        return mapper.queryAndFetch(query, queryType, queryFilter, params);
093    }
094
095    @Override
096    public Set<Serializable> getAncestorsIds(Collection<Serializable> ids) {
097        return mapper.getAncestorsIds(ids);
098    }
099
100    @Override
101    public void updateReadAcls() {
102        mapper.updateReadAcls();
103    }
104
105    @Override
106    public void rebuildReadAcls() {
107        mapper.rebuildReadAcls();
108    }
109
110    @Override
111    public int getClusterNodeIdType() {
112        return mapper.getClusterNodeIdType();
113    }
114
115    @Override
116    public void createClusterNode(Serializable nodeId) {
117        mapper.createClusterNode(nodeId);
118    }
119
120    @Override
121    public void removeClusterNode(Serializable nodeId) {
122        mapper.removeClusterNode(nodeId);
123    }
124
125    @Override
126    public void insertClusterInvalidations(Serializable nodeId, Invalidations invalidations) {
127        mapper.insertClusterInvalidations(nodeId, invalidations);
128    }
129
130    @Override
131    public Invalidations getClusterInvalidations(Serializable nodeId) {
132        return mapper.getClusterInvalidations(nodeId);
133    }
134
135    @Override
136    public Lock getLock(Serializable id) {
137        return mapper.getLock(id);
138    }
139
140    @Override
141    public Lock setLock(Serializable id, Lock lock) {
142        return mapper.setLock(id, lock);
143    }
144
145    @Override
146    public Lock removeLock(Serializable id, String owner, boolean force) {
147        return mapper.removeLock(id, owner, force);
148    }
149
150    @Override
151    public void markReferencedBinaries() {
152        mapper.markReferencedBinaries();
153    }
154
155    @Override
156    public int cleanupDeletedRows(int max, Calendar beforeTime) {
157        return mapper.cleanupDeletedRows(max, beforeTime);
158    }
159
160    @Override
161    public void start(Xid xid, int flags) throws XAException {
162        mapper.start(xid, flags);
163    }
164
165    @Override
166    public void end(Xid xid, int flags) throws XAException {
167        mapper.end(xid, flags);
168
169    }
170
171    @Override
172    public int prepare(Xid xid) throws XAException {
173        return mapper.prepare(xid);
174    }
175
176    @Override
177    public void commit(Xid xid, boolean onePhase) throws XAException {
178        mapper.commit(xid, onePhase);
179    }
180
181    // rollback interacts with caches so is in RowMapper
182
183    @Override
184    public void forget(Xid xid) throws XAException {
185        mapper.forget(xid);
186    }
187
188    @Override
189    public Xid[] recover(int flag) throws XAException {
190        return mapper.recover(flag);
191    }
192
193    @Override
194    public boolean setTransactionTimeout(int seconds) throws XAException {
195        return mapper.setTransactionTimeout(seconds);
196    }
197
198    @Override
199    public int getTransactionTimeout() throws XAException {
200        return mapper.getTransactionTimeout();
201    }
202
203    @Override
204    public boolean isSameRM(XAResource xares) throws XAException {
205        return mapper.isSameRM(xares);
206    }
207
208    @Override
209    public boolean isConnected() {
210        return mapper.isConnected();
211    }
212
213    @Override
214    public void connect() {
215        mapper.connect();
216    }
217
218    @Override
219    public void disconnect() {
220        mapper.disconnect();
221    }
222
223}