package org.holoeverywhere.resbuilder; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.holoeverywhere.resbuilder.FileProcesser.ProcessResult; import org.json.JSONObject; public abstract class TypeProcesser { @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Inherited public static @interface Type { public String name() default ""; /** * Name for block which TypeProcesser will be process */ public String value(); } private final String type, name; public TypeProcesser() { Class<? extends TypeProcesser> clazz = getClass(); if (!clazz.isAnnotationPresent(Type.class)) { throw new IllegalStateException("TypeProcesser should be present Type annotation"); } Type type = clazz.getAnnotation(Type.class); String name = type.name(); if (name.length() == 0) { name = clazz.getSimpleName(); if (name.startsWith("Type") && name.length() > 4) { name = name.substring(4); } } this.name = name; this.type = type.value(); } public final String getName() { return name; } public final String getType() { return type; } public abstract ProcessResult process(BuildMojo mojo, JSONObject json); }