package com.scoopit.weedfs.client.status; import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Topology extends AbstractNode { public List<DataCenter> DataCenters; public List<Layout> layouts; private class Stats { int dcCount; int rackCount; int nodeCount; List<DataNode> nodeList = new LinkedList<>(); } private Stats stats; private void computeStats() { if (DataCenters == null) { return; } stats = new Stats(); for (DataCenter dc : DataCenters) { stats.dcCount++; if (dc.Racks == null) { continue; } for (Rack rack : dc.Racks) { stats.rackCount++; if (rack.DataNodes == null) { continue; } stats.nodeCount += rack.DataNodes.size(); stats.nodeList.addAll(rack.DataNodes); } } } public int getDataCenterCount() { if (stats == null) { computeStats(); } if (stats == null) { return 0; } return stats.dcCount; } public int getRackCount() { if (stats == null) { computeStats(); } if (stats == null) { return 0; } return stats.rackCount; } public int getDataNodeCount() { if (stats == null) { computeStats(); } if (stats == null) { return 0; } return stats.nodeCount; } public List<DataNode> getDataNodes() { if (stats == null) { computeStats(); } if (stats == null) { return Collections.emptyList(); } return stats.nodeList; } }