Package org.cruxframework.crux.core.rebind.database.sql

Source Code of org.cruxframework.crux.core.rebind.database.sql.SQLIndexProxyCreator

/*
* Copyright 2013 cruxframework.org.
*
* 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 org.cruxframework.crux.core.rebind.database.sql;

import java.io.PrintWriter;
import java.util.Set;

import org.cruxframework.crux.core.client.db.Cursor.CursorDirection;
import org.cruxframework.crux.core.client.db.DatabaseCursorCallback;
import org.cruxframework.crux.core.client.db.DatabaseRetrieveCallback;
import org.cruxframework.crux.core.client.db.KeyRange;
import org.cruxframework.crux.core.client.db.KeyRangeFactory;
import org.cruxframework.crux.core.client.db.WSQLIndex;
import org.cruxframework.crux.core.client.db.WSQLTransaction;
import org.cruxframework.crux.core.client.utils.EscapeUtils;
import org.cruxframework.crux.core.rebind.CruxGeneratorException;

import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;

/**
* @author Thiago da Rosa de Bustamante
*
*/
public class SQLIndexProxyCreator extends SQLAbstractKeyValueProxyCreator
{
  private JClassType indexType;
   private String indexName;
  private String dbVariable;
  private String[] objectStoreKeyPath;
  private final Set<String> objectStoreIndexColumns;
  private final boolean unique;
  private final boolean autoIncrement;

  public SQLIndexProxyCreator(GeneratorContext context, TreeLogger logger, JClassType targetObjectType, String objectStoreName,
      boolean autoIncrement, String[] keyPath, String indexName, String[] objectStoreKeyPath, Set<String> objectStoreIndexColumns, boolean unique)
  {
    super(context, logger, targetObjectType, objectStoreName, keyPath);
    this.autoIncrement = autoIncrement;
    this.objectStoreKeyPath = objectStoreKeyPath;
    this.objectStoreIndexColumns = objectStoreIndexColumns;
    this.unique = unique;
    this.indexType = context.getTypeOracle().findType(WSQLIndex.class.getCanonicalName());
    this.dbVariable = "db";
    this.indexName = indexName;
  }

  @Override
  protected void generateProxyContructor(SourcePrinter srcWriter) throws CruxGeneratorException
  {
    srcWriter.println("public "+getProxySimpleName()+"(WSQLAbstractDatabase db, WSQLTransaction transaction){");
    srcWriter.println("super(db, transaction);");
    srcWriter.println("}");
  }

  @Override
  protected void generateProxyMethods(SourcePrinter srcWriter) throws CruxGeneratorException
  {
    generateOpenCursorMethod(srcWriter);
    generateOpenKeyCursorMethod(srcWriter);
    generateGetNameMethod(srcWriter);
    generateIsUniqueMethod(srcWriter);
    generateIsMultiEntryMethod(srcWriter);
    generateGetKeyRangeFactoryMethod(srcWriter, getIndexClassName());
    if (hasCompositeKey())
    {
      generateGetNativeKeyMethod(srcWriter);
      generateFromNativeKeyMethod(srcWriter, objectStoreKeyPath);
    }
  }

  protected void generateGetNameMethod(SourcePrinter srcWriter)
  {
    srcWriter.println("public String getName(){");
    srcWriter.println("return "+EscapeUtils.quote(indexName)+";");
    srcWriter.println("}");
    srcWriter.println();
  }
 
  protected void generateIsUniqueMethod(SourcePrinter srcWriter)
  {
    srcWriter.println("public boolean isUnique(){");
    srcWriter.println("return "+unique+";");
    srcWriter.println("}");
    srcWriter.println();
  }
 
  protected void generateIsMultiEntryMethod(SourcePrinter srcWriter)
  {
    srcWriter.println("public boolean isMultiEntry(){");
    srcWriter.println("return "+(keyPath.length > 1)+";");
    srcWriter.println("}");
    srcWriter.println();
  }
 
  protected void generateOpenCursorMethod(SourcePrinter srcWriter)
  {
    srcWriter.println("public void openCursor(KeyRange<"+getKeyTypeName()+"> keyRange, CursorDirection direction, final DatabaseCursorCallback<"+getKeyTypeName()+", "+getTargetObjectClassName()+"> callback){");
    String cursorClassName = new SQLCursorProxyCreator(context, logger, targetObjectType, objectStoreName, autoIncrement, objectStoreIndexColumns, keyPath, objectStoreKeyPath, getIndexClassName()).create();
    srcWriter.println("new "+cursorClassName+"("+dbVariable+", (WSQLKeyRange<"+getKeyTypeName()+">)keyRange, direction, transaction).start(callback);");
    srcWriter.println("}");
    srcWriter.println();
  }
 
  protected void generateOpenKeyCursorMethod(SourcePrinter srcWriter)
    {
    srcWriter.println("public void openKeyCursor(KeyRange<"+getKeyTypeName()+"> keyRange, CursorDirection direction, final DatabaseCursorCallback<"+getKeyTypeName()+", "+getKeyTypeName(objectStoreKeyPath)+"> callback){");
    String cursorClassName = new SQLKeyCursorProxyCreator(context, logger, targetObjectType, objectStoreName, autoIncrement, keyPath, objectStoreKeyPath, getIndexClassName()).create();
    srcWriter.println("new "+cursorClassName+"("+dbVariable+", (WSQLKeyRange<"+getKeyTypeName()+">)keyRange, direction, transaction).start(callback);");
    srcWriter.println("}");
    srcWriter.println();
    }
 
  @Override
  public String getProxyQualifiedName()
  {
    return indexType.getPackage().getName()+"."+getProxySimpleName();
  }

  @Override
  public String getProxySimpleName()
  {
    return getIndexClassName()+"SQL__Index";
  }

  protected String getIndexClassName()
  {
    String typeName = indexName.replaceAll("\\W", "_");
    return objectStoreName + "_" + typeName;
  }
 
  @Override
  protected SourcePrinter getSourcePrinter()
  {
    String packageName = indexType.getPackage().getName();
    PrintWriter printWriter = context.tryCreate(logger, packageName, getProxySimpleName());

    if (printWriter == null)
    {
      return null;
    }

    ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName, getProxySimpleName());

    String[] imports = getImports();
    for (String imp : imports)
    {
      composerFactory.addImport(imp);
    }
    composerFactory.setSuperclass("WSQLIndex<"+getKeyTypeName(objectStoreKeyPath)+","+getKeyTypeName()+","+getTargetObjectClassName()+">");

    return new SourcePrinter(composerFactory.createSourceWriter(context, printWriter), logger);
  }
 
  protected String[] getImports()
  {
    String[] imports = new String[] {
        WSQLIndex.class.getCanonicalName(),
        WSQLTransaction.class.getCanonicalName(),
        DatabaseRetrieveCallback.class.getCanonicalName(),
        DatabaseCursorCallback.class.getCanonicalName(),
        KeyRange.class.getCanonicalName(),
        KeyRangeFactory.class.getCanonicalName(),
        JSONObject.class.getCanonicalName(),
        CursorDirection.class.getCanonicalName()
    };
    return imports;
  }
}
TOP

Related Classes of org.cruxframework.crux.core.rebind.database.sql.SQLIndexProxyCreator

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.