001/*
002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Florent Guillaume
018 *     Benoit Delbosc
019 */
020package org.nuxeo.ecm.core.storage.sql;
021
022import java.io.Serializable;
023import java.util.Calendar;
024import java.util.Collection;
025import java.util.Map;
026import java.util.Set;
027
028import javax.transaction.xa.XAException;
029import javax.transaction.xa.XAResource;
030import javax.transaction.xa.Xid;
031
032import org.nuxeo.ecm.core.api.IterableQueryResult;
033import org.nuxeo.ecm.core.api.Lock;
034import org.nuxeo.ecm.core.api.PartialList;
035import org.nuxeo.ecm.core.api.ScrollResult;
036import org.nuxeo.ecm.core.query.QueryFilter;
037
038/**
039 * A {@link Mapper} that uses a {@link UnifiedCachingRowMapper} for row-related operation, and delegates to the
040 * {@link Mapper} for others.
041 */
042public class UnifiedCachingMapper extends UnifiedCachingRowMapper implements CachingMapper {
043
044    /**
045     * The {@link Mapper} to which operations are delegated.
046     */
047    public Mapper mapper;
048
049    @Override
050    public void initialize(String repositoryName, Model model, Mapper mapper,
051            InvalidationsPropagator invalidationsPropagator, Map<String, String> properties) {
052        super.initialize(repositoryName, model, mapper, invalidationsPropagator, properties);
053        this.mapper = mapper;
054    }
055
056    @Override
057    public ScrollResult scroll(String query, int batchSize, int keepAliveSeconds) {
058        return mapper.scroll(query, batchSize, keepAliveSeconds);
059    }
060
061    @Override
062    public ScrollResult scroll(String scrollId) {
063        return mapper.scroll(scrollId);
064    }
065
066    @Override
067    public Identification getIdentification() {
068        return mapper.getIdentification();
069    }
070
071    @Override
072    public void close() {
073        super.close();
074        mapper.close();
075    }
076
077    @Override
078    public int getTableSize(String tableName) {
079        return mapper.getTableSize(tableName);
080    }
081
082    @Override
083    public void createDatabase(String ddlMode) {
084        mapper.createDatabase(ddlMode);
085    }
086
087    @Override
088    public Serializable getRootId(String repositoryId) {
089        return mapper.getRootId(repositoryId);
090    }
091
092    @Override
093    public void setRootId(Serializable repositoryId, Serializable id) {
094        mapper.setRootId(repositoryId, id);
095    }
096
097    @Override
098    public PartialList<Serializable> query(String query, String queryType, QueryFilter queryFilter,
099            boolean countTotal) {
100        return mapper.query(query, queryType, queryFilter, countTotal);
101    }
102
103    @Override
104    public PartialList<Serializable> query(String query, String queryType, QueryFilter queryFilter, long countUpTo) {
105        return mapper.query(query, queryType, queryFilter, countUpTo);
106    }
107
108    @Override
109    public IterableQueryResult queryAndFetch(String query, String queryType, QueryFilter queryFilter,
110            boolean distinctDocuments, Object... params) {
111        return mapper.queryAndFetch(query, queryType, queryFilter, distinctDocuments, params);
112    }
113
114    @Override
115    public Set<Serializable> getAncestorsIds(Collection<Serializable> ids) {
116        return mapper.getAncestorsIds(ids);
117    }
118
119    @Override
120    public void updateReadAcls() {
121        mapper.updateReadAcls();
122    }
123
124    @Override
125    public void rebuildReadAcls() {
126        mapper.rebuildReadAcls();
127    }
128
129    @Override
130    public int getClusterNodeIdType() {
131        return mapper.getClusterNodeIdType();
132    }
133
134    @Override
135    public void createClusterNode(Serializable nodeId) {
136        mapper.createClusterNode(nodeId);
137    }
138
139    @Override
140    public void removeClusterNode(Serializable nodeId) {
141        mapper.removeClusterNode(nodeId);
142    }
143
144    @Override
145    public void insertClusterInvalidations(Serializable nodeId, Invalidations invalidations) {
146        mapper.insertClusterInvalidations(nodeId, invalidations);
147    }
148
149    @Override
150    public Invalidations getClusterInvalidations(Serializable nodeId) {
151        return mapper.getClusterInvalidations(nodeId);
152    }
153
154    @Override
155    public Lock getLock(Serializable id) {
156        return mapper.getLock(id);
157    }
158
159    @Override
160    public Lock setLock(Serializable id, Lock lock) {
161        return mapper.setLock(id, lock);
162    }
163
164    @Override
165    public Lock removeLock(Serializable id, String owner, boolean force) {
166        return mapper.removeLock(id, owner, force);
167    }
168
169    @Override
170    public void markReferencedBinaries() {
171        mapper.markReferencedBinaries();
172    }
173
174    @Override
175    public int cleanupDeletedRows(int max, Calendar beforeTime) {
176        return mapper.cleanupDeletedRows(max, beforeTime);
177    }
178
179    @Override
180    public void start(Xid xid, int flags) throws XAException {
181        mapper.start(xid, flags);
182    }
183
184    @Override
185    public void end(Xid xid, int flags) throws XAException {
186        mapper.end(xid, flags);
187
188    }
189
190    @Override
191    public int prepare(Xid xid) throws XAException {
192        return mapper.prepare(xid);
193    }
194
195    @Override
196    public void commit(Xid xid, boolean onePhase) throws XAException {
197        mapper.commit(xid, onePhase);
198    }
199
200    // rollback interacts with caches so is in RowMapper
201
202    @Override
203    public void forget(Xid xid) throws XAException {
204        mapper.forget(xid);
205    }
206
207    @Override
208    public Xid[] recover(int flag) throws XAException {
209        return mapper.recover(flag);
210    }
211
212    @Override
213    public boolean setTransactionTimeout(int seconds) throws XAException {
214        return mapper.setTransactionTimeout(seconds);
215    }
216
217    @Override
218    public int getTransactionTimeout() throws XAException {
219        return mapper.getTransactionTimeout();
220    }
221
222    @Override
223    public boolean isSameRM(XAResource xares) throws XAException {
224        return mapper.isSameRM(xares);
225    }
226
227    @Override
228    public boolean isConnected() {
229        return mapper.isConnected();
230    }
231
232    @Override
233    public void connect() {
234        mapper.connect();
235    }
236
237    @Override
238    public void disconnect() {
239        mapper.disconnect();
240    }
241}