/*******************************************************************************
* Copyright (c) 2009-2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.hibernate.jpt.core.internal.context.java;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jpt.jpa.core.context.NamedNativeQuery;
import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer;
import org.eclipse.jpt.jpa.core.jpql.JpaJpqlQueryHelper;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
import org.jboss.tools.hibernate.jpt.core.internal.context.HibernateNamedNativeQuery;
import org.jboss.tools.hibernate.jpt.core.internal.resource.java.HibernateNamedNativeQueryAnnotation;
/**
* @author Dmitry Geraskov
*
*/
public class HibernateNamedNativeQueryImpl extends AbstractHibernateNamedQueryImpl<HibernateNamedNativeQueryAnnotation>
implements HibernateJavaNamedNativeQuery {
protected String resultClass;
protected String fullyQualifiedResultClass;
protected String resultSetMapping;
private Boolean specifiedCallable;
/**
* @param parent
*/
public HibernateNamedNativeQueryImpl(JavaQueryContainer parent, HibernateNamedNativeQueryAnnotation queryAnnotation) {
super(parent, queryAnnotation);
this.resultClass = queryAnnotation.getResultClass();
this.resultSetMapping = queryAnnotation.getResultSetMapping();
this.specifiedCallable = queryAnnotation.isCallable();
}
@Override
public void synchronizeWithResourceModel(IProgressMonitor monitor) {
super.synchronizeWithResourceModel(monitor);
this.setResultClass_(this.queryAnnotation.getResultClass());
this.setResultSetMapping_(this.queryAnnotation.getResultSetMapping());
this.setSpecifiedReadOnly_(this.queryAnnotation.isCallable());
}
@Override
public void update(IProgressMonitor monitor) {
super.update(monitor);
this.setFullyQualifiedResultClass(this.buildFullyQualifiedResultClass());
}
// ********** metadata conversion *********
@Override
public void delete() {
this.getParent().removeHibernateNamedNativeQuery(this);
}
// ********** result class **********
@Override
public String getResultClass() {
return this.resultClass;
}
@Override
public void setResultClass(String resultClass) {
this.queryAnnotation.setResultClass(resultClass);
this.setResultClass_(resultClass);
}
protected void setResultClass_(String resultClass) {
String old = this.resultClass;
this.resultClass = resultClass;
this.firePropertyChanged(RESULT_CLASS_PROPERTY, old, resultClass);
}
@Override
public char getResultClassEnclosingTypeSeparator() {
return '.';
}
@Override
public String getFullyQualifiedResultClass() {
return this.fullyQualifiedResultClass;
}
protected void setFullyQualifiedResultClass(String resultClass) {
String old = this.fullyQualifiedResultClass;
this.fullyQualifiedResultClass = resultClass;
this.firePropertyChanged(FULLY_QUALIFIED_RESULT_CLASS_PROPERTY, old, resultClass);
}
protected String buildFullyQualifiedResultClass() {
return this.queryAnnotation.getFullyQualifiedResultClassName();
}
// ********** result set mapping **********
@Override
public String getResultSetMapping() {
return this.resultSetMapping;
}
@Override
public void setResultSetMapping(String resultSetMapping) {
this.queryAnnotation.setResultSetMapping(resultSetMapping);
this.setResultSetMapping_(resultSetMapping);
}
protected void setResultSetMapping_(String resultSetMapping) {
String old = this.resultSetMapping;
this.resultSetMapping = resultSetMapping;
this.firePropertyChanged(RESULT_SET_MAPPING_PROPERTY, old, resultSetMapping);
}
//************************ callable *********************************
@Override
public boolean isCallable(){
return (getSpecifiedCallable() == null ? isDefaultCallable()
: getSpecifiedCallable().booleanValue());
}
@Override
public Boolean getSpecifiedCallable(){
return this.specifiedCallable;
}
@Override
public void setSpecifiedCallable(Boolean newSpecifiedCallable){
Boolean oldSpecifiedCallable = this.specifiedCallable;
this.specifiedCallable = newSpecifiedCallable;
this.getQueryAnnotation().setCallable(newSpecifiedCallable);
firePropertyChanged(SPECIFIED_CALLABLE_PROPERTY, oldSpecifiedCallable, newSpecifiedCallable);
}
protected void setSpecifiedCallable_(Boolean callable){
Boolean oldSpecifiedCallable = this.specifiedCallable;
this.specifiedCallable = callable;
firePropertyChanged(SPECIFIED_CALLABLE_PROPERTY, oldSpecifiedCallable, callable);
}
@Override
public boolean isDefaultCallable(){
return HibernateNamedNativeQuery.DEFAULT_CALLABLE;
}
// ********** validation **********
@Override
public void validate(JpaJpqlQueryHelper queryHelper, List<IMessage> messages, IReporter reporter) {
// nothing yet
}
// ********** misc **********
@Override
public Class<NamedNativeQuery> getQueryType() {
// return HibernateNamedNativeQuery.class;
return NamedNativeQuery.class;
}
@Override
public String getQuery() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setQuery(String query) {
// TODO Auto-generated method stub
}
}