package com.onaro.sanscreen.client.view.topology.queries; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import com.onaro.sanscreen.client.graph.replica.interfaces.data.ReplicaModel; import com.onaro.sanscreen.client.graph.sessions.GraphSession; import com.onaro.sanscreen.client.model.beans.HostBean; import com.onaro.sanscreen.client.netgraph2.model.NetGraphModel; import com.onaro.sanscreen.client.view.selection.SelectedObject; import com.onaro.sanscreen.client.view.topology.TopologyUtils; import com.onaro.sanscreen.client.view.topology.queries.util.TopologyBeanFactory; import com.onaro.sanscreen.server.interfaces.data.Context; import com.onaro.sanscreen.util.Constant; /** * Contains topology's replication logic concerning the remote session calls needed to * be executed based on the object type selected in the main-view. * * @author cohenj * @since 10/13/2009 - Everest */ public class VolumeReplicationQuery extends AbstractTopologyQuery { @Override public NetGraphModel executeQuery(List selectedObjects, Context context, TopologyBeanFactory topologyBeanFactory) throws Exception { GraphSession graphSession = TopologyUtils.getSession(GraphSession.class); for (SelectedObject selectedObject : selectedObjects) { Long objId = selectedObject.getObjIdLong(); ReplicaModel replicaModel = null; context = selectedObject.getContext(); String type = selectedObject.getType(); if ("Path".equals(type)) {//$NON-NLS-1$ replicaModel = graphSession.getReplicaModelByPathId(objId); } else if ("Violation".equals(type)) {//$NON-NLS-1$ replicaModel = graphSession.getReplicaModelByViolationId(objId); } else if ("Volume".equals(type)) {//$NON-NLS-1$ replicaModel = graphSession.getReplicaModelByVolumeIds(Collections.singleton(objId)); } else { continue; } // Call the factory to create the beans. topologyBeanFactory.createBeans(replicaModel); List hostBeans = topologyBeanFactory.getBeanManager().findBeans(HostBean.class); Set newHostIds = new HashSet(); for (HostBean bean : hostBeans) { Long hostId = (Long) bean.getId(); newHostIds.add(hostId); } TopologyUtils.addVirtualMachinesByVolumesInBeanManager(Constant.LONG_NULL_ID, newHostIds, context, topologyBeanFactory, true, true); } NetGraphModel netGraphModel = new NetGraphModel(topologyBeanFactory.getBeanManager()); netGraphModel.setMode(NetGraphModel.Mode.LOGICAL); return netGraphModel; } }