private String getCollectionName(File f, SlbModelTree slbmodel) {

    if (f.getName().indexOf("slb_base.xml") >= 0) {
      return "slb_base";
    }

    if (slbmodel.getVirtualServers().size() != 1) {
      throw new IllegalStateException("wrong file format, multi virtual servers:" + f);
    }

    VirtualServer vs = (VirtualServer) slbmodel.getVirtualServers().values().toArray()[0];
    return vs.getName();
  }
  private void processConcurrentConfig(File f) throws IOException, SAXException {

    SlbModelTree slbmodel = readFromFile(f);
    String collectionName = getCollectionName(f, slbmodel);
    synchronized (this) {
      if (!mongoTemplate.collectionExists(collectionName)) {
        createCollection(collectionName);
      }
    }

    DocumentKey key = getDocumentKey(f, slbmodel);
    slbmodel.setTag(key.getTag());
    updateTagGlobalId(collectionName, key.getTag());
    mongoTemplate.insert(slbmodel, collectionName);
  }
  private DocumentKey getDocumentKey(File f, SlbModelTree slbmodel) {

    String fileName = f.getName();
    if (fileName.indexOf("slb_base.xml") >= 0) {
      return new DocumentKey("slb_base");
    }

    VirtualServer vs = (VirtualServer) slbmodel.getVirtualServers().values().toArray()[0];
    String name = vs.getName();

    int index = fileName.indexOf(".xml_");
    if (index >= 0) {
      String tag = fileName.substring(index + ".xml_".length()).trim();
      return new DocumentKey(name, Integer.parseInt(tag));
    }
    // concurrent version
    return new DocumentKey(name);
  }