package com.bizosys.hsearch.filter; import java.util.ArrayList; import java.util.List; import java.util.Stack; import com.bizosys.hsearch.filter.TeaserFilterCommon.WordPosition; public class FilterObjectFactory { private static FilterObjectFactory thisInstance = new FilterObjectFactory(); public static FilterObjectFactory getInstance() { return thisInstance; } private static int MINIMUM_CACHE = 10; private static int MAXIMUM_CACHE = 4096; Stack<AccessStorable> accesses = new Stack<AccessStorable>(); Stack<List<TeaserMarker>> teaserMarkers = new Stack<List<TeaserMarker>>(); Stack<List<AMMarker>> amMarkers = new Stack<List<AMMarker>>(); Stack<List<WordPosition>> wordPositions = new Stack<List<WordPosition>>(); Stack<AMMarker> oneMarker = new Stack<AMMarker>(); public AccessStorable getStorableAccess() { AccessStorable entry = null; if (accesses.size() > MINIMUM_CACHE ) entry = accesses.pop(); if ( null != entry ) return entry; return new AccessStorable(); } public void putStorableAccess(AccessStorable entry ) { if ( null == entry) return; entry.clear(); if (accesses.size() > MAXIMUM_CACHE ) return; if (accesses.contains(entry) ) return; accesses.add(entry); } public List<TeaserMarker> getTeaserMarker() { List<TeaserMarker> entry = null; if (teaserMarkers.size() > MINIMUM_CACHE ) entry = teaserMarkers.pop(); if ( null != entry ) return entry; return new ArrayList<TeaserMarker>(); } public void putTeaserMarker(List<TeaserMarker> entry ) { if ( null == entry) return; entry.clear(); if (teaserMarkers.size() > MAXIMUM_CACHE ) return; if (teaserMarkers.contains(entry) ) return; teaserMarkers.add(entry); } public List<AMMarker> getAMMarkers() { List<AMMarker> entry = null; if (amMarkers.size() > MINIMUM_CACHE ) entry = amMarkers.pop(); if ( null != entry ) return entry; return new ArrayList<AMMarker>(); } public void putAMMarkers(List<AMMarker> entry ) { if ( null == entry) return; entry.clear(); if (teaserMarkers.size() > MAXIMUM_CACHE ) return; if (teaserMarkers.contains(entry) ) return; amMarkers.add(entry); } public List<WordPosition> getWordPosition() { List<WordPosition> entry = null; if (wordPositions.size() > MINIMUM_CACHE ) entry = wordPositions.pop(); if ( null != entry ) return entry; return new ArrayList<WordPosition>(); } public void putWordPosition(List<WordPosition> entry ) { if ( null == entry) return; entry.clear(); if (wordPositions.size() > MAXIMUM_CACHE ) return; if (wordPositions.contains(entry) ) return; wordPositions.add(entry); } public AMMarker getOneAMMarker() { AMMarker entry = null; if (oneMarker.size() > MINIMUM_CACHE ) entry = oneMarker.pop(); if ( null != entry ) return entry; return new AMMarker(); } public void putOneAMMarker(AMMarker entry ) { if ( null == entry) return; if (oneMarker.size() > MAXIMUM_CACHE ) return; if (oneMarker.contains(entry) ) return; oneMarker.add(entry); } }