/**
   * INTERNAL: This methods clones all the fields and ensures that each collection refers to the
   * same clones.
   */
  @Override
  public Object clone() {
    VariableOneToOneMapping clone = (VariableOneToOneMapping) super.clone();
    Map setOfKeys = new HashMap(getSourceToTargetQueryKeyNames().size());
    Map sourceToTarget = new HashMap(getSourceToTargetQueryKeyNames().size());
    Vector foreignKeys =
        org.eclipse.persistence.internal.helper.NonSynchronizedVector.newInstance(
            getForeignKeyFields().size());

    if (getTypeField() != null) {
      clone.setTypeField((DatabaseField) this.getTypeField().clone());
    }

    for (Iterator enumtr = getSourceToTargetQueryKeyNames().keySet().iterator();
        enumtr.hasNext(); ) {
      // Clone the SourceKeyFields
      DatabaseField field = (DatabaseField) enumtr.next();
      DatabaseField clonedField = (DatabaseField) field.clone();
      setOfKeys.put(field, clonedField);
      // on the next line I'm cloning the query key names
      sourceToTarget.put(clonedField, getSourceToTargetQueryKeyNames().get(field));
    }

    for (Enumeration enumtr = getForeignKeyFields().elements(); enumtr.hasMoreElements(); ) {
      DatabaseField field = (DatabaseField) enumtr.nextElement();
      foreignKeys.addElement(setOfKeys.get(field));
    }
    clone.setSourceToTargetQueryKeyFields(sourceToTarget);
    clone.setForeignKeyFields(foreignKeys);
    clone.setTypeIndicatorTranslation(new HashMap(this.getTypeIndicatorTranslation()));
    return clone;
  }
  protected void setup() {

    descriptor = ((DatabaseSession) getSession()).getDescriptor(Actor.class);
    mapping = (VariableOneToOneMapping) descriptor.getMappingForAttributeName("program");

    sourceField = new DatabaseField("ACTOR.PROGRAM_ID");
    targetQueryKeyName = (String) mapping.getSourceToTargetQueryKeyNames().get(sourceField);
    mapping.addForeignQueryKeyName("ACTOR.PROGRAM_ID", "name2");
    mapping.getForeignKeyFields().removeElement(sourceField);

    actor = Actor.example4();
    databaseRow = new DatabaseRecord();

    if (testMode == 0) {
      // nothing extra needed
    } else if (testMode == 1) {
      ObjectChangeSet changeSet =
          new ObjectChangeSet(new Vector(), descriptor, actor, new UnitOfWorkChangeSet(), true);
      changeRecord = new ObjectReferenceChangeRecord(changeSet);
      changeRecord.setNewValue(changeSet);
    } else if (testMode == 2) {
      deleteObjectQuery = new DeleteObjectQuery(actor);
      deleteObjectQuery.setSession((AbstractSession) getSession());
    }

    expectedException =
        DescriptorException.variableOneToOneMappingIsNotDefinedProperly(
            mapping, descriptor, targetQueryKeyName);
  }
 public void test() {
   try {
     if (testMode == 0) {
       mapping.writeFromObjectIntoRow(
           actor, databaseRow, (AbstractSession) getSession(), WriteType.UNDEFINED); // test one
     } else if (testMode == 1) {
       mapping.writeFromObjectIntoRowWithChangeRecord(
           (org.eclipse.persistence.internal.sessions.ChangeRecord) changeRecord,
           databaseRow,
           (AbstractSession) getSession(),
           WriteType.UNDEFINED); // test two
     } else if (testMode == 2) {
       mapping.writeFromObjectIntoRowForWhereClause(deleteObjectQuery, databaseRow); // test three
     } else {
       throw new org.eclipse.persistence.testing.framework.TestProblemException(
           "Invalid method test name for VariableOneToOneMappingIsNotDefinedProperlyTest");
     }
   } catch (EclipseLinkException exception) {
     caughtException = exception;
   }
 }
  protected void setup() {
    getSession().getIdentityMapAccessor().initializeAllIdentityMaps();

    descriptorToModify = (ClassDescriptor) project.getDescriptors().get(Employee.class);
    VariableOneToOneMapping typeMapping = new VariableOneToOneMapping();
    typeMapping.setAttributeName("test");
    typeMapping.setReferenceClass(Employee.class);
    typeMapping.setForeignQueryKeyName("T_ID", "id");
    typeMapping.addTargetForeignQueryKeyName("testTargerFKQueryName", "testSourcePKFieldName");
    typeMapping.dontUseIndirection();
    typeMapping.privateOwnedRelationship();
    descriptorToModify.addMapping(typeMapping);
  }
 public void reset() {
   mapping.addForeignQueryKeyName("ACTOR.PROGRAM_ID", targetQueryKeyName);
   mapping.getForeignKeyFields().removeElement(sourceField);
 }