package clips.administrator.certificate.tagList;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.ErrorValue;
import clips.delegate.doctor.certificate.tag.CertTagFactory;
import clips.delegate.doctor.certificate.tag.TagToClass;
import clips.delegate.doctor.certificate.tag.interfaces.TypeDate;
import clips.delegate.doctor.certificate.tag.interfaces.TypeMultiSelectable;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectable;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectableRO;
import clips.delegate.doctor.certificate.tag.interfaces.TypeSelectableEdit;
import clips.delegate.doctor.certificate.tag.interfaces.TypeTextArea;
import clips.delegate.doctor.certificate.tag.interfaces.TypeTextField;
import java.lang.reflect.Method;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class TableModelTagList extends AbstractTableModel {
public static final int COL_NAME = 0;
public static final int COL_TYPE = 1;
public static final int COL_VALUE = 2;
public static final int COL_DESC = 3;
public static final int COL_COUNT = 4;
private ArrayList<String> tagList;
public TableModelTagList() {
super();
this.tagList = new ArrayList<String>(CertTagFactory.getTagSet());
}
@Override
public int getRowCount() {
return tagList.size();
}
@Override
public int getColumnCount() {
return COL_COUNT;
}
@Override
public String getColumnName(int col) {
switch (col) {
case COL_NAME:
return "Имя тега";
case COL_TYPE:
return "Тип";
case COL_VALUE:
return "Значение";
case COL_DESC:
return "Описание";
default:
throw new IllegalArgumentException("Некорректный номер столбца : " + col);
}
}
@Override
public Object getValueAt(int row, int col) {
switch (col) {
case COL_NAME:
return tagList.get(row);
case COL_TYPE: {
Class classByTag = CertTagFactory.getClassByTag(tagList.get(row));
if (TypeDate.class.isAssignableFrom(classByTag)) {
return "Дата";
} else if (TypeMultiSelectable.class.isAssignableFrom(classByTag)) {
return "Множественный выбор";
} else if (TypeSelectableRO.class.isAssignableFrom(classByTag)) {
return "Одиночный выбор (не редакт.)";
} else if (TypeSelectableEdit.class.isAssignableFrom(classByTag)) {
return "Одиночный выбор cо строкой";
} else if (TypeSelectable.class.isAssignableFrom(classByTag)) {
return "Одиночный выбор";
} else if (TypeTextArea.class.isAssignableFrom(classByTag)) {
return "Текст";
} else if (TypeTextField.class.isAssignableFrom(classByTag)) {
return "Строка";
} else {
throw new IllegalArgumentException("Неизвестный тип тега :" + classByTag);
}
}
case COL_VALUE: {
Class classByTag = CertTagFactory.getClassByTag(tagList.get(row));
try {
Method method = classByTag.getMethod("getValue");
return method.getReturnType().getSimpleName();
} catch (NoSuchMethodException ex) {
return new ErrorValue(new ClipsException("Ошибка в теге", ex));
} catch (SecurityException ex) {
return new ErrorValue(new ClipsException("Ошибка в теге", ex));
}
}
case COL_DESC:
return CertTagFactory.getClassByTag(tagList.get(row)).getAnnotation(TagToClass.class).title();
default:
throw new IllegalArgumentException("Некорректный номер столбца : " + col);
}
}
public String getTagNameAt(int row) {
return tagList.get(row);
}
}