// Path: src/main/java/comeon/core/Core.java
// public interface Core {
// 
//     String EXTERNAL_METADATA_KEY = "external";
// 
//     String[] PICTURE_EXTENSIONS = { "jpg", "jpeg" };
// 
//     String[] AUDIO_EXTENSIONS = { "ogg", "flac", "wav" };
// 
//     void addMedia(final File[] files, final Template defautTemplate, final ExternalMetadataSource<?> externalMetadataSource) throws IOException;
// 
//     void removeMedia(Media media);
// 
//     void removeAllMedia();
// 
//     Set<Media> getMedia();
// 
//     int countMediaToBeUploaded();
// 
//     void uploadMedia();
// 
//     void abort();
// }
// 
// Path: src/main/java/comeon/core/events/MediaAddedEvent.java
// public final class MediaAddedEvent {
//     private final MediaUploadBatch batch;
// 
//     public MediaAddedEvent(final MediaUploadBatch batch) {
//         this.batch = batch;
//     }
// 
//     public MediaUploadBatch getBatch() {
//         return batch;
//     }
// }
// 
// Path: src/main/java/comeon/core/events/MediaRemovedEvent.java
// public final class MediaRemovedEvent {
//     private final List<Media> media;
// 
//     public MediaRemovedEvent(final Media media) {
//         this.media = Collections.singletonList(media);
//     }
// 
//     public MediaRemovedEvent(final List<Media> media) {
//         this.media = new ArrayList<>(media);
//     }
// 
//     public List<Media> getMedia() {
//         return Collections.unmodifiableList(media);
//     }
// }


import com.google.common.eventbus.Subscribe;
import comeon.core.Core;
import comeon.core.events.MediaAddedEvent;
import comeon.core.events.MediaRemovedEvent;
import javax.swing.*;
package comeon.ui.actions;



abstract class MediaBaseAction extends BaseAction {

    protected final Core core;

    protected MediaBaseAction(final String key, final Core core) {
        super(key);
        this.core = core;
    }

// Path: src/main/java/comeon/core/Core.java
// public interface Core {
// 
//     String EXTERNAL_METADATA_KEY = "external";
// 
//     String[] PICTURE_EXTENSIONS = { "jpg", "jpeg" };
// 
//     String[] AUDIO_EXTENSIONS = { "ogg", "flac", "wav" };
// 
//     void addMedia(final File[] files, final Template defautTemplate, final ExternalMetadataSource<?> externalMetadataSource) throws IOException;
// 
//     void removeMedia(Media media);
// 
//     void removeAllMedia();
// 
//     Set<Media> getMedia();
// 
//     int countMediaToBeUploaded();
// 
//     void uploadMedia();
// 
//     void abort();
// }
// 
// Path: src/main/java/comeon/core/events/MediaAddedEvent.java
// public final class MediaAddedEvent {
//     private final MediaUploadBatch batch;
// 
//     public MediaAddedEvent(final MediaUploadBatch batch) {
//         this.batch = batch;
//     }
// 
//     public MediaUploadBatch getBatch() {
//         return batch;
//     }
// }
// 
// Path: src/main/java/comeon/core/events/MediaRemovedEvent.java
// public final class MediaRemovedEvent {
//     private final List<Media> media;
// 
//     public MediaRemovedEvent(final Media media) {
//         this.media = Collections.singletonList(media);
//     }
// 
//     public MediaRemovedEvent(final List<Media> media) {
//         this.media = new ArrayList<>(media);
//     }
// 
//     public List<Media> getMedia() {
//         return Collections.unmodifiableList(media);
//     }
// }


// Path: src/main/java/comeon/ui/actions/MediaBaseAction.java
import com.google.common.eventbus.Subscribe;
import comeon.core.Core;
import comeon.core.events.MediaAddedEvent;
import comeon.core.events.MediaRemovedEvent;
import javax.swing.*;

package comeon.ui.actions;



abstract class MediaBaseAction extends BaseAction {

    protected final Core core;

    protected MediaBaseAction(final String key, final Core core) {
        super(key);
        this.core = core;
    }

    protected MediaBaseAction(final String key, final KeyStroke accelerator, final Core core) {