Package er.taggable.migrations

Source Code of er.taggable.migrations.ERTaggableEntity0

package er.taggable.migrations;

import java.sql.SQLException;

import com.webobjects.eoaccess.EOAdaptorChannel;
import com.webobjects.eoaccess.EODatabaseContext;
import com.webobjects.eoaccess.EOEntity;
import com.webobjects.eoaccess.EOModel;
import com.webobjects.eoaccess.EOSQLExpression;
import com.webobjects.eoaccess.EOSchemaGeneration;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.foundation.NSArray;

import er.extensions.jdbc.ERXJDBCUtilities;
import er.extensions.migration.ERXMigrationDatabase;
import er.extensions.migration.ERXModelVersion;
import er.taggable.ERTaggableEntity;
import er.taggable.model.ERTag;

/**
* ERTaggableEntity0 provides a superclass for creating the join table
* for your taggable entities.
*
* @author mschrag
*/
public class ERTaggableEntity0 extends ERXMigrationDatabase.Migration {
  private String _entityName;
  private String _tagEntityName;
  private String _tagsRelationshipName;

  /**
   * Constructs an ERTaggableEntity0.
   *
   * @param entityName the name of your entity to tag
   */
  public ERTaggableEntity0(String entityName) {
    this(entityName, ERTaggableEntity.DEFAULT_TAGS_RELATIONSHIP_NAME, ERTag.ENTITY_NAME);
  }

  /**
   * Constructs an ERTaggableEntity0.
   *
   * @param entityName the name of your entity to tag
   * @param tagsRelationshipName the name of the flattened to-many relationship to ERTag (defaults to "tags")
   */
  public ERTaggableEntity0(String entityName, String tagsRelationshipName) {
    this(entityName, tagsRelationshipName, ERTag.ENTITY_NAME);
  }

  /**
   * Constructs an ERTaggableEntity0.
   *
   * @param entityName the name of your entity to tag
   * @param tagsRelationshipName the name of the flattened to-many relationship to ERTag (defaults to "tags")
   * @param tagEntityName the name of the tag entity (defaults to "ERTag")
   */
  public ERTaggableEntity0(String entityName, String tagsRelationshipName, String tagEntityName) {
    _entityName = entityName;
    _tagsRelationshipName = tagsRelationshipName;
    _tagEntityName = tagEntityName;
  }

  @Override
  public NSArray<ERXModelVersion> modelDependencies() {
    return new NSArray<ERXModelVersion>(new ERXModelVersion("ERTaggable", 0));
  }

  @Override
  public void downgrade(EOEditingContext editingContext, ERXMigrationDatabase database) throws Throwable {
    // DO NOTHING
  }

  @Override
  public void upgrade(EOEditingContext editingContext, ERXMigrationDatabase database) throws Throwable {
    ERTaggableEntity0.upgrade(editingContext, database.adaptorChannel(), database.model(), _entityName, _tagsRelationshipName, _tagEntityName);
  }

  public static void upgrade(EOEditingContext editingContext, EOAdaptorChannel channel, EOModel model, String itemEntityName) throws SQLException {
    ERTaggableEntity0.upgrade(editingContext, channel, model, itemEntityName, ERTaggableEntity.DEFAULT_TAGS_RELATIONSHIP_NAME);
  }

  public static void upgrade(EOEditingContext editingContext, EOAdaptorChannel channel, EOModel model, String itemEntityName, String tagsRelationshipName) throws SQLException {
    ERTaggableEntity0.upgrade(editingContext, channel, model, itemEntityName, tagsRelationshipName, ERTag.ENTITY_NAME);
  }

  /**
   * If you don't want to subclass ERTaggableEntity0, you can call this static method from your
   * own migration.
   *
   * @param editingContext the editing context
   * @param channel the adaptor channel
   * @param model the model
   * @param entityName the name of your entity to tag
   * @param tagsRelationshipName the name of the flattened to-many relationship to ERTag (defaults to "tags")
   * @param tagEntityName the name of the tag entity (defaults to "ERTag")
   * @throws SQLException if the update script fails
   */
  @SuppressWarnings("unchecked")
  public static void upgrade(EOEditingContext editingContext, EOAdaptorChannel channel, EOModel model, String entityName, String tagsRelationshipName, String tagEntityName) throws SQLException {
    EOEntity joinEntity = ERTaggableEntity.registerTaggable(model.entityNamed(entityName), tagsRelationshipName, model.modelGroup().entityNamed(tagEntityName), null);
    EODatabaseContext databaseContext = EODatabaseContext.registeredDatabaseContextForModel(model, editingContext);
    EOSchemaGeneration generation = databaseContext.adaptorContext().adaptor().synchronizationFactory();
    NSArray<EOSQLExpression> createTableStatements = generation.createTableStatementsForEntityGroup(new NSArray<EOEntity>(joinEntity));
    ERXJDBCUtilities.executeUpdateScript(channel, ERXMigrationDatabase._stringsForExpressions(createTableStatements));
  }
}
TOP

Related Classes of er.taggable.migrations.ERTaggableEntity0

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.