/******************************************************************************* | |
* 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.tests.workbenchintegration; | |
import java.util.List; | |
import org.eclipse.persistence.internal.expressions.FunctionExpression; | |
import org.eclipse.persistence.mappings.CollectionMapping; | |
import org.eclipse.persistence.sessions.Project; | |
import org.eclipse.persistence.testing.framework.TestCase; | |
import org.eclipse.persistence.testing.framework.TestErrorException; | |
import org.eclipse.persistence.testing.models.employee.domain.Employee; | |
import org.eclipse.persistence.testing.models.employee.relational.EmployeeProject; | |
import org.eclipse.persistence.sessions.factories.XMLProjectReader; | |
import org.eclipse.persistence.sessions.factories.XMLProjectWriter; | |
/** | |
* Tests that the order by query keys are properly persisted to the deployment | |
* xml. | |
* | |
* @author Guy Pelletier | |
* @version 1.0 | |
* @date March 11, 2005 | |
*/ | |
public class ProjectXMLOrderByQueryKeysTest extends TestCase { | |
private List m_queryKeyExpressionsAfterWrite; | |
private List m_queryKeyExpressionsBeforeWrite; | |
private static final String TEMP_FILE = "TempTestProjectSafeToDelete.xml"; | |
private static final String ATTRIBUTE_NAME = "phoneNumbers"; | |
public ProjectXMLOrderByQueryKeysTest() { | |
setDescription("Tests the order by query keys on a collection mapping."); | |
} | |
public void test() { | |
Project project = new EmployeeProject(); | |
CollectionMapping mapping = | |
(CollectionMapping)project.getDescriptor(Employee.class).getMappingForAttributeName(ATTRIBUTE_NAME); | |
// Add the new order by query keys to the mapping | |
mapping.addAscendingOrdering("ascending1"); | |
mapping.addDescendingOrdering("descending1"); | |
mapping.addAscendingOrdering("ascending2"); | |
mapping.addDescendingOrdering("descending2"); | |
m_queryKeyExpressionsBeforeWrite = mapping.getOrderByQueryKeyExpressions(); | |
// Write out the project with changes and read back in again. | |
XMLProjectWriter.write(TEMP_FILE, project); | |
project = XMLProjectReader.read(TEMP_FILE, getClass().getClassLoader()); | |
mapping = | |
(CollectionMapping)project.getDescriptor(Employee.class).getMappingForAttributeName(ATTRIBUTE_NAME); | |
// Store the query keys after reading them back in again | |
m_queryKeyExpressionsAfterWrite = mapping.getOrderByQueryKeyExpressions(); | |
} | |
protected void verify() { | |
if (m_queryKeyExpressionsBeforeWrite.size() != m_queryKeyExpressionsAfterWrite.size()) { | |
throw new TestErrorException("The number of query keys read was not equal to the number written."); | |
} | |
// check that each is in the same order as they were set. | |
for (int i = 0; i < m_queryKeyExpressionsBeforeWrite.size(); i++) { | |
String key1 = | |
((FunctionExpression)m_queryKeyExpressionsBeforeWrite.get(i)).getBaseExpression().getName(); | |
String key2 = | |
((FunctionExpression)m_queryKeyExpressionsAfterWrite.get(i)).getBaseExpression().getName(); | |
if (!key1.equals(key2)) { | |
throw new TestErrorException("Ordering query keys not written (or read) in the same order as they were set."); | |
} | |
} | |
} | |
} |