Bump to odlparent 3.1.6
[alto.git] / utils / migrate_blueprint.sh
1 ##############################################################################
2 # Copyright (c) 2016 SNLab. All rights reserved.
3 #
4 # This program and the accompanying materials are made available under the
5 # terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 # and is available at http://www.eclipse.org/legal/epl-v10.html
7 ##############################################################################
8 #!/bin/bash
9
10 recursive_remove() {
11     DIR=$1
12
13     rmdir $DIR
14     while [ $? = 0 ]; do
15         DIR=$(dirname $DIR)
16         if [ $DIR = . ]; then
17             break
18         fi
19         rmdir $DIR
20     done
21 }
22
23 migrate_blueprint() {
24     pushd $1
25
26     PROVIDER=$(grep -rnl src/main/java -e '^\W*public void onSessionInitiated.*$')
27     PROVIDER_CLASS=$(echo $PROVIDER | sed 's_src/main/java/__;s/.java//;s_/_._g')
28     PROVIDER_NAME=$(basename $PROVIDER | sed 's/.java//')
29     PACKAGE=$(dirname $PROVIDER | sed 's_src/main/java/__;s_/_._g')
30
31     #----------------------
32     # extract flags
33     DB_FLAG=$(grep 'DataBroker' $PROVIDER)
34     RPC_FLAG=$(grep 'RpcRegistration' $PROVIDER)
35     ROUTED_RPC_FLAG=$(grep 'RoutedRpcRegistration' $PROVIDER)
36     RPC_CONSUME_LIST=$(grep 'getRpcService' $PROVIDER | \
37         sed 's/^\W*\([a-zA-Z_]\+\) *=.*getRpcService( *\([a-zA-Z]\+\)\.class *).*$/\1,\2/')
38
39     #----------------------
40     # remove redundancy
41     rm -rf src/main/config src/main/yang
42     for mf in $(find src/main -name '*Module.java'); do
43         rm $mf
44         recursive_remove $(dirname $mf)
45     done;
46
47     for mf in $(find src/main -name '*ModuleFactory.java'); do
48         rm $mf
49         recursive_remove $(dirname $mf)
50     done;
51
52     for mf in $(find src/test -name '*ModuleTest.java'); do
53         rm $mf
54         recursive_remove $(dirname $mf)
55     done;
56
57     for mf in $(find src/test -name '*ModuleFactoryTest.java'); do
58         rm $mf
59         recursive_remove $(dirname $mf)
60     done;
61
62     #----------------------
63     # insert blueprint
64     BLUEPRINT_DIR=src/main/resources/org/opendaylight/blueprint
65     mkdir -p $BLUEPRINT_DIR
66     echo '<?xml version="1.0" encoding="UTF-8"?>
67 <!-- vi: set et smarttab sw=4 tabstop=4: -->
68 <!--
69 Copyright © 2016 SNLab and others. All rights reserved.
70
71 This program and the accompanying materials are made available under the
72 terms of the Eclipse Public License v1.0 which accompanies this distribution,
73 and is available at http://www.eclipse.org/legal/epl-v10.html
74 -->
75 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
76   xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
77   odl:use-default-for-reference-types="true">' > $BLUEPRINT_DIR/impl-blueprint.xml
78
79     ## insert dataBroker
80     if [[ $DB_FLAGS ]]; then
81         echo '  <reference id="dataBroker"
82     interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
83     odl:type="default" />' >> $BLUEPRINT_DIR/impl-blueprint.xml
84     fi
85
86     ## insert rpcRegistry
87     ## TODO:
88
89     ## insert routedRpcRegistry
90     ## TODO:
91
92     ## insert rpcService
93     for rpc in $RPC_CONSUME_LIST; do
94         SERV_NAME=$(echo $rpc | sed 's/^.*,//')
95         SERV_CLASS=$(grep "^import .*\.$SERV_NAME;" $PROVIDER | sed 's/^import \(.*\);$/\1/')
96         if [[ ! $SERV_CLASS ]]; then
97             SERV_CLASS="$PACKAGE.$SERV_NAME"
98         fi
99         SERV_ID=$(echo ${SERV_NAME:0:1} | tr '[:upper:]' '[:lower:]')${SERV_NAME:1}
100         echo "  <odl:rpc-service id='$SERV_ID'
101     interface='$SERV_CLASS' />" >> $BLUEPRINT_DIR/impl-blueprint.xml
102     done
103
104     ## insert provider
105     echo '  <bean id="provider"
106     class="'$PROVIDER_CLASS'"
107     init-method="init" destroy-method="close">' >> $BLUEPRINT_DIR/impl-blueprint.xml
108     if [[ $DB_FLAGS ]]; then
109         echo '    <property name="dataBroker" ref="dataBroker" />' >> $BLUEPRINT_DIR/impl-blueprint.xml
110     fi
111     for rpc in $RPC_CONSUME_LIST; do
112         SERV_VAL=$(echo $rpc | sed 's/,.*$//')
113         SERV_NAME=$(echo $rpc | sed 's/^.*,//')
114         SERV_ID=$(echo ${SERV_NAME:0:1} | tr '[:upper:]' '[:lower:]')${SERV_NAME:1}
115         echo "    <property name='$SERV_VAL' ref='$SERV_ID' />" >> $BLUEPRINT_DIR/impl-blueprint.xml
116     done
117     echo '  </bean>
118 </blueprint>' >> $BLUEPRINT_DIR/impl-blueprint.xml
119
120     #----------------------
121     # refactor init class
122     sed -i '
123         s/^import .*ProviderContext;\n$//
124         s/^import .*BindingAwareProvider;\n$//
125         /@Override/{
126             N
127             s/^\W*@Override\n *public void onSessionInitiated.*/    public void init() {/
128             s/^\W*@Override\n\( *public void close().*\)/\1/
129         }
130         s/ BindingAwareProvider,\?//
131         s/ AutoCloseable,\?//
132         s/implements *{/{/
133     ' $PROVIDER
134
135     ## refactor dataBroke
136     if [[ $DB_FLAG ]]; then
137         ### refactor dataBroker variable name
138         DB_VAL=$(grep '^\W*private .* DataBroker' $PROVIDER | \
139             sed 's/^\W*private.* DataBroker *\([a-zA-Z_]\+\).*$/\1/')
140         sed -i "
141             s/^.*DataBroker.*$//
142             /^package/a\\\n\nimport org.opendaylight.controller.md.sal.binding.api.DataBroker;
143             /private static final Logger/a\\\n    private DataBroker dataBroker = null;
144             /public void init()/i\    public void setDataBroker(DataBroker dataBroker) {\n        this.dataBroker = dataBroker;\n    }\n
145             s/$DB_VAL/dataBroker/g
146         " $PROVIDER
147     fi
148
149     ## refactor rpcService
150     sed -i 's/^\W*\([a-zA-Z_]\+\) *=.*getRpcService.*$//' $PROVIDER
151     for rpc in $RPC_CONSUME_LIST; do
152         SERV_VAL=$(echo $rpc | sed 's/,.*$//')
153         SERV_NAME=$(echo $rpc | sed 's/^.*,//')
154         SERV_SET_VAL=set$(echo ${SERV_VAL:0:1} | tr '[:lower:]' '[:upper:]')${SERV_VAL:1}
155         sed -i "
156             /public void init()/i\    public void $SERV_SET_VAL(final $SERV_NAME $SERV_VAL) {\n        this.$SERV_VAL = $SERV_VAL;\n    }\n
157         " $PROVIDER
158     done
159
160     popd
161 }
162
163 usage() {
164     echo "Usage: $0 [option]"
165     echo ""
166     echo "Options:"
167     echo "    all        migrate all subprojects"
168     echo "    <dir>      only migrate subprojects in <dir>"
169     echo "    help       display help information"
170 }
171
172 if [ -z $1 ]; then
173     usage
174     exit 0
175 fi
176
177 case $1 in
178     all)
179         # Migrate all subproject
180         cd $(dirname $0)/..
181         PROJECT_ROOT=$(pwd)
182
183         for suffix in alto-{core,basic,extensions}; do
184             for f in $(find $PROJECT_ROOT -name pom.xml); do
185                 if [ $(basename $(dirname $f)) = impl ]; then
186                     migrate_blueprint $(dirname $f)
187                 fi
188             done
189         done
190     ;;
191     help)
192         usage
193         ;;
194     *)
195         # Migrate a specific directory
196         for f in $(find $1 -name pom.xml); do
197             if [ $(basename $(dirname $f)) = impl ]; then
198                 migrate_blueprint $(dirname $f)
199             fi
200         done
201 esac