/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
package com.l2jserver.gameserver.datatables;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javolution.util.FastList;
import javolution.util.FastMap;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.item.L2Henna;
import com.l2jserver.gameserver.model.item.instance.L2HennaInstance;
/**
* This class ...
*
* @version $Revision$ $Date$
*/
public class HennaTreeTable
{
private static Logger _log = Logger.getLogger(HennaTreeTable.class.getName());
private Map> _hennaTrees;
private boolean _initialized = true;
public static HennaTreeTable getInstance()
{
return SingletonHolder._instance;
}
private HennaTreeTable()
{
_hennaTrees = new FastMap>();
int classId = 0;
int count = 0;
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("SELECT class_name, id, parent_id FROM class_list ORDER BY id");
ResultSet classlist = statement.executeQuery();
List list;
//int parentClassId;
//L2Henna henna;
PreparedStatement statement2 = con.prepareStatement("SELECT class_id, symbol_id FROM henna_trees where class_id=? ORDER BY symbol_id");
while (classlist.next())
{
list = new FastList();
classId = classlist.getInt("id");
statement2.setInt(1, classId);
ResultSet hennatree = statement2.executeQuery();
statement2.clearParameters();
while (hennatree.next())
{
int id = hennatree.getInt("symbol_id");
//String name = hennatree.getString("name");
L2Henna template = HennaTable.getInstance().getTemplate(id);
if (template == null)
{
hennatree.close();
statement2.close();
classlist.close();
statement.close();
return;
}
L2HennaInstance temp = new L2HennaInstance(template);
temp.setSymbolId(id);
temp.setItemIdDye(template.getDyeId());
temp.setAmountDyeRequire(template.getAmountDyeRequire());
temp.setPrice(template.getPrice());
temp.setStatINT(template.getStatINT());
temp.setStatSTR(template.getStatSTR());
temp.setStatCON(template.getStatCON());
temp.setStatMEM(template.getStatMEM());
temp.setStatDEX(template.getStatDEX());
temp.setStatWIT(template.getStatWIT());
list.add(temp);
}
_hennaTrees.put(ClassId.values()[classId], list);
hennatree.close();
count += list.size();
_log.fine("Henna Tree for Class: " + classId + " has " + list.size() + " Henna Templates.");
}
classlist.close();
statement.close();
statement2.close();
_log.info("HennaTreeTable: Loaded " + count + " Henna Tree Templates.");
}
catch (Exception e)
{
_log.log(Level.SEVERE, "Error loading Henna Tree Table.", e);
}
finally
{
L2DatabaseFactory.close(con);
}
}
public L2HennaInstance[] getAvailableHenna(ClassId classId)
{
List result = new FastList();
List henna = _hennaTrees.get(classId);
if (henna == null)
{
// the hennatree for this class is undefined, so we give an empty list
_log.warning("Hennatree for class " + classId + " is not defined !");
return new L2HennaInstance[0];
}
for (L2HennaInstance temp : henna)
{
result.add(temp);
}
return result.toArray(new L2HennaInstance[result.size()]);
}
public boolean isInitialized()
{
return _initialized;
}
@SuppressWarnings("synthetic-access")
private static class SingletonHolder
{
protected static final HennaTreeTable _instance = new HennaTreeTable();
}
}