You can write some utility for cloning graphics with own validation logic.Sample clone utility:package ee.alphagis.utils
{
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.symbols.Symbol;
import mx.core.IFactory;
public class MyGraphicUtils
{
public static function cloneGraphic(graphic:Graphic):Graphic
{
if (!graphic)
{
return null;
}
var geometry:Geometry = graphic.geometry;
var symbol:Symbol = graphic.symbol;
var attributes:Object = graphic.attributes;
var autoMoveToTop:Boolean = graphic.autoMoveToTop;
var checkForMouseListeners:Boolean = graphic.checkForMouseListeners;
var infoWindowRenderer:IFactory = graphic.infoWindowRenderer;
var result:Graphic = new Graphic(geometry, symbol, attributes);
result.autoMoveToTop = autoMoveToTop;
result.checkForMouseListeners = checkForMouseListeners;
result.infoWindowRenderer = infoWindowRenderer;
return result;
}
}
}
Utility usage sample:<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- Adobe FLEX SDK ver. 4.5.1 -->
<!-- ArcGIS API for FLEX ver. 2.5 -->
<s:layout>
<s:VerticalLayout paddingBottom="20"
paddingLeft="20"
paddingRight="20"
paddingTop="20" />
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.symbols.SimpleMarkerSymbol;
import ee.alphagis.utils.MyGraphicUtils;
import mx.controls.Alert;
import mx.utils.StringUtil;
private var _pattern:String = "base={0}, geometry={1}, name={2}, stamp={3}\n\nclone={4}, geometry={5}, name={6}, stamp={7}";
protected function button1_clickHandler(event:MouseEvent):void
{
var attr:Object = new Object();
attr.name = "qwerty";
attr.date = new Date();
var geometry:MapPoint = new MapPoint(654, 456, new SpatialReference(4326));
var symbol:SimpleMarkerSymbol = new SimpleMarkerSymbol("circle", 16, 0x00ff56);
var baseGraphic:Graphic = new Graphic(geometry, symbol, attr);
var clonedGraphic:Graphic = MyGraphicUtils.cloneGraphic(baseGraphic);
var message:String = StringUtil.substitute(_pattern,
baseGraphic.toString(),
baseGraphic.geometry.type,
baseGraphic.attributes["name"],
baseGraphic.attributes["date"],
clonedGraphic.toString(),
clonedGraphic.geometry.type,
clonedGraphic.attributes["name"],
clonedGraphic.attributes["date"]);
Alert.show(message);
}
]]>
</fx:Script>
<s:Button label="clone"
click="button1_clickHandler(event)"/>
</s:Application>