/*
* Copyright (C) 2010-2016 JPEXS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.jpexs.decompiler.flash.gui.proxy;
import com.jpexs.proxy.Replacement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
/**
* List mode for list with SWF urls
*
* @author JPEXS
*/
public class SWFListModel implements ListModel<Replacement> {
private final List<ListDataListener> listeners = new ArrayList<>();
private final List<Replacement> replacements;
/**
* Constructor
*
* @param replacements List of replacements
*/
public SWFListModel(List<Replacement> replacements) {
this.replacements = replacements;
}
/**
* Removes replacement with specified index from the list
*
* @param index Index of replacement to remove
* @return Removed replacement
*/
public Replacement removeURL(int index) {
if (index == -1) {
return null;
}
if (index < replacements.size()) {
Replacement r = replacements.remove(index);
for (ListDataListener l : listeners) {
l.intervalRemoved(new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, index, index));
}
return r;
}
return null;
}
/**
* Called when data in a replacement changed
*
* @param index Index of which SWF changed
*/
public void dataChanged(int index) {
if (index == -1) {
return;
}
for (ListDataListener l : listeners) {
l.contentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, index, index));
}
}
/**
* Returns index of specified replacement
*
* @param replacement Replacement
* @return Index of -1 if not found
*/
public int indexOf(Replacement replacement) {
for (int i = 0; i < replacements.size(); i++) {
if (replacements.get(i) == replacement) {
return i;
}
}
return -1;
}
/**
* Clears url list
*/
public void clear() {
int size = replacements.size();
if (size == 0) {
return;
}
replacements.clear();
for (ListDataListener l : listeners) {
l.intervalRemoved(new ListDataEvent(this, ListDataEvent.INTERVAL_REMOVED, 0, size - 1));
}
}
/**
* Test whether the list contains url
*
* @param url URL to test
* @return True when contains
*/
public boolean contains(String url) {
for (Replacement r : replacements) {
if (r.matches(url)) {
return true;
}
}
return false;
}
/**
* Adds url to the list
*
* @param replacement URL to add
*/
public void addURL(Replacement replacement) {
int sizeBefore = replacements.size();
replacements.add(replacement);
for (ListDataListener l : listeners) {
l.intervalAdded(new ListDataEvent(this, ListDataEvent.INTERVAL_ADDED, sizeBefore, sizeBefore));
}
}
/**
* Returns size of the list
*
* @return Size of the list
*/
@Override
public int getSize() {
return replacements.size();
}
/**
* Returns element on specified index
*
* @param index Index of element
* @return Element on index
*/
@Override
public Replacement getElementAt(int index) {
return replacements.get(index);
}
/**
* Adds add list data listener
*
* @param l list data listener
*/
@Override
public void addListDataListener(ListDataListener l) {
listeners.add(l);
}
/**
* Adds remove list data listener
*
* @param l list data listener
*/
@Override
public void removeListDataListener(ListDataListener l) {
if (listeners.contains(l)) {
listeners.remove(l);
}
}
}