package controller.subcontroller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.IOException; import java.util.Observable; import java.util.logging.Level; import java.util.logging.Logger; import config.Constants; import controller.interfaces.ICommand; import logging.LogUtil; import main.MP3ToolKitMain; import manager.CollectorManager; import model.PreferencesModel; import model.util.ChooserUtil; import model.util.PathUtil; import model.util.WindowUtils; import view.subview.PreferencesView; public class PreferencesController extends Observable implements ActionListener { /** * the logger */ private final Logger logger = Logger.getLogger(this.getClass().getName()); /** * the window */ private PreferencesView window; /** * the model */ private PreferencesModel model; /** * the close command which is called after closing the window */ private ICommand closeCommand; /** * Constructor */ public PreferencesController() { this.model = new PreferencesModel(); } /** * sets the close command * * @param cmd * the command */ public void setCloseCommand(ICommand cmd) { this.closeCommand = cmd; } /** * creates the window */ public void createWindow() { window = new PreferencesView(); window.init(); window.setVisible(true); window.setActionListener(this); logger.log(Level.FINER, PathUtil.getJarPath(MP3ToolKitMain.class)); window.setCollectors(model.getCollectors(CollectorManager.ID3DATA_COLLECTOR), CollectorManager.ID3DATA_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.COVER_COLLECTOR), CollectorManager.COVER_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.LYRICS_COLLECTOR), CollectorManager.LYRICS_COLLECTOR); try { model.readMasks(); window.setMasks(model.getMasks()); } catch (IOException e) { logger.log(Level.SEVERE, "Error while reading mask files:\n" + LogUtil.getStackTrace(e), e); window.showMessage("ReadMasksError"); } this.window.setLocation(WindowUtils.getCenteredWindowCoordinates(this.window)); window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { closeWindow(); } }); } /** * closes the window */ public void closeWindow() { window.dispose(); closeCommand.call(); } /* * (non-Javadoc) * * @see * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("openPlayerB")) openPlayerButtonPressed(); else if (e.getActionCommand().equals("id3dataUpB")) id3dataUpBPressed(); else if (e.getActionCommand().equals("id3dataDownB")) id3dataDownBPressed(); else if (e.getActionCommand().equals("id3dataEnableB")) id3dataEnableBPressed(); else if (e.getActionCommand().equals("coverUpB")) coverUpBPressed(); else if (e.getActionCommand().equals("coverDownB")) coverDownBPressed(); else if (e.getActionCommand().equals("coverEnableB")) coverEnableBPressed(); else if (e.getActionCommand().equals("lyricsUpB")) lyricsUpBPressed(); else if (e.getActionCommand().equals("lyricsDownB")) lyricsDownBPressed(); else if (e.getActionCommand().equals("lyricsEnableB")) lyricsEnableBPressed(); else if (e.getActionCommand().equals("addMaskB")) addMaskButtonPressed(); else if (e.getActionCommand().equals("deleteMaskB")) deleteMasksButtonPressed(); else if (e.getActionCommand().equals("okB")) okBPressed(); else if (e.getActionCommand().equals("cancelB")) cancelBPressed(); else if (e.getActionCommand().equals("setId3v1TagChB")) setId3v1TagPressed(); else if (e.getActionCommand().equals("deleteId3v1TagChB")) deleteId3v1TagPressed(); } /** * opens the filechooser for the custom player */ private void openPlayerButtonPressed() { logger.log(Level.FINER, "open player button pressed."); File f = ChooserUtil.openFile(window, null, new File(Constants.DEFAULT_DIR)); if (f == null) return; window.setPlayerCmd(f.getAbsolutePath()); } /** * id3 up button pressed */ private void id3dataUpBPressed() { logger.log(Level.FINER, "track up button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.ID3DATA_COLLECTOR); if (index == -1) return; int newIndex = model.shiftUp(index, CollectorManager.ID3DATA_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.ID3DATA_COLLECTOR), CollectorManager.ID3DATA_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.ID3DATA_COLLECTOR); } /** * id3 down button pressed */ private void id3dataDownBPressed() { logger.log(Level.FINER, "track down button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.ID3DATA_COLLECTOR); if (index == -1) return; int newIndex = model.shiftDown(index, CollectorManager.ID3DATA_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.ID3DATA_COLLECTOR), CollectorManager.ID3DATA_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.ID3DATA_COLLECTOR); } /** * id3 dis/enable button pressed */ private void id3dataEnableBPressed() { logger.log(Level.FINER, "track enable button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.ID3DATA_COLLECTOR); if (index == -1) return; setCollectorEnabled(index, CollectorManager.ID3DATA_COLLECTOR); } /** * cover up button pressed */ private void coverUpBPressed() { logger.log(Level.FINER, "album up button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.COVER_COLLECTOR); if (index == -1) return; int newIndex = model.shiftUp(index, CollectorManager.COVER_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.COVER_COLLECTOR), CollectorManager.COVER_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.COVER_COLLECTOR); } /** * cover down button pressed */ private void coverDownBPressed() { logger.log(Level.FINER, "album down button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.COVER_COLLECTOR); if (index == -1) return; int newIndex = model.shiftDown(index, CollectorManager.COVER_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.COVER_COLLECTOR), CollectorManager.COVER_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.COVER_COLLECTOR); } /** * dis/enable button pressed */ private void coverEnableBPressed() { logger.log(Level.FINER, "album enable button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.COVER_COLLECTOR); if (index == -1) return; setCollectorEnabled(index, CollectorManager.COVER_COLLECTOR); } /** * lyrics up button pressed */ private void lyricsUpBPressed() { logger.log(Level.FINER, "lyrics up button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.LYRICS_COLLECTOR); if (index == -1) return; int newIndex = model.shiftUp(index, CollectorManager.LYRICS_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.LYRICS_COLLECTOR), CollectorManager.LYRICS_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.LYRICS_COLLECTOR); } /** * lyrics down button pressed */ private void lyricsDownBPressed() { logger.log(Level.FINER, "lyrics down button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.LYRICS_COLLECTOR); if (index == -1) return; int newIndex = model.shiftDown(index, CollectorManager.LYRICS_COLLECTOR); window.setCollectors(model.getCollectors(CollectorManager.LYRICS_COLLECTOR), CollectorManager.LYRICS_COLLECTOR); window.setSelectedCollectorIndex(newIndex, CollectorManager.LYRICS_COLLECTOR); } /** * dis/enable button pressed */ private void lyricsEnableBPressed() { logger.log(Level.FINER, "lyrics enable button pressed."); int index = window.getSelectedCollectorIndex(CollectorManager.LYRICS_COLLECTOR); if (index == -1) return; setCollectorEnabled(index, CollectorManager.LYRICS_COLLECTOR); } /** * add mask button pressed */ private void addMaskButtonPressed() { logger.log(Level.FINER, "add mask pressed."); String mask = window.getMaskTF(); if (model.addMask(mask)) { window.setMasks(model.getMasks()); window.setMaskTF(""); } } /** * delete mask button pressed */ private void deleteMasksButtonPressed() { logger.log(Level.FINER, "delete mask pressed."); int index = window.getSelectedMaskIndex(); if (index == -1) return; model.deleteMask(index); window.setMasks(model.getMasks()); } /** * ok button pressed */ private void okBPressed() { logger.log(Level.FINER, "ok button pressed."); try { window.saveConfig(); model.saveConfig(); closeWindow(); } catch (IOException e) { logger.log(Level.FINER, "Error while writing masks file:\n" + LogUtil.getStackTrace(e), e); window.showMessage("WriteMasksError"); } } /** * cancel button pressed */ private void cancelBPressed() { logger.log(Level.FINER, "cancel button pressed."); closeWindow(); } /** * set id3v1 tag button pressed */ private void setId3v1TagPressed() { logger.log(Level.FINER, "Changed id3v1 tag option. delete: " + window.isDeleteId3v1Tag() + " set: " + window.isSetId3v1Tag()); if (window.isSetId3v1Tag()) { window.setDeleteId3v1Tag(false); } } /** * delete id3v1 tag button pressed */ private void deleteId3v1TagPressed() { logger.log(Level.FINER, "Changed id3v1 tag option. delete: " + window.isDeleteId3v1Tag() + " set: " + window.isSetId3v1Tag()); if (window.isDeleteId3v1Tag()) { window.setSetId3v1Tag(false); } } /** * sets the selected collector dis/enabled * * @param index * index of the selected collector * @param type * collector ID */ private void setCollectorEnabled(int index, int type) { // check if the collector is going to be disabled or enabled, if // disabled check if it is the last one if (model.isCollectorEnabled(index, type)) { if (model.isLastCollector(type)) { window.showMessage("oneCollectorNeeded"); return; } } model.changeCollectorState(index, type); window.setCollectors(model.getCollectors(type), type); } }