Gridarta Editor
TableModel.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.dialog.findarchetypes;
21 
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.Comparator;
25 import java.util.List;
26 import javax.swing.table.AbstractTableModel;
32 import net.sf.japi.swing.action.ActionBuilder;
33 import net.sf.japi.swing.action.ActionBuilderFactory;
34 import org.jetbrains.annotations.NotNull;
35 import org.jetbrains.annotations.Nullable;
36 
48 public class TableModel<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractTableModel {
49 
53  private static final long serialVersionUID = 1L;
54 
58  @NotNull
59  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
60 
64  @NotNull
65  private static final String @NotNull [] COLUMN_NAME = { ActionBuilderUtils.getString(ACTION_BUILDER, "findArchetypesColumnName"), ActionBuilderUtils.getString(ACTION_BUILDER, "findArchetypesColumnArch"), ActionBuilderUtils.getString(ACTION_BUILDER, "findArchetypesColumnType"), ActionBuilderUtils.getString(ACTION_BUILDER, "findArchetypesColumnFolder"), };
66 
70  @NotNull
72 
77  @NotNull
78  private final List<R> archetypes = new ArrayList<>();
79 
84  @NotNull
85  private Integer @Nullable [] sorting;
86 
92  @NotNull
93  private final Comparator<Integer> comparator = new Comparator<Integer>() {
94 
95  @Override
96  public int compare(final Integer o1, final Integer o2) {
97  final Archetype<G, A, R> archetype1 = archetypes.get(o1);
98  final Archetype<G, A, R> archetype2 = archetypes.get(o2);
99 
100  final int cmpBestName = archetype1.getBestName().compareToIgnoreCase(archetype2.getBestName());
101  if (cmpBestName != 0) {
102  return cmpBestName;
103  }
104 
105  final int cmpArchetypeName = archetype1.getArchetypeName().compareToIgnoreCase(archetype2.getArchetypeName());
106  if (cmpArchetypeName != 0) {
107  return cmpArchetypeName;
108  }
109 
110  return archetype1.getArchetypeName().compareTo(archetype2.getArchetypeName());
111  }
112 
113  };
114 
120  this.archetypeTypeSet = archetypeTypeSet;
121  }
122 
126  public void clear() {
127  archetypes.clear();
128  sorting = null;
129  }
130 
135  public void add(@NotNull final R archetype) {
136  archetypes.add(archetype);
137  }
138 
144  @NotNull
145  public R get(final int index) {
146  return archetypes.get(sorting[index]);
147  }
148 
149  @Override
150  public int getColumnCount() {
151  return 4;
152  }
153 
154  @Override
155  public int getRowCount() {
156  return archetypes.size();
157  }
158 
159  @NotNull
160  @Override
161  public Object getValueAt(final int rowIndex, final int columnIndex) {
162  final Archetype<G, A, R> archetype = archetypes.get(sorting[rowIndex]);
163  switch (columnIndex) {
164  case 0:
165  return archetype.getBestName();
166 
167  case 1:
168  return archetype.getArchetypeName();
169 
170  case 2:
171  return archetypeTypeSet.getDisplayName(archetype);
172 
173  case 3:
174  return archetype.getEditorFolder();
175  }
176 
177  throw new IllegalArgumentException("invalid column index: " + columnIndex);
178  }
179 
180  @NotNull
181  @Override
182  public String getColumnName(final int column) {
183  try {
184  return COLUMN_NAME[column];
185  } catch (final ArrayIndexOutOfBoundsException ignored) {
186  return super.getColumnName(column);
187  }
188  }
189 
193  public void sortTable() {
194  sorting = new Integer[archetypes.size()];
195  for (int i = 0; i < sorting.length; i++) {
196  sorting[i] = i;
197  }
198 
199  Arrays.sort(sorting, comparator);
200  }
201 
208  public void finishUpdate() {
209  if (sorting == null && !archetypes.isEmpty()) {
210  throw new IllegalStateException("archetypes are not sorted");
211  }
212 
213  fireTableDataChanged();
214  }
215 
222  public int findTableIndex(@Nullable final R archetype) {
223  if (archetype != null) {
224  final int archetypeIndex = archetypes.indexOf(archetype);
225  if (archetypeIndex != -1) {
226  for (final Integer index : sorting) {
227  if (archetypeIndex == sorting[index]) {
228  return index;
229  }
230  }
231  }
232  }
233 
234  if (!archetypes.isEmpty()) {
235  return 0;
236  }
237 
238  return -1;
239  }
240 
241 }
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: TableModel.java:59
net.sf.gridarta.model.archetypetype
Definition: AbstractArchetypeAttributeInvSpell.java:20
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.finishUpdate
void finishUpdate()
Definition: TableModel.java:208
net.sf.gridarta.model.archetype.Archetype.getArchetypeName
String getArchetypeName()
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.getValueAt
Object getValueAt(final int rowIndex, final int columnIndex)
Definition: TableModel.java:161
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.sorting
Integer[] sorting
Definition: TableModel.java:85
net.sf.gridarta
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.archetypeTypeSet
final ArchetypeTypeSet archetypeTypeSet
Definition: TableModel.java:71
net.sf.gridarta.model.archetypetype.ArchetypeTypeSet.getDisplayName
String getDisplayName(@NotNull final BaseObject<?, ?, ?, ?> baseObject)
Definition: ArchetypeTypeSet.java:263
net.sf
net.sf.gridarta.model.archetype.Archetype.getEditorFolder
String getEditorFolder()
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.getColumnCount
int getColumnCount()
Definition: TableModel.java:150
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.getRowCount
int getRowCount()
Definition: TableModel.java:155
net.sf.gridarta.model.baseobject.BaseObject.getBestName
String getBestName()
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.archetypes
final List< R > archetypes
Definition: TableModel.java:78
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.serialVersionUID
static final long serialVersionUID
Definition: TableModel.java:53
net.sf.gridarta.model.archetypetype.ArchetypeTypeSet
Definition: ArchetypeTypeSet.java:40
net.sf.gridarta.gui.dialog.findarchetypes.TableModel
Definition: TableModel.java:48
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.TableModel
TableModel(@NotNull final ArchetypeTypeSet archetypeTypeSet)
Definition: TableModel.java:119
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.findTableIndex
int findTableIndex(@Nullable final R archetype)
Definition: TableModel.java:222
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.sortTable
void sortTable()
Definition: TableModel.java:193
net.sf.gridarta.utils.ActionBuilderUtils.getString
static String getString(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final String defaultValue)
Definition: ActionBuilderUtils.java:71
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.clear
void clear()
Definition: TableModel.java:126
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.add
void add(@NotNull final R archetype)
Definition: TableModel.java:135
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.comparator
final Comparator< Integer > comparator
Definition: TableModel.java:93
net.sf.gridarta.utils.ActionBuilderUtils
Definition: ActionBuilderUtils.java:31
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.getColumnName
String getColumnName(final int column)
Definition: TableModel.java:182
net.sf.gridarta.gui.dialog.findarchetypes.TableModel.COLUMN_NAME
static final String[] COLUMN_NAME
Definition: TableModel.java:65