/******************************************************************************* * Copyright (c) 1998, 2015 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 org.eclipse.persistence.descriptors.ClassDescriptor; import org.eclipse.persistence.queries.DataReadQuery; import org.eclipse.persistence.queries.StoredFunctionCall; import org.eclipse.persistence.queries.StoredProcedureCall; import org.eclipse.persistence.sessions.DatabaseSession; import org.eclipse.persistence.testing.models.employee.relational.EmployeeProject; import org.eclipse.persistence.testing.tests.customsqlstoredprocedures.EmployeeCustomSQLSystem; import org.eclipse.persistence.tools.schemaframework.SchemaManager; import org.eclipse.persistence.tools.schemaframework.StoredProcedureDefinition; import org.eclipse.persistence.sessions.factories.XMLProjectReader; import org.eclipse.persistence.sessions.factories.XMLProjectWriter; /** * This test system uses the Employee Custom SQL test system to test the integration between the * Mapping Workbench and the Foundation Library. in addition, it writes stored * procedure calls into project XML on which stored procedure WM integration test model runs. * @author Kyle Chen */ public class EmployeeCustomSQLMWIntegrationSystem extends EmployeeCustomSQLSystem { public static String PROJECT_FILE = "MWIntegrationCustomSQLEmployeeProject"; public ClassDescriptor employeeDescriptor; /** * Override the constructor for employee system to allow us to read and write XML */ public EmployeeCustomSQLMWIntegrationSystem() { this(PROJECT_FILE); } /** * Override the constructor for employee system to allow us to read and write XML */ public EmployeeCustomSQLMWIntegrationSystem(String fileName) { initializeProject(getInitialProject(), fileName); } /** * This initial project will be written to a Project.xml. */ public org.eclipse.persistence.sessions.Project getInitialProject() { org.eclipse.persistence.sessions.Project initialProject = new EmployeeProject(); employeeDescriptor = initialProject.getDescriptors().get(org.eclipse.persistence.testing.models.employee.domain.Employee.class); addQueries(); return initialProject; } /** * Writes the initial project to a Project.xml, read project back from project.xml. */ public void initializeProject(org.eclipse.persistence.sessions.Project initialProject, String fileName) { XMLProjectWriter.write(fileName + ".xml", initialProject); project = XMLProjectReader.read(fileName + ".xml", getClass().getClassLoader()); } //build your owner stored procedure rather than those inherited if necessary. //schema.replaceObject(buildOracleStoredProcedureForProjectXML()); public void createTables(DatabaseSession session) { super.createTables(session); org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform = session.getLogin().getPlatform(); SchemaManager schema = new SchemaManager((session)); if (platform.isOracle()) { } } public void addQueries() { buildStoredProcedureCallInQueryIntoDescriptor(); buildUNamedStoredProcedureCallInQueryIntoDescriptor(); buildNamedQueryWithStoredFunctionIntoDescriptor(); } //Add additional stored procedure call. public StoredProcedureDefinition buildOracleStoredProcedureForProjectXML() { StoredProcedureDefinition proc = new StoredProcedureDefinition(); return proc; } public void buildStoredProcedureCallInQueryIntoDescriptor() { StoredProcedureCall call = new StoredProcedureCall(); call.setProcedureName("StoredProcedure_InOut_Out_In"); call.addNamedInOutputArgumentValue("P_INOUT", new Integer(100), "P_INOUT_FIELD_NAME", Integer.class); call.addNamedOutputArgument("P_OUT", "P_OUT_FIELD_NAME", Integer.class); call.addNamedArgumentValue("P_IN", new Integer(1000)); //Set stored procedure to Named query. DataReadQuery dataReadQuery = new DataReadQuery(); dataReadQuery.setCall(call); employeeDescriptor.getQueryManager().addQuery("StoredProcedureCallInDataReadQuery", dataReadQuery); } public void buildUNamedStoredProcedureCallInQueryIntoDescriptor() { StoredProcedureCall unamedcall = new StoredProcedureCall(); unamedcall.setProcedureName("StoredProcedure_InOut_Out_In"); unamedcall.addUnamedInOutputArgumentValue(new Integer(100), "P_INOUT_FIELD_NAME", Integer.class); unamedcall.addUnamedOutputArgument("P_OUT_FIELD_NAME", Integer.class); unamedcall.addUnamedArgumentValue(new Integer(1000)); //Set stored procedure to Named query DataReadQuery unameddataReadQuery = new DataReadQuery(); unameddataReadQuery.setCall(unamedcall); employeeDescriptor.getQueryManager().addQuery("UNamedStoredProcedureCallInDataReadQuery", unameddataReadQuery); } public void buildNamedQueryWithStoredFunctionIntoDescriptor() { /* StoredFunctionDefinition func = new StoredFunctionDefinition(); func.setName("StoredFunction_InOut_Out_In"); func.addInOutputArgument("P_INOUT", Long.class); func.addOutputArgument("P_OUT", Long.class); func.addArgument("P_IN", Long.class); func.setReturnType(Long.class); func.addStatement("P_OUT := P_INOUT"); func.addStatement("P_INOUT := P_IN"); func.addStatement("RETURN P_OUT"); */ DataReadQuery drq = new DataReadQuery(); drq.setName("StoredFunctionCallInNamedQuery"); drq.addArgument("P_INOUT", Long.class); drq.addArgument("P_IN", Long.class); StoredFunctionCall sfc = new StoredFunctionCall(); sfc.setProcedureName("StoredFunction_InOut_Out_In"); sfc.addNamedInOutputArgument("P_INOUT", "P_INOUT", Long.class); sfc.addNamedOutputArgument("P_OUT", "P_OUT", Long.class); sfc.addNamedArgument("P_IN", "P_IN", Long.class); sfc.setResult("", Long.class); drq.addCall(sfc); employeeDescriptor.getQueryManager().addQuery("StoredFunctionCallInNamedQuery", drq); } }