mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-06 07:32:46 +00:00
Implements bulk and transactioned inserts, updates and deletes
This commit is contained in:
@@ -71,6 +71,24 @@ public abstract class AbstractDAO<T extends Model<?>, I extends ID<?>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public boolean insert(T object) {
|
||||||
|
return insertObjects(object) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public boolean update(T object) {
|
||||||
|
return updateObjects(object) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public boolean delete(T object) {
|
||||||
|
return deleteObjects(object) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterator<T> iterator() {
|
public Iterator<T> iterator() {
|
||||||
return new Iterator<T>() {
|
return new Iterator<T>() {
|
||||||
|
|||||||
@@ -454,7 +454,6 @@ public abstract class AbstractJDBCDatabaseService extends AbstractService
|
|||||||
* <ul>
|
* <ul>
|
||||||
* <li>INSERT INTO</li>
|
* <li>INSERT INTO</li>
|
||||||
* <li>UPDATE</li>
|
* <li>UPDATE</li>
|
||||||
* <li>DELETE FROM</li>
|
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
@@ -501,45 +500,64 @@ public abstract class AbstractJDBCDatabaseService extends AbstractService
|
|||||||
Preconditions.checkNotNull(conn, "conn");
|
Preconditions.checkNotNull(conn, "conn");
|
||||||
|
|
||||||
log.debug("Starting INSERT/UPDATE query execution");
|
log.debug("Starting INSERT/UPDATE query execution");
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
|
||||||
int rows = 0;
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
final T object = iterator.next();
|
|
||||||
final String queryString = query();
|
final String queryString = query();
|
||||||
|
|
||||||
log.debug("Preparing statement for {}: {}", object, queryString);
|
log.debug("Preparing statement for {}", queryString);
|
||||||
final PreparedStatement st = conn.prepareStatement(queryString,
|
final PreparedStatement st = conn.prepareStatement(queryString,
|
||||||
Statement.RETURN_GENERATED_KEYS);
|
Statement.RETURN_GENERATED_KEYS);
|
||||||
|
try {
|
||||||
|
int rows = 0;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
final T object = iterator.next();
|
||||||
|
|
||||||
log.debug("Parametizing statement {} with {}", st, object);
|
log.debug("Parametizing statement {} with {}", st,
|
||||||
this.parametize(st, object);
|
object);
|
||||||
|
this.parametize(st, object);
|
||||||
|
|
||||||
log.debug("Sending query to database for {}", object);
|
log.debug("Sending query to database for {}", object);
|
||||||
rows = st.executeUpdate();
|
rows += st.executeUpdate();
|
||||||
log.debug("Query inserted or updated {} rows for {}", rows,
|
log.debug("Query inserted or updated {} rows for {}",
|
||||||
object);
|
rows, object);
|
||||||
|
|
||||||
// update object desire --it has been realized
|
// update object desire --it has been realized
|
||||||
if (object instanceof Model && rows > 0) {
|
if (object instanceof Model && rows > 0) {
|
||||||
log.debug("Updating Model ObjectDesire to NONE");
|
log.debug("Updating Model ObjectDesire to NONE");
|
||||||
((Model<?>) object).setObjectDesire(ObjectDesire.NONE);
|
((Model<?>) object)
|
||||||
|
.setObjectDesire(ObjectDesire.NONE);
|
||||||
|
|
||||||
final Mapper<? extends ID<?>> mapper = keyMapper();
|
final Mapper<? extends ID<?>> mapper = keyMapper();
|
||||||
if (mapper == null)
|
if (mapper == null)
|
||||||
continue;
|
continue;
|
||||||
final ResultSet rs = st.getGeneratedKeys();
|
final ResultSet rs = st.getGeneratedKeys();
|
||||||
log.debug("Mapping generated keys with {} using {}",
|
try {
|
||||||
mapper, rs);
|
log.debug(
|
||||||
while (rs.next()) {
|
"Mapping generated keys with {} using {}",
|
||||||
final ID<?> generatedID = mapper.map(rs);
|
mapper, rs);
|
||||||
log.debug("Generated ID for {} is {}", object,
|
while (rs.next()) {
|
||||||
generatedID);
|
final ID<?> generatedID = mapper.map(rs);
|
||||||
((Model<ID<?>>) object).setID(generatedID);
|
log.debug("Generated ID for {} is {}",
|
||||||
mapper.map(rs);
|
object, generatedID);
|
||||||
|
((Model<ID<?>>) object).setID(generatedID);
|
||||||
|
mapper.map(rs);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
rs.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return rows;
|
||||||
|
} finally {
|
||||||
|
st.close();
|
||||||
}
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
conn.rollback();
|
||||||
|
throw e;
|
||||||
|
} finally {
|
||||||
|
conn.setAutoCommit(true);
|
||||||
}
|
}
|
||||||
return rows;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -573,6 +591,143 @@ public abstract class AbstractJDBCDatabaseService extends AbstractService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This query is used for the following statements:
|
||||||
|
* <ul>
|
||||||
|
* <li>DELETE FROM</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* the query return type
|
||||||
|
*/
|
||||||
|
public static abstract class DeleteQuery<T> implements Query<Integer> {
|
||||||
|
/**
|
||||||
|
* The logger
|
||||||
|
*/
|
||||||
|
private final Logger log = LoggerFactory.getLogger(DeleteQuery.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link DatabaseService}
|
||||||
|
*/
|
||||||
|
private final AbstractJDBCDatabaseService database;
|
||||||
|
/**
|
||||||
|
* The iterator
|
||||||
|
*/
|
||||||
|
private final Iterator<T> iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new query for <tt>objects</tt>
|
||||||
|
*
|
||||||
|
* @param database
|
||||||
|
* the {@link DatabaseService}
|
||||||
|
* @param objects
|
||||||
|
* the object list
|
||||||
|
*/
|
||||||
|
@SafeVarargs
|
||||||
|
public DeleteQuery(AbstractJDBCDatabaseService database, T... objects) {
|
||||||
|
this(database, new ArrayIterator<T>(objects));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new query for objects in <tt>iterator</tt>
|
||||||
|
*
|
||||||
|
* @param database
|
||||||
|
* the {@link DatabaseService}
|
||||||
|
* @param iterator
|
||||||
|
* the object iterator
|
||||||
|
*/
|
||||||
|
public DeleteQuery(AbstractJDBCDatabaseService database,
|
||||||
|
Iterator<T> iterator) {
|
||||||
|
this.iterator = iterator;
|
||||||
|
this.database = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Integer query(Connection conn) throws SQLException {
|
||||||
|
Preconditions.checkNotNull(conn, "conn");
|
||||||
|
|
||||||
|
log.debug("Starting DELETE query execution");
|
||||||
|
try {
|
||||||
|
conn.setAutoCommit(false);
|
||||||
|
|
||||||
|
final String queryString = query();
|
||||||
|
|
||||||
|
log.debug("Preparing statement for {}", queryString);
|
||||||
|
final PreparedStatement st = conn.prepareStatement(queryString);
|
||||||
|
|
||||||
|
try {
|
||||||
|
int rows = 0;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
final T object = iterator.next();
|
||||||
|
|
||||||
|
log.debug("Parametizing statement {} with {}", st,
|
||||||
|
object);
|
||||||
|
this.parametize(st, object);
|
||||||
|
|
||||||
|
log.debug("Sending query to database for {}", object);
|
||||||
|
rows = st.executeUpdate();
|
||||||
|
log.debug("Query deleted {} rows for {}", rows, object);
|
||||||
|
|
||||||
|
dispose(object);
|
||||||
|
if (object instanceof Model) {
|
||||||
|
database.removeCache(((Model<?>) object)
|
||||||
|
.getObjectDesire());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conn.commit();
|
||||||
|
return rows;
|
||||||
|
} finally {
|
||||||
|
st.close();
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
conn.rollback();
|
||||||
|
throw e;
|
||||||
|
} finally {
|
||||||
|
conn.setAutoCommit(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the <b>prepared</b> query for execution
|
||||||
|
*
|
||||||
|
* @return the <b>prepared</b> query
|
||||||
|
*/
|
||||||
|
protected abstract String query();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the parameters for in <tt>statement</tt> for <tt>object</tt>
|
||||||
|
*
|
||||||
|
* @param st
|
||||||
|
* the prepared statement
|
||||||
|
* @param object
|
||||||
|
* the object
|
||||||
|
* @throws SQLException
|
||||||
|
* if any SQL error occur
|
||||||
|
*/
|
||||||
|
protected abstract void parametize(PreparedStatement st, T object)
|
||||||
|
throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disposes all object related resources, such as IDs.
|
||||||
|
*
|
||||||
|
* @param object
|
||||||
|
* the object that was been deleted
|
||||||
|
*/
|
||||||
|
protected abstract void dispose(T object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the key mapper. Can be null if no generated keys are used or
|
||||||
|
* are not important.
|
||||||
|
*
|
||||||
|
* @return the key mapper
|
||||||
|
*/
|
||||||
|
protected Mapper<? extends ID<?>> keyMapper() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An select query that returns a list of objects of type <tt>T</tt>
|
* An select query that returns a list of objects of type <tt>T</tt>
|
||||||
*
|
*
|
||||||
@@ -597,31 +752,38 @@ public abstract class AbstractJDBCDatabaseService extends AbstractService
|
|||||||
final String queryString = query();
|
final String queryString = query();
|
||||||
log.debug("Preparing statement with {}", queryString);
|
log.debug("Preparing statement with {}", queryString);
|
||||||
final PreparedStatement st = conn.prepareStatement(query());
|
final PreparedStatement st = conn.prepareStatement(query());
|
||||||
|
try {
|
||||||
|
log.debug("Parametizing statement {}", st);
|
||||||
|
parametize(st);
|
||||||
|
|
||||||
log.debug("Parametizing statement {}", st);
|
log.debug("Sending query to database for {}", st);
|
||||||
parametize(st);
|
st.execute();
|
||||||
|
|
||||||
log.debug("Sending query to database for {}", st);
|
final List<T> list = CollectionFactory.newList();
|
||||||
st.execute();
|
final ResultSet rs = st.getResultSet();
|
||||||
|
try {
|
||||||
final List<T> list = CollectionFactory.newList();
|
final Mapper<T> mapper = mapper();
|
||||||
final ResultSet rs = st.getResultSet();
|
log.debug("Database returned {}", rs);
|
||||||
final Mapper<T> mapper = mapper();
|
while (rs.next()) {
|
||||||
log.debug("Database returned {}", rs);
|
log.debug("Mapping row with {}", mapper);
|
||||||
while (rs.next()) {
|
final T obj = mapper.map(rs);
|
||||||
log.debug("Mapping row with {}", mapper);
|
if (obj == null) {
|
||||||
final T obj = mapper.map(rs);
|
log.debug("Mapper {} returned a null row", mapper);
|
||||||
if (obj == null) {
|
continue;
|
||||||
log.debug("Mapper {} returned a null row", mapper);
|
}
|
||||||
continue;
|
if (obj instanceof Model) {
|
||||||
|
((Model<?>) obj).setObjectDesire(ObjectDesire.NONE);
|
||||||
|
}
|
||||||
|
log.debug("Mapper {} returned {}", mapper, obj);
|
||||||
|
list.add(obj);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
} finally {
|
||||||
|
rs.close();
|
||||||
}
|
}
|
||||||
if (obj instanceof Model) {
|
} finally {
|
||||||
((Model<?>) obj).setObjectDesire(ObjectDesire.NONE);
|
st.close();
|
||||||
}
|
|
||||||
log.debug("Mapper {} returned {}", mapper, obj);
|
|
||||||
list.add(obj);
|
|
||||||
}
|
}
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -679,26 +841,34 @@ public abstract class AbstractJDBCDatabaseService extends AbstractService
|
|||||||
final String queryString = query();
|
final String queryString = query();
|
||||||
log.debug("Preparing statement with {}", queryString);
|
log.debug("Preparing statement with {}", queryString);
|
||||||
final PreparedStatement st = conn.prepareStatement(query());
|
final PreparedStatement st = conn.prepareStatement(query());
|
||||||
|
try {
|
||||||
|
log.debug("Parametizing statement {}", st);
|
||||||
|
parametize(st);
|
||||||
|
|
||||||
log.debug("Parametizing statement {}", st);
|
log.debug("Sending query to database for {}", st);
|
||||||
parametize(st);
|
st.execute();
|
||||||
|
|
||||||
log.debug("Sending query to database for {}", st);
|
final ResultSet rs = st.getResultSet();
|
||||||
st.execute();
|
try {
|
||||||
|
final Mapper<T> mapper = mapper();
|
||||||
final ResultSet rs = st.getResultSet();
|
log.debug("Database returned {}", rs);
|
||||||
final Mapper<T> mapper = mapper();
|
while (rs.next()) {
|
||||||
log.debug("Database returned {}", rs);
|
log.debug("Mapping row {} with {}", rs, mapper);
|
||||||
while (rs.next()) {
|
final T object = mapper.map(rs);
|
||||||
log.debug("Mapping row {} with {}", rs, mapper);
|
if (object instanceof Model) {
|
||||||
final T object = mapper.map(rs);
|
((Model<?>) object)
|
||||||
if (object instanceof Model) {
|
.setObjectDesire(ObjectDesire.NONE);
|
||||||
((Model<?>) object).setObjectDesire(ObjectDesire.NONE);
|
}
|
||||||
|
log.debug("Mapper {} returned {}", mapper, object);
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
rs.close();
|
||||||
}
|
}
|
||||||
log.debug("Mapper {} returned {}", mapper, object);
|
} finally {
|
||||||
return object;
|
st.close();
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import java.util.Iterator;
|
|||||||
|
|
||||||
import com.l2jserver.model.Model;
|
import com.l2jserver.model.Model;
|
||||||
import com.l2jserver.model.id.ID;
|
import com.l2jserver.model.id.ID;
|
||||||
import com.l2jserver.service.cache.IgnoreCaching;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Data Access Object interface used used to retrieve, save and remove
|
* The Data Access Object interface used used to retrieve, save and remove
|
||||||
@@ -63,7 +62,6 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
*
|
*
|
||||||
* @return the list containing all {@link ID} objects
|
* @return the list containing all {@link ID} objects
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
Collection<I> selectIDs();
|
Collection<I> selectIDs();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -75,7 +73,6 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
* @return true if the row was inserted or updated
|
* @return true if the row was inserted or updated
|
||||||
* @see DataAccessObject#save(Model, boolean)
|
* @see DataAccessObject#save(Model, boolean)
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
boolean save(O object);
|
boolean save(O object);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -88,7 +85,6 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
* will force an save, even if the object has not changed
|
* will force an save, even if the object has not changed
|
||||||
* @return true if the row was inserted or updated
|
* @return true if the row was inserted or updated
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
boolean save(O object, boolean force);
|
boolean save(O object, boolean force);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,9 +94,17 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
* the object
|
* the object
|
||||||
* @return true if the row was inserted
|
* @return true if the row was inserted
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
boolean insert(O object);
|
boolean insert(O object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts several instances in the database using a transaction (if possible).
|
||||||
|
*
|
||||||
|
* @param objects
|
||||||
|
* the objects
|
||||||
|
* @return the number of inserted rows
|
||||||
|
*/
|
||||||
|
int insertObjects(@SuppressWarnings("unchecked") O... objects);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the instance in the database.
|
* Updates the instance in the database.
|
||||||
*
|
*
|
||||||
@@ -108,9 +112,17 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
* the object
|
* the object
|
||||||
* @return true if the row was updated
|
* @return true if the row was updated
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
boolean update(O object);
|
boolean update(O object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates several instances in the database using a transaction (if possible).
|
||||||
|
*
|
||||||
|
* @param objects
|
||||||
|
* the objects
|
||||||
|
* @return the number of updated rows
|
||||||
|
*/
|
||||||
|
int updateObjects(@SuppressWarnings("unchecked") O... objects);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes the instance in the database.
|
* Deletes the instance in the database.
|
||||||
*
|
*
|
||||||
@@ -118,6 +130,14 @@ public interface DataAccessObject<O extends Model<?>, I extends ID<?>> extends
|
|||||||
* the object
|
* the object
|
||||||
* @return true if the row was deleted
|
* @return true if the row was deleted
|
||||||
*/
|
*/
|
||||||
@IgnoreCaching
|
|
||||||
boolean delete(O object);
|
boolean delete(O object);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes several instances in the database using an transaction (if possible).
|
||||||
|
*
|
||||||
|
* @param objects
|
||||||
|
* the objects
|
||||||
|
* @return the numver of deleted rows
|
||||||
|
*/
|
||||||
|
int deleteObjects(@SuppressWarnings("unchecked") O... objects);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of l2jserver2 <l2jserver2.com>.
|
||||||
|
*
|
||||||
|
* l2jserver2 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.
|
||||||
|
*
|
||||||
|
* l2jserver2 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 l2jserver2. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.l2jserver.util;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.l2jserver.util.factory.CollectionFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ArrayUtils {
|
||||||
|
@SafeVarargs
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public final static <T> T[] copyArrayExcept(T[] array, T... except) {
|
||||||
|
final List<T> values = CollectionFactory.newList();
|
||||||
|
for (final T item : array) {
|
||||||
|
if (Arrays.binarySearch(except, item) < 0) {
|
||||||
|
values.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (T[]) values.toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of l2jserver2 <l2jserver2.com>.
|
||||||
|
*
|
||||||
|
* l2jserver2 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.
|
||||||
|
*
|
||||||
|
* l2jserver2 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 l2jserver2. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.l2jserver.util;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ArrayUtilsTest extends ArrayUtils {
|
||||||
|
@Test
|
||||||
|
public void testCopyArrayExcept() {
|
||||||
|
final String str1 = "one";
|
||||||
|
final String str2 = "two";
|
||||||
|
final String str3 = "three";
|
||||||
|
|
||||||
|
String[] arr = new String[] { str1, str2, str3 };
|
||||||
|
|
||||||
|
Assert.assertTrue(Arrays.equals(new String[] { str1, str3 },
|
||||||
|
ArrayUtils.copyArrayExcept(arr, str2)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -296,8 +296,8 @@ public abstract class JDBCCharacterDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(L2Character character) {
|
public int insertObjects(L2Character... characters) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(character) {
|
return database.query(new InsertUpdateQuery<L2Character>(characters) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + CHAR_ID + "`,`"
|
return "INSERT INTO `" + TABLE + "` (`" + CHAR_ID + "`,`"
|
||||||
@@ -349,12 +349,12 @@ public abstract class JDBCCharacterDAO extends
|
|||||||
st.setString(i++, appearance.getHairColor().name());
|
st.setString(i++, appearance.getHairColor().name());
|
||||||
st.setString(i++, appearance.getFace().name());
|
st.setString(i++, appearance.getFace().name());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(L2Character character) {
|
public int updateObjects(L2Character... characters) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(character) {
|
return database.query(new InsertUpdateQuery<L2Character>(characters) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "UPDATE `" + TABLE + "` SET `" + ACCOUNT_ID + "` = ?,`"
|
return "UPDATE `" + TABLE + "` SET `" + ACCOUNT_ID + "` = ?,`"
|
||||||
@@ -411,12 +411,12 @@ public abstract class JDBCCharacterDAO extends
|
|||||||
// WHERE
|
// WHERE
|
||||||
st.setInt(i++, character.getID().getID());
|
st.setInt(i++, character.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(L2Character character) {
|
public int deleteObjects(L2Character... characters) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(character) {
|
return database.query(new InsertUpdateQuery<L2Character>(characters) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + CHAR_ID
|
return "DELETE FROM `" + TABLE + "` WHERE `" + CHAR_ID
|
||||||
@@ -428,6 +428,6 @@ public abstract class JDBCCharacterDAO extends
|
|||||||
L2Character character) throws SQLException {
|
L2Character character) throws SQLException {
|
||||||
st.setInt(1, character.getID().getID());
|
st.setInt(1, character.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,8 +168,8 @@ public abstract class JDBCCharacterFriendDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(CharacterFriend friend) {
|
public int insertObjects(CharacterFriend... friends) {
|
||||||
return database.query(new InsertUpdateQuery<CharacterFriend>(friend) {
|
return database.query(new InsertUpdateQuery<CharacterFriend>(friends) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + CHAR_ID + "`,`"
|
return "INSERT INTO `" + TABLE + "` (`" + CHAR_ID + "`,`"
|
||||||
@@ -182,19 +182,19 @@ public abstract class JDBCCharacterFriendDAO extends
|
|||||||
st.setInt(1, friend.getCharacterID().getID());
|
st.setInt(1, friend.getCharacterID().getID());
|
||||||
st.setInt(2, friend.getFriendID().getID());
|
st.setInt(2, friend.getFriendID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(CharacterFriend friend) {
|
public int updateObjects(CharacterFriend... friends) {
|
||||||
// it is not possible update friend objects, because they are only a ID
|
// it is not possible update friend objects, because they are only a ID
|
||||||
// pair and IDs are immutable
|
// pair and IDs are immutable
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(CharacterFriend friend) {
|
public int deleteObjects(CharacterFriend... friends) {
|
||||||
return database.query(new InsertUpdateQuery<CharacterFriend>(friend) {
|
return database.query(new InsertUpdateQuery<CharacterFriend>(friends) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + CHAR_ID
|
return "DELETE FROM `" + TABLE + "` WHERE `" + CHAR_ID
|
||||||
@@ -207,7 +207,7 @@ public abstract class JDBCCharacterFriendDAO extends
|
|||||||
st.setInt(1, friend.getCharacterID().getID());
|
st.setInt(1, friend.getCharacterID().getID());
|
||||||
st.setInt(2, friend.getFriendID().getID());
|
st.setInt(2, friend.getFriendID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -169,8 +169,8 @@ public abstract class JDBCChatMessageDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(ChatMessage message) {
|
public int insertObjects(ChatMessage... messages) {
|
||||||
return database.query(new InsertUpdateQuery<ChatMessage>(message) {
|
return database.query(new InsertUpdateQuery<ChatMessage>(messages) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + TYPE + "`,`"
|
return "INSERT INTO `" + TABLE + "` (`" + TYPE + "`,`"
|
||||||
@@ -200,18 +200,18 @@ public abstract class JDBCChatMessageDAO extends
|
|||||||
protected Mapper<ChatMessageID> keyMapper() {
|
protected Mapper<ChatMessageID> keyMapper() {
|
||||||
return primaryKeyMapper;
|
return primaryKeyMapper;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(ChatMessage message) {
|
public int updateObjects(ChatMessage... messages) {
|
||||||
// cannot update chat message logs
|
// cannot update chat message logs
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(ChatMessage message) {
|
public int deleteObjects(ChatMessage... messages) {
|
||||||
return database.query(new InsertUpdateQuery<ChatMessage>(message) {
|
return database.query(new InsertUpdateQuery<ChatMessage>(messages) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + MESSAGE_ID
|
return "DELETE FROM `" + TABLE + "` WHERE `" + MESSAGE_ID
|
||||||
@@ -223,6 +223,6 @@ public abstract class JDBCChatMessageDAO extends
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
st.setInt(1, message.getID().getID());
|
st.setInt(1, message.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ import com.l2jserver.model.id.object.ClanID;
|
|||||||
import com.l2jserver.model.id.object.provider.CharacterIDProvider;
|
import com.l2jserver.model.id.object.provider.CharacterIDProvider;
|
||||||
import com.l2jserver.model.id.object.provider.ClanIDProvider;
|
import com.l2jserver.model.id.object.provider.ClanIDProvider;
|
||||||
import com.l2jserver.model.world.Clan;
|
import com.l2jserver.model.world.Clan;
|
||||||
import com.l2jserver.service.database.DatabaseService;
|
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.CachedMapper;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.CachedMapper;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.InsertUpdateQuery;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.InsertUpdateQuery;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.Mapper;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.Mapper;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectListQuery;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectListQuery;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectSingleQuery;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectSingleQuery;
|
||||||
|
import com.l2jserver.service.database.DatabaseService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link CharacterDAO} implementation for JDBC
|
* {@link CharacterDAO} implementation for JDBC
|
||||||
@@ -137,8 +137,8 @@ public abstract class JDBCClanDAO extends AbstractJDBCDAO<Clan, ClanID>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(Clan clan) {
|
public int insertObjects(Clan... clans) {
|
||||||
return database.query(new InsertUpdateQuery<Clan>(clan) {
|
return database.query(new InsertUpdateQuery<Clan>(clans) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + CLAN_ID
|
return "INSERT INTO `" + TABLE + "` (`" + CLAN_ID
|
||||||
@@ -150,18 +150,18 @@ public abstract class JDBCClanDAO extends AbstractJDBCDAO<Clan, ClanID>
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
st.setInt(1, clan.getID().getID());
|
st.setInt(1, clan.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(Clan clan) {
|
public int updateObjects(Clan... clans) {
|
||||||
// TODO Auto-generated method stub
|
// TODO implement clan update
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(Clan clan) {
|
public int deleteObjects(Clan... clans) {
|
||||||
return database.query(new InsertUpdateQuery<Clan>(clan) {
|
return database.query(new InsertUpdateQuery<Clan>(clans) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + CLAN_ID
|
return "DELETE FROM `" + TABLE + "` WHERE `" + CLAN_ID
|
||||||
@@ -173,6 +173,6 @@ public abstract class JDBCClanDAO extends AbstractJDBCDAO<Clan, ClanID>
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
st.setInt(1, clan.getID().getID());
|
st.setInt(1, clan.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ import com.l2jserver.model.world.character.CharacterInventory;
|
|||||||
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
|
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
|
||||||
import com.l2jserver.model.world.character.CharacterInventory.ItemLocation;
|
import com.l2jserver.model.world.character.CharacterInventory.ItemLocation;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.CachedMapper;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.CachedMapper;
|
||||||
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.DeleteQuery;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.InsertUpdateQuery;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.InsertUpdateQuery;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.Mapper;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.Mapper;
|
||||||
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectListQuery;
|
import com.l2jserver.service.database.AbstractJDBCDatabaseService.SelectListQuery;
|
||||||
@@ -239,8 +240,8 @@ public abstract class JDBCItemDAO extends AbstractJDBCDAO<Item, ItemID>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(Item item) {
|
public int insertObjects(Item... items) {
|
||||||
return database.query(new InsertUpdateQuery<Item>(item) {
|
return database.query(new InsertUpdateQuery<Item>(items) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + ITEM_ID + "`,`"
|
return "INSERT INTO `" + TABLE + "` (`" + ITEM_ID + "`,`"
|
||||||
@@ -276,12 +277,12 @@ public abstract class JDBCItemDAO extends AbstractJDBCDAO<Item, ItemID>
|
|||||||
st.setNull(i++, Types.INTEGER);
|
st.setNull(i++, Types.INTEGER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(Item item) {
|
public int updateObjects(Item... items) {
|
||||||
return database.query(new InsertUpdateQuery<Item>(item) {
|
return database.query(new InsertUpdateQuery<Item>(items) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "UPDATE `" + TABLE + "` SET `" + CHAR_ID + "` = ?,`"
|
return "UPDATE `" + TABLE + "` SET `" + CHAR_ID + "` = ?,`"
|
||||||
@@ -318,12 +319,12 @@ public abstract class JDBCItemDAO extends AbstractJDBCDAO<Item, ItemID>
|
|||||||
// WHERE
|
// WHERE
|
||||||
st.setInt(i++, item.getID().getID());
|
st.setInt(i++, item.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(Item item) {
|
public int deleteObjects(Item... items) {
|
||||||
return database.query(new InsertUpdateQuery<Item>(item) {
|
return database.query(new DeleteQuery<Item>(database, items) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + ITEM_ID
|
return "DELETE FROM `" + TABLE + "` WHERE `" + ITEM_ID
|
||||||
@@ -335,6 +336,11 @@ public abstract class JDBCItemDAO extends AbstractJDBCDAO<Item, ItemID>
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
st.setInt(1, item.getID().getID());
|
st.setInt(1, item.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
|
||||||
|
@Override
|
||||||
|
protected void dispose(Item object) {
|
||||||
|
idFactory.destroy(object.getID());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,8 +217,8 @@ public abstract class JDBCNPCDAO extends AbstractJDBCDAO<NPC, NPCID> implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(NPC npc) {
|
public int insertObjects(NPC... npcs) {
|
||||||
return database.query(new InsertUpdateQuery<NPC>(npc) {
|
return database.query(new InsertUpdateQuery<NPC>(npcs) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "INSERT INTO `" + TABLE + "` (`" + NPC_ID + "`,`"
|
return "INSERT INTO `" + TABLE + "` (`" + NPC_ID + "`,`"
|
||||||
@@ -246,12 +246,12 @@ public abstract class JDBCNPCDAO extends AbstractJDBCDAO<NPC, NPCID> implements
|
|||||||
|
|
||||||
st.setLong(i++, npc.getRespawnInterval());
|
st.setLong(i++, npc.getRespawnInterval());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(NPC npc) {
|
public int updateObjects(NPC... npcs) {
|
||||||
return database.query(new InsertUpdateQuery<NPC>(npc) {
|
return database.query(new InsertUpdateQuery<NPC>(npcs) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "UPDATE `" + TABLE + "` SET `" + NPC_TEMPLATE_ID
|
return "UPDATE `" + TABLE + "` SET `" + NPC_TEMPLATE_ID
|
||||||
@@ -282,12 +282,12 @@ public abstract class JDBCNPCDAO extends AbstractJDBCDAO<NPC, NPCID> implements
|
|||||||
// WHERE
|
// WHERE
|
||||||
st.setInt(i++, npc.getID().getID());
|
st.setInt(i++, npc.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(NPC npc) {
|
public int deleteObjects(NPC... npcs) {
|
||||||
return database.query(new InsertUpdateQuery<NPC>(npc) {
|
return database.query(new InsertUpdateQuery<NPC>(npcs) {
|
||||||
@Override
|
@Override
|
||||||
protected String query() {
|
protected String query() {
|
||||||
return "DELETE FROM `" + TABLE + "` WHERE `" + NPC_ID + "` = ?";
|
return "DELETE FROM `" + TABLE + "` WHERE `" + NPC_ID + "` = ?";
|
||||||
@@ -298,6 +298,6 @@ public abstract class JDBCNPCDAO extends AbstractJDBCDAO<NPC, NPCID> implements
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
st.setInt(1, npc.getID().getID());
|
st.setInt(1, npc.getID().getID());
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -248,8 +248,8 @@ public class OrientDBCharacterDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(L2Character object) {
|
public int insertObjects(L2Character... objects) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(object) {
|
return database.query(new InsertUpdateQuery<L2Character>(objects) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, L2Character object) {
|
ODatabaseDocumentTx database, L2Character object) {
|
||||||
@@ -301,12 +301,12 @@ public class OrientDBCharacterDAO extends
|
|||||||
|
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
}) != 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(final L2Character character) {
|
public int updateObjects(final L2Character... characters) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(character) {
|
return database.query(new InsertUpdateQuery<L2Character>(characters) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, final L2Character character) {
|
ODatabaseDocumentTx database, final L2Character character) {
|
||||||
@@ -368,12 +368,12 @@ public class OrientDBCharacterDAO extends
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}) != 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(L2Character object) {
|
public int deleteObjects(L2Character... objects) {
|
||||||
return database.query(new InsertUpdateQuery<L2Character>(object) {
|
return database.query(new InsertUpdateQuery<L2Character>(objects) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, final L2Character character) {
|
ODatabaseDocumentTx database, final L2Character character) {
|
||||||
@@ -403,7 +403,7 @@ public class OrientDBCharacterDAO extends
|
|||||||
throws SQLException {
|
throws SQLException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}) != 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import com.orientechnologies.orient.core.record.impl.ODocument;
|
|||||||
*
|
*
|
||||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
*/
|
*/
|
||||||
public abstract class OrientDBCharacterFriendDAO extends
|
public class OrientDBCharacterFriendDAO extends
|
||||||
AbstractOrientDBDAO<CharacterFriend, FriendID> implements
|
AbstractOrientDBDAO<CharacterFriend, FriendID> implements
|
||||||
CharacterFriendDAO {
|
CharacterFriendDAO {
|
||||||
/**
|
/**
|
||||||
@@ -194,8 +194,8 @@ public abstract class OrientDBCharacterFriendDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(CharacterFriend friend) {
|
public int insertObjects(CharacterFriend... friends) {
|
||||||
return database.query(new InsertUpdateQuery<CharacterFriend>(friend) {
|
return database.query(new InsertUpdateQuery<CharacterFriend>(friends) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, CharacterFriend object) {
|
ODatabaseDocumentTx database, CharacterFriend object) {
|
||||||
@@ -215,19 +215,19 @@ public abstract class OrientDBCharacterFriendDAO extends
|
|||||||
document.field(CHAR_ID_FRIEND, friend.getFriendID());
|
document.field(CHAR_ID_FRIEND, friend.getFriendID());
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(CharacterFriend friend) {
|
public int updateObjects(CharacterFriend... friends) {
|
||||||
// it is not possible update friend objects, because they are only a ID
|
// it is not possible update friend objects, because they are only a ID
|
||||||
// pair and IDs are immutable
|
// pair and IDs are immutable
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(CharacterFriend friend) {
|
public int deleteObjects(CharacterFriend... friends) {
|
||||||
return database.query(new InsertUpdateQuery<CharacterFriend>(friend) {
|
return database.query(new InsertUpdateQuery<CharacterFriend>(friends) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, final CharacterFriend friend) {
|
ODatabaseDocumentTx database, final CharacterFriend friend) {
|
||||||
@@ -259,7 +259,7 @@ public abstract class OrientDBCharacterFriendDAO extends
|
|||||||
CharacterFriend friend) throws SQLException {
|
CharacterFriend friend) throws SQLException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import com.orientechnologies.orient.core.record.impl.ODocument;
|
|||||||
*
|
*
|
||||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
*/
|
*/
|
||||||
public abstract class OrientDBChatMessageDAO extends
|
public class OrientDBChatMessageDAO extends
|
||||||
AbstractOrientDBDAO<ChatMessage, ChatMessageID> implements
|
AbstractOrientDBDAO<ChatMessage, ChatMessageID> implements
|
||||||
ChatMessageDAO {
|
ChatMessageDAO {
|
||||||
/**
|
/**
|
||||||
@@ -180,8 +180,8 @@ public abstract class OrientDBChatMessageDAO extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(ChatMessage message) {
|
public int insertObjects(ChatMessage... messages) {
|
||||||
return database.query(new InsertUpdateQuery<ChatMessage>(message) {
|
return database.query(new InsertUpdateQuery<ChatMessage>(messages) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, ChatMessage object) {
|
ODatabaseDocumentTx database, ChatMessage object) {
|
||||||
@@ -212,18 +212,18 @@ public abstract class OrientDBChatMessageDAO extends
|
|||||||
|
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(ChatMessage message) {
|
public int updateObjects(ChatMessage... messages) {
|
||||||
// cannot update chat message logs
|
// cannot update chat message logs
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(ChatMessage message) {
|
public int deleteObjects(ChatMessage... messages) {
|
||||||
return database.query(new InsertUpdateQuery<ChatMessage>(message) {
|
return database.query(new InsertUpdateQuery<ChatMessage>(messages) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, final ChatMessage message) {
|
ODatabaseDocumentTx database, final ChatMessage message) {
|
||||||
@@ -254,6 +254,6 @@ public abstract class OrientDBChatMessageDAO extends
|
|||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import com.orientechnologies.orient.core.record.impl.ODocument;
|
|||||||
*
|
*
|
||||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
*/
|
*/
|
||||||
public abstract class OrientDBClanDAO extends AbstractOrientDBDAO<Clan, ClanID>
|
public class OrientDBClanDAO extends AbstractOrientDBDAO<Clan, ClanID>
|
||||||
implements ClanDAO {
|
implements ClanDAO {
|
||||||
/**
|
/**
|
||||||
* The {@link ChatMessageID} factory
|
* The {@link ChatMessageID} factory
|
||||||
@@ -159,8 +159,8 @@ public abstract class OrientDBClanDAO extends AbstractOrientDBDAO<Clan, ClanID>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean insert(Clan clan) {
|
public int insertObjects(Clan... clans) {
|
||||||
return database.query(new InsertUpdateQuery<Clan>(clan) {
|
return database.query(new InsertUpdateQuery<Clan>(clans) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, Clan object) {
|
ODatabaseDocumentTx database, Clan object) {
|
||||||
@@ -180,18 +180,18 @@ public abstract class OrientDBClanDAO extends AbstractOrientDBDAO<Clan, ClanID>
|
|||||||
document.field(CHAR_ID_LEADER, clan.getLeaderID().getID());
|
document.field(CHAR_ID_LEADER, clan.getLeaderID().getID());
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean update(Clan clan) {
|
public int updateObjects(Clan... clans) {
|
||||||
// cannot update chat message logs
|
// cannot update chat message logs
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delete(Clan clan) {
|
public int deleteObjects(Clan... clans) {
|
||||||
return database.query(new InsertUpdateQuery<Clan>(clan) {
|
return database.query(new InsertUpdateQuery<Clan>(clans) {
|
||||||
@Override
|
@Override
|
||||||
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
protected ONativeSynchQuery<ODocument, OQueryContextNativeSchema<ODocument>> createQuery(
|
||||||
ODatabaseDocumentTx database, final Clan clan) {
|
ODatabaseDocumentTx database, final Clan clan) {
|
||||||
@@ -221,6 +221,6 @@ public abstract class OrientDBClanDAO extends AbstractOrientDBDAO<Clan, ClanID>
|
|||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}) > 0;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import com.l2jserver.service.game.spawn.SpawnPointNotFoundServiceException;
|
|||||||
import com.l2jserver.service.game.spawn.SpawnService;
|
import com.l2jserver.service.game.spawn.SpawnService;
|
||||||
import com.l2jserver.service.game.world.WorldService;
|
import com.l2jserver.service.game.world.WorldService;
|
||||||
import com.l2jserver.service.game.world.event.WorldEventDispatcher;
|
import com.l2jserver.service.game.world.event.WorldEventDispatcher;
|
||||||
|
import com.l2jserver.util.ArrayUtils;
|
||||||
import com.l2jserver.util.geometry.Point3D;
|
import com.l2jserver.util.geometry.Point3D;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -177,12 +178,8 @@ public class ItemServiceImpl extends AbstractService implements ItemService {
|
|||||||
item = stack(stackItems);
|
item = stack(stackItems);
|
||||||
Item[] removedItems = character.getInventory().remove(
|
Item[] removedItems = character.getInventory().remove(
|
||||||
stackItems);
|
stackItems);
|
||||||
for (final Item removeItem : removedItems) {
|
Item[] databaseDeleteItems = ArrayUtils.copyArrayExcept(removedItems, item);
|
||||||
if (!removeItem.equals(item)) {
|
itemDao.deleteObjects(databaseDeleteItems);
|
||||||
itemDao.delete(removeItem);
|
|
||||||
itemIdProvider.destroy(removeItem.getID());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
character.getInventory().add(item);
|
character.getInventory().add(item);
|
||||||
} catch (NonStackableItemsServiceException e) {
|
} catch (NonStackableItemsServiceException e) {
|
||||||
character.getInventory().add(item);
|
character.getInventory().add(item);
|
||||||
@@ -195,6 +192,9 @@ public class ItemServiceImpl extends AbstractService implements ItemService {
|
|||||||
this.items.remove(item);
|
this.items.remove(item);
|
||||||
|
|
||||||
itemDao.save(item);
|
itemDao.save(item);
|
||||||
|
if (!item.equals(originalItem)) {
|
||||||
|
itemDao.save(originalItem);
|
||||||
|
}
|
||||||
spawnService.unspawn(originalItem);
|
spawnService.unspawn(originalItem);
|
||||||
eventDispatcher.dispatch(new ItemPickUpEvent(character,
|
eventDispatcher.dispatch(new ItemPickUpEvent(character,
|
||||||
originalItem, item));
|
originalItem, item));
|
||||||
|
|||||||
Reference in New Issue
Block a user