Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*-
   * See the file LICENSE for redistribution information.
   *
   * Copyright (c) 2002, 2013 Oracle and/or its affiliates.  All rights reserved.
   *
   */
  
  package com.sleepycat.persist.impl;
  
 import java.util.Map;
 import java.util.Set;
 
Proxy for Collection types.

Author(s):
Mark Hayes
 
 abstract class CollectionProxy<E>
     implements PersistentProxy<Collection<E>> {
 
     private E[] elements;
 
     protected CollectionProxy() {}
 
     public final void initializeProxy(Collection<E> collection) {
          = (E[]) new Object[collection.size()];
         int i = 0;
         for (E element : collection) {
             [i] = element;
             i += 1;
         }
     }
 
     public final Collection<E> convertProxy() {
         Collection<E> collection = newInstance(.);
         for (E element : ) {
             collection.add(element);
         }
         return collection;
     }
 
     protected abstract Collection<E> newInstance(int size);
 
     @Persistent(proxyFor=ArrayList.class)
     static class ArrayListProxy<E> extends CollectionProxy<E> {
 
         protected ArrayListProxy() {}
 
         protected Collection<E> newInstance(int size) {
             return new ArrayList<E>(size);
         }
     }
 
     @Persistent(proxyFor=LinkedList.class)
     static class LinkedListProxy<E> extends CollectionProxy<E> {
 
         protected LinkedListProxy() {}
 
         protected Collection<E> newInstance(int size) {
             return new LinkedList<E>();
         }
     }
 
     @Persistent(proxyFor=HashSet.class)
     static class HashSetProxy<E> extends CollectionProxy<E> {
 
         protected HashSetProxy() {}
 
         protected Collection<E> newInstance(int size) {
             return new HashSet<E>(size);
         }
     }
 
     @Persistent(proxyFor=TreeSet.class)
     static class TreeSetProxy<E> extends CollectionProxy<E> {
 
         protected TreeSetProxy() {}
 
         protected Collection<E> newInstance(int size) {
             return new TreeSet<E>();
         }
     }
 
     static Object[] getElements(RawObject collection) {
         Object value = null;
         while (value == null && collection != null) {
            Map<StringObjectvalues = collection.getValues();
            if (values != null) {
                value = values.get("elements");
                if (value == null) {
                    collection = collection.getSuper();
                }
            }
        }
        if (value == null || !(value instanceof RawObject)) {
            throw new IllegalStateException
                ("Collection proxy for a secondary key field must " +
                 "contain a field named 'elements'");
        }
        RawObject rawObj = (RawObjectvalue;
        Format format = (FormatrawObj.getType();
        if (!format.isArray() ||
            format.getComponentType().getId() != .) {
            throw new IllegalStateException
                ("Collection proxy 'elements' field must be an Object array");
        }
        return rawObj.getElements();
    }
    static void setElements(RawObject collectionObject[] elements) {
        RawObject value = null;
        while (value == null && collection != null) {
            Map<StringObjectvalues = collection.getValues();
            if (values != null) {
                value = (RawObjectvalues.get("elements");
                if (value != null) {
                    values.put("elements",
                               new RawObject(value.getType(), elements));
                } else {
                    collection = collection.getSuper();
                }
            }
        }
        if (value == null) {
            throw DbCompat.unexpectedState();
        }
    }
    static void copyElements(RecordInput input,
                             Format format,
                             Format keyFormat,
                             Set results)
        throws RefreshException {
        /*
         * This could be optimized by traversing the byte format of the
         * collection's elements array.
         */
        RawObject collection = (RawObjectformat.newInstance(inputtrue);
        collection = (RawObjectformat.readObject(collectioninputtrue);
        Object[] elements = getElements(collection);
        if (elements != null) {
            for (Object elem : elements) {
                RecordOutput output =
                    new RecordOutput(input.getCatalog(), true);
                output.writeKeyObject(elemkeyFormat);
                DatabaseEntry entry = new DatabaseEntry();
                TupleBase.outputToEntry(outputentry);
                results.add(entry);
            }
        }
    }
New to GrepCode? Check out our FAQ X