/*
 * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation.
package org.eclipse.persistence.testing.models.jpa.advanced.cascadepersist;

import org.eclipse.persistence.tools.schemaframework.*;

public class CascadePersistTableCreator extends org.eclipse.persistence.tools.schemaframework.TableCreator {

    public CascadePersistTableCreator() {
        setName("CascadePersist");

        addTableDefinition(buildEntityX_CPTable());
        addTableDefinition(buildEntityZ_CPTable());
        addTableDefinition(buildEntityY_CPTable());
    }

    public TableDefinition buildEntityX_CPTable() {
        TableDefinition table = new TableDefinition();
        table.setName("ENTITYX_CP");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldXNAME = new FieldDefinition();
        fieldXNAME.setName("XNAME");
        fieldXNAME.setTypeName("VARCHAR2");
        fieldXNAME.setSize(80);
        fieldXNAME.setIsPrimaryKey(false);
        fieldXNAME.setIsIdentity(false);
        fieldXNAME.setUnique(false);
        fieldXNAME.setShouldAllowNull(true);
        table.addField(fieldXNAME);

        return table;
    }

    public TableDefinition buildEntityY_CPTable() {
        TableDefinition table = new TableDefinition();
        table.setName("ENTITYY_CP");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldYNAME = new FieldDefinition();
        fieldYNAME.setName("YNAME");
        fieldYNAME.setTypeName("VARCHAR2");
        fieldYNAME.setSize(80);
        fieldYNAME.setIsPrimaryKey(false);
        fieldYNAME.setIsIdentity(false);
        fieldYNAME.setUnique(false);
        fieldYNAME.setShouldAllowNull(true);
        table.addField(fieldYNAME);

        FieldDefinition fieldYZEntityRelationID = new FieldDefinition();
        fieldYZEntityRelationID.setName("YZENTITYRELATION_ID");
        fieldYZEntityRelationID.setTypeName("NUMBER");
        fieldYZEntityRelationID.setSize(10);
        fieldYZEntityRelationID.setIsPrimaryKey(false);
        fieldYZEntityRelationID.setIsIdentity(false);
        fieldYZEntityRelationID.setUnique(false);
        fieldYZEntityRelationID.setShouldAllowNull(false);
        table.addField(fieldYZEntityRelationID);

        FieldDefinition fieldEntityX_ID = new FieldDefinition();
        fieldEntityX_ID.setName("ENTITYX_ID");
        fieldEntityX_ID.setTypeName("NUMBER");
        fieldEntityX_ID.setSize(10);
        fieldEntityX_ID.setIsPrimaryKey(false);
        fieldEntityX_ID.setIsIdentity(false);
        fieldEntityX_ID.setUnique(false);
        fieldEntityX_ID.setShouldAllowNull(false);
        table.addField(fieldEntityX_ID);

        ForeignKeyConstraint FK_ENTITYY_YZENTITYRELATION_ID = new ForeignKeyConstraint();
        FK_ENTITYY_YZENTITYRELATION_ID.setName("FK_YZENTITYRELATION_ID");
        FK_ENTITYY_YZENTITYRELATION_ID.setTargetTable("ENTITYZ_CP");
        FK_ENTITYY_YZENTITYRELATION_ID.addSourceField("YZENTITYRELATION_ID");
        FK_ENTITYY_YZENTITYRELATION_ID.addTargetField("ID");
        table.addForeignKeyConstraint(FK_ENTITYY_YZENTITYRELATION_ID);

        ForeignKeyConstraint FK_ENTITYY_ENTITYX_ID = new ForeignKeyConstraint();
        FK_ENTITYY_ENTITYX_ID.setName("FK_ENTITYY_ENTITYX_ID");
        FK_ENTITYY_ENTITYX_ID.setTargetTable("ENTITYX_CP");
        FK_ENTITYY_ENTITYX_ID.addSourceField("ENTITYX_ID");
        FK_ENTITYY_ENTITYX_ID.addTargetField("ID");
        table.addForeignKeyConstraint(FK_ENTITYY_ENTITYX_ID);

        return table;
    }

    public TableDefinition buildEntityZ_CPTable() {
        TableDefinition table = new TableDefinition();
        table.setName("ENTITYZ_CP");

        FieldDefinition fieldID = new FieldDefinition();
        fieldID.setName("ID");
        fieldID.setTypeName("NUMBER");
        fieldID.setSize(10);
        fieldID.setIsPrimaryKey(true);
        fieldID.setIsIdentity(false);
        fieldID.setUnique(false);
        fieldID.setShouldAllowNull(false);
        table.addField(fieldID);

        FieldDefinition fieldZNAME = new FieldDefinition();
        fieldZNAME.setName("ZNAME");
        fieldZNAME.setTypeName("VARCHAR2");
        fieldZNAME.setSize(80);
        fieldZNAME.setIsPrimaryKey(false);
        fieldZNAME.setIsIdentity(false);
        fieldZNAME.setUnique(false);
        fieldZNAME.setShouldAllowNull(true);
        table.addField(fieldZNAME);

        return table;
    }
}
