diff options
Diffstat (limited to 'src/test/java/com/amazon/carbonado/repo/toy')
| -rw-r--r-- | src/test/java/com/amazon/carbonado/repo/toy/ToyStorableGenerator.java | 143 | ||||
| -rw-r--r-- | src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java | 18 | 
2 files changed, 13 insertions, 148 deletions
diff --git a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorableGenerator.java b/src/test/java/com/amazon/carbonado/repo/toy/ToyStorableGenerator.java deleted file mode 100644 index 8ab95f6..0000000 --- a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorableGenerator.java +++ /dev/null @@ -1,143 +0,0 @@ -/*
 - * Copyright 2006 Amazon Technologies, Inc. or its affiliates.
 - * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
 - * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
 - *
 - * Licensed under the Apache License, Version 2.0 (the "License");
 - * you may not use this file except in compliance with the License.
 - * You may obtain a copy of the License at
 - *
 - *     http://www.apache.org/licenses/LICENSE-2.0
 - *
 - * Unless required by applicable law or agreed to in writing, software
 - * distributed under the License is distributed on an "AS IS" BASIS,
 - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - * See the License for the specific language governing permissions and
 - * limitations under the License.
 - */
 -
 -package com.amazon.carbonado.repo.toy;
 -
 -import java.util.EnumSet;
 -import java.util.Map;
 -
 -import org.cojen.classfile.ClassFile;
 -import org.cojen.classfile.CodeBuilder;
 -import org.cojen.classfile.MethodInfo;
 -import org.cojen.classfile.Modifiers;
 -import org.cojen.classfile.TypeDesc;
 -
 -import org.cojen.util.ClassInjector;
 -import org.cojen.util.SoftValuedHashMap;
 -
 -import com.amazon.carbonado.Storable;
 -import com.amazon.carbonado.SupportException;
 -import com.amazon.carbonado.Trigger;
 -
 -import com.amazon.carbonado.gen.MasterFeature;
 -import com.amazon.carbonado.gen.MasterStorableGenerator;
 -import com.amazon.carbonado.gen.MasterSupport;
 -import com.amazon.carbonado.gen.StorableGenerator;
 -import com.amazon.carbonado.gen.TriggerSupport;
 -
 -/**
 - * 
 - *
 - * @author Brian S O'Neill
 - */
 -public class ToyStorableGenerator<S extends Storable> {
 -    private static final Map<Class, Class> cCache;
 -
 -    static {
 -        cCache = new SoftValuedHashMap();
 -    }
 -
 -    /**
 -     * Generated class has a constructor that accepts a ToyStorage instance.
 -     */
 -    public static <S extends Storable> Class<? extends S> getGeneratedClass(Class<S> type)
 -        throws SupportException
 -    {
 -        synchronized (cCache) {
 -            Class<? extends S> generatedClass = (Class<? extends S>) cCache.get(type);
 -            if (generatedClass != null) {
 -                return generatedClass;
 -            }
 -            generatedClass = new ToyStorableGenerator<S>(type).generateAndInjectClass();
 -            cCache.put(type, generatedClass);
 -            return generatedClass;
 -        }
 -    }
 -
 -    private final Class<S> mStorableType;
 -
 -    private final ClassInjector mClassInjector;
 -    private final ClassFile mClassFile;
 -
 -    private ToyStorableGenerator(Class<S> type) throws SupportException {
 -        mStorableType = type;
 -
 -        EnumSet<MasterFeature> features = EnumSet
 -            .of(MasterFeature.VERSIONING, MasterFeature.INSERT_SEQUENCES);
 -
 -        final Class<? extends S> abstractClass =
 -            MasterStorableGenerator.getAbstractClass(mStorableType, features);
 -
 -        mClassInjector = ClassInjector.create(mStorableType.getName(),
 -                                              abstractClass.getClassLoader());
 -
 -        mClassFile = new ClassFile(mClassInjector.getClassName(), abstractClass);
 -        mClassFile.markSynthetic();
 -        mClassFile.setSourceFile(ToyStorableGenerator.class.getName());
 -        mClassFile.setTarget("1.5");
 -    }
 -
 -    private Class<? extends S> generateAndInjectClass() {
 -        TypeDesc masterSupportType = TypeDesc.forClass(MasterSupport.class);
 -        TypeDesc toyStorageType = TypeDesc.forClass(ToyStorage.class);
 -
 -        // Add constructor that accepts a ToyStorage.
 -        {
 -            TypeDesc[] params = {toyStorageType};
 -            MethodInfo mi = mClassFile.addConstructor(Modifiers.PUBLIC, params);
 -            CodeBuilder b = new CodeBuilder(mi);
 -            b.loadThis();
 -            b.loadLocal(b.getParameter(0));
 -            b.invokeSuperConstructor(new TypeDesc[] {masterSupportType});
 -            b.returnVoid();
 -        }
 -
 -        // Implement abstract methods which all delegate to ToyStorage instance.
 -
 -        generateDelegatedMethod
 -            (MasterStorableGenerator.DO_TRY_LOAD_MASTER_METHOD_NAME, "doTryLoad");
 -        generateDelegatedMethod
 -            (MasterStorableGenerator.DO_TRY_INSERT_MASTER_METHOD_NAME, "doTryInsert");
 -        generateDelegatedMethod
 -            (MasterStorableGenerator.DO_TRY_UPDATE_MASTER_METHOD_NAME, "doTryUpdate");
 -        generateDelegatedMethod
 -            (MasterStorableGenerator.DO_TRY_DELETE_MASTER_METHOD_NAME, "doTryDelete");
 -
 -        Class<? extends S> generatedClass = mClassInjector.defineClass(mClassFile);
 -
 -        return generatedClass;
 -    }
 -
 -    private void generateDelegatedMethod(String masterMethodName, String supportMethodName) {
 -        TypeDesc triggerSupportType = TypeDesc.forClass(TriggerSupport.class);
 -        TypeDesc toyStorageType = TypeDesc.forClass(ToyStorage.class);
 -
 -        TypeDesc[] storableParam = {TypeDesc.forClass(Storable.class)};
 -
 -        MethodInfo mi = mClassFile.addMethod
 -            (Modifiers.PROTECTED, masterMethodName, TypeDesc.BOOLEAN, null);
 -        CodeBuilder b = new CodeBuilder(mi);
 -
 -        b.loadThis();
 -        b.loadField(StorableGenerator.SUPPORT_FIELD_NAME, triggerSupportType);
 -        b.checkCast(toyStorageType);
 -        b.loadThis();
 -        b.invokeVirtual(toyStorageType, supportMethodName, TypeDesc.BOOLEAN, storableParam);
 -        b.returnValue(TypeDesc.BOOLEAN);
 -    }
 -}
 diff --git a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java b/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java index ec03fad..b37e685 100644 --- a/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java +++ b/src/test/java/com/amazon/carbonado/repo/toy/ToyStorage.java @@ -19,6 +19,7 @@  package com.amazon.carbonado.repo.toy;
  import java.util.Collection;
 +import java.util.EnumSet;
  import java.util.Iterator;
  import java.util.LinkedList;
 @@ -39,7 +40,9 @@ import com.amazon.carbonado.Trigger;  import com.amazon.carbonado.sequence.SequenceValueProducer;
 -import com.amazon.carbonado.gen.MasterSupport;
 +import com.amazon.carbonado.gen.DelegateStorableGenerator;
 +import com.amazon.carbonado.gen.DelegateSupport;
 +import com.amazon.carbonado.gen.MasterFeature;
  import com.amazon.carbonado.util.QuickConstructorGenerator;
 @@ -63,7 +66,7 @@ import com.amazon.carbonado.qe.StandardQuery;   * @author Brian S O'Neill
   */
  public class ToyStorage<S extends Storable>
 -    implements Storage<S>, MasterSupport<S>, QueryFactory<S>, QueryExecutorFactory<S>
 +    implements Storage<S>, DelegateSupport<S>, QueryFactory<S>, QueryExecutorFactory<S>
  {
      final ToyRepository mRepo;
      final Class<S> mType;
 @@ -78,9 +81,14 @@ public class ToyStorage<S extends Storable>          mRepo = repo;
          mType = type;
 -        Class<? extends S> generatedStorableClass = ToyStorableGenerator.getGeneratedClass(type);
 +        EnumSet<MasterFeature> features = EnumSet
 +            .of(MasterFeature.VERSIONING, MasterFeature.INSERT_SEQUENCES);
 +
 +        Class<? extends S> delegateStorableClass =
 +            DelegateStorableGenerator.getDelegateClass(type, features);
 +
          mInstanceFactory = QuickConstructorGenerator
 -            .getInstance(generatedStorableClass, InstanceFactory.class);
 +            .getInstance(delegateStorableClass, InstanceFactory.class);
          mData = new LinkedList<S>();
          mDataLock = new ReentrantLock();
 @@ -255,7 +263,7 @@ public class ToyStorage<S extends Storable>      }
      public static interface InstanceFactory {
 -        Storable instantiate(ToyStorage storage);
 +        Storable instantiate(DelegateSupport support);
      }
      private class ToyQuery extends StandardQuery<S> {
  | 
