/*******************************************************************************
 * Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0 
 * which accompanies this distribution. 
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Oracle - initial API and implementation from Oracle TopLink
 ******************************************************************************/  
package org.eclipse.persistence.testing.oxm.mappings.transformation;


/**
 *  @version $Header: TransformationMappingTestProject.java 02-nov-2006.10:57:27 gyorke Exp $
 *  @author  mmacivor
 *  @since   release specific (what release of product did this appear in)
 */

import org.eclipse.persistence.internal.identitymaps.*;
import org.eclipse.persistence.oxm.mappings.XMLAnyCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLAnyObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLTransformationMapping;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.sessions.Project;


public class TransformationMappingTestProject extends Project {

  public TransformationMappingTestProject() {
    addDescriptor(getEmployeeDescriptor());
    addDescriptor(getRootWithAnyCollectionDescriptor());
    addDescriptor(getRootWithAnyObjectDescriptor());
    addDescriptor(getRootWithCompositeCollectionDescriptor());
    addDescriptor(getRootWithCompositeObjectDescriptor());
  }

  public XMLDescriptor getEmployeeDescriptor() {
    XMLDescriptor employeeDescriptor = new XMLDescriptor();
    employeeDescriptor.setJavaClass(org.eclipse.persistence.testing.oxm.mappings.transformation.Employee.class);
    employeeDescriptor.setDefaultRootElement("employee");
    employeeDescriptor.setIdentityMapClass(NoIdentityMap.class);
    employeeDescriptor.setExistenceChecking("Check database");

		XMLTransformationMapping nameMapping = new XMLTransformationMapping();
		nameMapping.setAttributeName("name");
		nameMapping.setGetMethodName("getName");
		nameMapping.setSetMethodName("setName");
		nameMapping.setAttributeTransformation("buildNameAttribute");
		nameMapping.addFieldTransformation("name/text()", "buildNameField");
		nameMapping.setIsMutable(false);
		employeeDescriptor.addMapping(nameMapping);
		
    XMLTransformationMapping mapping = new XMLTransformationMapping();
    mapping.setAttributeName("normalHours");
    mapping.setGetMethodName("getNormalHours");
    mapping.setSetMethodName("setNormalHours");    
    mapping.setAttributeTransformer(new org.eclipse.persistence.testing.oxm.mappings.transformation.NormalHoursAttributeTransformer());
    mapping.addFieldTransformer("normal-hours/start-time/text()", new StartTimeTransformer());      
    mapping.addFieldTransformer("normal-hours/end-time/text()", new org.eclipse.persistence.testing.oxm.mappings.transformation.EndTimeTransformer());
    employeeDescriptor.addMapping(mapping);
    return employeeDescriptor;
  }
  
  public XMLDescriptor getRootWithAnyCollectionDescriptor() {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setJavaClass(RootWithAnyCollection.class);
    descriptor.setDefaultRootElement("root-with-any-collection");

    XMLAnyCollectionMapping objectsMapping = new XMLAnyCollectionMapping();
    objectsMapping.setAttributeName("objects");
    descriptor.addMapping(objectsMapping);
    
    return descriptor;
  }
  
  public XMLDescriptor getRootWithAnyObjectDescriptor() {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setJavaClass(RootWithAnyObject.class);
    descriptor.setDefaultRootElement("root-with-any-object");
    
    XMLAnyObjectMapping objectMapping = new XMLAnyObjectMapping();
    objectMapping.setAttributeName("object");
    descriptor.addMapping(objectMapping);
    
    return descriptor;    
  }
  
  public XMLDescriptor getRootWithCompositeCollectionDescriptor() {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setJavaClass(RootWithCompositeCollection.class);
    descriptor.setDefaultRootElement("root-with-composite-collection");

    XMLCompositeCollectionMapping employeesMapping = new XMLCompositeCollectionMapping();
    employeesMapping.setAttributeName("employees");
    employeesMapping.setXPath("employee");
    employeesMapping.setReferenceClass(Employee.class);
    descriptor.addMapping(employeesMapping);
    
    return descriptor;    
  }
  
  public XMLDescriptor getRootWithCompositeObjectDescriptor() {
    XMLDescriptor descriptor = new XMLDescriptor();
    descriptor.setJavaClass(RootWithCompositeObject.class);
    descriptor.setDefaultRootElement("root-with-composite-object");
    
    XMLCompositeObjectMapping employeeMapping = new XMLCompositeObjectMapping();
    employeeMapping.setAttributeName("employee");
    employeeMapping.setXPath("employee");
    employeeMapping.setReferenceClass(Employee.class);
    descriptor.addMapping(employeeMapping);
    
    return descriptor;
  }
  
}
