// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.dataquality.indicators.mapdb; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.NavigableSet; import java.util.Random; import java.util.SortedSet; import org.mapdb.BTreeKeySerializer; import org.mapdb.BTreeKeySerializer.BasicKeySerializer; /** * created by talend on Jul 24, 2014 Detailled comment * */ public class DBSet<E> extends AbstractDB<E> implements NavigableSet<E> { private NavigableSet<E> dbSet = null; protected String setName = "testDBSet" + new Random().nextLong(); //$NON-NLS-1$; public DBSet(DBMapParameter parameter) { if (parameter == null) { initDefaultDB(); } else { initDBByDBMapParameter(parameter); } initSet(); } public DBSet() { initDefaultDB(); initSet(); } public DBSet(String parentFullPathStr, String fileName) { if (!checkParameter(parentFullPathStr, fileName)) { return; } initDefaultDB(parentFullPathStr, fileName); initSet(); } public DBSet(String parentFullPathStr, String fileName, String setName) { this(parentFullPathStr, fileName, setName, 0l); } public DBSet(String parentFullPathStr, String fileName, String setName, Long limSize) { if (!checkParameter(parentFullPathStr, fileName)) { return; } initDefaultDB(parentFullPathStr, fileName); this.limitSize = limSize; initSet(setName); } /** * init the set */ private void initSet() { TalendSerializerBase talendSerializerBase = new TalendSerializerBase(); BasicKeySerializer talendBasicKeySerializer = new BTreeKeySerializer.BasicKeySerializer(talendSerializerBase); dbSet = getDB().createTreeSet(setName).serializer(talendBasicKeySerializer).comparator(new DBMapCompartor()).make(); } /** * init the set */ private void initSet(String theSetName) { setName = theSetName; if (getDB().exists(setName)) { dbSet = getDB().getTreeSet(setName); } else { TalendSerializerBase talendSerializerBase = new TalendSerializerBase(); BasicKeySerializer talendBasicKeySerializer = new BTreeKeySerializer.BasicKeySerializer(talendSerializerBase); dbSet = getDB().createTreeSet(setName).serializer(talendBasicKeySerializer).comparator(new DBMapCompartor()).make(); } } /* * (non-Javadoc) * * @see java.util.AbstractCollection#iterator() */ @Override public Iterator<E> iterator() { return dbSet.iterator(); } /* * (non-Javadoc) * * @see java.util.AbstractCollection#size() */ @Override public int size() { return dbSet.size(); } /* * (non-Javadoc) * * @see java.util.Set#isEmpty() */ @Override public boolean isEmpty() { return dbSet.isEmpty(); } /* * (non-Javadoc) * * @see java.util.Set#contains(java.lang.Object) */ @Override public boolean contains(Object o) { if (o == null) { return dbSet.contains(EMPTY); } return dbSet.contains(o); } /* * (non-Javadoc) * * @see java.util.Set#toArray() */ @Override public Object[] toArray() { return dbSet.toArray(); } /* * (non-Javadoc) * * @see java.util.Set#toArray(T[]) */ @Override public <T> T[] toArray(T[] a) { return dbSet.toArray(a); } /* * (non-Javadoc) * * @see java.util.Set#add(java.lang.Object) */ @Override @SuppressWarnings("unchecked") public boolean add(E e) { if (e == null) { return dbSet.add((E) EMPTY); } return dbSet.add(e); } /* * (non-Javadoc) * * @see java.util.Set#remove(java.lang.Object) */ @Override public boolean remove(Object o) { if (o == null) { return dbSet.remove(EMPTY); } return dbSet.remove(o); } /* * (non-Javadoc) * * @see java.util.Set#containsAll(java.util.Collection) */ @Override public boolean containsAll(Collection<?> c) { return dbSet.containsAll(c); } /* * (non-Javadoc) * * @see java.util.Set#addAll(java.util.Collection) */ @Override public boolean addAll(Collection<? extends E> c) { return dbSet.addAll(c); } /* * (non-Javadoc) * * @see java.util.Set#retainAll(java.util.Collection) */ @Override public boolean retainAll(Collection<?> c) { return dbSet.retainAll(c); } /* * (non-Javadoc) * * @see java.util.Set#removeAll(java.util.Collection) */ @Override public boolean removeAll(Collection<?> c) { return dbSet.removeAll(c); } /* * (non-Javadoc) * * @see java.util.Set#clear() */ @Override public void clear() { if (!getDB().isClosed()) { dbSet.clear(); this.getDB().delete(setName); } } /* * (non-Javadoc) * * @see java.util.Set#hashCode() */ @Override public int hashCode() { return dbSet.hashCode(); } /* * (non-Javadoc) * * @see java.util.SortedSet#comparator() */ @Override public Comparator<? super E> comparator() { return dbSet.comparator(); } /* * (non-Javadoc) * * @see java.util.SortedSet#first() */ @Override public E first() { return dbSet.first(); } /* * (non-Javadoc) * * @see java.util.SortedSet#last() */ @Override public E last() { return dbSet.last(); } /* * (non-Javadoc) * * @see java.util.NavigableSet#lower(java.lang.Object) */ @Override public E lower(E e) { return dbSet.lower(e); } /* * (non-Javadoc) * * @see java.util.NavigableSet#floor(java.lang.Object) */ @Override public E floor(E e) { return dbSet.floor(e); } /* * (non-Javadoc) * * @see java.util.NavigableSet#ceiling(java.lang.Object) */ @Override public E ceiling(E e) { return dbSet.ceiling(e); } /* * (non-Javadoc) * * @see java.util.NavigableSet#higher(java.lang.Object) */ @Override public E higher(E e) { return dbSet.higher(e); } /* * (non-Javadoc) * * @see java.util.NavigableSet#pollFirst() */ @Override public E pollFirst() { return dbSet.pollFirst(); } /* * (non-Javadoc) * * @see java.util.NavigableSet#pollLast() */ @Override public E pollLast() { return dbSet.pollLast(); } /* * (non-Javadoc) * * @see java.util.NavigableSet#descendingSet() */ @Override public NavigableSet<E> descendingSet() { return dbSet.descendingSet(); } /* * (non-Javadoc) * * @see java.util.NavigableSet#descendingIterator() */ @Override public Iterator<E> descendingIterator() { return dbSet.descendingIterator(); } /* * (non-Javadoc) * * @see java.util.NavigableSet#subSet(java.lang.Object, boolean, java.lang.Object, boolean) */ @Override public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { return dbSet.subSet(fromElement, fromInclusive, toElement, toInclusive); } /* * (non-Javadoc) * * @see java.util.NavigableSet#headSet(java.lang.Object, boolean) */ @Override public NavigableSet<E> headSet(E toElement, boolean inclusive) { return dbSet.headSet(toElement, inclusive); } /* * (non-Javadoc) * * @see java.util.NavigableSet#tailSet(java.lang.Object, boolean) */ @Override public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { return dbSet.tailSet(fromElement, inclusive); } /* * (non-Javadoc) * * @see java.util.NavigableSet#subSet(java.lang.Object, java.lang.Object) */ @Override public NavigableSet<E> subSet(E fromElement, E toElement) { return dbSet.subSet(fromElement, true, toElement, false); } /* * (non-Javadoc) * * @see java.util.NavigableSet#headSet(java.lang.Object) */ @Override public SortedSet<E> headSet(E toElement) { return dbSet.headSet(toElement); } /* * (non-Javadoc) * * @see java.util.NavigableSet#tailSet(java.lang.Object) */ @Override public SortedSet<E> tailSet(E fromElement) { return dbSet.tailSet(fromElement); } }