package org.jboss.solder.tooling;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import org.jboss.logging.generator.Annotations.FormatType;
import org.jboss.logging.generator.apt.AptHelper;
import org.jboss.solder.logging.Log;
import org.jboss.solder.logging.Logger;
import org.jboss.solder.logging.MessageLogger;
import org.jboss.solder.messages.Field;
import org.jboss.solder.messages.Message;
import org.jboss.solder.messages.MessageBundle;
import org.jboss.solder.messages.Property;
/**
* Date: 24.08.2011
*
* @author <a href="mailto:jperkins@redhat.com">James R. Perkins</a>
*/
public class AptHelperImpl implements AptHelper {
@Override
public FormatType messageFormat(final ExecutableElement method) {
FormatType result = null;
final Message message = method.getAnnotation(SolderAnnotations.MESSAGE_ANNOTATION);
if (message != null) {
switch (message.format()) {
case MESSAGE_FORMAT:
result = FormatType.MESSAGE_FORMAT;
break;
case PRINTF:
result = FormatType.PRINTF;
break;
}
}
return result;
}
@Override
public String projectCode(final TypeElement intf) {
String result = null;
final MessageBundle bundle = intf.getAnnotation(SolderAnnotations.MESSAGE_BUNDLE_ANNOTATION);
final MessageLogger logger = intf.getAnnotation(SolderAnnotations.MESSAGE_LOGGER_ANNOTATION);
if (bundle != null) {
result = bundle.projectCode();
} else if (logger != null) {
result = logger.projectCode();
}
return result;
}
@Override
public boolean hasMessageId(final ExecutableElement method) {
final Message message = method.getAnnotation(SolderAnnotations.MESSAGE_ANNOTATION);
return (message != null && (message.id() != Message.NONE && message.id() != Message.INHERIT));
}
@Override
public boolean inheritsMessageId(final ExecutableElement method) {
final Message message = method.getAnnotation(SolderAnnotations.MESSAGE_ANNOTATION);
return (message != null && (message.id() == Message.INHERIT));
}
@Override
public int messageId(final ExecutableElement method) {
final Message message = method.getAnnotation(SolderAnnotations.MESSAGE_ANNOTATION);
return (message == null ? Message.NONE : message.id());
}
@Override
public String messageValue(final ExecutableElement method) {
final Message message = method.getAnnotation(SolderAnnotations.MESSAGE_ANNOTATION);
return (message == null ? null : message.value());
}
@Override
public String loggerMethod(final FormatType formatType) {
return "log" + (formatType == null ? "" : formatType.logType());
}
@Override
public String logLevel(final ExecutableElement method) {
String result = null;
final Log logMessage = method.getAnnotation(SolderAnnotations.LOG_MESSAGE_ANNOTATION);
if (logMessage != null) {
final Logger.Level logLevel = (logMessage.level() == null ? Logger.Level.INFO : logMessage.level());
result = String.format("%s.%s.%s", Logger.class.getSimpleName(), Logger.Level.class.getSimpleName(), logLevel.name());
}
return result;
}
@Override
public String targetName(final VariableElement param) {
String result = "";
final Field field = param.getAnnotation(Field.class);
final Property property = param.getAnnotation(Property.class);
if (field != null) {
final String name = field.name();
if (name.isEmpty()) {
result = param.getSimpleName().toString();
} else {
result = name;
}
} else if (property != null) {
final String name = property.name();
if (name.isEmpty()) {
result = param.getSimpleName().toString();
} else {
result = name;
}
result = "set" + Character.toUpperCase(result.charAt(0)) + result.substring(1);
}
return result;
}
}