1 /**
2 * Copyright 2008 WebPhotos
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package net.sf.webphotos.gui.util;
17
18 import javax.swing.table.*;
19 import net.sf.webphotos.Album;
20 import net.sf.webphotos.PhotoDTO;
21 import net.sf.webphotos.gui.PainelWebFotos;
22
23 /**
24 * Gera o modelo da tabela de fotos.
25 */
26 public class TableModelFoto extends AbstractTableModel {
27
28 private static final long serialVersionUID = -3797898104363613961L;
29 private static final TableModelFoto instancia = new TableModelFoto();
30 private Object[][] fotoTabela;
31 private String[] fotoColunas;
32
33 private TableModelFoto() {
34 }
35
36 /**
37 * Retorna a instância da própria classe.
38 * @return Retorna um TableModelFoto.
39 */
40 public static TableModelFoto getModel() {
41 return instancia;
42 }
43
44 /**
45 * Armazena os dados de fotos em duas variáveis da classe.
46 * Na variável fotoTabela, as fotos e seus dados específicos.
47 * E na variável fotoColunas somente os dados específicos.
48 */
49 public void update() {
50 fotoTabela = Album.getAlbum().getFotosArray();
51 fotoColunas = Album.getAlbum().getFotosColunas();
52 }
53
54 /**
55 * Recebe um número referente a uma coluna e retorna o valor da coluna através do vetor fotoColunas.
56 * @param column Número referente a coluna.
57 * @return Retorna o valor contido na coluna.
58 */
59 @Override
60 public String getColumnName(int column) {
61 return fotoColunas[column];
62 }
63
64 /**
65 * Retorna o total de colunas, contando o número de posições no vetor fotoColunas.
66 * @return Retorna o total de colunas.
67 */
68 @Override
69 public int getColumnCount() {
70 if (fotoColunas == null) {
71 return 0;
72 }
73 return fotoColunas.length;
74 }
75
76 /**
77 * Retorna o total de linhas, contando o número de posições no vetor fotoTabela.
78 * @return Retorna o total de linhas.
79 */
80 @Override
81 public int getRowCount() {
82 if (fotoTabela == null) {
83 return 0;
84 }
85 return fotoTabela.length;
86 }
87
88 /**
89 * Busca um valor contido na matriz fotoTabela e retorna um Object.
90 * Recebe como parâmetro um índice de linha e um de coluna para efetuar a procura.
91 * @param line Número da linha.
92 * @param column Número da coluna.
93 * @return Retorna o valor encontrado em um Object.
94 */
95 @Override
96 public Object getValueAt(int line, int column) {
97 return fotoTabela[line][column];
98 }
99
100 /**
101 * Recebe um valor e os índices da matriz e seta esse valor na matriz fotoTabela.
102 * Checa se a foto possui ID ou nome, depois testa se o valor é de legenda ou crédito e implanta na matriz fotoTabela.
103 * @param value Valor a ser implantado.
104 * @param line Número da linha.
105 * @param column Número da coluna.
106 */
107 @Override
108 public void setValueAt(Object value, int line, int column) {
109 // testar para verificar se fotoID é um número ou um nome de arquivo
110 int fotoID = 0;
111 String nomeFoto = "";
112 try {
113 fotoID = Integer.parseInt(fotoTabela[line][0].toString());
114 } catch (Exception e) {
115 nomeFoto = fotoTabela[line][0].toString();
116 }
117
118 // Qual campo está editando ?
119 if (column == 1) {
120 // usuário está editando coluna legenda
121 // atualiza o modelo
122 fotoTabela[line][column] = value;
123 // atualiza objeto foto
124 if (fotoID > 0) {
125 Album.getAlbum().getFoto(fotoID).setLegenda((String) value);
126 } else {
127 Album.getAlbum().getFoto(nomeFoto).setLegenda((String) value);
128 }
129 // ajusta o texto da legenda
130 PainelWebFotos.getTxtLegenda().setText((String) value);
131 } else if (column == 2) {
132 // usuário está editando coluna crédito (combobox)
133 fotoTabela[line][column] = value;
134 if (fotoID > 0) {
135 Album.getAlbum().getFoto(fotoID).setCreditoNome((String) value);
136 } else {
137 Album.getAlbum().getFoto(nomeFoto).setCreditoNome((String) value);
138 }
139 int indice = PhotoDTO.getLstCreditosIndex((String) value);
140 // soma 1 ao indice, pois o primeiro value é espaço vazio
141 //PainelWebFotos.getLstCreditos().setSelectedIndex(indice + 1);
142 // FIXME : Retornar comportamento original com linha em branco
143 PainelWebFotos.getLstCreditos().setSelectedIndex(indice);
144 }
145 }
146
147 /**
148 * Checa se o número de colunas é maior que zero e retorna <I>true</I>, caso contrário retorna <I>false</I>.
149 * TODO: avaliar a funcionalidade desse método.
150 * @param line Número da linha.
151 * @param column Número da coluna.
152 * @return Retorna um valor lógico.
153 */
154 @Override
155 public boolean isCellEditable(int line, int column) {
156 if (column > 0) {
157 return true;
158 }
159 return false;
160 }
161
162 /**
163 * Retorna a classe do objeto encontrado na matriz fotoTabela.
164 * Busca a partir do valor do número da coluna recebido como parâmetro.
165 * @param column Número da coluna.
166 * @return Retorna uma classe.
167 */
168 @Override
169 public Class<? extends Object> getColumnClass(int column) {
170 return fotoTabela[0][column].getClass();
171 }
172
173 @Override
174 public Object clone() throws CloneNotSupportedException {
175 throw new CloneNotSupportedException("Singleton Object");
176 }
177 }