/* (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#changeCanUpdateStufe(boolean, org.d3s.alricg.held.HeldenLink)
  * - Ein "H. Eigenschaft" kann nicht mehr geändert werden
  */
 public boolean changeCanUpdateWert(boolean canUpdate, HeldenLink link) {
   // Die Stufe kann (auf normalem Weg) nicht mehr geändert werden
   if (eigen.equals(link.getZiel())) {
     return false;
   }
   return canUpdate;
 }
  /* (non-Javadoc) Methode überschrieben
   * @see org.d3s.alricg.charKomponenten.sonderregeln.SonderregelInterface#changeMinStufe(int, org.d3s.alricg.charKomponenten.links.Link)
   * - Da eine Herausragende Eigenschaft nicht gesenkt werden kann gilt:
   *  Minimale Stufe = Maximale Stufe.
   */
  public int changeMinWert(int minStufe, Link link) {

    if (eigen.equals(link.getZiel())) {
      // Der Wert kann nicht mehr gesenkt werden!
      return prozessor.getMaxWert(link);
    }

    return minStufe;
  }