package bluej.stride.generic;

import bluej.stride.operations.ToggleBooleanProperty;
import bluej.utility.Debug;
import bluej.utility.javafx.FXPlatformRunnable;
import bluej.utility.javafx.FXRunnable;
import threadchecker.OnThread;
import threadchecker.Tag;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ExtensionDescription
{       
public enum ExtensionSource
   {        
      BEFORE, AFTER, INSIDE_FIRST, INSIDE_LATER, MODIFIER, SELECTION;     
      }

   
   
   private final char shortcut;
   
   private final String description;
   
   private final boolean showInCatalogue;
   
   private final List<ExtensionSource> validSources;

   
   private FXPlatformRunnable action;
   
   private ToggleBooleanProperty operation;
   
   private Frame frame;

   
   public ExtensionDescription(char shortcut, String description, FXPlatformRunnable action, boolean showInCatalogue, ExtensionSource firstSrc, ExtensionSource... restSrc)
   {
      this(shortcut, description, showInCatalogue, firstSrc, restSrc);
       
      this.action = action;     
      }

   
   public ExtensionDescription(ToggleBooleanProperty operation, Frame frame, boolean showInCatalogue, ExtensionSource firstSrc, ExtensionSource... restSrc)
   {
      this(operation.getKey(), operation.getLabel(), showInCatalogue, firstSrc, restSrc);
       
      this.operation = operation;
       
      this.frame = frame;     
      }

   
   private ExtensionDescription(char shortcut, String description, boolean showInCatalogue, ExtensionSource firstSrc, ExtensionSource... restSrc)
   {        
      this.shortcut = shortcut;
       
      this.description = description;
       
      this.showInCatalogue = showInCatalogue;
       
      validSources = new ArrayList<>();
      validSources.add(firstSrc);
      validSources.addAll(Arrays.asList(restSrc));     
      }

   
   public char getShortcutKey()
   {        
      return shortcut;     
      }
    
   
   public String getDescription()
   {        
      return description;     
      }

   @OnThread(Tag.FXPlatform)
   
   public void activate()
   {
      if (action != null) {
         action.run();         
         }

      else if (operation != null) {
         operation.activate(frame);         
         }
       

      else {
      Debug.reportError("Action and Operation shouldn't be both null in ExtensionDescription:: " + description);         
      }     
   }

@OnThread(Tag.FXPlatform)
   
public void activate(List<Frame> frames)
   {
   if (operation != null) {
      operation.activate(frames);         
      }
       

   else {
   Debug.reportError("Operation shouldn't be null when calling activate(frames) in ExtensionDescription:: " + description);         
   }     
}

   
public boolean showInCatalogue()
{
return showInCatalogue; 
   }

   
public boolean validFor(ExtensionSource extensionSource)
   {
   return validSources.contains(extensionSource);     
   } 
}
top, use, map, class ExtensionDescription

.   ExtensionDescription
.   ExtensionDescription
.   ExtensionDescription
.   getShortcutKey
.   getDescription
.   activate
.   activate
.   showInCatalogue
.   validFor




121 neLoCode + 0 LoComm