20 package net.sf.gridarta.gui.dialog.browsearchetypes;
22 import java.io.BufferedWriter;
24 import java.io.FileOutputStream;
25 import java.io.IOException;
26 import java.io.OutputStream;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
29 import java.util.ArrayList;
30 import java.util.List;
32 import java.util.WeakHashMap;
33 import java.util.regex.Pattern;
34 import javax.swing.table.AbstractTableModel;
40 import net.
sf.japi.swing.action.ActionBuilder;
41 import net.
sf.japi.swing.action.ActionBuilderFactory;
42 import org.jetbrains.annotations.NotNull;
43 import org.jetbrains.annotations.Nullable;
61 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
92 private final List<String>
attributes =
new ArrayList<>();
98 private final List<Class<?>>
classes =
new ArrayList<>();
104 private final Map<String, Class<?>>
classMap =
new WeakHashMap<>();
127 public Object
getValueAt(
final int rowIndex,
final int columnIndex) {
128 if (rowIndex < 0 || rowIndex >=
archetypes.size()) {
132 if (columnIndex == 0) {
135 if (columnIndex == 1) {
138 if (columnIndex >= 0 && columnIndex < 2 +
attributes.size()) {
139 final String attribute =
attributes.get(columnIndex - 2);
141 final Class<?> attributeClass =
classes.get(columnIndex - 2);
142 if (attributeClass == Long.class) {
143 if (value.isEmpty()) {
147 return Long.valueOf(value);
148 }
catch (
final NumberFormatException ignored) {
164 return column >= 0 && column < 2 +
attributes.size() ?
attributes.get(column - 2) : super.getColumnName(column);
169 if (columnIndex < 2) {
172 if (columnIndex >= 0 && columnIndex < 2 +
attributes.size()) {
173 return classes.get(columnIndex - 2);
175 return super.getColumnClass(columnIndex);
185 boolean include =
false;
187 if (!archetype.getAttributeString(attribute).isEmpty()) {
196 fireTableStructureChanged();
216 final Class<?> existingClass =
classMap.get(attribute);
217 if (existingClass !=
null) {
218 return existingClass;
222 final String value = archetype.getAttributeString(attribute);
223 if (value.isEmpty()) {
228 Long.parseLong(value);
229 }
catch (
final NumberFormatException ignored) {
230 classMap.put(attribute, String.class);
234 classMap.put(attribute, Long.class);
245 final String attribute;
249 }
catch (
final IndexOutOfBoundsException ignored) {
262 public R
get(
final int index) {
271 public void saveAsCsv(@NotNull
final File file)
throws IOException {
272 try (OutputStream outputStream =
new FileOutputStream(file)) {
273 try (Writer writer =
new OutputStreamWriter(outputStream)) {
274 try (BufferedWriter bufferedWriter =
new BufferedWriter(writer)) {
277 for (
int column = 0; column < columns; column++) {
279 bufferedWriter.write(
",");
283 bufferedWriter.newLine();
284 for (
int row = 0; row < rows; row++) {
285 for (
int column = 0; column < columns; column++) {
287 bufferedWriter.write(
",");
290 writeCsvValue(bufferedWriter, value ==
null ?
"" : value.toString());
292 bufferedWriter.newLine();
305 private static void writeCsvValue(@NotNull
final Writer writer, @NotNull
final String value)
throws IOException {
310 writer.write(
PATTERN_QUOTE.matcher(value).replaceAll(
"\"\""));