root/trunk/AE-go_GameServer/data/scripts/system/database/mysql5/MySQL5InventoryDAO.java

980993
29
import com.aionemu.gameserver.dao.InventoryDAO;
29
import com.aionemu.gameserver.dao.InventoryDAO;
30
import com.aionemu.gameserver.model.gameobjects.Item;
30
import com.aionemu.gameserver.model.gameobjects.Item;
31
import com.aionemu.gameserver.model.gameobjects.PersistentState;
31
import com.aionemu.gameserver.model.gameobjects.PersistentState;
32
import com.aionemu.gameserver.model.gameobjects.player.Inventory;
32
import com.aionemu.gameserver.model.gameobjects.player.Storage;
33
import com.aionemu.gameserver.model.gameobjects.player.Player;
33
import com.aionemu.gameserver.model.gameobjects.player.Player;
34
import com.aionemu.gameserver.model.gameobjects.player.StorageType;
35
import java.util.ArrayList;
34
36
35
/**
37
/**
36
 * @author ATracer
38
 * @author ATracer
...
...
38
 */
40
 */
39
public class MySQL5InventoryDAO extends InventoryDAO
41
public class MySQL5InventoryDAO extends InventoryDAO
40
{
42
{
41
    private static final Logger log = Logger.getLogger(MySQL5InventoryDAO.class);
43
	private static final Logger log = Logger.getLogger(MySQL5InventoryDAO.class);
42
44
43
    public static final String SELECT_QUERY = "SELECT `itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `isEquiped`, `slot` FROM `inventory` WHERE `itemOwner`=?";
45
	public static final String SELECT_QUERY = "SELECT `itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `isEquiped`, `slot` FROM `inventory` WHERE `itemOwner`=? AND `itemLocation`=?";
44
    public static final String INSERT_QUERY = "INSERT INTO `inventory` (`itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `itemOwner`, `isEquiped`, `slot`) VALUES(?,?,?,?,?,?,?)";
46
	public static final String INSERT_QUERY = "INSERT INTO `inventory` (`itemUniqueId`, `itemId`, `itemCount`, `itemColor`, `itemOwner`, `isEquiped`, `slot`, `itemLocation`) VALUES(?,?,?,?,?,?,?,?)";
45
    public static final String UPDATE_QUERY = "UPDATE inventory SET  itemCount=?, itemColor=?, itemOwner=?, isEquiped=?, slot=? WHERE itemUniqueId=?";
47
	public static final String UPDATE_QUERY = "UPDATE inventory SET  itemCount=?, itemColor=?, itemOwner=?, isEquiped=?, slot=?, itemLocation=? WHERE itemUniqueId=?";
46
    public static final String DELETE_QUERY = "DELETE FROM inventory WHERE itemUniqueId=?";
48
	public static final String DELETE_QUERY = "DELETE FROM inventory WHERE itemUniqueId=?";
49
	public static final String SELECT_ACCOUNT_QUERY = "SELECT `account_id` FROM `players` WHERE `id`=?";
47
50
48
    @Override
51
	@Override
49
    public Inventory load(Player player)
52
	public Storage load(Player player, StorageType storageType)
50
    {
53
	{
51
        //TODO load parts - cube, equipment etc.
54
		//TODO load parts - cube, equipment etc.
52
        final Inventory inventory = new Inventory(player);
55
		final Storage inventory = new Storage(player, storageType);
53
        final int playerId = player.getObjectId();
56
		int playerId = player.getObjectId();
57
		final int storage = storageType.getId();
54
58
55
        DB.select(SELECT_QUERY, new ParamReadStH()
59
		if(storageType == StorageType.ACCOUNT_WAREHOUSE)
56
        {
60
		{
57
            @Override
61
			playerId = getPlayerAccountId(playerId);
58
            public void setParams(PreparedStatement stmt) throws SQLException
62
		}
59
            {
60
                stmt.setInt(1, playerId);
61
            }
62
63
63
            @Override
64
		final int owner = playerId;
64
            public void handleRead(ResultSet rset) throws SQLException
65
            {
66
                while(rset.next())
67
                {
68
                    int itemUniqueId = rset.getInt("itemUniqueId");
69
                    int itemId = rset.getInt("itemId");
70
                    int itemCount = rset.getInt("itemCount");
71
                    int itemColor = rset.getInt("itemColor");
72
                    int isEquiped = rset.getInt("isEquiped");
73
                    int slot = rset.getInt("slot");
74
                    Item item = new Item(itemUniqueId, itemId, itemCount, itemColor, isEquiped == 1, slot);
75
                    item.setPersistentState(PersistentState.UPDATED);
76
                    inventory.onLoadHandler(item);
77
                }
78
            }
79
        });
80
        return inventory;
81
    }
82
65
83
    @Override
66
		DB.select(SELECT_QUERY, new ParamReadStH()
84
    public boolean store(Inventory inventory)
67
		{
85
    {
86
        int playerId = inventory.getOwner().getObjectId();
87
        List<Item> inventoryItems = inventory.getAllItems();
88
        
89
        boolean resultSuccess = true;
90
        for(Item item : inventoryItems)
91
        {   	
92
        	resultSuccess = store(item, playerId);      
93
        } 
94
        return resultSuccess;
95
    }
96
    
97
    /**
98
     * @param item
99
     * @param playerId
100
     * @return
101
     */
102
    @Override
103
	public boolean store(final Item item, final int playerId)
104
    {   
105
    	boolean result = false;
106
    	
107
    	switch(item.getPersistentState())
108
    	{
109
    		case NEW:
110
    			result = insertItem(item, playerId);
111
    			break;
112
    		case UPDATE_REQUIRED:
113
    			result = updateItem(item, playerId);
114
    			break;
115
    		case DELETED:
116
    			result = deleteItem(item);
117
    			break;
118
    	}
119
    	item.setPersistentState(PersistentState.UPDATED);
120
    	return result;
121
    }
122
    
123
    /**
124
     * @param item
125
     * @param playerId
126
     * @return
127
     */
128
    private boolean insertItem(final Item item, final int playerId)
129
    {
130
    	return DB.insertUpdate(INSERT_QUERY, new IUStH() {
131
			@Override
68
			@Override
69
			public void setParams(PreparedStatement stmt) throws SQLException
70
			{
71
				stmt.setInt(1, owner);
72
				stmt.setInt(2, storage);
73
			}
74
75
			@Override
76
			public void handleRead(ResultSet rset) throws SQLException
77
			{
78
				while(rset.next())
79
				{
80
					int itemUniqueId = rset.getInt("itemUniqueId");
81
					int itemId = rset.getInt("itemId");
82
					int itemCount = rset.getInt("itemCount");
83
					int itemColor = rset.getInt("itemColor");
84
					int isEquiped = rset.getInt("isEquiped");
85
					int slot = rset.getInt("slot");
86
					Item item = new Item(itemUniqueId, itemId, itemCount, itemColor, isEquiped == 1, slot);
87
					item.setPersistentState(PersistentState.UPDATED);
88
					inventory.onLoadHandler(item);
89
				}
90
			}
91
		});
92
		return inventory;
93
	}
94
95
	public int getPlayerAccountId(final int playerId)
96
	{
97
		final List<Integer> owner = new ArrayList<Integer>();
98
		DB.select(SELECT_ACCOUNT_QUERY, new ParamReadStH()
99
		{
100
			@Override
101
			public void setParams(PreparedStatement stmt) throws SQLException
102
			{
103
				stmt.setInt(1, playerId);
104
			}
105
106
			@Override
107
			public void handleRead(ResultSet rset) throws SQLException
108
			{
109
				while(rset.next())
110
				{
111
					owner.add(rset.getInt("account_id"));
112
				}
113
			}
114
		});
115
		return owner.get(0);
116
	}
117
118
	@Override
119
	public boolean store(Player player)
120
	{
121
		int playerId = player.getObjectId();
122
		List<Item> allPlayerItems = new ArrayList<Item>();
123
		allPlayerItems.addAll(player.getStorage(StorageType.CUBE.getId()).getStorageItems());
124
		allPlayerItems.addAll(player.getStorage(StorageType.REGULAR_WAREHOUSE.getId()).getStorageItems());
125
		allPlayerItems.addAll(player.getStorage(StorageType.ACCOUNT_WAREHOUSE.getId()).getStorageItems());
126
		allPlayerItems.addAll(player.getInventory().getEquippedItems());
127
128
		boolean resultSuccess = true;
129
		for(Item item : allPlayerItems)
130
		{   	
131
			resultSuccess = store(item, playerId);      
132
		} 
133
		return resultSuccess;
134
	}
135
136
	/**
137
	 * @param item
138
	 * @param playerId
139
	 * @return
140
	 */
141
	@Override
142
	public boolean store(final Item item, int playerId)
143
	{   
144
		boolean result = false;
145
146
		if(item.getItemLocation() == StorageType.ACCOUNT_WAREHOUSE.getId())
147
		{
148
			playerId = getPlayerAccountId(playerId);
149
		}
150
151
		switch(item.getPersistentState())
152
		{
153
			case NEW:
154
				result = insertItem(item, playerId);
155
				break;
156
			case UPDATE_REQUIRED:
157
				result = updateItem(item, playerId);
158
				break;
159
			case DELETED:
160
				result = deleteItem(item);
161
				break;
162
		}
163
		item.setPersistentState(PersistentState.UPDATED);
164
		return result;
165
	}
166
167
	/**
168
	 * @param item
169
	 * @param playerId
170
	 * @return
171
	 */
172
	private boolean insertItem(final Item item, final int playerId)
173
	{
174
		return DB.insertUpdate(INSERT_QUERY, new IUStH() {
175
			@Override
132
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
176
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
133
			{
177
			{
134
				stmt.setInt(1, item.getObjectId());
178
				stmt.setInt(1, item.getObjectId());
...
...
138
				stmt.setInt(5, playerId);
182
				stmt.setInt(5, playerId);
139
				stmt.setBoolean(6, item.isEquipped());
183
				stmt.setBoolean(6, item.isEquipped());
140
				stmt.setInt(7, item.getEquipmentSlot());
184
				stmt.setInt(7, item.getEquipmentSlot());
185
				stmt.setInt(8, item.getItemLocation());
141
				stmt.execute();
186
				stmt.execute();
142
			}
187
			}
143
		});
188
		});
144
    }
189
	}
145
    
190
146
    /**
191
	/**
147
     * @param item
192
	 * @param item
148
     * @return
193
	 * @return
149
     */
194
	 */
150
    private boolean updateItem(final Item item,  final int playerId)
195
	private boolean updateItem(final Item item,  final int playerId)
151
    {
196
	{
152
    	return DB.insertUpdate(UPDATE_QUERY, new IUStH() {
197
		return DB.insertUpdate(UPDATE_QUERY, new IUStH() {
153
			@Override
198
			@Override
154
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
199
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
155
			{
200
			{
...
...
158
				stmt.setInt(3, playerId);
203
				stmt.setInt(3, playerId);
159
				stmt.setBoolean(4, item.isEquipped());
204
				stmt.setBoolean(4, item.isEquipped());
160
				stmt.setInt(5, item.getEquipmentSlot());
205
				stmt.setInt(5, item.getEquipmentSlot());
161
				stmt.setInt(6, item.getObjectId());
206
				stmt.setInt(6, item.getItemLocation());
207
				stmt.setInt(7, item.getObjectId());
162
				stmt.execute();
208
				stmt.execute();
163
			}
209
			}
164
		});
210
		});
165
    }
211
	}
166
212
167
    /**
213
	/**
168
     * 
214
	 * 
169
     * @param item
215
	 * @param item
170
     */
216
	 */
171
    private boolean deleteItem(final Item item) 
217
	private boolean deleteItem(final Item item) 
172
    {
218
	{
173
    	return DB.insertUpdate(DELETE_QUERY, new IUStH() {
219
		return DB.insertUpdate(DELETE_QUERY, new IUStH() {
174
			@Override
220
			@Override
175
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
221
			public void handleInsertUpdate(PreparedStatement stmt) throws SQLException
176
			{
222
			{
...
...
178
				stmt.execute();
224
				stmt.execute();
179
			}
225
			}
180
		});
226
		});
181
    }
227
	}
182
228
183
    @Override
229
	@Override
184
    public int[] getUsedIDs() 
230
	public int[] getUsedIDs() 
185
    {
231
	{
186
        PreparedStatement statement = DB.prepareStatement("SELECT itemUniqueId FROM inventory", ResultSet.TYPE_SCROLL_INSENSITIVE,
232
		PreparedStatement statement = DB.prepareStatement("SELECT itemUniqueId FROM inventory", ResultSet.TYPE_SCROLL_INSENSITIVE,
187
                ResultSet.CONCUR_READ_ONLY);
233
			ResultSet.CONCUR_READ_ONLY);
188
234
189
        try
235
		try
190
        {
236
		{
191
            ResultSet rs = statement.executeQuery();
237
			ResultSet rs = statement.executeQuery();
192
            rs.last();
238
			rs.last();
193
            int count = rs.getRow();
239
			int count = rs.getRow();
194
            rs.beforeFirst();
240
			rs.beforeFirst();
195
            int[] ids = new int[count];
241
			int[] ids = new int[count];
196
            for(int i = 0; i < count; i++)
242
			for(int i = 0; i < count; i++)
197
            {
243
			{
198
                rs.next();
244
				rs.next();
199
                ids[i] = rs.getInt("itemUniqueId");
245
				ids[i] = rs.getInt("itemUniqueId");
200
            }
246
			}
201
            return ids;
247
			return ids;
202
        }
248
		}
203
        catch(SQLException e)
249
		catch(SQLException e)
204
        {
250
		{
205
            log.error("Can't get list of id's from inventory table", e);
251
			log.error("Can't get list of id's from inventory table", e);
206
        }
252
		}
207
        finally
253
		finally
208
        {
254
		{
209
            DB.close(statement);
255
			DB.close(statement);
210
        }
256
		}
211
257
212
        return new int[0];
258
		return new int[0];
213
    }
259
	}
214
260
215
    /**
261
	/**
216
     * {@inheritDoc}
262
	 * {@inheritDoc}
217
     */
263
	 */
218
    @Override
264
	@Override
219
    public boolean supports(String s, int i, int i1)
265
	public boolean supports(String s, int i, int i1)
220
    {
266
	{
221
        return MySQL5DAOUtils.supports(s, i, i1);
267
		return MySQL5DAOUtils.supports(s, i, i1);
222
    }
268
	}
223
269
224
}
270
}