@Override
 public void save(BrokerService broker) {
   if (broker.getBsId() > 0) {
     log.debug().message("Saving broker data in database", broker.getBsId());
     brokerServiceDAO.update(broker);
   } else {
     log.debug().message("Adding new broker");
     brokerServiceDAO.save(broker);
   }
 }
  @Override
  public List<Map<String, Object>> prepareReferences(long id) {

    log.debug().message("Get all related objects");

    List<Map<String, Object>> refer = new ArrayList<Map<String, Object>>();
    Map<String, Object> table = new HashMap<String, Object>();
    BrokerService broker = brokerServiceDAO.find(id);

    if (broker.getServers().size() > 0) {

      table.put("title", "brokerservice.server.references");
      table.put("refObject", "server");
      table.put("headers", new String[] {"sName", "sAddress"});
      table.put("values", broker.getServers());
      refer.add(table);
    }

    if (broker.getTransfers().size() > 0) {

      table = new HashMap<String, Object>();
      table.put("title", "brokerservice.transfer.references");
      table.put("refObject", "transfer");
      table.put("headers", new String[] {"tName", "sourceLocation.lName", "targetLocation.lName"});
      table.put("values", broker.getTransfers());
      refer.add(table);
    }

    return refer;
  }
  @Override
  public BrokerService getEntity(long id) {

    BrokerService broker = new BrokerService();
    if (id > 0) {
      broker = brokerServiceDAO.find(id);
    }

    return broker;
  }
  @Override
  public boolean delete(long id) {

    try {
      brokerServiceDAO.delete(id);
    } catch (IllegalArgumentException e) {
      log.error().message("It was not possible to delete broker with id {}", id);
    }
    return true;
  }
  @Override
  public String[][] getAll() {

    List<BrokerService> allBrokerServices = brokerServiceDAO.findAll();
    String[][] brokerServices = new String[allBrokerServices.size()][4];
    int id = 0;
    for (BrokerService server : allBrokerServices) {
      brokerServices[id][0] = Long.toString(server.getBsId());
      brokerServices[id][1] = server.getBsName();
      brokerServices[id][2] = server.getBsWsdlUrl();
      brokerServices[id][3] = canDelete(server.getBsId()) ? "true" : "false";
      id++;
    }
    return brokerServices;
  }
  @Override
  public boolean canDelete(long id) {

    // check if there are releated locations
    BrokerService broker = brokerServiceDAO.find(id);

    int serverUses = broker.getServers().size();
    int transferUses = broker.getTransfers().size();

    if (serverUses > 0) {
      log.info()
          .message("Broker can't be deleted as there are {} servers related to it.", serverUses);
      return false;
    } else if (transferUses > 0) {
      log.info()
          .message(
              "Broker can't be deleted as there are {} transfers related to it.", transferUses);
      return false;
    }

    return true;
  }