Package com.tulskiy.musique.gui.model

Source Code of com.tulskiy.musique.gui.model.SingleTagFieldModel

/*
* Copyright (c) 2008, 2009, 2010 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.tulskiy.musique.gui.model;

import java.util.LinkedList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.util.Util;

/**
* @author mliauchuk
*/
public class SingleTagFieldModel extends AbstractTableModel implements TagFieldModel {

  private TrackInfoItem trackInfoItem;
  private Track selectedTrack;
  private List<String> oldValues = new LinkedList<String>();
  private List<String> newValues = new LinkedList<String>();

  public SingleTagFieldModel(TrackInfoItem item) {
    this(item, null);
  }

  public SingleTagFieldModel(TrackInfoItem item, Track track) {
    trackInfoItem = item;
    selectedTrack = track;
    trackInfoItem.addState();
    initValues();
    if (getRowCount() == 0) {
      addValue();
    }
  }

  public TrackInfoItem getTrackInfoItem() {
    return trackInfoItem;
  }
 
  public boolean isMultiTrackEditMode() {
    return selectedTrack == null;
  }
 
  private void initValues() {
    oldValues.clear();
    newValues.clear();
    if (isMultiTrackEditMode()) {
      for (Track track : trackInfoItem.getTracks()) {
        oldValues.add(track.getTrackData().getFileName());
        newValues.add(Util.formatFieldValues(trackInfoItem.getState().getValues(track)));
      }
    }
    else {
      FieldValues values = trackInfoItem.getState().getValues(selectedTrack);
      values.setFieldValuesToList(oldValues);
      values.setFieldValuesToList(newValues);
    }
  }
 
  public void addValue() {
    oldValues.add("<new value>");
    newValues.add("");
  }
 
  public void removeValue(int index) {
    oldValues.remove(index);
    newValues.remove(index);
  }
 
  private void updateState() {
    if (isMultiTrackEditMode()) {
      for (int i = 0; i < newValues.size(); i++) {
        Track track = trackInfoItem.getTracks().get(i);
        String oldValue = Util.formatFieldValues(trackInfoItem.getState().getValues(track));
        if (!oldValue.equals(newValues.get(i))) {
          trackInfoItem.getState().setValue(newValues.get(i), track);
        }
      }
    }
    else {     
      if (newValues.isEmpty()) {
        trackInfoItem.getState().setValue("", selectedTrack);
      }
      else {
        trackInfoItem.getState().setValue(newValues.get(0), selectedTrack);
        for (int i = 1; i < newValues.size(); i++) {
          trackInfoItem.getState().addValue(newValues.get(i), selectedTrack);
        }
      }
    }
  }
 
  public void approveState() {
    trackInfoItem.approveState(false);
    initValues();
  }
 
  public void approveModel() {
    updateState();
    approveState();
  }
 
  public void approveModel(String singleValue) {
    if (isMultiTrackEditMode()) {
      trackInfoItem.getState().setValue(singleValue);
    }
    else {
      trackInfoItem.getState().setValue(singleValue, selectedTrack);
    }
    approveState();
  }
 
  public void refreshModel() {
    initValues();
  }
 
  public void rejectModel() {
    trackInfoItem.rejectState();
    initValues();
  }

  @Override
  public int getRowCount() {
    return oldValues.size();
  }

  @Override
  public int getColumnCount() {
    return 2;
  }

  @Override
  public String getValueAt(int rowIndex, int columnIndex) {
    String result = null;

    if (rowIndex > -1 & rowIndex < getRowCount()) {
      result = columnIndex == 0 ? oldValues.get(rowIndex) : newValues.get(rowIndex);
    }
   
    return result;
  }

  @Override
  public String getColumnName(int column) {
    if (isMultiTrackEditMode()) {
      return column == 0 ? "File" : "Value(s)";
    }
    else {
      return column == 0 ? "Original" : "New";
    }
  }

  @Override
  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    newValues.set(rowIndex, (String) aValue);
  }

  @Override
  public boolean isCellEditable(int rowIndex, int columnIndex) {
    return columnIndex == 1;
  }
}
TOP

Related Classes of com.tulskiy.musique.gui.model.SingleTagFieldModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.