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.IOException; import java.util.List; import java.util.Observable; import java.util.logging.Level; import java.util.logging.Logger; import model.ChangeImageDataModel; import model.structure.ID3ImageData; import model.util.Util; import model.util.WindowUtils; import view.subview.id3.ChangeImageDataView; import com.cf.structures.DataDouble; import controller.interfaces.ICmdChangeImage; public class ChangeImageDataController extends Observable implements ActionListener { /** * the logger */ private final Logger logger = Logger.getLogger(this.getClass().getName()); /** * the model */ private ChangeImageDataModel model; /** * the window */ private ChangeImageDataView window; /** * the close command which is called after closing the window */ private ICmdChangeImage closeCommand; /** * Constructor */ public ChangeImageDataController() { model = new ChangeImageDataModel(); } /** * sets the close command * * @param cmd * the command */ public void setCloseCommand(ICmdChangeImage cmd) { this.closeCommand = cmd; } /** * creates the window * * @param data * the data list which maps old data to new data */ public void createWindow(List<DataDouble<ID3ImageData, ID3ImageData>> data) { model.setIndex(-1); model.setImages(data); if (model.isDone()) return; window = new ChangeImageDataView(); window.init(); window.setVisible(true); window.setActionListener(this); this.window.setLocation(WindowUtils.getCenteredWindowCoordinates(this.window)); window.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { closeWindow(null); } }); Util.sleep(300); nextButtonPressed(); } /** * close window * * @param data * the new image data which will be given to the id3 controller, null if window is just closed */ public void closeWindow(List<ID3ImageData> data) { window.dispose(); closeCommand.call(data); } /* * (non-Javadoc) * * @see * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("nextTagB")) nextButtonPressed(); } /** * next button pressed */ private void nextButtonPressed() { // save data logger.log(Level.FINER, "next button pressed."); model.createNewImage(window.getImageChB()); model.incrementIndex(); if (model.isDone()) { List<ID3ImageData> data = model.getNewImages(); model.setIndex(-1); closeWindow(data); return; } if (window.isRepeatSelected()) { nextButtonPressed(); return; } window.setCounter(model.getIndex() + 1, model.getListSize()); try { window.setCurrImage(model.getCurrImage()); window.setNewImage(model.getNewImage()); window.setArtist(model.getCurrImage().getArtist(), model.getCurrImage().getAlbum()); } catch (IOException e) { window.showMessage("ImageLoadError"); } } }