public void testModifyPrivateOwned() throws Exception {
    createTestTypeWithOneToOneAttribute();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    OrmSpecifiedPersistentAttribute ormPersistentAttribute =
        ormPersistentType.addAttributeToXml(
            ormPersistentType.getAttributeNamed("oneToOne"),
            MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY);
    EclipseLinkOneToOneMapping contextOneToOne =
        (EclipseLinkOneToOneMapping) ormPersistentAttribute.getMapping();
    XmlEntity resourceEntity = (XmlEntity) getXmlEntityMappings().getEntities().get(0);
    XmlOneToOne resourceOneToOne =
        (XmlOneToOne) resourceEntity.getAttributes().getOneToOnes().get(0);

    // check defaults

    assertFalse(resourceOneToOne.isPrivateOwned());
    assertFalse(contextOneToOne.getPrivateOwned().isPrivateOwned());

    // set context private owned  to true, check resource

    contextOneToOne.getPrivateOwned().setPrivateOwned(true);

    assertTrue(resourceOneToOne.isPrivateOwned());
    assertTrue(contextOneToOne.getPrivateOwned().isPrivateOwned());

    // set context private owned back to false, check resource

    contextOneToOne.getPrivateOwned().setPrivateOwned(false);
  }
  public void testModifyName() throws Exception {
    OrmPersistentType ormPersistentType =
        getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.foo");
    OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
    OrmAttributeOverrideContainer overrideContainer = ormEntity.getAttributeOverrideContainer();

    XmlEntity entityResource = getXmlEntityMappings().getEntities().get(0);
    entityResource.getAttributeOverrides().add(OrmFactory.eINSTANCE.createXmlAttributeOverride());
    XmlAttributeOverride attributeOverrideResource = entityResource.getAttributeOverrides().get(0);
    OrmSpecifiedAttributeOverride ormAttributeOverride =
        overrideContainer.getSpecifiedOverrides().iterator().next();

    assertNull(ormAttributeOverride.getName());
    assertNull(attributeOverrideResource.getName());

    // set name in the context model, verify resource model modified
    ormAttributeOverride.setName("foo");
    assertEquals("foo", ormAttributeOverride.getName());
    assertEquals("foo", attributeOverrideResource.getName());

    // set name to null in the context model
    ormAttributeOverride.setName(null);
    assertNull(ormAttributeOverride.getName());
    assertNull(entityResource.getAttributeOverrides().get(0).getName());
  }
  public void testModifyConverter() throws Exception {
    createTestEntityWithBasicMapping();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    OrmSpecifiedPersistentAttribute ormPersistentAttribute =
        ormPersistentType.addAttributeToXml(
            ormPersistentType.getAttributeNamed("id"), MappingKeys.BASIC_ATTRIBUTE_MAPPING_KEY);
    EclipseLinkOrmBasicMapping ormBasicMapping =
        (EclipseLinkOrmBasicMapping) ormPersistentAttribute.getMapping();
    EclipseLinkStructConverter ormConverter =
        ormBasicMapping.getConverterContainer().addStructConverter("structConverter", 0);
    XmlStructConverter converterResource =
        ((XmlBasic) getXmlEntityMappings().getEntities().get(0).getAttributes().getBasics().get(0))
            .getStructConverters()
            .get(0);

    assertEquals(null, ormConverter.getConverterClass());
    assertEquals(null, converterResource.getConverter());

    // set converter class in the context model, verify resource model updated
    ormConverter.setConverterClass("foo");
    assertEquals("foo", ormConverter.getConverterClass());
    assertEquals("foo", converterResource.getConverter());

    ormConverter.setConverterClass(null);
    assertEquals(null, ormConverter.getConverterClass());
    assertEquals(null, converterResource.getConverter());
  }
  public void testVirtualMappingMetadataCompleteFalse() throws Exception {
    createTestEntityOneToOneMapping();
    createTestTargetEntityAddress();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    getEntityMappings()
        .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
    assertEquals(3, ormPersistentType.getDefaultAttributesSize());
    OrmPersistentAttribute virtualPersistentAttribute =
        ormPersistentType.getDefaultAttributes().iterator().next();

    OneToOneMapping virtualOneToOneMapping =
        (OneToOneMapping) virtualPersistentAttribute.getMapping();
    assertEquals("address", virtualOneToOneMapping.getName());
    assertEquals(FetchType.LAZY, virtualOneToOneMapping.getSpecifiedFetch());
    assertEquals(Boolean.FALSE, virtualOneToOneMapping.getSpecifiedOptional());
    assertEquals("Address", virtualOneToOneMapping.getSpecifiedTargetEntity());
    assertNull(
        virtualOneToOneMapping.getRelationship().getMappedByStrategy().getMappedByAttribute());

    SpecifiedJoinColumn virtualJoinColumn =
        virtualOneToOneMapping
            .getRelationship()
            .getJoinColumnStrategy()
            .getSpecifiedJoinColumns()
            .iterator()
            .next();
    assertEquals("MY_COLUMN", virtualJoinColumn.getSpecifiedName());
    assertEquals("MY_REFERENCED_COLUMN", virtualJoinColumn.getSpecifiedReferencedColumnName());
    assertEquals(Boolean.TRUE, virtualJoinColumn.getSpecifiedUnique());
    assertEquals(Boolean.FALSE, virtualJoinColumn.getSpecifiedNullable());
    assertEquals(Boolean.FALSE, virtualJoinColumn.getSpecifiedInsertable());
    assertEquals(Boolean.FALSE, virtualJoinColumn.getSpecifiedUpdatable());
    assertEquals("COLUMN_DEFINITION", virtualJoinColumn.getColumnDefinition());
    assertEquals("MY_TABLE", virtualJoinColumn.getSpecifiedTableName());

    Cascade cascade = virtualOneToOneMapping.getCascade();
    assertTrue(cascade.isAll());
    assertTrue(cascade.isMerge());
    assertTrue(cascade.isPersist());
    assertTrue(cascade.isRemove());
    assertTrue(cascade.isRefresh());

    assertEquals(
        EclipseLinkJoinFetchType.INNER,
        ((EclipseLinkJoinFetchMapping) virtualOneToOneMapping).getJoinFetch().getValue());
    assertTrue(
        ((EclipseLinkOneToOneMapping) virtualOneToOneMapping).getPrivateOwned().isPrivateOwned());
  }
  public void testVirtualMappingMetadataCompleteTrue() throws Exception {
    createTestEntityOneToOneMapping();
    createTestTargetEntityAddress();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    getEntityMappings()
        .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");
    ormPersistentType.getMapping().setSpecifiedMetadataComplete(Boolean.TRUE);
    assertEquals(3, ormPersistentType.getDefaultAttributesSize());
    OrmPersistentAttribute virtualPersistentAttribute =
        ormPersistentType.getAttributeNamed("address");

    assertEquals(
        MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY, virtualPersistentAttribute.getMappingKey());
    assertTrue(virtualPersistentAttribute.isVirtual());

    EclipseLinkOneToOneMapping ormOneToOneMapping =
        (EclipseLinkOneToOneMapping) virtualPersistentAttribute.getMapping();
    assertEquals("address", ormOneToOneMapping.getName());
    assertEquals(FetchType.EAGER, ormOneToOneMapping.getFetch());
    assertEquals(true, ormOneToOneMapping.isOptional());
    assertEquals("test.Address", ormOneToOneMapping.getTargetEntity());
    assertNull(ormOneToOneMapping.getRelationship().getMappedByStrategy().getMappedByAttribute());

    // TODO default join columns in xml one-to-one
    //		XmlJoinColumn ormJoinColumn = ormOneToOneMapping.specifiedJoinColumns().next();
    //		//TODO java default columns name in JavaSingleRelationshipMapping.JoinColumnOwner
    //		//assertEquals("address", ormJoinColumn.getSpecifiedName());
    //		//assertEquals("address", ormJoinColumn.getSpecifiedReferencedColumnName());
    //		assertEquals(Boolean.FALSE, ormJoinColumn.getSpecifiedUnique());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedNullable());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedInsertable());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getSpecifiedUpdatable());
    //		assertNull(ormJoinColumn.getColumnDefinition());
    //		assertEquals(TYPE_NAME, ormJoinColumn.getSpecifiedTable());

    Cascade cascade = ormOneToOneMapping.getCascade();
    assertFalse(cascade.isAll());
    assertFalse(cascade.isMerge());
    assertFalse(cascade.isPersist());
    assertFalse(cascade.isRemove());
    assertFalse(cascade.isRefresh());

    assertEquals(null, ormOneToOneMapping.getJoinFetch().getValue());
    assertFalse(ormOneToOneMapping.getPrivateOwned().isPrivateOwned());
  }
  public void testModifyJoinFetch() throws Exception {
    createTestTypeWithOneToOneAttribute();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    OrmSpecifiedPersistentAttribute ormPersistentAttribute =
        ormPersistentType.addAttributeToXml(
            ormPersistentType.getAttributeNamed("oneToOne"),
            MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY);
    EclipseLinkOneToOneMapping contextOneToOne =
        (EclipseLinkOneToOneMapping) ormPersistentAttribute.getMapping();
    XmlEntity resourceEntity = (XmlEntity) getXmlEntityMappings().getEntities().get(0);
    XmlOneToOne resourceOneToOne =
        (XmlOneToOne) resourceEntity.getAttributes().getOneToOnes().get(0);

    // check defaults

    assertNull(resourceOneToOne.getJoinFetch());
    assertNull(contextOneToOne.getJoinFetch().getValue());

    // set context join fetch to INNER, check resource

    contextOneToOne.getJoinFetch().setValue(EclipseLinkJoinFetchType.INNER);

    assertEquals(XmlJoinFetchType.INNER, resourceOneToOne.getJoinFetch());
    assertEquals(EclipseLinkJoinFetchType.INNER, contextOneToOne.getJoinFetch().getValue());

    // set context join fetch to OUTER, check resource

    contextOneToOne.getJoinFetch().setValue(EclipseLinkJoinFetchType.OUTER);

    assertEquals(XmlJoinFetchType.OUTER, resourceOneToOne.getJoinFetch());
    assertEquals(EclipseLinkJoinFetchType.OUTER, contextOneToOne.getJoinFetch().getValue());

    // set context join fetch to null, check resource

    contextOneToOne.getJoinFetch().setValue(null);

    assertNull(resourceOneToOne.getJoinFetch());
    assertNull(contextOneToOne.getJoinFetch().getValue());
  }
  public void testJoinFetchDefaultFromJava() throws Exception {
    createTestEmployee();
    createTestDepartment();
    getEntityMappings()
        .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Department");
    getEntityMappings()
        .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Employee");

    OrmPersistentType departmentPersistentType =
        getEntityMappings().getPersistentTypes().iterator().next();
    EclipseLinkOneToOneMapping oneToOne =
        (EclipseLinkOneToOneMapping)
            departmentPersistentType.getAttributeNamed("employee").getMapping();

    assertNull(oneToOne.getJoinFetch().getValue());

    getEntityMappings().getPersistenceUnitMetadata().setXmlMappingMetadataComplete(true);
    oneToOne =
        (EclipseLinkOneToOneMapping)
            departmentPersistentType.getAttributeNamed("employee").getMapping();
    assertNull(oneToOne.getJoinFetch().getValue());

    EclipseLinkRelationshipMapping javaRelationshipMapping =
        (EclipseLinkRelationshipMapping)
            departmentPersistentType
                .getJavaPersistentType()
                .getAttributeNamed("employee")
                .getMapping();
    javaRelationshipMapping.getJoinFetch().setValue(EclipseLinkJoinFetchType.OUTER);
    assertNull(oneToOne.getJoinFetch().getValue());

    getEntityMappings().getPersistenceUnitMetadata().setXmlMappingMetadataComplete(false);
    oneToOne =
        (EclipseLinkOneToOneMapping)
            departmentPersistentType.getAttributeNamed("employee").getMapping();
    assertEquals(EclipseLinkJoinFetchType.OUTER, oneToOne.getJoinFetch().getValue());
  }
  public void testSpecifiedMapping() throws Exception {
    createTestEntityOneToOneMapping();
    createTestTargetEntityAddress();

    OrmPersistentType ormPersistentType =
        getEntityMappings()
            .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
    getEntityMappings()
        .addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, PACKAGE_NAME + ".Address");

    ormPersistentType.addAttributeToXml(
        ormPersistentType.getAttributeNamed("address"),
        MappingKeys.ONE_TO_ONE_ATTRIBUTE_MAPPING_KEY);
    assertEquals(2, ormPersistentType.getDefaultAttributesSize());

    OrmSpecifiedPersistentAttribute ormPersistentAttribute =
        ormPersistentType.getSpecifiedAttributes().iterator().next();
    EclipseLinkOrmOneToOneMapping ormOneToOneMapping =
        (EclipseLinkOrmOneToOneMapping) ormPersistentAttribute.getMapping();

    assertEquals("address", ormOneToOneMapping.getName());
    assertNull(ormOneToOneMapping.getSpecifiedFetch());
    assertNull(ormOneToOneMapping.getSpecifiedOptional());
    assertNull(ormOneToOneMapping.getSpecifiedTargetEntity());
    assertNull(ormOneToOneMapping.getRelationship().getMappedByStrategy().getMappedByAttribute());
    assertEquals(FetchType.EAGER, ormOneToOneMapping.getFetch());
    assertEquals(true, ormOneToOneMapping.isOptional());
    // TODO default target entity in xml
    // assertEquals("test.Address", ormOneToOneMapping.getDefaultTargetEntity());

    assertTrue(
        ormOneToOneMapping.getRelationship().getJoinColumnStrategy().getJoinColumnsSize() > 0);

    // TODO default join columns for specified xmlOneToOne mapping
    //		XmlJoinColumn ormJoinColumn = ormOneToOneMapping.defaultJoinColumns().next();
    //		assertNull(ormJoinColumn.getSpecifiedName());
    //		assertNull(ormJoinColumn.getSpecifiedReferencedColumnName());
    //		assertNull(ormJoinColumn.getSpecifiedUnique());
    //		assertNull(ormJoinColumn.getSpecifiedNullable());
    //		assertNull(ormJoinColumn.getSpecifiedInsertable());
    //		assertNull(ormJoinColumn.getSpecifiedUpdatable());
    //		assertNull(ormJoinColumn.getColumnDefinition());
    //		assertNull(ormJoinColumn.getSpecifiedTable());
    //
    //		assertEquals("address", ormJoinColumn.getDefaultName());
    //		assertEquals("address", ormJoinColumn.getDefaultReferencedColumnName());
    //		assertEquals(Boolean.FALSE, ormJoinColumn.getDefaultUnique());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getDefaultNullable());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getDefaultInsertable());
    //		assertEquals(Boolean.TRUE, ormJoinColumn.getDefaultUpdatable());
    //		assertEquals(null, ormJoinColumn.getColumnDefinition());
    //		assertEquals(TYPE_NAME, ormJoinColumn.getDefaultTable());

    Cascade cascade = ormOneToOneMapping.getCascade();
    assertFalse(cascade.isAll());
    assertFalse(cascade.isMerge());
    assertFalse(cascade.isPersist());
    assertFalse(cascade.isRemove());
    assertFalse(cascade.isRefresh());

    assertEquals(null, ormOneToOneMapping.getJoinFetch().getValue());
    assertFalse(ormOneToOneMapping.getPrivateOwned().isPrivateOwned());
  }