/*
* Copyright 2012 PRODYNA AG
*
* Licensed under the Eclipse Public License (EPL), Version 1.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.opensource.org/licenses/eclipse-1.0.php or
* http://www.nabucco.org/License.html
*
* 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.nabucco.framework.generator.compiler.transformation.common.annotation.service;
import org.nabucco.framework.generator.compiler.transformation.common.annotation.NabuccoAnnotation;
import org.nabucco.framework.generator.compiler.transformation.common.annotation.NabuccoAnnotationMapper;
import org.nabucco.framework.generator.compiler.transformation.common.annotation.NabuccoAnnotationType;
import org.nabucco.framework.generator.parser.syntaxtree.AnnotationDeclaration;
import org.nabucco.framework.generator.parser.syntaxtree.MethodDeclaration;
/**
* NabuccoTransactionType
*
* @author Nicolas Moser, PRODYNA AG
*/
public enum NabuccoTransactionType {
MANDATORY("Mandatory"),
REQUIRED("Required"),
REQUIRES_NEW("RequiresNew"),
SUPPORTS("Supports"),
NOT_SUPPORTED("NotSupported"),
NEVER("Never");
private String value;
/**
* Creates a new {@link NabuccoTransactionType} instance.
*
* @param value
* the transaction attribute value
*/
private NabuccoTransactionType(String name) {
this.value = name;
}
/**
* Getter for the value.
*
* @return Returns the value.
*/
public String getValue() {
return this.value;
}
/**
* Resolves the service type of service declaration annotations.
*
* @param nabuccoMethod
* the method declaration to check
*
* @return the defined service type
*/
public static NabuccoTransactionType valueOf(MethodDeclaration nabuccoMethod) {
return NabuccoTransactionType.valueOf(nabuccoMethod.annotationDeclaration);
}
/**
* Resolves the transaction type of service operation declaration annotations.
*
* @param serviceOperationAnnotations
* the service operation annotations to check
*
* @return the defined transaction type
*/
public static NabuccoTransactionType valueOf(AnnotationDeclaration serviceOperationAnnotations) {
NabuccoAnnotation transactionAnnotation = NabuccoAnnotationMapper.getInstance().mapToAnnotation(
serviceOperationAnnotations, NabuccoAnnotationType.TRANSACTION);
if (transactionAnnotation == null || transactionAnnotation.getValue() == null) {
return REQUIRED;
}
String value = transactionAnnotation.getValue();
for (NabuccoTransactionType transactionType : NabuccoTransactionType.values()) {
if (value.equalsIgnoreCase(transactionType.getValue())) {
return transactionType;
}
}
return REQUIRED;
}
}