/* (non-Javadoc) Methode überschrieben
   * @see org.d3s.alricg.charKomponenten.sonderregeln.SonderregelInterface#canAddSelf(org.d3s.alricg.held.box.HeldProzessor, boolean, org.d3s.alricg.charKomponenten.links.Link)
   *
   * - Das Ziel dieser Sonderregel (also die Eigenschaft) wird aus dem
   * 	 srLink ausgelesen und ist das "zweitZiel".
   * - Es darf keine Eigenschaft die SF "Herausragende Eigenschaft" bekommen, die
   *   durch die Herkunft gesenkt wurde.
   */
  public boolean canAddSelf(Held held, boolean ok, Link srlink) {
    Eigenschaft element;
    Link tmpLink;

    // Auslesen des gewünschten Links
    element = (Eigenschaft) srlink.getZweitZiel();
    tmpLink =
        ((LinkProzessor<Eigenschaft, HeldenLink>) held.getProzessor(CharKomponente.eigenschaft))
            .getElementBox()
            .getObjectById(element);

    // Überprüfung ob die Modis durch die Herkunft u.ä. negativ sind,
    // dann dürfte diese SR nicht gewählt werden
    if (((GeneratorLink) tmpLink).getWertModis() < 0) {
      return false;
    }

    // Die Sonderregel darf nur einmal zu einem ELement existieren
    if (held.getSonderregelAdmin().hasSonderregel(this.getId(), null, element)) {
      return false;
    }

    // Prüfen ob "Stubenhocker" --> Nicht erlaubt mit KK, KO und GE!
    if (element.getEigenschaftEnum().equals(EigenschaftEnum.GE)
        || element.getEigenschaftEnum().equals(EigenschaftEnum.KK)
        || element.getEigenschaftEnum().equals(EigenschaftEnum.KO)) {
      if (held.getSonderregelAdmin().hasSonderregel("SR-Stubenhocker", null, null)) {
        return false;
      }
    }

    return ok;
  }
  /* (non-Javadoc) Methode überschrieben
   * @see org.d3s.alricg.charKomponenten.sonderregeln.SonderregelInterface#initSonderregel(org.d3s.alricg.held.box.HeldProzessor, org.d3s.alricg.charKomponenten.links.Link)
   *
   * - Das Ziel dieser Sonderregel (also die Eigenschaft) wird aus dem
   * 	 srElementlink ausgelesen und ist das "zweitZiel".
   *  - Die betreffende Eigenschaft wird auf das Maximum gesetzt und um den
   *    Wert in "link" erhöht.
   */
  public void initSonderregel(Held held, Link srLink) {
    GeneratorLink tmpLink;
    IdLink modiLink;

    assert srLink.getZweitZiel() != null;

    this.prozessor = held.getProzessor(CharKomponente.eigenschaft);

    // Auslesen des gewünschten Links
    eigen = (Eigenschaft) srLink.getZweitZiel();
    tmpLink = (GeneratorLink) prozessor.getElementBox().getObjectById(eigen);

    // Link erstellen der die Eigenschaft um den gewünschten Wert erhöht
    modiLink = new IdLink(this, null);
    modiLink.setWert(srLink.getWert());

    // Neuen Link hinzufügen,
    tmpLink.addLink(modiLink);

    // Eigenschaft auf den Maximalen Wert setzen
    tmpLink.setUserGesamtWert(prozessor.getMaxWert(tmpLink));
  }