Skip to content

Instantly share code, notes, and snippets.

@nakamura-to
Created October 15, 2012 08:27
Show Gist options
  • Save nakamura-to/3891437 to your computer and use it in GitHub Desktop.
Save nakamura-to/3891437 to your computer and use it in GitHub Desktop.
Concept code of ExternalDomain in Doma
package org.seasar.doma.jdbc.domain;
public interface DomainConverter<D, V> {
// Java to DB
V fromDomainToValue(D domain);
// DB to Java
D fromValueToDomain(V value);
}
// Marker Annotation
package org.seasar.doma;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExternalDomain {
}
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
String csv = Options.getDomainConverters(processingEnv);
List<TypeElement> converterTypeElements = new ArrayList<TypeElement>();
if (csv != null) {
for (String className : csv.split(",")) {
if (!className.isEmpty()) {
TypeElement typeElement = ElementUtil.getTypeElement(
className, processingEnv);
if (typeElement != null) {
converterTypeElements.add(typeElement);
}
}
}
}
this.converterTypeElements = converterTypeElements;
}
package example;
import java.math.BigDecimal;
public class Salary {
public BigDecimal value;
public Salary(BigDecimal value) {
this.value = value;
}
}
package example;
import java.math.BigDecimal;
import org.seasar.doma.ExternalDomain;
import org.seasar.doma.jdbc.domain.DomainConverter;
@ExternalDomain
public class SalaryConverter implements DomainConverter<Salary, BigDecimal> {
@Override
public BigDecimal fromDomainToValue(Salary domain) {
return domain.value;
}
@Override
public Salary fromValueToDomain(BigDecimal value) {
return new Salary(value);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment