public boolean deleteAllocation(int assetClassId) {
    ExceptionHandler handler = new ExceptionHandler(getContext(), this);
    AssetClassRepository repo = new AssetClassRepository(getContext());

    // todo: use transaction? (see bulkUpdate)

    // Delete all child elements.
    List<Integer> childIds = getAllChildrenIds(assetClassId);
    repo.deleteAll(childIds);

    // delete any stock links
    AssetClassStockRepository stockRepo = new AssetClassStockRepository(getContext());
    boolean linksDeleted = stockRepo.deleteAllForAssetClass(assetClassId);
    if (!linksDeleted) {
      handler.showMessage("Error deleting stock links.");
      return false;
    }

    // delete allocation record
    boolean assetClassDeleted = repo.delete(assetClassId);
    if (!assetClassDeleted) {
      handler.showMessage("Error deleting asset class.");
      return false;
    }

    return true;
  }
  public boolean assignStockToAssetClass(String stockSymbol, Integer assetClassId) {
    AssetClassStock link = AssetClassStock.create(assetClassId, stockSymbol);

    AssetClassStockRepository repo = new AssetClassStockRepository(context);
    boolean success = repo.insert(link);

    if (!success) {
      ExceptionHandler handler = new ExceptionHandler(context, this);
      handler.showMessage(context.getString(R.string.error));
    }
    return success;
  }
  private void loadStocks(AssetClass assetClass) {
    if (assetClass.getChildren().size() > 0) {
      // Group. Load values for child elements.
      for (AssetClass child : assetClass.getChildren()) {
        loadStocks(child);
      }
    } else {
      // No child elements. This is the actual allocation. Load value from linked stocks.

      assetClass.setType(ItemType.Allocation);

      // load stock links
      AssetClassStockRepository linkRepo = new AssetClassStockRepository(this.context);
      List<AssetClassStock> links = linkRepo.loadForClass(assetClass.getId());
      assetClass.setStockLinks(links);

      if (assetClass.getStockLinks().size() == 0) return;

      //            String[] symbols = Queryable.from(assetClass.getStockLinks())
      //                .map(new Converter<AssetClassStock, String>() {
      //                    @Override
      //                    public String convert(AssetClassStock element) {
      //                        return element.getStockSymbol();
      //                    }
      //                }).toArray();

      int size = assetClass.getStockLinks().size();
      String[] symbols = new String[size];
      for (int i = 0; i < size; i++) {
        AssetClassStock link = assetClass.getStockLinks().get(i);
        symbols[i] = link.getStockSymbol();
      }

      StockRepository stockRepo = new StockRepository(getContext());
      List<Stock> stocks = stockRepo.loadForSymbols(symbols);
      assetClass.setStocks(stocks);
    }
  }