private void addNodeResourceMap() {
    maybeInitBuilder();
    builder.clearNodeResourceMap();
    if (nodeResourceMap == null) {
      return;
    }
    Iterable<? extends NodeResourceMapProto> values =
        new Iterable<NodeResourceMapProto>() {

          @Override
          public Iterator<NodeResourceMapProto> iterator() {
            return new Iterator<NodeResourceMapProto>() {
              Iterator<NodeId> nodeIterator = nodeResourceMap.keySet().iterator();

              @Override
              public boolean hasNext() {
                return nodeIterator.hasNext();
              }

              @Override
              public NodeResourceMapProto next() {
                NodeId nodeId = nodeIterator.next();
                return NodeResourceMapProto.newBuilder()
                    .setNodeId(convertToProtoFormat(nodeId))
                    .setResourceOption(convertToProtoFormat(nodeResourceMap.get(nodeId)))
                    .build();
              }

              @Override
              public void remove() {
                throw new UnsupportedOperationException();
              }
            };
          }
        };
    this.builder.addAllNodeResourceMap(values);
  }
 private void mergeLocalToProto() {
   if (viaProto) maybeInitBuilder();
   mergeLocalToBuilder();
   proto = builder.build();
   viaProto = true;
 }
 public UpdateNodeResourceRequestProto getProto() {
   mergeLocalToProto();
   proto = viaProto ? proto : builder.build();
   viaProto = true;
   return proto;
 }