Package org.freeplane.features.mode

Source Code of org.freeplane.features.mode.AController$ActionSelectorOnPropertyChange

package org.freeplane.features.mode;

import java.util.HashMap;
import java.util.Map;

import org.freeplane.core.resources.IFreeplanePropertyListener;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.AFreeplaneAction;
import org.freeplane.core.ui.SelectableAction;

/**
* Place for common controller things.
*
* @author robert.ladstaetter
*/
public class AController {
  private static class ActionSelectorOnPropertyChange implements IFreeplanePropertyListener, IActionOnChange {
    final String propertyName;
    final AFreeplaneAction action;

    public ActionSelectorOnPropertyChange(final AFreeplaneAction action) {
      super();
      this.action = action;
      propertyName = action.getClass().getAnnotation(SelectableAction.class).checkOnPropertyChange();
    }

    public AFreeplaneAction getAction() {
      return action;
    }

    public void propertyChanged(final String propertyName, final String newValue, final String oldValue) {
      if (this.propertyName.equals(propertyName)) {
        action.setSelected();
      }
    }
  }

  public interface IActionOnChange {
    AFreeplaneAction getAction();
  }

  private final Map<String, AFreeplaneAction> actions = new HashMap<String, AFreeplaneAction>();

  public AController() {
  }

  public void addAction(final AFreeplaneAction value) {
    final String key = value.getKey();
    final AFreeplaneAction old = getActions().put(key, value);
    //String pattern = key.replaceAll("\\.", "\\\\.").replaceAll("/", "\\\\/");      
    //System.out.println("key\t\t" + value.getClass().getSimpleName() + "\t\ts/\\\"" + pattern + "\\\"/\\\"" + value.getClass().getSimpleName() + "\\\"/;");   
    if (old != null && !old.equals(value)) {
      getActions().put(key, old);
      throw new RuntimeException("action " + key + " already registered");
    }
    if (AFreeplaneAction.checkSelectionOnPropertyChange(value)) {
      final ActionSelectorOnPropertyChange listener = new ActionSelectorOnPropertyChange(value);
      ResourceController.getResourceController().addPropertyChangeListener(listener);
    }
  }

  public AFreeplaneAction getAction(final String key) {
    return getActions().get(key);
  }

  protected Map<String, AFreeplaneAction> getActions() {
    return actions;
  }

  public AFreeplaneAction removeAction(final String key) {
    final AFreeplaneAction action = getActions().remove(key);
    if (AFreeplaneAction.checkSelectionOnPropertyChange(action)) {
      ResourceController.getResourceController().removePropertyChangeListener(
          ActionSelectorOnPropertyChange.class, action);
    }
    return action;
  }
}
TOP

Related Classes of org.freeplane.features.mode.AController$ActionSelectorOnPropertyChange

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.