docs: private void init(String parentOu) {
  
          m_parentOu = parentOu;
          m_menu = new CmsContextMenu();
          m_menu.setAsTableContextMenu(this);
  
          m_container = new IndexedContainer();
  
          setContainerDataSource(m_container);
  
          for (TableProperty prop : TableProperty.values()) {
              m_container.addContainerProperty(prop, prop.getType(), prop.getDefault());
              setColumnHeader(prop, prop.getName());
          }
          setContainerDataSource(m_container);
          setItemIconPropertyId(TableProperty.Icon);
          setRowHeaderMode(RowHeaderMode.ICON_ONLY);
  
          setColumnWidth(null, 40);
          setSelectable(true);
  
          addGeneratedColumn(TableProperty.Ressources, new ColumnGenerator() {
  
              private static final long serialVersionUID = 4624734503799549261L;
  
              public Object generateCell(Table source, Object itemId, Object columnId) {
  
                  String out = "";
                  try {
                      boolean isOu = true;
                      for (I_CmsOuTreeType type : m_app.getTreeTypeProvider().getTreeTypes()) {
                          if (type.getId().equals(itemId)) {
                              isOu = false;
                          }
                      }
                      if (isOu) {
                          List<CmsResource> resources = OpenCms.getOrgUnitManager().getResourcesForOrganizationalUnit(
                              m_cms,
                              (String)itemId);
                          if (!resources.isEmpty()) {
                              out = resources.get(0).getRootPath();
                              int i = 1;
                              while ((resources.size() > i) & (out.length() < 50)) {
                                  out += ", " + resources.get(i).getRootPath();
                              }
                              if (resources.size() > i) {
                                  out += " ...";
                              }
                          }
                      }
                  } catch (CmsException e) {
                      LOG.error("unable to read resources.", e);
                  }
                  return out;
              }
          });
  
          setVisibleColumns(TableProperty.Name, TableProperty.Description, TableProperty.Ressources);
  
          try {
              m_cms = OpenCms.initCmsObject(A_CmsUI.getCmsObject());
              m_cms.getRequestContext().setSiteRoot("");
          } catch (CmsException e) {
              m_cms = A_CmsUI.getCmsObject();
          }
          try {
              if (m_app.isOUManagable(m_parentOu)) {
  
                  for (I_CmsOuTreeType treeType : m_app.getTreeTypeProvider().getTreeTypes()) {
                      if (treeType.showInOuTable() && treeType.isValidForOu(m_cms, m_parentOu)) {
                          Item item = m_container.addItem(treeType.getId());
                          item.getItemProperty(TableProperty.Name).setValue(treeType.getName());
                          item.getItemProperty(TableProperty.Icon).setValue(treeType.getIcon());
                          item.getItemProperty(TableProperty.Type).setValue(treeType);
                      }
                  }
              }
              List<CmsOrganizationalUnit> webOus = new ArrayList<CmsOrganizationalUnit>();
              for (CmsOrganizationalUnit ou : OpenCms.getOrgUnitManager().getOrganizationalUnits(
                  m_cms,
                  parentOu,
                  false)) {
  
                  if (ou.hasFlagWebuser()) {
                      webOus.add(ou);
                  } else {
                      addOuToTable(ou);
                  }
              }
              for (CmsOrganizationalUnit ou : webOus) {
                  addOuToTable(ou);
              }
          } catch (CmsException e) {
              LOG.error("Unable to read ous", e);
          }
  
          addItemClickListener(new ItemClickListener() {
  
              private static final long serialVersionUID = 4807195510202231174L;
  
              public void itemClick(ItemClickEvent event) {
  
                  setValue(null);
                  select(event.getItemId());
                  if (event.getButton().equals(MouseButton.RIGHT) || (event.getPropertyId() == null)) {
                      m_menu.setEntries(getMenuEntries(), Collections.singleton((String)getValue()));
                      m_menu.openForTable(event, event.getItemId(), event.getPropertyId(), CmsOUTable.this);
                      return;
                  }
                  if (event.getButton().equals(MouseButton.LEFT) && event.getPropertyId().equals(TableProperty.Name)) {
                      updateApp((String)getValue());
                  }
  
              }
  
          });
          setCellStyleGenerator(new CellStyleGenerator() {
  
              private static final long serialVersionUID = 1L;
  
              public String getStyle(Table source, Object itemId, Object propertyId) {
  
                  if (TableProperty.Name.equals(propertyId)) {
                      return " " + OpenCmsTheme.HOVER_COLUMN;
                  }
  
                  return "";
              }
          });
      }