public MiningSegmentTransfer getSegmentTransfer( MiningSegment targetSegment, String targetFieldName) { MiningSegmentTransfer xfer = null; int lastIndex = targetSegment.getSegmentIndex() - 1; if (lastIndex < 0) { throw new IndexOutOfBoundsException("Cannot have an undefined mining field in the first segment"); } for (int idx = lastIndex; idx >= 0; idx--) { MiningSegment seg = miningSegments.get(idx); if (seg != null && seg.getInternalModel() != null) { List<PMMLOutputField> outputs = seg.getInternalModel().getOutputFields(); if (outputs != null) { for (PMMLOutputField field: outputs) { if (field.getName().equals(targetFieldName)) { xfer = new MiningSegmentTransfer(this.segmentationId, seg.getSegmentId(), targetSegment.getSegmentId()); xfer.addResultToRequestMapping(targetFieldName, targetFieldName); return xfer; } } } } } return xfer; }
@Test public void testSimpleWithFieldNamesMap() { MiningSegmentTransfer mst = new MiningSegmentTransfer(simpleResult,"SEGMENT_2"); mst.addResultToRequestMapping("var1", "someVarA"); doBaselineAssertions(simpleResult,mst); assertEquals(1,mst.getResultFieldNameToRequestFieldName().size()); }
@Test public void testComplexResult() { MiningSegmentTransfer mst = new MiningSegmentTransfer(complexResult,"SEGMENT_2"); mst.addResultToRequestMapping("firstObject", "object1"); mst.addResultToRequestMapping("myComplex.varA", "stringFromMyComplex"); mst.addResultToRequestMapping("myComplex.varB", "intValue"); doBaselineAssertions(complexResult,mst); assertEquals(3,mst.getResultFieldNameToRequestFieldName().size()); PMMLRequestData rqst = mst.getOutboundRequest(); assertNotNull(rqst); assertEquals(complexResult.getCorrelationId(),rqst.getCorrelationId()); Map<String,ParameterInfo> params = rqst.getMappedRequestParams(); assertEquals(complexResult.getResultValue("firstObject", null), params.get("object1").getValue()); assertEquals(complexResult.getResultValue("myComplex", "varA"), params.get("stringFromMyComplex").getValue()); assertEquals(complexResult.getResultValue("myComplex", "varB"), params.get("intValue").getValue()); System.out.println(rqst); System.out.println(complexResult); } }