1 8 package org.codehaus.loom.info; 9 10 import com.thoughtworks.qdox.model.DocletTag; 11 import com.thoughtworks.qdox.model.JavaClass; 12 import com.thoughtworks.qdox.model.JavaMethod; 13 import java.util.ArrayList ; 14 import java.util.Properties ; 15 import org.codehaus.metaclass.model.Attribute; 16 import org.codehaus.metaclass.tools.qdox.DefaultQDoxAttributeInterceptor; 17 import org.codehaus.metaclass.tools.qdox.QDoxAttributeInterceptor; 18 19 27 public class PhoenixAttributeInterceptor 28 extends DefaultQDoxAttributeInterceptor 29 implements QDoxAttributeInterceptor 30 { 31 35 public Attribute processClassAttribute( final JavaClass clazz, 36 final Attribute attribute ) 37 { 38 final String name = attribute.getName(); 39 if( name.equals( "phoenix:block" ) ) 40 { 41 return new Attribute( "dna.component" ); 42 } 43 else if( name.equals( "phoenix:service" ) ) 44 { 45 final Properties parameters = new Properties (); 46 final String type = attribute.getParameter( "name", null ); 47 setParameter( parameters, "type", type ); 48 return new Attribute( "dna.service", parameters ); 49 } 50 else if( name.equals( "phoenix:mx-topic" ) ) 51 { 52 final String description = attribute.getParameter( "name", "" ); 53 final Properties parameters = new Properties (); 54 setParameter( parameters, "description", description ); 55 return new Attribute( "mx.component", parameters ); 56 } 57 else if( name.equals( "phoenix:mx-proxy" ) ) 58 { 59 final Properties parameters = new Properties (); 60 final String type = attribute.getParameter( "class", "" ); 61 setParameter( parameters, "type", type ); 62 return new Attribute( "mx.proxy", parameters ); 63 } 64 else 65 { 66 return attribute; 67 } 68 } 69 70 74 public Attribute processMethodAttribute( final JavaMethod method, 75 final Attribute attribute ) 76 { 77 final String name = attribute.getName(); 78 if( name.equals( "phoenix:configuration-schema" ) ) 79 { 80 final String type = 81 attribute.getParameter( "type", null ); 82 final Properties parameters = new Properties (); 83 if( "relax-ng".equals( type ) ) 84 { 85 setParameter( parameters, 86 "type", 87 "http://relaxng.org/ns/structure/1.0" ); 88 } 89 else 90 { 91 setParameter( parameters, "type", type ); 92 } 93 return new Attribute( "dna.configuration", parameters ); 94 } 95 else if( name.equals( "phoenix:dependency" ) ) 96 { 97 final Properties parameters = new Properties (); 98 final String key = attribute.getParameter( "role", null ); 99 final String type = attribute.getParameter( "name", null ); 100 setParameter( parameters, "type", type ); 101 setParameter( parameters, "key", key ); 102 return new Attribute( "dna.dependency", parameters ); 103 } 104 else if( name.equals( "phoenix:mx-operation" ) ) 105 { 106 final DocletTag descriptionTag = 107 method.getTagByName( "phoenix:mx-description" ); 108 final String description; 109 if( null != descriptionTag ) 110 { 111 description = descriptionTag.getValue(); 112 } 113 else 114 { 115 description = method.getComment(); 116 } 117 final Properties parameters = new Properties (); 118 setParameter( parameters, "description", description ); 119 return new Attribute( "mx.operation", parameters ); 120 } 121 if( name.equals( "phoenix:mx-attribute" ) ) 122 { 123 final DocletTag descriptionTag = 124 method.getTagByName( "phoenix:mx-description" ); 125 final String description; 126 if( null != descriptionTag ) 127 { 128 description = descriptionTag.getValue(); 129 } 130 else 131 { 132 description = method.getComment(); 133 } 134 final Properties parameters = new Properties (); 135 setParameter( parameters, "description", description ); 136 return new Attribute( "mx.attribute", parameters ); 137 } 138 else if( name.equals( "phoenix:mx-description" ) ) 139 { 140 return null; 141 } 142 else 143 { 144 return attribute; 145 } 146 } 147 148 152 public Attribute[] processClassAttributes( final JavaClass clazz, 153 final Attribute[] attributes ) 154 { 155 final ArrayList result = new ArrayList (); 156 for( int i = 0; i < attributes.length; i++ ) 157 { 158 final Attribute attribute = attributes[ i ]; 159 final String name = attribute.getName(); 160 if( !name.equals( "phoenix:mx" ) ) 161 { 162 result.add( attribute ); 163 } 164 else 165 { 166 final Properties parameters = new Properties (); 167 final String type = attribute.getParameter( "name", "" ); 168 setParameter( parameters, "type", type ); 169 result.add( new Attribute( "dna.service", parameters ) ); 170 171 final Properties mxParameters = new Properties (); 172 setParameter( mxParameters, "type", type ); 173 final String topic = type.substring( 174 type.lastIndexOf( '.' ) + 1 ); 175 setParameter( mxParameters, "topic", topic ); 176 177 result.add( new Attribute( "mx.interface", mxParameters ) ); 178 } 179 } 180 return (Attribute[])result.toArray( new Attribute[ result.size() ] ); 181 } 182 183 187 public Attribute[] processMethodAttributes( final JavaMethod method, 188 final Attribute[] attributes ) 189 { 190 final ArrayList result = new ArrayList (); 191 192 boolean isMxOperation = false; 193 for( int i = 0; i < attributes.length; i++ ) 194 { 195 final Attribute attribute = attributes[ i ]; 196 if( attribute.getName().equals( "mx.operation" ) ) 197 { 198 isMxOperation = true; 199 } 200 result.add( attribute ); 201 } 202 if( isMxOperation ) 203 { 204 for( int i = 0; i < attributes.length; i++ ) 205 { 206 final Attribute attribute = attributes[ i ]; 207 if( attribute.getName().equals( "param" ) ) 208 { 209 final String value = attribute.getValue(); 210 final int index = value.indexOf( " " ); 211 if( -1 == index ) 212 { 213 continue; 214 } 215 final String name = value.substring( 0, index ).trim(); 216 final String description = value.substring( index + 1 ); 217 final Properties parameters = new Properties (); 218 setParameter( parameters, "name", name ); 219 setParameter( parameters, "description", description ); 220 result.add( new Attribute( "mx.parameter", parameters ) ); 221 } 222 } 223 } 224 return (Attribute[])result.toArray( new Attribute[ result.size() ] ); 225 } 226 227 234 private void setParameter( final Properties parameters, 235 final String key, 236 final String value ) 237 { 238 if( null != value ) 239 { 240 parameters.setProperty( key, value ); 241 } 242 } 243 } 244 | Popular Tags |