package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
public int id();
public String description() default "no description";
}
--------------------------------------------------------------------------------
package test;
import java.util.List;
public class PasswordUtils {
@UseCase(id = 47, description = "passwords must contain at least one numeric")
public boolean validatePassword(String password) {
return (password.matches("\\w*\\d\\w*"));
}
@UseCase(id = 48)
public String encryptPassword(String password) {
return new StringBuilder(password).reverse().toString();
}
@UseCase(id = 49, description = "New passwords can't equal preciously used ones")
public boolean checkForNewPassword(List<String> prevPasswords,
String password) {
return !prevPasswords.contains(password);
}
}
--------------------------------------------------------------------------------------
package test;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UseCaseTracker {
public static void trackUseCases(List<Integer> userCases,Class<?> cl){
for(Method m:cl.getDeclaredMethods()){
UseCase uc=m.getAnnotation(UseCase.class);
System.out.println(uc);
if(uc!=null){
System.out.println("Found Use CaseL"+uc.id()+" "+uc.description());
userCases.remove(new Integer(uc.id()));
}
}
for(int i:userCases){
System.out.println("Warning:Missing user case-"+i);
}
}
public static void main(String[] args){
List<Integer> useCases=new ArrayList<Integer>();
Collections.addAll(useCases,47,48,49,50);
trackUseCases(useCases,PasswordUtils.class);
}
}