Package org.apache.cayenne.access.select

Source Code of org.apache.cayenne.access.select.EntityTreeSegmentBuilderTest

/*****************************************************************
*   Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you under the Apache License, Version 2.0 (the
*  "License"); you may not use this file except in compliance
*  with the License.  You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing,
*  software distributed under the License is distributed on an
*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
*  KIND, either express or implied.  See the License for the
*  specific language governing permissions and limitations
*  under the License.
****************************************************************/
package org.apache.cayenne.access.select;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cayenne.DataRow;
import org.apache.cayenne.access.types.ExtendedTypeMap;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.query.QueryMetadata;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.reflect.ClassDescriptor;
import org.apache.cayenne.testdo.inherit.AbstractPerson;
import org.apache.cayenne.testdo.inherit.CustomerRepresentative;
import org.apache.cayenne.unit.PeopleCase;

import com.mockrunner.mock.jdbc.MockResultSet;

public class EntityTreeSegmentBuilderTest extends PeopleCase {

    public void testBuildSegmentColumnsLeaf() {

        SelectQuery query = new SelectQuery(CustomerRepresentative.class);

        EntityResolver resolver = getDomain().getEntityResolver();
        QueryMetadata md = query.getMetaData(resolver);
        ClassDescriptor descriptor = md.getClassDescriptor();
        ExtendedTypeMap converters = getDomain()
                .getDataNodes()
                .iterator()
                .next()
                .getAdapter()
                .getExtendedTypes();

        SelectDescriptor<Object> select = new EntityTreeSegmentBuilder(
                md,
                converters,
                descriptor).buildSegment();

        List<? extends SelectColumn> columns = select.getColumns();

        Collection<String> columnNames = new ArrayList<String>(Arrays.asList(
                "CLIENT_COMPANY_ID",
                "CLIENT_CONTACT_TYPE",
                "NAME",
                "PERSON_ID",
                "PERSON_TYPE"));

        for (SelectColumn column : columns) {
            columnNames.remove(column.getDataRowKey());
        }

        assertTrue("Missing columns: " + columnNames, columnNames.isEmpty());
        assertEquals("Unexpected columns present", 5, columns.size());
    }

    public void testBuildSegmentRowReaderLeaf() throws Exception {

        SelectQuery query = new SelectQuery(CustomerRepresentative.class);

        EntityResolver resolver = getDomain().getEntityResolver();
        QueryMetadata md = query.getMetaData(resolver);
        ClassDescriptor descriptor = md.getClassDescriptor();
        ExtendedTypeMap converters = getDomain()
                .getDataNodes()
                .iterator()
                .next()
                .getAdapter()
                .getExtendedTypes();

        SelectDescriptor<Object> select = new EntityTreeSegmentBuilder(
                md,
                converters,
                descriptor).buildSegment();

        List<? extends SelectColumn> columns = select.getColumns();

        Map<String, Object> crRowMap = new HashMap<String, Object>();
        crRowMap.put("PERSON_ID", 3);
        crRowMap.put("PERSON_TYPE", "C");
        crRowMap.put("NAME", "E2");
        crRowMap.put("CLIENT_CONTACT_TYPE", "XX");
        crRowMap.put("CLIENT_COMPANY_ID", 3);

        List<Object> crRow = new ArrayList<Object>();

        MockResultSet rs = new MockResultSet("test");
        for (SelectColumn column : columns) {
            rs.addColumn(column.getColumnName(md.getDbEntity(), null));
            crRow.add(crRowMap.get(column.getDataRowKey()));
        }

        rs.addRow(crRow);

        RowReader<Object> reader = select.getRowReader(rs);

        rs.next();
        DataRow crRowRead = (DataRow) reader.readRow(rs);
        assertEquals("CustomerRepresentative", crRowRead.getEntityName());
        assertEquals("Invalid row read: " + crRowRead, crRowMap, crRowRead);
    }

