From 03e6ad6e1a1fb4b4ef12dc10d633130a1490ab9a Mon Sep 17 00:00:00 2001 From: Rogiel Date: Mon, 5 Dec 2011 23:38:08 -0200 Subject: [PATCH] Implements the OrientDB ClanDAO --- .../database/orientdb/OrientDBClanDAO.java | 226 ++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/orientdb/OrientDBClanDAO.java diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/orientdb/OrientDBClanDAO.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/orientdb/OrientDBClanDAO.java new file mode 100644 index 000000000..852b80d9b --- /dev/null +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/orientdb/OrientDBClanDAO.java @@ -0,0 +1,226 @@ +/* + * This file is part of l2jserver2 . + * + * 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 . + */ +package com.l2jserver.service.database.orientdb; + +import java.sql.SQLException; +import java.util.List; + +import com.google.inject.Inject; +import com.l2jserver.model.dao.CharacterDAO; +import com.l2jserver.model.dao.ClanDAO; +import com.l2jserver.model.id.ChatMessageID; +import com.l2jserver.model.id.object.CharacterID; +import com.l2jserver.model.id.object.ClanID; +import com.l2jserver.model.id.object.provider.CharacterIDProvider; +import com.l2jserver.model.id.object.provider.ClanIDProvider; +import com.l2jserver.model.world.Clan; +import com.l2jserver.service.database.AbstractOrientDatabaseService.CachedMapper; +import com.l2jserver.service.database.AbstractOrientDatabaseService.InsertUpdateQuery; +import com.l2jserver.service.database.AbstractOrientDatabaseService.Mapper; +import com.l2jserver.service.database.AbstractOrientDatabaseService.SelectListQuery; +import com.l2jserver.service.database.AbstractOrientDatabaseService.SelectSingleQuery; +import com.l2jserver.service.database.DatabaseService; +import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx; +import com.orientechnologies.orient.core.query.nativ.ONativeSynchQuery; +import com.orientechnologies.orient.core.query.nativ.OQueryContextNativeSchema; +import com.orientechnologies.orient.core.record.impl.ODocument; + +/** + * {@link CharacterDAO} implementation for JDBC + * + * @author Rogiel + */ +public abstract class OrientDBClanDAO extends AbstractOrientDBDAO + implements ClanDAO { + /** + * The {@link ChatMessageID} factory + */ + private final ClanIDProvider idFactory; + /** + * The {@link CharacterID} factory + */ + private final CharacterIDProvider charIdFactory; + + /** + * Clan table name + */ + public static final String CLASS_NAME = Clan.class.getSimpleName(); + // FIELDS + public static final String CLAN_ID = "clan_id"; + public static final String CHAR_ID_LEADER = "character_id_leader"; + + /** + * @param database + * the database service + * @param idFactory + * the chat message id provider + * @param charIdFactory + * the character id provider + */ + @Inject + public OrientDBClanDAO(DatabaseService database, ClanIDProvider idFactory, + final CharacterIDProvider charIdFactory) { + super(database); + this.idFactory = idFactory; + this.charIdFactory = charIdFactory; + } + + /** + * The {@link Mapper} for {@link ClanID} + */ + private final Mapper idMapper = new Mapper() { + @Override + public ClanID map(ODocument document) throws SQLException { + return idFactory.resolveID((Integer) document.field(CLAN_ID)); + } + }; + + /** + * The {@link Mapper} for {@link Clan} + */ + private final Mapper mapper = new CachedMapper( + database, idMapper) { + @Override + protected Clan map(ClanID id, ODocument document) throws SQLException { + final Clan clan = new Clan(); + + clan.setID(id); + clan.setLeaderID(charIdFactory.resolveID((Integer) document + .field(CHAR_ID_LEADER))); + + return clan; + } + }; + + @Override + public Clan select(final ClanID id) { + return database.query(new SelectSingleQuery() { + @Override + protected ONativeSynchQuery> createQuery( + ODatabaseDocumentTx database) { + return new ONativeSynchQuery>( + database, CLASS_NAME, + new OQueryContextNativeSchema()) { + private static final long serialVersionUID = 1L; + + @Override + public boolean filter( + OQueryContextNativeSchema criteria) { + return criteria.field(CLAN_ID).eq(id.getID()).go(); + }; + }; + } + + @Override + protected Mapper mapper() { + return mapper; + } + }); + } + + @Override + public List selectIDs() { + return database.query(new SelectListQuery() { + @Override + protected ONativeSynchQuery> createQuery( + ODatabaseDocumentTx database) { + return new ONativeSynchQuery>( + database, CLASS_NAME, + new OQueryContextNativeSchema()) { + private static final long serialVersionUID = 1L; + + @Override + public boolean filter( + OQueryContextNativeSchema criteria) { + return true; + }; + }; + } + + @Override + protected Mapper mapper() { + return idMapper; + } + }); + } + + @Override + public boolean insert(Clan clan) { + return database.query(new InsertUpdateQuery(clan) { + @Override + protected ONativeSynchQuery> createQuery( + ODatabaseDocumentTx database, Clan object) { + return null; + } + + @Override + protected ODocument update(ODocument document, Clan object) + throws SQLException { + return null; + } + + @Override + protected ODocument insert(ODocument document, Clan clan) + throws SQLException { + document.field(CLAN_ID, clan.getID().getID()); + document.field(CHAR_ID_LEADER, clan.getLeaderID().getID()); + return document; + } + }) > 0; + } + + @Override + public boolean update(Clan clan) { + // cannot update chat message logs + return false; + } + + @Override + public boolean delete(Clan clan) { + return database.query(new InsertUpdateQuery(clan) { + @Override + protected ONativeSynchQuery> createQuery( + ODatabaseDocumentTx database, final Clan clan) { + return new ONativeSynchQuery>( + database, CLASS_NAME, + new OQueryContextNativeSchema()) { + private static final long serialVersionUID = 1L; + + @Override + public boolean filter( + OQueryContextNativeSchema criteria) { + return criteria.field(CLAN_ID).eq(clan.getID()).go(); + }; + }; + } + + @Override + protected ODocument update(ODocument document, Clan clan) + throws SQLException { + document.delete(); + return null; + } + + @Override + protected ODocument insert(ODocument document, Clan object) + throws SQLException { + // TODO Auto-generated method stub + return null; + } + }) > 0; + } +}