Question & Answer
Question
How do you capture metrics on user code contribution using the IBM Rational Rhapsody API?
Cause
You would like to capture the number of lines of user code within a project.
Answer
All source code and/or binaries attached to this document are referred to here as "the Program". IBM is not providing program services of any kind for the Program. IBM is providing the Program on an "AS IS" basis without warranty of any kind. IBM WILL NOT BE LIABLE FOR ANY ACTUAL, DIRECT, SPECIAL, INCIDENTAL, OR INDIRECT DAMAGES OR FOR ANY ECONOMIC CONSEQUENTIAL DAMAGES (INCLUDING LOST PROFITS OR SAVINGS), EVEN IF IBM, OR ITS RESELLER, HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
---|
Procedure:
- Use the
getNestedElementsByMetaClass(java.lang.String metaClass, int recursive)<[/code>] method to obtain each model element that could potentially contain user-code
- Use the numerous accessor methods to get the user code contents
- Then separate them using the ";" as a delimiter
For example:
import java.util.List;
import com.telelogic.rhapsody.core.IRPApplication;
import com.telelogic.rhapsody.core.IRPOperation;
import com.telelogic.rhapsody.core.IRPProject;
import com.telelogic.rhapsody.core.IRPState;
import com.telelogic.rhapsody.core.IRPTransition;
import com.telelogic.rhapsody.core.IRPType;
import com.telelogic.rhapsody.core.RhapsodyAppServer;
public class process {
public static int numOperations, numOperationLines;
public static int numStates, numStateLines;
public static int numTrans, numTranLines;
public static int numTypes, numTypeLines;
public static void main(String[] args) {
IRPApplication app = RhapsodyAppServer.getActiveRhapsodyApplication();
IRPProject prj = app.activeProject();
/// Operations including global functions
List<IRPOperation> operations = prj.getNestedElementsByMetaClass("Operation", 1).toList();
for(IRPOperation op : operations) {
numOperations++;
numOperationLines = numOperationLines + countLines(op.getBody());
// Ada Local Variables
if(app.getLanguage().equals("Ada")) {
numOperationLines = numOperationLines + countLines(op.getPropertyValue("Ada_CG.Operation.LocalVariablesDeclaration"));
}
}
// States
List<IRPState> states = prj.getNestedElementsByMetaClass("State", 1).toList();
for(IRPState state : states) {
numStates++;
numStateLines = numStateLines + countLines(state.getEntryAction());
numStateLines = numStateLines + countLines(state.getExitAction());
}
// Transitions
List<IRPTransition> transitions = prj.getNestedElementsByMetaClass("Transition", 1).toList();
for (IRPTransition transition : transitions) {
numTrans++;
if (transition.getItsTrigger() != null)
numTranLines = numTranLines + countLines(transition.getItsTrigger().getBody());
if (transition.getItsGuard() != null)
numTranLines = numTranLines + countLines(transition.getItsGuard().getBody());
if (transition.getItsAction() != null)
numTranLines = numTranLines + countLines(transition.getItsAction().getBody());
}
// Types
List<IRPType> types = prj.getNestedElementsByMetaClass("Type", 1).toList();
for (IRPType type : types) {
if (!type.getName().equals("")) {
numTypes++;
if(type.getKind().equals("Language")) {
numTypeLines = numTypeLines + countLines(type.getDeclaration());
}
}
}
System.out.println(numOperations + " Operations searched : " + numOperationLines + " lines found");
System.out.println(numStates + " States searched : " + numStateLines + " lines found");
System.out.println(numTrans + " Transitions searched : " + numTranLines + " lines found");
System.out.println(numTypes + " Types searched : " + numTypeLines + " lines found");
int total = numOperationLines + numStateLines + numTranLines + numTypeLines;
System.out.println("Total lines = " + total);
}
public static int countLines(String sBody) {
int count = 0;
String[] aLines = sBody.split(";");
// one empty line does not count!
if ((aLines.length == 1) & (aLines[0].equals("")))
return 0;
else
return aLines.length;
}
}
For more details see the API Javadoc (INSTALLATION LOCATION:\Rational\Rhapsody\8.0.5\Doc\java_api\index.html).
Product Synonym
Rational Rhapsody
Was this topic helpful?
Document Information
Modified date:
27 May 2022
UID
swg21689250