/******************************************************************************* | |
* 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.internal.xr; | |
// Javase imports | |
// Java extension imports | |
// EclipseLink imports | |
import org.eclipse.persistence.descriptors.ClassDescriptor; | |
import org.eclipse.persistence.exceptions.DBWSException; | |
import org.eclipse.persistence.queries.DatabaseQuery; | |
/** | |
* <p><b>INTERNAL:</b> NamedQueryHandler retrieves the TopLink {@link DatabaseQuery} | |
* from the named query | |
* | |
* @author Mike Norman - michael.norman@oracle.com | |
* @since EclipseLink 1.x | |
*/ | |
public class NamedQueryHandler extends QueryHandler { | |
protected String name; | |
protected String descriptor; | |
public String getName() { | |
return name; | |
} | |
public void setName(String name) { | |
this.name = name; | |
} | |
public String getDescriptor() { | |
return descriptor; | |
} | |
public void setDescriptor(String descriptor) { | |
this.descriptor = descriptor; | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
@Override | |
public void validate(XRServiceAdapter xrService, QueryOperation queryOperation) { | |
if (descriptor != null) { | |
if (!xrService.getORSession().getProject().getAliasDescriptors().containsKey(descriptor)) { | |
throw DBWSException.couldNotLocateDescriptorForOperation(descriptor, getName()); | |
} | |
ClassDescriptor cd = xrService.getORSession().getProject().getDescriptorForAlias(descriptor); | |
if (cd.getQueryManager().getQuery(name) == null) { | |
boolean foundQuery = false; | |
for (DatabaseQuery q : xrService.getORSession().getProject().getJPAQueries()) { | |
if (q.getName().equals(name)) { | |
foundQuery = true; | |
cd.getQueryManager().addQuery(name, q); | |
break; | |
} | |
} | |
if (!foundQuery) { | |
throw DBWSException.couldNotLocateQueryForDescriptor(name, descriptor); | |
} | |
} | |
} else if (xrService.getORSession().getQuery(name) == null) { | |
boolean foundQuery = false; | |
for (DatabaseQuery q : xrService.getORSession().getJPAQueries()) { | |
if (q.getName().equals(name)) { | |
foundQuery = true; | |
break; | |
} | |
} | |
if (!foundQuery) { | |
throw DBWSException.couldNotLocateQueryForSession(name,xrService.getORSession().getName()); | |
} | |
} | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
@Override | |
public void initialize(XRServiceAdapter xrService, QueryOperation queryOperation) { | |
if (descriptor != null) { | |
ClassDescriptor cd = xrService.getORSession().getProject().getDescriptorForAlias(descriptor); | |
databaseQuery = cd.getQueryManager().getQuery(name); | |
} else { | |
databaseQuery = xrService.getORSession().getQuery(name); | |
if (databaseQuery == null) { | |
// must be a JPAQuery | |
for (DatabaseQuery q : xrService.getORSession().getJPAQueries()) { | |
if (q.getName().equals(name)) { | |
databaseQuery = q; | |
break; | |
} | |
} | |
} | |
} | |
} | |
} |