use of org.pentaho.metaverse.api.IMetaverseNode in project pentaho-metaverse by pentaho.
the class StreamLookupStepAnalyzer method customAnalyze.
@Override
protected void customAnalyze(StreamLookupMeta meta, IMetaverseNode rootNode) throws MetaverseAnalyzerException {
keyLookups = meta.getKeylookup();
keyStreams = meta.getKeystream();
values = meta.getValue();
valueNames = meta.getValueName();
lookupStep = meta.getStepIOMeta().getInfoStreams().get(0).getStepname();
String[] prevStepNames = parentTransMeta.getPrevStepNames(getStepName());
for (int i = 0; i < keyLookups.length; i++) {
IMetaverseNode keyNode = getInputs().findNode(prevStepNames[0], keyStreams[i]);
IMetaverseNode keyLookupNode = getInputs().findNode(lookupStep, keyLookups[i]);
// Bidirectional Join
metaverseBuilder.addLink(keyLookupNode, DictionaryConst.LINK_JOINS, keyNode);
metaverseBuilder.addLink(keyNode, DictionaryConst.LINK_JOINS, keyLookupNode);
}
}
use of org.pentaho.metaverse.api.IMetaverseNode in project pentaho-metaverse by pentaho.
the class TableOutputStepAnalyzer method createTableNode.
@Override
protected IMetaverseNode createTableNode(IExternalResourceInfo resource) throws MetaverseAnalyzerException {
BaseDatabaseResourceInfo resourceInfo = (BaseDatabaseResourceInfo) resource;
Object obj = resourceInfo.getAttributes().get(DictionaryConst.PROPERTY_TABLE);
String tableName = obj == null ? null : obj.toString();
obj = resourceInfo.getAttributes().get(DictionaryConst.PROPERTY_SCHEMA);
String schema = obj == null ? null : obj.toString();
// create a node for the table
MetaverseComponentDescriptor componentDescriptor = new MetaverseComponentDescriptor(tableName, DictionaryConst.NODE_TYPE_DATA_TABLE, getConnectionNode(), getDescriptor().getContext());
// set the namespace to be the id of the connection node.
IMetaverseNode tableNode = createNodeFromDescriptor(componentDescriptor);
tableNode.setProperty(DictionaryConst.PROPERTY_NAMESPACE, componentDescriptor.getNamespace().getNamespaceId());
tableNode.setProperty(DictionaryConst.PROPERTY_TABLE, tableName);
tableNode.setProperty(DictionaryConst.PROPERTY_SCHEMA, schema);
tableNode.setLogicalIdGenerator(DictionaryConst.LOGICAL_ID_GENERATOR_DB_TABLE);
return tableNode;
}
use of org.pentaho.metaverse.api.IMetaverseNode in project pentaho-metaverse by pentaho.
the class TransExecutorStepAnalyzer method connectToSubTransInputFields.
/**
* Add links from all incoming stream fields to the fields in the sub transformation
* @param meta
* @param subTransMeta
* @param subTransNode
* @param descriptor
*/
protected void connectToSubTransInputFields(TransExecutorMeta meta, TransMeta subTransMeta, IMetaverseNode subTransNode, IComponentDescriptor descriptor) {
Set<StepField> incomingFields = getInputs().getFieldNames();
for (StepField field : incomingFields) {
IMetaverseNode inputNode = getInputs().findNode(field);
linkUsedFieldToSubTrans(inputNode, subTransMeta, subTransNode, descriptor);
}
}
use of org.pentaho.metaverse.api.IMetaverseNode in project pentaho-metaverse by pentaho.
the class TransExecutorStepAnalyzer method linkResultFieldToSubTrans.
/**
* Checks to see if the sub trans has any RowToResult steps in it.
* If so, it will link the fields it outputs to the fields created by this step and are sent to the
* "target step for output rows".
*
* @param streamFieldNode stream field node sent to the step defined as "target step for output rows"
* @param subTransMeta TransMeta of the transformation to be executed by the TransExecutor step
* @param subTransNode IMetaverseNode representing the sub-transformation to be executed
* @param descriptor Descriptor to use as a basis for any nodes created
*/
protected void linkResultFieldToSubTrans(IMetaverseNode streamFieldNode, TransMeta subTransMeta, IMetaverseNode subTransNode, IComponentDescriptor descriptor) {
List<StepMeta> steps = subTransMeta.getSteps();
if (!CollectionUtils.isEmpty(steps)) {
for (StepMeta step : steps) {
if (step.getStepMetaInterface() instanceof RowsToResultMeta) {
RowsToResultMeta rtrm = (RowsToResultMeta) step.getStepMetaInterface();
// Create a new descriptor for the RowsToResult step.
IComponentDescriptor stepDescriptor = new MetaverseComponentDescriptor(step.getName(), DictionaryConst.NODE_TYPE_TRANS_STEP, subTransNode, descriptor.getContext());
// Create a new node for the step, to be used as the parent of the the field we want to link to
IMetaverseNode subTransStepNode = createNodeFromDescriptor(stepDescriptor);
try {
RowMetaInterface rowMetaInterface = rtrm.getParentStepMeta().getParentTransMeta().getStepFields(step);
for (int i = 0; i < rowMetaInterface.getFieldNames().length; i++) {
String field = rowMetaInterface.getFieldNames()[i];
if (streamFieldNode.getName().equals(field)) {
// Create the descriptor for the trans field that is derived from the incoming result field
IComponentDescriptor stepFieldDescriptor = new MetaverseComponentDescriptor(field, DictionaryConst.NODE_TYPE_TRANS_FIELD, subTransStepNode, descriptor.getContext());
// Create the node
// IMetaverseNode subTransField = createNodeFromDescriptor( stepFieldDescriptor );
IMetaverseNode subTransField = createFieldNode(stepFieldDescriptor, rowMetaInterface.getValueMeta(i), StepAnalyzer.NONE, false);
// Add the link
metaverseBuilder.addLink(subTransField, DictionaryConst.LINK_DERIVES, streamFieldNode);
// no need to keep looking for a match on field name, we just handled it.
continue;
}
}
} catch (KettleStepException e) {
log.warn("Could not get step fields of RowsToResult step in sub transformation - " + subTransMeta.getName(), e);
}
}
}
}
}
use of org.pentaho.metaverse.api.IMetaverseNode in project pentaho-metaverse by pentaho.
the class TransExecutorStepAnalyzer method linkUsedFieldToSubTrans.
/**
* Checks to see if the sub trans has any RowFromResult steps in it.
* If so, it will link the original field node to the fields created in the RowFromResult step in the sub trans
*
* @param originalFieldNode incoming stream field node to the TransExecutorStep
* @param subTransMeta TransMeta of the transformation to be executed by the TransExecutor step
* @param subTransNode IMetaverseNode representing the sub-transformation to be executed
* @param descriptor Descriptor to use as a basis
*/
protected void linkUsedFieldToSubTrans(IMetaverseNode originalFieldNode, TransMeta subTransMeta, IMetaverseNode subTransNode, IComponentDescriptor descriptor) {
List<StepMeta> steps = subTransMeta.getSteps();
if (!CollectionUtils.isEmpty(steps)) {
for (StepMeta step : steps) {
if (step.getStepMetaInterface() instanceof RowsFromResultMeta) {
RowsFromResultMeta rfrm = (RowsFromResultMeta) step.getStepMetaInterface();
// Create a new descriptor for the RowsFromResult step.
IComponentDescriptor stepDescriptor = new MetaverseComponentDescriptor(StepAnalyzer.NONE, DictionaryConst.NODE_TYPE_TRANS_STEP, subTransNode, descriptor.getContext());
// Create a new node for the step, to be used as the parent of the the field we want to link to
IMetaverseNode subTransStepNode = createNodeFromDescriptor(stepDescriptor);
try {
RowMetaInterface rowMetaInterface = rfrm.getParentStepMeta().getParentTransMeta().getStepFields(step);
for (int i = 0; i < rowMetaInterface.getFieldNames().length; i++) {
String field = rowMetaInterface.getFieldNames()[i];
if (originalFieldNode.getName().equals(field)) {
// Create the descriptor for the trans field that is derived from the incoming result field
IComponentDescriptor stepFieldDescriptor = new MetaverseComponentDescriptor(field, DictionaryConst.NODE_TYPE_TRANS_FIELD, subTransStepNode, descriptor.getContext());
// Create the node
IMetaverseNode subTransField = createFieldNode(stepFieldDescriptor, rowMetaInterface.getValueMeta(i), step.getName(), false);
// Add the link
metaverseBuilder.addLink(originalFieldNode, DictionaryConst.LINK_DERIVES, subTransField);
// no need to keep looking for a match on field name, we just handled it.
continue;
}
}
} catch (KettleStepException e) {
log.warn("Could not get step fields of RowsFromResult step in sub transformation - " + subTransMeta.getName(), e);
}
}
}
}
}
Aggregations