class RouterDeploymentDefinition {

    @DB
    protected void findOrDeployVirtualRouter() throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
        if (!isRouterDeployed()) {
            try {
                lock();
                // reset router list that got populated during isRouterDeployed()
                routers.clear();
                checkPreconditions();

                // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods
                final List<DeployDestination> destinations = findDestinations();
                for (final DeployDestination destination : destinations) {
                    dest = destination;
                    generateDeploymentPlan();
                    executeDeployment();
                }
            } finally {
                unlock();
            }
        }
    }

    protected  RouterDeploymentDefinition(final Network guestNetwork, final DeployDestination dest,
                                         final Account owner, final Map<Param, Object> params);

}