blob: 46e1db42ed6439232a0b12d4629c18443e753cef [file] [log] [blame]
/*
* 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.netbeans.modules.j2ee.persistence.action;
import java.text.MessageFormat;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Set;
import javax.lang.model.element.Modifier;
import org.netbeans.modules.j2ee.persistence.dd.common.Persistence;
/**
* This class represents code generation options for invoking
* <code>javax.persistence.EntityManager</code> .
*
* @author Erno Mononen
*/
public final class GenerationOptions {
public enum Operation {
// {0} the Classname of the entity Class object
// {1} the name of the given parameter, i.e. <code>parameterName</code>.
// {2} the class of the given parameter, i.e. <code>parameterType</code>.
// {3} the return type of the method, i.e. <code>returnType</code>.
// {4} a query attribute for the query, i.e. <code>queryAttribute</code>.
// {5} the java.lang.Class object of the entity class
PERSIST("{0}.persist({1});"),
MERGE("{0}.merge({1});"),
REMOVE("{0}.remove({0}.merge({1}));"),
FIND("return {0}.find({5}, {1});"),
// here the query attribute represents the name of the entity class
FIND_ALL(
"return {0}.createQuery(\"select object(o) from \" + {5}.getSimpleName() + \" as o\").getResultList();",
"javax.persistence.criteria.CriteriaQuery cq = {0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));return {0}.createQuery(cq).getResultList();"
),
//querry to get only items starting from {1}[0] up to {1}[1]-1
FIND_SUBSET(
"javax.persistence.Query q = {0}.createQuery(\"select object(o) from \" + {5}.getSimpleName() + \" as o\");\nq.setMaxResults({1}[1]-{1}[0]+1);\nq.setFirstResult({1}[0]);\nreturn q.getResultList();",
"javax.persistence.criteria.CriteriaQuery cq = {0}.getCriteriaBuilder().createQuery();cq.select(cq.from({5}));javax.persistence.Query q = {0}.createQuery(cq);q.setMaxResults({1}[1]-{1}[0]+1);q.setFirstResult({1}[0]);return q.getResultList();"),
//qurrry to get count(*) on a table
COUNT(
"return ((Long) {0}.createQuery(\"select count(o) from \" + {5}.getSimpleName() + \" as o\").getSingleResult()).intValue();",
"javax.persistence.criteria.CriteriaQuery cq = {0}.getCriteriaBuilder().createQuery();javax.persistence.criteria.Root<{4}> rt = cq.from({5});cq.select({0}.getCriteriaBuilder().count(rt));javax.persistence.Query q = {0}.createQuery(cq);return ((Long) q.getSingleResult()).intValue();"),
GET_EM("return {0};");
private String body;
private String body2_0;
private Operation(String body){
this(body, body);
}
private Operation(String body, String body2_0){
this.body2_0=body2_0;
this.body = body;
}
/*
* @return default body (for jpa 1.0)
*/
public String getBody(){
return getBody(Persistence.VERSION_1_0);
}
/*
* @return body for corresponding jpa version, default is 1.0
*/
public String getBody(String version){
if(version!=null && !Persistence.VERSION_1_0.equals(version))//any version except 1.0 will get this case
{
return body2_0;
}
else return body;
}
}
private Operation operation;
private String methodName;
private String returnType;
private String parameterName;
private String parameterType;
private String queryAttribute;
private String annotationType;
private Set<Modifier> modifiers = EnumSet.of(Modifier.PUBLIC);
/** Creates a new instance of GenerationOptions */
public GenerationOptions() {
}
public String getMethodName() {
return methodName;
}
public Operation getOperation() {
return operation;
}
public String getParameterName() {
return parameterName;
}
public String getParameterType() {
return parameterType;
}
public void setParameterName(String parameterName) {
this.parameterName = parameterName;
}
public void setParameterType(String parameterType) {
this.parameterType = parameterType;
}
public String getQueryAttribute() {
return queryAttribute;
}
public String getReturnType() {
return returnType;
}
public Set<Modifier> getModifiers() {
return modifiers;
}
public void setModifiers(Set<Modifier> modifiers) {
this.modifiers = new HashSet<Modifier>(modifiers);
}
public String getCallLines(){
return getCallLines(null, null);
}
public String getCallLines(String emName, String ecName){
return getCallLines(emName, ecName, Persistence.VERSION_1_0);
}
public String getCallLines(String emName, String ecName, String version){
return operation == null ? null : MessageFormat.format(operation.getBody(version), new Object[] {
emName,
getParameterName(),
getParameterType(),
getReturnType(),
getQueryAttribute(),
ecName});
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public void setOperation(Operation operation) {
this.operation = operation;
}
public void setQueryAttribute(String queryAttribute) {
this.queryAttribute = queryAttribute;
}
public void setReturnType(String returnType) {
this.returnType = returnType;
}
public String getAnnotation() {
return annotationType;
}
public void setAnnotation(String annotationType) {
this.annotationType = annotationType;
}
}