001package org.apache.commons.jcs3.auxiliary.remote.util;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.Set;
023
024import org.apache.commons.jcs3.auxiliary.remote.value.RemoteCacheRequest;
025import org.apache.commons.jcs3.auxiliary.remote.value.RemoteRequestType;
026import org.apache.commons.jcs3.engine.behavior.ICacheElement;
027import org.apache.commons.jcs3.log.Log;
028import org.apache.commons.jcs3.log.LogManager;
029
030/**
031 * This creates request objects. You could write your own client and use the objects from this
032 * factory.
033 */
034public class RemoteCacheRequestFactory
035{
036    /** The Logger. */
037    private static final Log log = LogManager.getLog( RemoteCacheRequestFactory.class );
038
039    /**
040     * Create generic request
041     * @param cacheName cache name
042     * @param requestType type of request
043     * @param requesterId id of requester
044     * @return the request
045     */
046    private static <K, V> RemoteCacheRequest<K, V> createRequest(final String cacheName, final RemoteRequestType requestType, final long requesterId)
047    {
048        final RemoteCacheRequest<K, V> request = new RemoteCacheRequest<>();
049        request.setCacheName( cacheName );
050        request.setRequestType( requestType );
051        request.setRequesterId( requesterId );
052
053        log.debug( "Created: {0}", request );
054
055        return request;
056    }
057
058    /**
059     * Creates a get Request.
060     * <p>
061     * @param cacheName
062     * @param key
063     * @param requesterId
064     * @return RemoteHttpCacheRequest
065     */
066    public static <K, V> RemoteCacheRequest<K, V> createGetRequest( final String cacheName, final K key, final long requesterId )
067    {
068        final RemoteCacheRequest<K, V> request = createRequest(cacheName, RemoteRequestType.GET, requesterId);
069        request.setKey( key );
070
071        return request;
072    }
073
074    /**
075     * Creates a getMatching Request.
076     * <p>
077     * @param cacheName
078     * @param pattern
079     * @param requesterId
080     * @return RemoteHttpCacheRequest
081     */
082    public static <K, V> RemoteCacheRequest<K, V> createGetMatchingRequest( final String cacheName, final String pattern, final long requesterId )
083    {
084        final RemoteCacheRequest<K, V> request = createRequest(cacheName, RemoteRequestType.GET_MATCHING, requesterId);
085        request.setPattern( pattern );
086
087        return request;
088    }
089
090    /**
091     * Creates a getMultiple Request.
092     * <p>
093     * @param cacheName
094     * @param keys
095     * @param requesterId
096     * @return RemoteHttpCacheRequest
097     */
098    public static <K, V> RemoteCacheRequest<K, V> createGetMultipleRequest( final String cacheName, final Set<K> keys, final long requesterId )
099    {
100        final RemoteCacheRequest<K, V> request = createRequest(cacheName, RemoteRequestType.GET_MULTIPLE, requesterId);
101        request.setKeySet(keys);
102
103        return request;
104    }
105
106    /**
107     * Creates a remove Request.
108     * <p>
109     * @param cacheName
110     * @param key
111     * @param requesterId
112     * @return RemoteHttpCacheRequest
113     */
114    public static <K, V> RemoteCacheRequest<K, V> createRemoveRequest( final String cacheName, final K key, final long requesterId )
115    {
116        final RemoteCacheRequest<K, V> request = createRequest(cacheName, RemoteRequestType.REMOVE, requesterId);
117        request.setKey( key );
118
119        return request;
120    }
121
122    /**
123     * Creates a GetKeySet Request.
124     * <p>
125     * @param cacheName
126     * @param requesterId
127     * @return RemoteHttpCacheRequest
128     */
129    public static RemoteCacheRequest<String, String> createGetKeySetRequest( final String cacheName, final long requesterId )
130    {
131        final RemoteCacheRequest<String, String> request = createRequest(cacheName, RemoteRequestType.GET_KEYSET, requesterId);
132        request.setKey( cacheName );
133
134        return request;
135    }
136
137    /**
138     * Creates a removeAll Request.
139     * <p>
140     * @param cacheName
141     * @param requesterId
142     * @return RemoteHttpCacheRequest
143     */
144    public static <K, V> RemoteCacheRequest<K, V> createRemoveAllRequest( final String cacheName, final long requesterId )
145    {
146
147        return createRequest(cacheName, RemoteRequestType.REMOVE_ALL, requesterId);
148    }
149
150    /**
151     * Creates a dispose Request.
152     * <p>
153     * @param cacheName
154     * @param requesterId
155     * @return RemoteHttpCacheRequest
156     */
157    public static <K, V> RemoteCacheRequest<K, V> createDisposeRequest( final String cacheName, final long requesterId )
158    {
159
160        return createRequest(cacheName, RemoteRequestType.DISPOSE, requesterId);
161    }
162
163    /**
164     * Creates an Update Request.
165     * <p>
166     * @param cacheElement
167     * @param requesterId
168     * @return RemoteHttpCacheRequest
169     */
170    public static <K, V> RemoteCacheRequest<K, V> createUpdateRequest( final ICacheElement<K, V> cacheElement, final long requesterId )
171    {
172        final RemoteCacheRequest<K, V> request = createRequest(null, RemoteRequestType.UPDATE, requesterId);
173        if ( cacheElement != null )
174        {
175            request.setCacheName( cacheElement.getCacheName() );
176            request.setCacheElement( cacheElement );
177            request.setKey( cacheElement.getKey() );
178        }
179        else
180        {
181            log.error( "Can't create a proper update request for a null cache element." );
182        }
183
184        return request;
185    }
186
187    /**
188     * Creates an alive check Request.
189     * <p>
190     * @param requesterId
191     * @return RemoteHttpCacheRequest
192     */
193    public static <K, V> RemoteCacheRequest<K, V> createAliveCheckRequest( final long requesterId )
194    {
195
196        return createRequest(null, RemoteRequestType.ALIVE_CHECK, requesterId);
197    }
198}