    public void testBuildSegmentColumnsSuper() {

        SelectQuery query = new SelectQuery(AbstractPerson.class);

        EntityResolver resolver = getDomain().getEntityResolver();
        QueryMetadata md = query.getMetaData(resolver);
        ClassDescriptor descriptor = md.getClassDescriptor();
        ExtendedTypeMap converters = getDomain()
                .getDataNodes()
                .iterator()
                .next()
                .getAdapter()
                .getExtendedTypes();

        SelectDescriptor<Object> select = new EntityTreeSegmentBuilder(
                md,
                converters,
                descriptor).buildSegment();

        List<? extends SelectColumn> columns = select.getColumns();

        Collection<String> columnNames = new ArrayList<String>(Arrays.asList(
                "CLIENT_COMPANY_ID",
                "CLIENT_CONTACT_TYPE",
                "DEPARTMENT_ID",
                "NAME",
                "PERSON_ID",
                "PERSON_TYPE",
                "SALARY"));

        for (SelectColumn column : columns) {
            columnNames.remove(column.getDataRowKey());
        }

        assertTrue("Missing columns: " + columnNames, columnNames.isEmpty());
        assertEquals("Unexpected columns present", 7, columns.size());
    }

    public void testBuildSegmentRowReaderSuper() throws Exception {
        SelectQuery query = new SelectQuery(AbstractPerson.class);

        EntityResolver resolver = getDomain().getEntityResolver();
        QueryMetadata md = query.getMetaData(resolver);
        ClassDescriptor descriptor = md.getClassDescriptor();
        ExtendedTypeMap converters = getDomain()
                .getDataNodes()
                .iterator()
                .next()
                .getAdapter()
                .getExtendedTypes();

        SelectDescriptor<Object> select = new EntityTreeSegmentBuilder(
                md,
                converters,
                descriptor).buildSegment();

        List<? extends SelectColumn> columns = select.getColumns();

        Map<String, Object> employeeRowMap = new HashMap<String, Object>();
        employeeRowMap.put("PERSON_ID", 1);
        employeeRowMap.put("PERSON_TYPE", "EE");
        employeeRowMap.put("NAME", "E1");
        employeeRowMap.put("SALARY", new Float(1.0));
        employeeRowMap.put("DEPARTMENT_ID", 1);

        Map<String, Object> managerRowMap = new HashMap<String, Object>();
        managerRowMap.put("PERSON_ID", 2);
        managerRowMap.put("PERSON_TYPE", "EM");
        managerRowMap.put("NAME", "E2");
        managerRowMap.put("SALARY", new Float(2.0));
        managerRowMap.put("DEPARTMENT_ID", 2);

        Map<String, Object> crRowMap = new HashMap<String, Object>();
        crRowMap.put("PERSON_ID", 3);
        crRowMap.put("PERSON_TYPE", "C");
        crRowMap.put("NAME", "E2");
        crRowMap.put("CLIENT_CONTACT_TYPE", "XX");
        crRowMap.put("CLIENT_COMPANY_ID", 3);

        List<Object> employeeRow = new ArrayList<Object>();
        List<Object> managerRow = new ArrayList<Object>();
        List<Object> crRow = new ArrayList<Object>();

        MockResultSet rs = new MockResultSet("test");
        for (SelectColumn column : columns) {
            rs.addColumn(column.getColumnName(md.getDbEntity(), null));

            employeeRow.add(employeeRowMap.get(column.getDataRowKey()));
            managerRow.add(managerRowMap.get(column.getDataRowKey()));
            crRow.add(crRowMap.get(column.getDataRowKey()));
        }

        rs.addRow(employeeRow);
        rs.addRow(managerRow);
        rs.addRow(crRow);

        RowReader<Object> reader = select.getRowReader(rs);

        rs.next();
        DataRow employeeRowRead = (DataRow) reader.readRow(rs);
        assertEquals("Employee", employeeRowRead.getEntityName());
        assertEquals(
                "Invalid row read: " + employeeRowRead,
                employeeRowMap,
                employeeRowRead);

        rs.next();
        DataRow managerRowRead = (DataRow) reader.readRow(rs);
        assertEquals("Manager", managerRowRead.getEntityName());
        assertEquals("Invalid row read: " + managerRowRead, managerRowMap, managerRowRead);

        rs.next();
        DataRow crRowRead = (DataRow) reader.readRow(rs);
        assertEquals("CustomerRepresentative", crRowRead.getEntityName());
        assertEquals("Invalid row read: " + crRowRead, crRowMap, crRowRead);
    }
}
TOP

Related Classes of org.apache.cayenne.access.select.EntityTreeSegmentBuilderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.