Bruce Harold wrote:
> This sounds eminently sensible to me. Otherwise its
> TransportSender/Receiver in the same workbench (if that is possible).
It is... See the attached workbench (FME Professional, build 5024). It's
almost like magic :) I do wonder how 'smooth' this would be in a big
workbench with a lot of data running through it. I'll see if I have some
time for benchmarking soon...
--
Hans van der Maarel
Red Geographics
Zevenbergsepoort 44b www.redgeographics.com
4791 AE Klundert [EMAIL PROTECTED]
The Netherlands phone: +31-168-401035
For insights into what's up at Safe Software and what's on the development
horizon, visit Safe's blog at spatial-etl.blogspot.com.
Love FME? Then open your diary to March 6-7, 2008 and write this... "Second
Worldwide FME User Conference - Must Attend!" See
http://www.safe.com/company/fmeuc2008/index.php for more details.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/fme/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/fme/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:[EMAIL PROTECTED]
mailto:[EMAIL PROTECTED]
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
#! <?xml version="1.0" encoding="iso-8859-1" ?>
#! <WORKSPACE
#
#
# Commandline to run this workspace:
#
#
# fme.exe tunnel.fmw
#
#
#! MAX_LOG_FEATURES="200"
#! SOURCE="NONE"
#! END_TCL=""
#! DESTINATION="NONE"
#! SHOW_BOOKMARKS="true"
#! GRID_VISIBLE="false"
#! GRID_HEIGHT="50"
#! SHOW_INFO_NODES="true"
#! BEGIN_PYTHON=""
#! BEGIN_TCL=""
#! VIEW_POSITION="0 0"
#! ZOOM_SCALE="100"
#! PASSWORD=""
#! VIEW_PAGE_BREAKS="false"
#! FME_CACHED_OBJECTS_HINT="7500"
#! SHOW_ANNOTATIONS="true"
#! LOG_MAX_RECORDED_FEATURES="200"
#! END_PYTHON=""
#! FME_REPROJECTION_ENGINE="FME"
#! FME_BUILD_NUM="5024"
#! GRID_SNAPTO="false"
#! GRID_WIDTH="50"
#! SOURCE_ROUTING_DIR=""
#! LOG_FILE=""
#! DESTINATION_ROUTING_DIR=""
#! WORKSPACE_VERSION="1"
#! TITLE=""
#! FME_USE_RICH_GEOMETRY="Classic"
#! IGNORE_READER_FAILURE="No"
#! ATTR_TYPE_ENCODING="SDF"
#! >
#! <DATASETS>
#! </DATASETS>
#! <DATA_TYPES>
#! </DATA_TYPES>
#! <GEOM_TYPES>
#! </GEOM_TYPES>
#! <FEATURE_TYPES>
#! </FEATURE_TYPES>
#! <GLOBAL_PARAMETERS>
#! </GLOBAL_PARAMETERS>
#! <COMMENTS>
#! <COMMENT
#! IDENTIFIER="6"
#! COMMENT_VALUE="Lots of other stuff goes here...|"
#! POSITION="1514 -745"
#! ORDER="7"
#! FOLLOW_ANCHOR="true"
#! INFO_NODE="false"
#! />
#! </COMMENTS>
#! <CONSTANTS>
#! </CONSTANTS>
#! <BOOKMARKS>
#! <BOOKMARK
#! IDENTIFIER="7"
#! NAME="The rest of the workbench"
#! DESCRIPTION=""
#! TOP_LEFT="1306 -327"
#! BOTTOM_RIGHT="2306 -1269"
#! STICKY="true"
#! COLOUR="0.584887,0.664205,0.640889"
#! />
#! </BOOKMARKS>
#! <TRANSFORMERS>
#! <TRANSFORMER
#! IDENTIFIER="0"
#! TYPE="2DGridCreator"
#! VERSION="1"
#! POSITION="187 -685"
#! ORDER="3"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="CREATED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_ATTR ATTR_NAME="_row" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_ATTR ATTR_NAME="_column" IS_USER_CREATED="false" FEAT_INDEX="0"/>
#! <XFORM_PARM PARM_NAME="NUMROWS" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="GRID_TYPE" PARM_VALUE="Polygons"/>
#! <XFORM_PARM PARM_NAME="COL_ATTR" PARM_VALUE="_column"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="2DGridCreator"/>
#! <XFORM_PARM PARM_NAME="YINC" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="LOWERLEFTX" PARM_VALUE="0"/>
#! <XFORM_PARM PARM_NAME="NUMCOLS" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="XINC" PARM_VALUE="10"/>
#! <XFORM_PARM PARM_NAME="LOWERLEFTY" PARM_VALUE="0"/>
#! <XFORM_PARM PARM_NAME="ROW_ATTR" PARM_VALUE="_row"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="1"
#! TYPE="TransporterSender"
#! VERSION="1"
#! POSITION="816 -686"
#! ORDER="4"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="MODE" PARM_VALUE="TCP/IP"/>
#! <XFORM_PARM PARM_NAME="FEATURES_PER_FILE" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="FILE_NAME" PARM_VALUE="<Unused>"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="TransporterSender"/>
#! <XFORM_PARM PARM_NAME="PORT" PARM_VALUE="8586"/>
#! <XFORM_PARM PARM_NAME="INITIATION_SEQUENCE" PARM_VALUE="ESTABLISH"/>
#! <XFORM_PARM PARM_NAME="HOST" PARM_VALUE="localhost"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="3"
#! TYPE="TransporterReceiver"
#! VERSION="1"
#! POSITION="2388 -750"
#! ORDER="5"
#! PARMS_EDITED="true"
#! ENABLED="true"
#! >
#! <OUTPUT_FEAT NAME="TRANSPORTED"/>
#! <FEAT_COLLAPSED COLLAPSED="0"/>
#! <XFORM_PARM PARM_NAME="MODE" PARM_VALUE="TCP/IP"/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="TransporterReceiver"/>
#! <XFORM_PARM PARM_NAME="PORT" PARM_VALUE="8586"/>
#! <XFORM_PARM PARM_NAME="INITIATION_SEQUENCE" PARM_VALUE="CONNECT"/>
#! <XFORM_PARM PARM_NAME="HOST" PARM_VALUE="localhost"/>
#! </TRANSFORMER>
#! <TRANSFORMER
#! IDENTIFIER="4"
#! TYPE="Visualizer"
#! VERSION="1"
#! POSITION="3236 -731"
#! ORDER="6"
#! PARMS_EDITED="false"
#! ENABLED="true"
#! >
#! <XFORM_PARM PARM_NAME="TACKATTRS" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="AREA_COLOR" PARM_VALUE=""/>
#! <XFORM_PARM PARM_NAME="XFORMER_NAME"
PARM_VALUE="TransporterReceiver_TRANSPORTED"/>
#! <XFORM_PARM PARM_NAME="PEN_COLOR" PARM_VALUE=""/>
#! </TRANSFORMER>
#! </TRANSFORMERS>
#! <FEAT_LINKS>
#! <FEAT_LINK
#! IDENTIFIER="2"
#! SOURCE_NODE="0"
#! TARGET_NODE="1"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! ENABLED="true"
#! EXTRA_POINTS=""
#! />
#! <FEAT_LINK
#! IDENTIFIER="5"
#! SOURCE_NODE="3"
#! TARGET_NODE="4"
#! SOURCE_PORT_DESC="fo 0"
#! TARGET_PORT_DESC="fi 0"
#! ENABLED="true"
#! EXTRA_POINTS=""
#! />
#! </FEAT_LINKS>
#! <ATTR_LINKS>
#! </ATTR_LINKS>
#! <SUBDOCUMENTS>
#! </SUBDOCUMENTS>
#! <LOOKUP_TABLES>
#! </LOOKUP_TABLES>
#! </WORKSPACE>
#!
#! START_HEADER
#! START_WB_HEADER
READER_TYPE NULL
READER_KEYWORD NULL_SOURCE
NULL_SOURCE_DATASET null
WRITER_TYPE NULL
WRITER_KEYWORD NULL_DEST
NULL_DEST_DATASET null
#! END_WB_HEADER
#! END_HEADER
LOG_FILENAME "$(FME_MF_DIR)tunnel.log"
LOG_APPEND NO
LOG_MAX_FEATURES 200
LOG_MAX_RECORDED_FEATURES 200
FME_CACHED_OBJECTS_HINT 7500
FME_REPROJECTION_ENGINE FME
FME_USE_RICH_GEOMETRY no
# -------------------------------------------------------------------------
MULTI_READER_CONTINUE_ON_READER_FAILURE No
# -------------------------------------------------------------------------
MACRO WORKSPACE_NAME tunnel
DEFAULT_MACRO WB_CURRENT_CONTEXT
# -------------------------------------------------------------------------
FACTORY_DEF * CreationFactory FACTORY_NAME 2DGridCreator 2D_GEOMETRY 0 0
NUMBER_TO_CREATE @Evaluate("10 * 10") OUTPUT FEATURE_TYPE __TO_TESTER__
_column @Evaluate(int("(&creation_instance+0) / 10")) _row
@Evaluate("(&creation_instance+0) % 10") xOffset @Evaluate(&_column *
10) yOffset @Evaluate(&_row * 10) @Offset(&xOffset,&yOffset)
@RemoveAttributes(xOffset,yOffset,creation_instance)
FACTORY_DEF * TestFactory FACTORY_NAME 2DGridCreator_Tester INPUT
FEATURE_TYPE __TO_TESTER__ TEST Polygons == "Points" OUTPUT PASSED
FEATURE_TYPE __TO_CLEANER__ OUTPUT FAILED FEATURE_TYPE __TO_CLEANER__
xPt @XValue() yPt @YValue() @XValue(&xPt,RESET) @YValue(&yPt)
@XValue(&xPt) @YValue(@Evaluate(&yPt+10))
@XValue(@Evaluate(&xPt+10)) @YValue(@Evaluate(&yPt+10))
@XValue(@Evaluate(&xPt+10)) @YValue(&yPt) @XValue(&xPt)
@YValue(&yPt) @GeometryType(fme_polygon) @RemoveAttributes(xPt,yPt)
FACTORY_DEF * TeeFactory FACTORY_NAME 2DGridCreator_Cleaner INPUT
FEATURE_TYPE __TO_CLEANER__ OUTPUT FEATURE_TYPE 2DGridCreator_CREATED
# -------------------------------------------------------------------------
#
FACTORY_DEF * TransporterFactory FACTORY_NAME TransporterSender INPUT
FEATURE_TYPE 2DGridCreator_CREATED MODE TCP/IP HOST localhost
INITIATION_SEQUENCE ESTABLISH DIRECTION SEND PORT 8586 FILE_NAME
<Unused> FEATURES_PER_FILE <Unused>
# -------------------------------------------------------------------------
#
FACTORY_DEF * TransporterFactory FACTORY_NAME TransporterReceiver MODE
TCP/IP HOST localhost INITIATION_SEQUENCE CONNECT DIRECTION RECEIVE
PORT 8586 OUTPUT TRANSPORTED FEATURE_TYPE TransporterReceiver_TRANSPORTED
# -------------------------------------------------------------------------
# Set the directive to add all the meta-attributes to the features.
# We do this so users see all possible information in the viewed
# features.
READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename
# First, set up the temporary directory that will be used for
# the recordings we will be viewing (these three lines do this)
# They assume that the WORKSPACE_NAME macro has already been set
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {[string length {$(WORKSPACE_TEMP_DIR)}] < 2} { if
{[info exists env(TEMP)]} {set gVisualizerTemp $env(TEMP)}
else {set gVisualizerTemp c:} ; regsub
-all {[ ,]} {$(WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp
$gVisualizerTemp\\${wsname}_[clock format [clock seconds] -format %H%M%S] ;
puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; } ;
if { [string length {}] > 0 } { set catter "" ; set
comma "" ; foreach attr "" { set catter
"$catter$comma&$attr" ; set comma ",_," ; } ;
puts "MACRO CATMAC [EMAIL PROTECTED]($catter)" ; } else {
puts "MACRO CATMAC " ; }; set safeName "[regsub
-all {[^a-zA-Z0-9]} {TransporterReceiver_TRANSPORTED} _]_[expr round(rand() *
1000000)]_[clock clicks]"; puts "MACRO SAFE_FFS_NAME $safeName";
]
# Make the temporary directory that the FFS files will live in.
FACTORY_DEF * CreationFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_DirCreator OUTPUT FEATURE_TYPE __nukeme__
@Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}")
FACTORY_DEF * TeeFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_DirCreatorCleanerUpper INPUT FEATURE_TYPE
__nukeme__
# Now route all the features into the recorder, changing their
# feature type to the transformer name so that they view nicely
FACTORY_DEF * TeeFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_SetterUpper INPUT FEATURE_TYPE
TransporterReceiver_TRANSPORTED OUTPUT FEATURE_TYPE __viewme__
FACTORY_DEF * RecorderFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_Recorder INPUT FEATURE_TYPE __viewme__
@FeatureType(TransporterReceiver_TRANSPORTED$(CATMAC)) FEATURE_FILE
"$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs" MODE RECORD_PASS_THROUGH
FACTORY_DEF * CreationFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_Trigger CREATE_AT_END OUTPUT
FEATURE_TYPE __nukeme__ @TCL("lappend gVisualizerFilesToView
$(SAFE_FFS_NAME)")
FACTORY_DEF * TeeFactory FACTORY_NAME
TransporterReceiver_TRANSPORTED_CleanerUpper INPUT FEATURE_TYPE __nukeme__
# -------------------------------------------------------------------------
FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router"
INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) != "" OUTPUT PASSED
FEATURE_TYPE * @FeatureType(@Value(__wb_out_feat_type__))
# -------------------------------------------------------------------------
DEFAULT_MACRO WORKSPACE_TEMP_DIR
INCLUDE [ if {{$(WORKSPACE_TEMP_DIR)} == {}} { puts {MACRO
__WB_ENABLE_VISUALIZER__ no} } else { puts {MACRO __WB_ENABLE_VISUALIZER__ *} }
]
FACTORY_DEF $(__WB_ENABLE_VISUALIZER__) CreationFactory CREATE_AT_END
OUTPUT FEATURE_TYPE __NUKEME__ @TCL("eval FME_Execute System \173fmeview
/ownffs {$(WORKSPACE_TEMP_DIR)} $gVisualizerFilesToView & }")
FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__