001 /* 002 * file StpExceptionStpReasonCodeVisitor.java 003 * 004 * IBM Confidential 005 * OCO Source Materials 006 * Rational ClearCase 007 * (C) Copyright IBM Corp. 2010. All rights reserved. 008 * 009 * The source code for this program is not published or otherwise 010 * divested of its trade secrets, irrespective of what has been 011 * deposited with the U.S. Copyright Office. 012 */ 013 package com.ibm.rational.wvcm.stpex.annotation.processing; 014 015 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.INDENT; 016 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.createFile; 017 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.ensureUniqueAndAddIfSo; 018 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.getRpcEnumValues; 019 import static com.ibm.rational.wvcm.stpex.annotation.processing.ListClassesVisitor.writeCommonHeader; 020 021 import java.io.PrintWriter; 022 import java.util.HashMap; 023 import java.util.Map; 024 import java.util.TreeSet; 025 026 import com.sun.mirror.apt.AnnotationProcessorEnvironment; 027 import com.sun.mirror.apt.Filer; 028 import com.sun.mirror.declaration.EnumConstantDeclaration; 029 import com.sun.mirror.util.SimpleDeclarationVisitor; 030 031 public class StpExceptionStpReasonCodeVisitor extends SimpleDeclarationVisitor implements StpVisitor{ 032 private final Map<Integer, TagInfo> m_enums = new HashMap<Integer, TagInfo>(); 033 private final AnnotationProcessorEnvironment m_env; 034 035 private static final String g_hxxFileName = "stp_reason_codes.hxx"; 036 private static final String g_javaFileName = "STPReasonCodeMap.java"; 037 038 private PrintWriter m_hxxOut; 039 private PrintWriter m_javaOut; 040 041 public StpExceptionStpReasonCodeVisitor(AnnotationProcessorEnvironment env) 042 { 043 //System.out.println("Creating StpExceptionStpReasonCodeVisitor"); 044 m_env = env; 045 } 046 047 public void begin() { 048 //System.out.println("StpExceptionStpReasonCodeVisitor begin"); 049 Filer filer = m_env.getFiler(); 050 writeHxxBegin(filer); 051 writeJavaBegin(filer); 052 } 053 054 public void end() { 055 TreeSet<Integer> keys = new TreeSet<Integer>(m_enums.keySet()); 056 writeHxxEnd(keys); 057 writeJavaEnd(keys); 058 //System.out.println("StpExceptionStpReasonCodeVisitor end"); 059 } 060 061 public void writeHxxBegin(Filer filer) 062 { 063 m_hxxOut = createFile(filer, g_hxxFileName); 064 writeCommonHeader(m_hxxOut, this); 065 } 066 067 public void writeHxxEnd(TreeSet<Integer> keys) 068 { 069 boolean first = true; 070 for (Integer id : keys) { 071 TagInfo info = m_enums.get(id); 072 if (!first) { 073 m_hxxOut.println(","); 074 } 075 m_hxxOut.print(INDENT + info.fieldName + " = " + id); 076 if (first) first = false; 077 } 078 m_hxxOut.println(""); 079 080 m_hxxOut.flush(); 081 m_hxxOut.close(); 082 } 083 084 private void writeJavaBegin(Filer filer) 085 { 086 m_javaOut = createFile(filer, g_javaFileName); 087 088 writeCommonHeader(m_javaOut, this); 089 090 m_javaOut.println("package com.ibm.rational.stp.server.rpc;"); 091 m_javaOut.println(""); 092 m_javaOut.println("import java.util.Map;"); 093 m_javaOut.println("import java.util.HashMap;"); 094 m_javaOut.println("import com.ibm.rational.wvcm.stp.StpException;"); 095 m_javaOut.println(""); 096 m_javaOut.println("/**"); 097 m_javaOut.println(" * Mapping services from/to StpException.StpReasonCodes to/from"); 098 m_javaOut.println(" * RPC enumerated reason code names."); 099 m_javaOut.println(" */"); 100 m_javaOut.println("public class STPReasonCodeMap"); 101 m_javaOut.println("{"); 102 m_javaOut.println(" /**"); 103 m_javaOut.println(" * Get the StpReasonCode associated with RPC error code."); 104 m_javaOut.println(" *"); 105 m_javaOut.println(" * @param code IN: RPC integer value error code"); 106 m_javaOut.println(" *"); 107 m_javaOut.println(" * @return StpReasonCode associated with RPC error code"); 108 m_javaOut.println(" */"); 109 m_javaOut.println(" public static StpException.StpReasonCode"); 110 m_javaOut.println(" getSTPReasonCode(int code) { return g_reasonCodes.get(code); }"); 111 m_javaOut.println(""); 112 m_javaOut.println(" private static final Map<Integer, StpException.StpReasonCode> g_reasonCodes = new HashMap<Integer, StpException.StpReasonCode>();"); 113 m_javaOut.println(""); 114 m_javaOut.println(" static {"); 115 m_javaOut.println(" "); 116 } 117 118 private void writeJavaEnd(TreeSet<Integer> keys) 119 { 120 for (Integer id : keys) { 121 TagInfo info = m_enums.get(id); 122 m_javaOut.println(" g_reasonCodes.put(" + info.id + ", StpException.StpReasonCode." + info.fieldName + ");"); 123 } 124 125 m_javaOut.println(" }"); 126 m_javaOut.println("}"); 127 128 m_javaOut.flush(); 129 m_javaOut.close(); 130 } 131 132 @Override 133 public void visitEnumConstantDeclaration(EnumConstantDeclaration ecd) { 134 135 TagInfo info = getRpcEnumValues(ecd.getAnnotationMirrors()); 136 if (info != null) { 137 info.fieldName = ecd.getSimpleName(); 138 ensureUniqueAndAddIfSo(m_enums, info); 139 } 140 } 141 }