// 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/templates/Templates.java
// public interface Templates extends WithPreferences {
// 
//     List<Template> getTemplates();
// 
//     void setTemplates(List<Template> templates);
// 
//     void save() throws BackingStoreException;
// 
//     List<TemplateKind> getTemplateKinds();
// 
//     Charset[] getSupportedCharsets();
// }
// 
// Path: src/main/java/comeon/templates/TemplatesChangedEvent.java
// public final class TemplatesChangedEvent {
//     private final List<Template> templates;
// 
//     public TemplatesChangedEvent(final List<Template> templates) {
//         this.templates = Collections.unmodifiableList(templates);
//     }
// 
//     public List<Template> getTemplates() {
//         return templates;
//     }
// }
// 
// Path: src/main/java/comeon/ui/add/AddMediaDialog.java
// public final class AddMediaDialog extends JOptionPane {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private static final ImageIcon ICON = new ImageIcon(Resources.getResource("comeon/ui/addmedia_huge.png"));
// 
//     private final AddModel model;
// 
//     private final AddController controller;
// 
//     private final JDialog dialog;
// 
//     private final AddMediaPanel mediaPanel;
// 
//     public AddMediaDialog(final Templates templates) {
//         this(templates, new File[0]);
//     }
// 
//     public AddMediaDialog(final Templates templates, final File[] preselectedFiles) {
//         super(null, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, ICON);
//         this.controller = new AddController(templates);
//         this.model = new AddModel();
//         this.controller.registerModel(model);
//         this.mediaPanel = new AddMediaPanel(controller);
//         this.controller.registerView(mediaPanel);
//         this.setMessage(this.mediaPanel);
//         this.dialog = this.createDialog(UI.findInstance(), UI.BUNDLE.getString("action.addmedia.title"));
//         this.dialog.setIconImages(UI.ICON_IMAGES);
//         this.model.setMediaFiles(preselectedFiles);
//     }
// 
//     public int showDialog() {
//         this.dialog.setVisible(true);
//         return (Integer) this.getValue();
//     }
// 
//     public AddModel getModel() {
//         return model;
//     }
// }
// 
// Path: src/main/java/comeon/ui/add/AdderWorker.java
// public class AdderWorker extends CursorChangingWorker {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(AdderWorker.class);
// 
//     private final AddModel model;
// 
//     private final Core core;
// 
//     public AdderWorker(final AddModel model, final Core core) {
//         this.model = model;
//         this.core = core;
//     }
// 
//     @Override
//     protected Void doInBackground() throws Exception {
//         model.getTemplate().load();
//         final File[] files = model.getMediaFiles();
//         if (files.length > 0) {
//             core.addMedia(files, model.getTemplate(), model.getExternalMetadataSource());
//         }
//         return null;
//     }
// 
//     @Override
//     protected void done() {
//         super.done();
//         try {
//             super.get();
//         } catch (final ExecutionException e) {
//             LOGGER.warn("Adding media failed", e);
//             final Window window = UI.findInstance();
//             JOptionPane.showMessageDialog(
//                     window,
//                     MessageFormat.format(UI.BUNDLE.getString("error.addmedia.failed"), e.getCause().getLocalizedMessage()),
//                     UI.BUNDLE.getString("error.generic.title"),
//                     JOptionPane.ERROR_MESSAGE);
//         } catch (final InterruptedException e) {
//             Thread.interrupted();
//         }
//     }
// }


import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import comeon.core.Core;
import comeon.templates.Templates;
import comeon.templates.TemplatesChangedEvent;
import comeon.ui.add.AddMediaDialog;
import comeon.ui.add.AdderWorker;
import javax.swing.*;
import java.awt.event.ActionEvent;
package comeon.ui.actions;



@Singleton
public final class AddMediaAction extends BaseAction {

    private static final long serialVersionUID = 1L;

    private final Templates templates;

    private final Core core;

