/** DOCUMENT ME! */
  private void cleanup() {
    final CidsBean pointBean = getCidsBean();
    if (pointBean != null) {
      pointBean.removePropertyChangeListener(getCidsBeanListener());
    }

    if (isEditable()) {
      if (pointBean != null) {
        // altes feature entfernen
        final LinearReferencedPointFeature oldFeature =
            FEATURE_REGISTRY.removeStationFeature(pointBean);
        if (oldFeature != null) {
          // listener auf altem Feature entfernen
          oldFeature.removeListener(getFeatureListener());
        }

        FEATURE_REGISTRY.removeListener(pointBean, getMapRegistryListener());
      }

      final Feature badGeomFeature = getBadGeomFeature();
      if (badGeomFeature != null) {
        // badgeomfeature entfernen.
        MAPPING_COMPONENT.getFeatureCollection().removeFeature(badGeomFeature);
        setBadGeomFeature(null);
      }
    }

    setInited(false);

    if (isEditable()) {
      // auf startzustand setzen => hinzufügenpanel anzeigen
      showCard(Card.add);
    } else {
      setErrorMsg("keine Station zugewiesen");
      showCard(Card.error);
    }
  }
  /** DOCUMENT ME! */
  private void init() {
    // wird das aktuelle crs unterstützt ?
    if (!isCrsSupported(CismapBroker.getInstance().getSrs())) {
      showCrsNotSupported();
      // noch nicht initialisiert ?
    } else if (!isInited()) {
      final CidsBean pointBean = getCidsBean();

      if (pointBean != null) {
        pointBean.addPropertyChangeListener(getCidsBeanListener());
        final double pointValue = getValue();
        setValueToLabel(pointValue);
        labGwk.setText(
            Long.toString(LinearReferencingHelper.getRouteGwkFromStationBean(pointBean)));

        if (isEditable()) {
          setValueToFeature(pointValue);
          setValueToSpinner(pointValue);

          // badgeom feature und button nur falls die realgeom weiter als 1 von der route entfernt
          // ist
          final double distance =
              LinearReferencingHelper.distanceOfStationGeomToRouteGeomFromStationBean(pointBean);
          if (distance > 1) {
            setBadGeomFeature(
                createBadGeomFeature(
                    LinearReferencingHelper.getPointGeometryFromStationBean(pointBean)));
          } else {
            setBadGeomFeature(null);
          }

          // die aktuelle cidsBean als listener bei stationtomapregistry anmelden
          FEATURE_REGISTRY.addListener(pointBean, getMapRegistryListener());

          // feature erzeugen und auf der Karte anzeigen lassen
          final LinearReferencedPointFeature pointFeature =
              FEATURE_REGISTRY.addStationFeature(pointBean);
          if (ico != null) {
            pointFeature.setIconImage(ico);
          }
          pointFeature.setEditable(true);

          // spinner auf intervall der neuen route anpassen
          ((SpinnerNumberModel) getValueSpinner().getModel())
              .setMaximum(Math.ceil(pointFeature.getLineGeometry().getLength()));

          // auf änderungen des features horchen
          pointFeature.addListener(getFeatureListener());

          firePointCreated();
        }
        updateBadGeomButton();
        updateSplitButton();

        // editier panel anzeigen
        showCard(Card.edit);

        // fertig intialisiert
        setInited(true);
      } else {
        if (isEditable()) {
          showCard(Card.add);
        } else {
          setErrorMsg("keine Station zugewiesen");
          showCard(Card.error);
        }
      }
    }
  }
 /**
  * DOCUMENT ME!
  *
  * @return DOCUMENT ME!
  */
 public LinearReferencedPointFeature getFeature() {
   return (LinearReferencedPointFeature) FEATURE_REGISTRY.getFeature(getCidsBean());
 }
 /** DOCUMENT ME! */
 private void updateSplitButton() {
   if (getCidsBean() != null) {
     getSplitButton().setVisible(FEATURE_REGISTRY.getCounter(getCidsBean()) > 1);
   }
 }