001
014
015 package com.liferay.portal.search.buffer;
016
017 import com.liferay.portal.kernel.util.AutoResetThreadLocal;
018
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.LinkedHashMap;
022 import java.util.List;
023
024
027 public class IndexerRequestBuffer {
028
029 public static IndexerRequestBuffer create() {
030 List<IndexerRequestBuffer> indexerRequestBuffers =
031 _indexerRequestBuffersThreadLocal.get();
032
033 IndexerRequestBuffer indexerRequestBuffer = new IndexerRequestBuffer();
034
035 indexerRequestBuffers.add(indexerRequestBuffer);
036
037 return indexerRequestBuffer;
038 }
039
040 public static IndexerRequestBuffer get() {
041 List<IndexerRequestBuffer> indexerRequestBuffers =
042 _indexerRequestBuffersThreadLocal.get();
043
044 if (indexerRequestBuffers.isEmpty()) {
045 return null;
046 }
047
048 return indexerRequestBuffers.get(indexerRequestBuffers.size() - 1);
049 }
050
051 public static IndexerRequestBuffer remove() {
052 List<IndexerRequestBuffer> indexerRequestBuffers =
053 _indexerRequestBuffersThreadLocal.get();
054
055 if (indexerRequestBuffers.isEmpty()) {
056 return null;
057 }
058
059 return indexerRequestBuffers.remove(indexerRequestBuffers.size() - 1);
060 }
061
062 public void add(IndexerRequest indexerRequest) {
063 _indexerRequests.put(indexerRequest, indexerRequest);
064 }
065
066 public void clear() {
067 _indexerRequests.clear();
068 }
069
070 public Collection<IndexerRequest> getIndexerRequests() {
071 return _indexerRequests.values();
072 }
073
074 public boolean isEmpty() {
075 return _indexerRequests.isEmpty();
076 }
077
078 public void remove(IndexerRequest indexerRequest) {
079 _indexerRequests.remove(indexerRequest);
080 }
081
082 public int size() {
083 return _indexerRequests.size();
084 }
085
086 private static final ThreadLocal<List<IndexerRequestBuffer>>
087 _indexerRequestBuffersThreadLocal =
088 new AutoResetThreadLocal<List<IndexerRequestBuffer>>(
089 IndexerRequestBuffer.class +
090 "._indexerRequestBuffersThreadLocal") {
091
092 @Override
093 protected List<IndexerRequestBuffer> initialValue() {
094 return new ArrayList<IndexerRequestBuffer>();
095 }
096
097 };
098
099 private final LinkedHashMap<IndexerRequest, IndexerRequest>
100 _indexerRequests = new LinkedHashMap<IndexerRequest, IndexerRequest>();
101
102 }