package ru.gazprom.gtnn.minos.models;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.event.EventListenerList;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import com.google.common.base.Preconditions;
import ru.gazprom.gtnn.minos.util.DatabaseConnectionKeeper;
import ru.gazprom.gtnn.minos.util.TableKeeper;
import ru.gedr.util.tuple.Pair;
import ru.gedr.util.tuple.Unit;
public abstract class BasicModel implements TreeModel{
public static java.util.Date endTime;
static {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
endTime = (java.util.Date) df.parse("9999-12-31");
} catch(ParseException e) {
e.printStackTrace();
endTime = new java.util.Date();
}
}
public BasicModel(DatabaseConnectionKeeper kdb) {
super();
this.kdb = kdb;
listenerList = new EventListenerList();
}
public DatabaseConnectionKeeper getDatabaseConnectionKeeper() {
return kdb;
}
public void reload() { }
public void add(Object obj, TreePath path) throws Exception{}
public <T, P> List<T> loadChildIDs(String sql, String pattern, P parentID) {
List<T> lst = Collections.emptyList();
try {
String request = kdb.makeSQLString(sql, pattern, parentID.toString());
Preconditions.checkNotNull(request, "BasicModel.loadChildIDs() : makeSQLString return null");
TableKeeper tk = kdb.selectRows(request);
if(tk == null)
return lst;
Preconditions.checkState(tk.getColumnCount() == 1,
"BasicModel.loadChildIDs() : selectRows() return incorrect column count (" + tk.getColumnCount() + ")");
if(tk.getRowCount() > 0) {
lst = new ArrayList<>();
for(int i = 1; i <= tk.getRowCount(); i++) {
@SuppressWarnings("unchecked")
T val = (T)tk.getValue(i, 1);
lst.add(val);
}
}
} catch(Exception e) {
e.printStackTrace();
lst = Collections.emptyList();
}
return lst;
}
protected <P> List<Object> loadChildrenIDs(String sql, String pattern, P parentID) {
List<Object> lst = Collections.emptyList();
try {
String request = kdb.makeSQLString(sql, pattern, parentID.toString());
Preconditions.checkNotNull(request, "BasicModel.loadChildrenIDs() : makeSQLString return null");
TableKeeper tk = kdb.selectRows(request);
if(tk == null)
return lst;
if(tk.getRowCount() > 0) {
lst = new ArrayList<>();
for(int i = 1; i <= tk.getRowCount(); i++) {
switch( tk.getColumnCount() ) {
case 1:
lst.add( new Unit<Object>(tk.getValue(i, 1)) );
break;
case 2:
lst.add( new Pair<Object, Object>(tk.getValue(i, 1), tk.getValue(i, 2)) );
break;
default:
// not supported more dimension
}
}
}
} catch(Exception e) {
e.printStackTrace();
lst = Collections.emptyList();
}
return lst;
}
/**
* Adds a listener for the TreeModelEvent posted after the tree changes.
*
* @see #removeTreeModelListener
* @param l the listener to add
*/
public void addTreeModelListener(TreeModelListener l) {
listenerList.add(TreeModelListener.class, l);
}
/**
* Removes a listener previously added with <B>addTreeModelListener()</B>.
*
* @see #addTreeModelListener
* @param l the listener to remove
*/
public void removeTreeModelListener(TreeModelListener l) {
listenerList.remove(TreeModelListener.class, l);
}
protected DatabaseConnectionKeeper kdb;
protected EventListenerList listenerList;
}