Package tosa.loader

Source Code of tosa.loader.DBTypeInfo

package tosa.loader;

import gw.internal.gosu.parser.expressions.NullExpression;
import gw.lang.reflect.ConstructorInfoBuilder;
import gw.lang.reflect.IConstructorHandler;
import gw.lang.reflect.IMethodCallHandler;
import gw.lang.reflect.IPropertyInfo;
import gw.lang.reflect.ITypeInfo;
import gw.lang.reflect.TypeSystem;
import gw.lang.reflect.java.JavaTypes;
import gw.util.concurrent.LockingLazyVar;
import tosa.api.IDBArray;
import tosa.api.IDBColumn;
import tosa.api.IDBObject;
import tosa.dbmd.DBColumnImpl;
import tosa.impl.RuntimeBridge;

import java.util.Map;

/**
* Created by IntelliJ IDEA.
* User: alan
* Date: 12/29/10
* Time: 10:35 PM
* To change this template use File | Settings | File Templates.
*/
public class DBTypeInfo extends TosaBaseTypeInfo implements ITypeInfo {

  public static final String ID_COLUMN = "id";

  private LockingLazyVar<DBTypeInfoDelegate> _delegate = new LockingLazyVar<DBTypeInfoDelegate>() {
    @Override
    protected DBTypeInfoDelegate init() {
      return RuntimeBridge.createTypeInfoDelegate();
    }
  };

  private DBTypeInfoDelegate getDelegate() {
    return _delegate.get();
  }
 
  public DBTypeInfo(IDBType dbType) {
    super(dbType);
   
    createMethod(
            "fromId",
            params(param("id", JavaTypes.pLONG(), "the id of the object to find")),
            getDBType(),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().fromId(getDBType(), (Long) params[0]);
              }
            });

    createMethod(
            "count",
            params(param("sql", JavaTypes.STRING(), "the sql for the count query"),
                   param("params", JavaTypes.MAP().getParameterizedType(JavaTypes.STRING(), JavaTypes.OBJECT()), "parameters", NullExpression.instance())),
            JavaTypes.pLONG(),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().count(getDBType(), (String) params[0], (Map<String, Object>) params[1]);
              }
            });

    createMethod(
            "countAll",
            params(),
            JavaTypes.pLONG(),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().countAll(getDBType());
              }
            });

    createMethod(
            "countWhere",
            params(param("sql", JavaTypes.STRING(), "the sql for the WHERE clause in the count query"),
                    param("params", JavaTypes.MAP().getParameterizedType(JavaTypes.STRING(), JavaTypes.OBJECT()), "parameters", NullExpression.instance())),
            JavaTypes.pLONG(),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().countWhere(getDBType(), (String) params[0], (Map<String, Object>) params[1]);
              }
            });

    createMethod(
            "countLike",
            params(param("template", getDBType(), "the template to use in forming the WHERE clause for the count query")),
            JavaTypes.pLONG(),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().countLike(getDBType(), (IDBObject) params[0]);
              }
            });

    createMethod(
            "select",
            params(param("sql", JavaTypes.STRING(), "the sql for the query"),
                    param("params", JavaTypes.MAP().getParameterizedType(JavaTypes.STRING(), JavaTypes.OBJECT()), "parameters", NullExpression.instance())),
            TypeSystem.getByFullName("tosa.api.QueryResult").getParameterizedType(getDBType()),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().select(getDBType(), (String) params[0], (Map<String, Object>) params[1]);
              }
            });

    createMethod(
            "selectAll",
            params(),
            TypeSystem.getByFullName("tosa.api.QueryResult").getParameterizedType(getDBType()),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().selectAll(getDBType());
              }
            });

    createMethod(
            "selectWhere",
            params(param("sql", JavaTypes.STRING(), "the sql for the WHERE clause of the query"),
                    param("params", JavaTypes.MAP().getParameterizedType(JavaTypes.STRING(), JavaTypes.OBJECT()), "parameters", NullExpression.instance())),
            TypeSystem.getByFullName("tosa.api.QueryResult").getParameterizedType(getDBType()),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().selectWhere(getDBType(), (String) params[0], (Map<String, Object>) params[1]);
              }
            });

    createMethod(
            "selectLike",
            params(param("template", getDBType(), "the template to use in forming the WHERE clause for the query")),
            TypeSystem.getByFullName("tosa.api.QueryResult").getParameterizedType(getDBType()),
            Modifiers.PublicStatic,
            "TODO",
            new IMethodCallHandler() {
              @Override
              public Object handleCall(Object context, Object... params) {
                return getDelegate().selectLike(getDBType(), (IDBObject) params[0]);
              }
            });

    for (IDBColumn column : dbType.getTable().getColumns()) {
      // TODO - AHK - Ideally this cast wouldn't be necessary
      addProperty(makeProperty((DBColumnImpl) column));
    }

    for (IDBArray dbArray : getDBType().getTable().getArrays()) {
      addProperty(makeArrayProperty(dbArray));
    }

    addConstructor(new ConstructorInfoBuilder()
        .withConstructorHandler(new IConstructorHandler() {
          @Override
          public Object newInstance(Object... args) {
            return getDelegate().newInstance(getDBType(), true);
          }
        }).build(this));

    lockDataStructures();
  }

  private DBPropertyInfo makeProperty(DBColumnImpl column) {
    return new DBPropertyInfo(this, column);
  }

  private IPropertyInfo makeArrayProperty(IDBArray dbArray) {
    return new DBArrayPropertyInfo(this, dbArray);
  }

  private IDBType getDBType() {
    return ((IDBType) getOwnersType());
  }
}
TOP

Related Classes of tosa.loader.DBTypeInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.