############################################################################## # Copyright (c) 2016 SNLab. All rights reserved. # # This program and the accompanying materials are made available under the # terms of the Eclipse Public License v1.0 which accompanies this distribution, # and is available at http://www.eclipse.org/legal/epl-v10.html ############################################################################## #!/bin/bash recursive_remove() { DIR=$1 rmdir $DIR while [ $? = 0 ]; do DIR=$(dirname $DIR) if [ $DIR = . ]; then break fi rmdir $DIR done } migrate_blueprint() { pushd $1 PROVIDER=$(grep -rnl src/main/java -e '^\W*public void onSessionInitiated.*$') PROVIDER_CLASS=$(echo $PROVIDER | sed 's_src/main/java/__;s/.java//;s_/_._g') PROVIDER_NAME=$(basename $PROVIDER | sed 's/.java//') PACKAGE=$(dirname $PROVIDER | sed 's_src/main/java/__;s_/_._g') #---------------------- # extract flags DB_FLAG=$(grep 'DataBroker' $PROVIDER) RPC_FLAG=$(grep 'RpcRegistration' $PROVIDER) ROUTED_RPC_FLAG=$(grep 'RoutedRpcRegistration' $PROVIDER) RPC_CONSUME_LIST=$(grep 'getRpcService' $PROVIDER | \ sed 's/^\W*\([a-zA-Z_]\+\) *=.*getRpcService( *\([a-zA-Z]\+\)\.class *).*$/\1,\2/') #---------------------- # remove redundancy rm -rf src/main/config src/main/yang for mf in $(find src/main -name '*Module.java'); do rm $mf recursive_remove $(dirname $mf) done; for mf in $(find src/main -name '*ModuleFactory.java'); do rm $mf recursive_remove $(dirname $mf) done; for mf in $(find src/test -name '*ModuleTest.java'); do rm $mf recursive_remove $(dirname $mf) done; for mf in $(find src/test -name '*ModuleFactoryTest.java'); do rm $mf recursive_remove $(dirname $mf) done; #---------------------- # insert blueprint BLUEPRINT_DIR=src/main/resources/org/opendaylight/blueprint mkdir -p $BLUEPRINT_DIR echo ' ' > $BLUEPRINT_DIR/impl-blueprint.xml ## insert dataBroker if [[ $DB_FLAGS ]]; then echo ' ' >> $BLUEPRINT_DIR/impl-blueprint.xml fi ## insert rpcRegistry ## TODO: ## insert routedRpcRegistry ## TODO: ## insert rpcService for rpc in $RPC_CONSUME_LIST; do SERV_NAME=$(echo $rpc | sed 's/^.*,//') SERV_CLASS=$(grep "^import .*\.$SERV_NAME;" $PROVIDER | sed 's/^import \(.*\);$/\1/') if [[ ! $SERV_CLASS ]]; then SERV_CLASS="$PACKAGE.$SERV_NAME" fi SERV_ID=$(echo ${SERV_NAME:0:1} | tr '[:upper:]' '[:lower:]')${SERV_NAME:1} echo " " >> $BLUEPRINT_DIR/impl-blueprint.xml done ## insert provider echo ' ' >> $BLUEPRINT_DIR/impl-blueprint.xml if [[ $DB_FLAGS ]]; then echo ' ' >> $BLUEPRINT_DIR/impl-blueprint.xml fi for rpc in $RPC_CONSUME_LIST; do SERV_VAL=$(echo $rpc | sed 's/,.*$//') SERV_NAME=$(echo $rpc | sed 's/^.*,//') SERV_ID=$(echo ${SERV_NAME:0:1} | tr '[:upper:]' '[:lower:]')${SERV_NAME:1} echo " " >> $BLUEPRINT_DIR/impl-blueprint.xml done echo ' ' >> $BLUEPRINT_DIR/impl-blueprint.xml #---------------------- # refactor init class sed -i ' s/^import .*ProviderContext;\n$// s/^import .*BindingAwareProvider;\n$// /@Override/{ N s/^\W*@Override\n *public void onSessionInitiated.*/ public void init() {/ s/^\W*@Override\n\( *public void close().*\)/\1/ } s/ BindingAwareProvider,\?// s/ AutoCloseable,\?// s/implements *{/{/ ' $PROVIDER ## refactor dataBroke if [[ $DB_FLAG ]]; then ### refactor dataBroker variable name DB_VAL=$(grep '^\W*private .* DataBroker' $PROVIDER | \ sed 's/^\W*private.* DataBroker *\([a-zA-Z_]\+\).*$/\1/') sed -i " s/^.*DataBroker.*$// /^package/a\\\n\nimport org.opendaylight.controller.md.sal.binding.api.DataBroker; /private static final Logger/a\\\n private DataBroker dataBroker = null; /public void init()/i\ public void setDataBroker(DataBroker dataBroker) {\n this.dataBroker = dataBroker;\n }\n s/$DB_VAL/dataBroker/g " $PROVIDER fi ## refactor rpcService sed -i 's/^\W*\([a-zA-Z_]\+\) *=.*getRpcService.*$//' $PROVIDER for rpc in $RPC_CONSUME_LIST; do SERV_VAL=$(echo $rpc | sed 's/,.*$//') SERV_NAME=$(echo $rpc | sed 's/^.*,//') SERV_SET_VAL=set$(echo ${SERV_VAL:0:1} | tr '[:lower:]' '[:upper:]')${SERV_VAL:1} sed -i " /public void init()/i\ public void $SERV_SET_VAL(final $SERV_NAME $SERV_VAL) {\n this.$SERV_VAL = $SERV_VAL;\n }\n " $PROVIDER done popd } usage() { echo "Usage: $0 [option]" echo "" echo "Options:" echo " all migrate all subprojects" echo " only migrate subprojects in " echo " help display help information" } if [ -z $1 ]; then usage exit 0 fi case $1 in all) # Migrate all subproject cd $(dirname $0)/.. PROJECT_ROOT=$(pwd) for suffix in alto-{core,basic,extensions}; do for f in $(find $PROJECT_ROOT -name pom.xml); do if [ $(basename $(dirname $f)) = impl ]; then migrate_blueprint $(dirname $f) fi done done ;; help) usage ;; *) # Migrate a specific directory for f in $(find $1 -name pom.xml); do if [ $(basename $(dirname $f)) = impl ]; then migrate_blueprint $(dirname $f) fi done esac