Teildatensatz extends Satz { @Override public void add(final Feld feld) { for (Feld f : datenfelder.values()) { if (!feld.equals(f) && feld.overlapsWith(f)) { if (isSatznummer(f)) { remove(f); LOG.debug(f + " is removed from " + this); break; } else { throw new IllegalArgumentException("conflict: " + feld + " overlaps with " + f); } } } datenfelder.put(feld.getBezeichner(), feld); sortedFelder.add(feld); } Teildatensatz(final NumFeld satzart);  Teildatensatz(final NumFeld satzart, final int nr);  Teildatensatz(final int satzart, final int nr);  Teildatensatz(final Teildatensatz other); private  Teildatensatz(final int satzart, final Zeichen satznummer); Zeichen getNummer(); void setSatznummer(Zeichen satznummer); @Override void add(final Feld feld); void remove(final Feld feld); @Override void remove(final Bezeichner bezeichner); @Override void set(final Bezeichner name, final String value); @Override Feld getFeld(final Enum feldX); @Override Feld getFeld(final Bezeichner bezeichner); Feld getFeld(final int nr); boolean hasFeld(final Enum feldX); @Override boolean hasFeld(final Bezeichner bezeichner); boolean hasFeld(final Feld feld); @Override Collection<Feld> getFelder(); @Override void export(final Writer writer); @Override void export(final Writer writer, final String eod); @Override void importFrom(final String content); @Override boolean isValid(); @Override List<ConstraintViolation> validate(); @Override Object clone();  }
@Test(expected = IllegalArgumentException.class) public void testAddOverlapping() { Teildatensatz tds = new Teildatensatz(4711, 1); tds.add(new AlphaNumFeld(Bezeichner.NAME1, 10, 100)); tds.add(new AlphaNumFeld(Bezeichner.NAME2, 10, 101)); }