    @Inject
    public AddMediaAction(final Templates templates, final Core core) {
        super("addmedia");
// 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/templates/Templates.java
// public interface Templates extends WithPreferences {
// 
//     List<Template> getTemplates();
// 
//     void setTemplates(List<Template> templates);
// 
//     void save() throws BackingStoreException;
// 
//     List<TemplateKind> getTemplateKinds();
// 
//     Charset[] getSupportedCharsets();
// }
// 
// Path: src/main/java/comeon/templates/TemplatesChangedEvent.java
// public final class TemplatesChangedEvent {
//     private final List<Template> templates;
// 
//     public TemplatesChangedEvent(final List<Template> templates) {
//         this.templates = Collections.unmodifiableList(templates);
//     }
// 
//     public List<Template> getTemplates() {
//         return templates;
//     }
// }
// 
// Path: src/main/java/comeon/ui/add/AddMediaDialog.java
// public final class AddMediaDialog extends JOptionPane {
// 
//     private static final long serialVersionUID = 1L;
// 
//     private static final ImageIcon ICON = new ImageIcon(Resources.getResource("comeon/ui/addmedia_huge.png"));
// 
//     private final AddModel model;
// 
//     private final AddController controller;
// 
//     private final JDialog dialog;
// 
//     private final AddMediaPanel mediaPanel;
// 
//     public AddMediaDialog(final Templates templates) {
//         this(templates, new File[0]);
//     }
// 
//     public AddMediaDialog(final Templates templates, final File[] preselectedFiles) {
//         super(null, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION, ICON);
//         this.controller = new AddController(templates);
//         this.model = new AddModel();
//         this.controller.registerModel(model);
//         this.mediaPanel = new AddMediaPanel(controller);
//         this.controller.registerView(mediaPanel);
//         this.setMessage(this.mediaPanel);
//         this.dialog = this.createDialog(UI.findInstance(), UI.BUNDLE.getString("action.addmedia.title"));
//         this.dialog.setIconImages(UI.ICON_IMAGES);
//         this.model.setMediaFiles(preselectedFiles);
//     }
// 
//     public int showDialog() {
//         this.dialog.setVisible(true);
//         return (Integer) this.getValue();
//     }
// 
//     public AddModel getModel() {
//         return model;
//     }
// }
// 
// Path: src/main/java/comeon/ui/add/AdderWorker.java
// public class AdderWorker extends CursorChangingWorker {
// 
//     private static final Logger LOGGER = LoggerFactory.getLogger(AdderWorker.class);
// 
//     private final AddModel model;
// 
//     private final Core core;
// 
//     public AdderWorker(final AddModel model, final Core core) {
//         this.model = model;
//         this.core = core;
//     }
// 
//     @Override
//     protected Void doInBackground() throws Exception {
//         model.getTemplate().load();
//         final File[] files = model.getMediaFiles();
//         if (files.length > 0) {
//             core.addMedia(files, model.getTemplate(), model.getExternalMetadataSource());
//         }
//         return null;
//     }
// 
//     @Override
//     protected void done() {
//         super.done();
//         try {
//             super.get();
//         } catch (final ExecutionException e) {
//             LOGGER.warn("Adding media failed", e);
//             final Window window = UI.findInstance();
//             JOptionPane.showMessageDialog(
//                     window,
//                     MessageFormat.format(UI.BUNDLE.getString("error.addmedia.failed"), e.getCause().getLocalizedMessage()),
//                     UI.BUNDLE.getString("error.generic.title"),
//                     JOptionPane.ERROR_MESSAGE);
//         } catch (final InterruptedException e) {
//             Thread.interrupted();
//         }
//     }
// }


// Path: src/main/java/comeon/ui/actions/AddMediaAction.java
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import comeon.core.Core;
import comeon.templates.Templates;
import comeon.templates.TemplatesChangedEvent;
import comeon.ui.add.AddMediaDialog;
import comeon.ui.add.AdderWorker;
import javax.swing.*;
import java.awt.event.ActionEvent;

package comeon.ui.actions;



@Singleton
public final class AddMediaAction extends BaseAction {

    private static final long serialVersionUID = 1L;

    private final Templates templates;

    private final Core core;

    @Inject
    public AddMediaAction(final Templates templates, final Core core) {
        super("addmedia");
        this.templates = templates;