<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.felix.ipojo.manipulator.metadata.annotation.visitor;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.felix.ipojo.manipulator.metadata.annotation.ComponentWorkbench;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.felix.ipojo.metadata.Attribute;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.felix.ipojo.metadata.Element;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.objectweb.asm.AnnotationVisitor;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.objectweb.asm.Opcodes;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.objectweb.asm.Type;<a name="line.27"></a>
<span class="sourceLineNo">028</span><a name="line.28"></a>
<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
<span class="sourceLineNo">030</span> * Parse the @Provides annotation.<a name="line.30"></a>
<span class="sourceLineNo">031</span> *<a name="line.31"></a>
<span class="sourceLineNo">032</span> * @author &lt;a href="mailto:dev@felix.apache.org"&gt;Felix Project Team&lt;/a&gt;<a name="line.32"></a>
<span class="sourceLineNo">033</span> * @see org.apache.felix.ipojo.annotations.Provides<a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>public class ProvidesVisitor extends AnnotationVisitor {<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>    private ComponentWorkbench workbench;<a name="line.37"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>    /**<a name="line.39"></a>
<span class="sourceLineNo">040</span>     * Provides element.<a name="line.40"></a>
<span class="sourceLineNo">041</span>     */<a name="line.41"></a>
<span class="sourceLineNo">042</span>    private Element m_prov = new Element("provides", "");<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>    public ProvidesVisitor(ComponentWorkbench workbench) {<a name="line.44"></a>
<span class="sourceLineNo">045</span>        super(Opcodes.ASM5);<a name="line.45"></a>
<span class="sourceLineNo">046</span>        this.workbench = workbench;<a name="line.46"></a>
<span class="sourceLineNo">047</span>    }<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>    /**<a name="line.49"></a>
<span class="sourceLineNo">050</span>     * Visit @provides annotation attributes.<a name="line.50"></a>
<span class="sourceLineNo">051</span>     *<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * @param name  : annotation attribute name<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * @param value : annotation attribute value<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * @see org.objectweb.asm.AnnotationVisitor#visit(java.lang.String, java.lang.Object)<a name="line.54"></a>
<span class="sourceLineNo">055</span>     */<a name="line.55"></a>
<span class="sourceLineNo">056</span>    public void visit(String name, Object value) {<a name="line.56"></a>
<span class="sourceLineNo">057</span>        if (name.equals("factory")) { // Should be deprecated<a name="line.57"></a>
<span class="sourceLineNo">058</span>            m_prov.addAttribute(new Attribute("factory", value.toString()));<a name="line.58"></a>
<span class="sourceLineNo">059</span>        }<a name="line.59"></a>
<span class="sourceLineNo">060</span>        if (name.equals("strategy")) {<a name="line.60"></a>
<span class="sourceLineNo">061</span>            m_prov.addAttribute(new Attribute("strategy", value.toString()));<a name="line.61"></a>
<span class="sourceLineNo">062</span>        }<a name="line.62"></a>
<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>    /**<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * Visit specifications array.<a name="line.66"></a>
<span class="sourceLineNo">067</span>     *<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * @param name : attribute name<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * @return a visitor visiting each element of the array.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * @see org.objectweb.asm.AnnotationVisitor#visitArray(java.lang.String)<a name="line.70"></a>
<span class="sourceLineNo">071</span>     */<a name="line.71"></a>
<span class="sourceLineNo">072</span>    public AnnotationVisitor visitArray(String name) {<a name="line.72"></a>
<span class="sourceLineNo">073</span>        if (name.equals("specifications")) {<a name="line.73"></a>
<span class="sourceLineNo">074</span>            return new InterfaceArrayVisitor();<a name="line.74"></a>
<span class="sourceLineNo">075</span>        } else if (name.equals("properties")) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>            // Create a new simple visitor to visit the nested ServiceProperty annotations<a name="line.76"></a>
<span class="sourceLineNo">077</span>            // Collected properties are collected in m_prov<a name="line.77"></a>
<span class="sourceLineNo">078</span>            return new AnnotationVisitor(Opcodes.ASM5) {<a name="line.78"></a>
<span class="sourceLineNo">079</span>                public AnnotationVisitor visitAnnotation(String ignored, String desc) {<a name="line.79"></a>
<span class="sourceLineNo">080</span>                    return new FieldPropertyVisitor(m_prov);<a name="line.80"></a>
<span class="sourceLineNo">081</span>                }<a name="line.81"></a>
<span class="sourceLineNo">082</span>            };<a name="line.82"></a>
<span class="sourceLineNo">083</span>        } else {<a name="line.83"></a>
<span class="sourceLineNo">084</span>            return null;<a name="line.84"></a>
<span class="sourceLineNo">085</span>        }<a name="line.85"></a>
<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * End of the visit.<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * Append to the element element the computed "provides" element.<a name="line.90"></a>
<span class="sourceLineNo">091</span>     *<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @see org.objectweb.asm.AnnotationVisitor#visitEnd()<a name="line.92"></a>
<span class="sourceLineNo">093</span>     */<a name="line.93"></a>
<span class="sourceLineNo">094</span>    public void visitEnd() {<a name="line.94"></a>
<span class="sourceLineNo">095</span>        workbench.getIds().put("provides", m_prov);<a name="line.95"></a>
<span class="sourceLineNo">096</span>        workbench.getElements().put(m_prov, null);<a name="line.96"></a>
<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    private class InterfaceArrayVisitor extends AnnotationVisitor {<a name="line.99"></a>
<span class="sourceLineNo">100</span>        /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>         * List of parsed interface.<a name="line.101"></a>
<span class="sourceLineNo">102</span>         */<a name="line.102"></a>
<span class="sourceLineNo">103</span>        private String m_itfs;<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span><a name="line.105"></a>
<span class="sourceLineNo">106</span>        public InterfaceArrayVisitor() {<a name="line.106"></a>
<span class="sourceLineNo">107</span>            super(Opcodes.ASM5);<a name="line.107"></a>
<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
<span class="sourceLineNo">109</span><a name="line.109"></a>
<span class="sourceLineNo">110</span>        /**<a name="line.110"></a>
<span class="sourceLineNo">111</span>         * Visit one element of the array.<a name="line.111"></a>
<span class="sourceLineNo">112</span>         *<a name="line.112"></a>
<span class="sourceLineNo">113</span>         * @param arg0 : null<a name="line.113"></a>
<span class="sourceLineNo">114</span>         * @param arg1 : element value.<a name="line.114"></a>
<span class="sourceLineNo">115</span>         * @see org.objectweb.asm.AnnotationVisitor#visit(java.lang.String, java.lang.Object)<a name="line.115"></a>
<span class="sourceLineNo">116</span>         */<a name="line.116"></a>
<span class="sourceLineNo">117</span>        public void visit(String arg0, Object arg1) {<a name="line.117"></a>
<span class="sourceLineNo">118</span>            if (m_itfs == null) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>                m_itfs = "{" + ((Type) arg1).getClassName();<a name="line.119"></a>
<span class="sourceLineNo">120</span>            } else {<a name="line.120"></a>
<span class="sourceLineNo">121</span>                m_itfs += "," + ((Type) arg1).getClassName();<a name="line.121"></a>
<span class="sourceLineNo">122</span>            }<a name="line.122"></a>
<span class="sourceLineNo">123</span>        }<a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124"></a>
<span class="sourceLineNo">125</span>        /**<a name="line.125"></a>
<span class="sourceLineNo">126</span>         * End of the array visit.<a name="line.126"></a>
<span class="sourceLineNo">127</span>         * Add the attribute to 'provides' element.<a name="line.127"></a>
<span class="sourceLineNo">128</span>         *<a name="line.128"></a>
<span class="sourceLineNo">129</span>         * @see org.objectweb.asm.AnnotationVisitor#visitEnd()<a name="line.129"></a>
<span class="sourceLineNo">130</span>         */<a name="line.130"></a>
<span class="sourceLineNo">131</span>        public void visitEnd() {<a name="line.131"></a>
<span class="sourceLineNo">132</span>            m_prov.addAttribute(new Attribute("specifications", m_itfs + "}"));<a name="line.132"></a>
<span class="sourceLineNo">133</span>        }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>}<a name="line.138"></a>




























































</pre>
</div>
</body>
</html>
