@Override
  protected String compute() {
    final PortletColumnElement column = (PortletColumnElement) context(Element.class);

    final PortletLayoutElement parentLayout = column.nearest(PortletLayoutElement.class);
    final LayoutTplElement layoutTpl = column.nearest(LayoutTplElement.class);

    int weightSum = 0;

    ElementList<PortletColumnElement> portletColumns = parentLayout.getPortletColumns();
    for (PortletColumnElement col : portletColumns) {
      if (col != column) {
        weightSum += col.getWeight().content().intValue();
      }
    }

    final int fullWeight = column.getFullWeight().content().intValue();
    int initialWeight = layoutTpl.getBootstrapStyle().content() ? 3 : 25;

    if (weightSum >= 0 && weightSum < fullWeight) {
      initialWeight = fullWeight - weightSum;
    } else if (weightSum == fullWeight) {
      // the index of last valid column is portletColumns.size() - 2
      // because portletColumns().size() -1 is the new inserted column
      PortletColumnElement lastValidColumn = portletColumns.get(portletColumns.size() - 2);
      int lastValidWeight = lastValidColumn.getWeight().content().intValue();

      if (lastValidWeight > 1) {
        initialWeight = lastValidWeight / 2;
        lastValidWeight = lastValidWeight - initialWeight;
        lastValidColumn.setWeight(lastValidWeight);
      }
    }

    return String.valueOf(initialWeight);
  }