Java tutorial
/** * Copyright (c) 2014 Darmstadt University of Technology. * 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: * Uli Fahrer - Inital implementation */ package cc.recommenders.mining.calls.pbn; import static cc.recommenders.mining.calls.NetworkMathUtils.MAX_PROBABILTY_DELTA; import static cc.recommenders.mining.calls.pbn.PBNModelConstants.STATE_FALSE; import static cc.recommenders.mining.calls.pbn.PBNModelConstants.STATE_TRUE; import static com.google.common.collect.Lists.newArrayList; import static org.junit.Assert.assertArrayEquals; import java.util.List; import org.apache.commons.lang.ArrayUtils; import smile.Network; import smile.utils.SmileNameConverter; import cc.recommenders.assertions.Asserts; import cc.recommenders.mining.calls.Pattern; import cc.recommenders.names.ICoReMethodName; import cc.recommenders.names.ICoReTypeName; import cc.recommenders.names.CoReFieldName; import cc.recommenders.names.CoReMethodName; import cc.recommenders.names.CoReTypeName; import cc.recommenders.usages.DefinitionSite; import cc.recommenders.usages.DefinitionSites; import cc.recommenders.usages.features.CallFeature; import cc.recommenders.usages.features.ClassFeature; import cc.recommenders.usages.features.DefinitionFeature; import cc.recommenders.usages.features.FirstMethodFeature; import cc.recommenders.usages.features.ParameterFeature; import cc.recommenders.usages.features.TypeFeature; import cc.recommenders.usages.features.UsageFeature; import cc.recommenders.utils.dictionary.Dictionary; public class PBNSmileModelBuilderFixture { public static final ICoReTypeName TYPE = CoReTypeName.get("La/type/Blubb"); public static final ICoReTypeName SUPERCLASS1 = CoReTypeName.get("La/super/Type"); public static final ICoReTypeName SUPERCLASS2 = CoReTypeName.get("Lother/super/Type"); public static final ICoReMethodName METHOD1 = CoReMethodName.get("Lsome/Context.m1()V"); public static final ICoReMethodName METHOD2 = CoReMethodName.get("Lother/Context.m2()V"); public static final DefinitionSite DEF1 = createDef1(); public static final DefinitionSite DEF2 = createDef2(); public static final ICoReMethodName CALL1 = CoReMethodName.get("La/type/Blubb.m3()V"); public static final ICoReMethodName CALL2 = CoReMethodName.get("La/type/Blubb.m4()V"); public static final ICoReMethodName CALL_WITH_DIFFERENT_TYPE = CoReMethodName.get("Lanother/type/Blubb.m5()V"); public static final ICoReMethodName PARAM1 = CoReMethodName.get("Lcompletely/different/Type.m6(Blubb;)V"); public static final int PARAM1_ARGNUM = 135; public static final ICoReMethodName PARAM2 = CoReMethodName.get("Lyat/Type.m7(Blubb;)V"); public static final int PARAM2_ARGNUM = 246; private static DefinitionSite createDef1() { // DeclaringType'.'fieldName;FieldType return DefinitionSites.createDefinitionByField(CoReFieldName.get("LFoo.field;Lbla")); } private static DefinitionSite createDef2() { return DefinitionSites.createDefinitionByConstructor(CoReMethodName.get("La/type/Blubb.<init>()V")); } public List<Pattern<UsageFeature>> getSinglePattern() { List<Pattern<UsageFeature>> patterns = newArrayList(); Pattern<UsageFeature> p = new Pattern<UsageFeature>(); p.setName("p1"); p.setNumberOfObservations(1); patterns.add(p); p.setProbability(new TypeFeature(TYPE), 1.0); p.setProbability(new ClassFeature(SUPERCLASS1), 1.0); p.setProbability(new FirstMethodFeature(METHOD1), 1.0); p.setProbability(new DefinitionFeature(DEF1), 1.0); p.setProbability(new CallFeature(CALL1), 1.0); p.setProbability(new ParameterFeature(PARAM1, PARAM1_ARGNUM), 1.0); return patterns; } public Dictionary<UsageFeature> getDictionaryForSinglePattern() { Dictionary<UsageFeature> dictionary = new Dictionary<UsageFeature>(); dictionary.add(new TypeFeature(TYPE)); dictionary.add(new ClassFeature(SUPERCLASS1)); dictionary.add(new FirstMethodFeature(METHOD1)); dictionary.add(new DefinitionFeature(DEF1)); dictionary.add(new CallFeature(CALL1)); dictionary.add(new ParameterFeature(PARAM1, PARAM1_ARGNUM)); return dictionary; } public List<Pattern<UsageFeature>> getPatterns() { List<Pattern<UsageFeature>> patterns = newArrayList(); Pattern<UsageFeature> p = new Pattern<UsageFeature>(); p.setName("p1"); p.setNumberOfObservations(1); patterns.add(p); p.setProbability(new TypeFeature(TYPE), 1.0); p.setProbability(new ClassFeature(SUPERCLASS1), 1.0); p.setProbability(new FirstMethodFeature(METHOD1), 1.0); p.setProbability(new DefinitionFeature(DEF1), 1.0); p.setProbability(new CallFeature(CALL1), 1.0); p.setProbability(new ParameterFeature(PARAM1, PARAM1_ARGNUM), 1.0); p = new Pattern<UsageFeature>(); p.setName("p2"); p.setNumberOfObservations(1); patterns.add(p); p.setProbability(new TypeFeature(TYPE), 1.0); p.setProbability(new ClassFeature(SUPERCLASS2), 1.0); p.setProbability(new FirstMethodFeature(METHOD2), 1.0); p.setProbability(new DefinitionFeature(DEF2), 1.0); p.setProbability(new CallFeature(CALL2), 1.0); p.setProbability(new ParameterFeature(PARAM2, PARAM2_ARGNUM), 1.0); return patterns; } public Dictionary<UsageFeature> getDictionary() { Dictionary<UsageFeature> dictionary = new Dictionary<UsageFeature>(); dictionary.add(new TypeFeature(TYPE)); dictionary.add(new ClassFeature(SUPERCLASS1)); dictionary.add(new FirstMethodFeature(METHOD1)); dictionary.add(new DefinitionFeature(DEF1)); dictionary.add(new CallFeature(CALL1)); dictionary.add(new ParameterFeature(PARAM1, PARAM1_ARGNUM)); dictionary.add(new ClassFeature(SUPERCLASS2)); dictionary.add(new FirstMethodFeature(METHOD2)); dictionary.add(new DefinitionFeature(DEF2)); dictionary.add(new CallFeature(CALL2)); dictionary.add(new ParameterFeature(PARAM2, PARAM2_ARGNUM)); return dictionary; } public static void assertSmileNamesAreEqual(String[] expected, String[] actual) { String[] smileNameExpected = new String[expected.length]; for (int i = 0; i < expected.length; i++) { String original = expected[i]; smileNameExpected[i] = SmileNameConverter.convertToLegalSmileName(original); } assertArrayEquals(smileNameExpected, actual); } public static void assertNodeExists(Network net, String id) { String[] nodeIds = net.getAllNodeIds(); boolean actual = ArrayUtils.contains(nodeIds, SmileNameConverter.convertToLegalSmileName(id)); Asserts.assertTrue(actual); } public static void assertNodesExist(Network net, String... ids) { for (String title : ids) { assertNodeExists(net, title); } } public static void assertNodeName(Network net, String nodeId, String expectedTitle) { String legalSmileName = SmileNameConverter.convertToLegalSmileName(nodeId); int nodeHandle = net.getNode(legalSmileName); String actual = net.getNodeName(nodeHandle); Asserts.assertEquals(expectedTitle, actual, "Wrong node name"); } public static void assertProbabilities(Network network, String nodeId, double... expectedProbabilities) { double[] actual = network.getNodeDefinition(SmileNameConverter.convertToLegalSmileName(nodeId)); assertArrayEquals(expectedProbabilities, actual, MAX_PROBABILTY_DELTA); } public static void assertStates(Network network, String nodeId, String... expectedStates) { String legalSmileName = SmileNameConverter.convertToLegalSmileName(nodeId); String[] actual = network.getOutcomeIds(legalSmileName); assertSmileNamesAreEqual(expectedStates, actual); } public static void assertBooleanNode(Network network, String nodeId) { String[] actuals = network.getOutcomeIds(SmileNameConverter.convertToLegalSmileName(nodeId)); String[] expecteds = new String[] { STATE_TRUE, STATE_FALSE }; assertSmileNamesAreEqual(expecteds, actuals); } }