Hi Laurent,
Please see the attached code snippets of Plugin.xml , UI layer , Service layer.
Plugin_Snippet.xml
<?xml version="1.0" encoding="UTF-8"?>
...
...
<plugin
moduleUri="ClusterApp.swf" defaultBundle="com.vmware.samples">
<extension>
<extendedPoint>vise.navigator.nodespecs</extendedPoint>
<object>
<title>#{clusterAppCategory}</title>
<parentUid>com.vmware.samples.ClusterAppHomevi</parentUid>
</object>
</extension>
<!--cluster List -->
<templateInstance>
<templateId>vsphere.core.inventorylist.objectCollectionTemplate</templateId>
<variable value="com.vmware.samples.clusterCollection"/>
<variable value="#{clusterLabel}"/>
<variable value="#{cluster}"/>
<variable value="samples:cluster"/>
<variable value="com.vmware.samples.cluster.list"/>
<variable value="com.vmware.samples.clusterAppCategory"/>
</templateInstance>
<!--Virtual Machine List -->
<templateInstance>
<templateId>vsphere.core.inventorylist.objectCollectionTemplate</templateId>
<variable value="com.vmware.samples.virtualmachineCollection"/>
<variable value="#{vmLabel}"/>
<variable value="#{vm}"/>
<variable value="samples:VirtualMachine"/>
<variable value="com.vmware.samples.virtualmachine.list"/>
<variable value="com.vmware.samples.clusterAppCategory"/>
</templateInstance>
<!--Backup List -->
<templateInstance>
<templateId>vsphere.core.inventorylist.objectCollectionTemplate</templateId>
<variable value="com.vmware.samples.backupCollection"/>
<variable value="#{backupLabel}"/>
<variable value="#{snapshot}"/>
<variable value="samples:Backup"/>
<variable value="com.vmware.samples.backup.list"/>
<variable value="com.vmware.samples.clusterAppCategory"/>
</templateInstance>
..
..
</plugin>
UI Layer Call:
_backupProxy.setBackup(_view.backUpDetails,onSetBackupResult);
_backupProxy = ServiceProxy.as
setBackup = remote method on service layer
_view.backUpDetails = BackupDetails (Remote Object)
onSetBackupResult = Method Return Event
//Result Event Handler Code
private function onSetBackupResult(event:MethodReturnEvent):void
{
var result:BackupDetails;
result = event.result as BackupDetails;
if (event.error != null) {
Alert.show("Error calling setSettings: " + event.error.message);
return;
}
else
{
// IReference object received from service layer after successful backup operation
objectVar= result.backupResourceId;
//Dispatch Event invocation of Backup entity
var mce:ModelChangeEvent = ModelChangeEvent.newSingleObjectChangeEvent(
objectVar,
OperationType.ADD);
var dispatched:Boolean;
dispatched = dispatchEvent(mce);
}
}
Service Layer Call:
public BackupDetails setBackup(BackupDetails settings) {
String result = Constants.EMPTY_STRING;
// Check for the relevant model object
ModelObject object = (ModelObject) EntityResolver.getEntity(settings.resourceId, _objectStore,RESOURCE_RESOLVER);
BackupDAO backupDAOObject = new BackupDAO();
ServiceStub serviceStub = ServiceInstance
.get_ServiceStub_Instance();
try
{
if (object instanceof VirtualMachine) {
VirtualMachine virtualMachine = (VirtualMachine) object;
result = backupDAOObject.backupVM(serviceStub, virtualMachine, settings);
}
//Here we are updating data store entities by calling server and getting the latest data for each entities
refreshDataStore();
} catch (Exception ex)
{
//Here we are updating data store entities by calling server and getting the latest data for each entities
refreshDataStore();
}
ModelObject[] modelObjects = new ModelObject[_objectStore.values().size()];
_objectStore.values().toArray(modelObjects);
Backup backup = null;
URI objectUri = null;
StringBuilder backupNameSubStr = new StringBuilder(settings.backupName);
backupNameSubStr.append(Constants.UNDER_SCORE);
for(int count = 0 ; count < modelObjects.length ; count++)
{
if(modelObjects[count] instanceof Backup)
{
backup = (Backup)modelObjects[count];
if(backup.getSnapshotName().contains(backupNameSubStr.toString()))
{
objectUri = backup.getUtil().getUri(RESOURCE_RESOLVER);
break;
}
}
}
// IReference object of backup is being sent back to service layer
settings.backupResourceId = objectUri;
settings.backupResponse = result;
return settings;
}