/******************************************************************************* * Copyright (c) 2010 György Orosz. * 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 * * Contributors: * György Orosz - initial API and implementation ******************************************************************************/ package org.erlide.wrangler.refactoring.backend.internal; import java.util.HashMap; import org.erlide.wrangler.refactoring.backend.RefactoringState; import org.erlide.wrangler.refactoring.exception.WranglerException; import org.erlide.wrangler.refactoring.exception.WranglerRpcParsingException; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangString; import com.ericsson.otp.erlang.OtpErlangTuple; /** * RpcResultImpl parser class for parsing results of a n generalise function * refactoring * * @author Gyorgy Orosz * @version %I%, %G% */ public class GenFunRefactoringMessage extends AbstractRefactoringRpcMessage { /** * Generalise function's possible parameters names * * * @author Gyorgy Orosz * @version %I%, %G% */ public enum GenFunReturnParameterName { //@formatter:off parName, funName, arity, funDefPos, exp, sideEffect, dupsInFun, logCmd, noOfClauses, dupsInClause; //@formatter:on } @Override protected void parseRefactoringMessage(final OtpErlangTuple resultTuple) throws WranglerException { final OtpErlangObject wranglerResult = resultTuple.elementAt(1); final String state = resultTuple.elementAt(0).toString(); if (state.equals("ok")) { if (wranglerResult instanceof OtpErlangList) { changedFiles = parseFileList((OtpErlangList) wranglerResult); setSuccessful(); return; } } else if (state.equals("error")) { final OtpErlangString msg = (OtpErlangString) wranglerResult; setUnsuccessful(msg.stringValue()); return; } else if (state.equals("multiple_instances")) { parameters = new HashMap<>(); final OtpErlangTuple pars = (OtpErlangTuple) wranglerResult; setState("", RefactoringState.MULTI_INSTANCES); parameters.put(GenFunReturnParameterName.parName, pars.elementAt(0)); parameters.put(GenFunReturnParameterName.funName, pars.elementAt(1)); parameters.put(GenFunReturnParameterName.arity, pars.elementAt(2)); parameters.put(GenFunReturnParameterName.funDefPos, pars.elementAt(3)); parameters.put(GenFunReturnParameterName.exp, pars.elementAt(4)); parameters.put(GenFunReturnParameterName.sideEffect, pars.elementAt(5)); parameters.put(GenFunReturnParameterName.dupsInFun, pars.elementAt(6)); parameters.put(GenFunReturnParameterName.logCmd, pars.elementAt(7)); } else if (state.equals("unknown_side_effect")) { parameters = new HashMap<>(); final OtpErlangTuple pars = (OtpErlangTuple) wranglerResult; setState("", RefactoringState.UNKNOWN_SIDE_EFFECT); parameters.put(GenFunReturnParameterName.parName, pars.elementAt(0)); parameters.put(GenFunReturnParameterName.funName, pars.elementAt(1)); parameters.put(GenFunReturnParameterName.arity, pars.elementAt(2)); parameters.put(GenFunReturnParameterName.funDefPos, pars.elementAt(3)); parameters.put(GenFunReturnParameterName.exp, pars.elementAt(4)); parameters.put(GenFunReturnParameterName.noOfClauses, pars.elementAt(5)); parameters.put(GenFunReturnParameterName.dupsInFun, pars.elementAt(6)); parameters.put(GenFunReturnParameterName.dupsInClause, pars.elementAt(7)); parameters.put(GenFunReturnParameterName.logCmd, pars.elementAt(8)); } else if (state.equals("more_than_one_clause")) { parameters = new HashMap<>(); final OtpErlangTuple pars = (OtpErlangTuple) wranglerResult; setState("", RefactoringState.MORE_THAN_ONE_CLAUSE); parameters.put(GenFunReturnParameterName.parName, pars.elementAt(0)); parameters.put(GenFunReturnParameterName.funName, pars.elementAt(1)); parameters.put(GenFunReturnParameterName.arity, pars.elementAt(2)); parameters.put(GenFunReturnParameterName.funDefPos, pars.elementAt(3)); parameters.put(GenFunReturnParameterName.exp, pars.elementAt(4)); parameters.put(GenFunReturnParameterName.sideEffect, pars.elementAt(5)); parameters.put(GenFunReturnParameterName.dupsInFun, pars.elementAt(6)); parameters.put(GenFunReturnParameterName.dupsInClause, pars.elementAt(7)); parameters.put(GenFunReturnParameterName.logCmd, pars.elementAt(8)); } else { throw new WranglerRpcParsingException(resultTuple.toString()); } } protected HashMap<GenFunReturnParameterName, OtpErlangObject> parameters = null; /** * Get parameters in a map * * @return parameter name. value pairs */ public HashMap<GenFunReturnParameterName, OtpErlangObject> getParameters() { return parameters; } }