Skip to content
Snippets Groups Projects
Commit 9ea1080f authored by Leonard's avatar Leonard
Browse files

quite a bit of work

parent 5e471a07
No related branches found
No related tags found
No related merge requests found
Showing with 213 additions and 30 deletions
No preview for this file type
...@@ -4,8 +4,15 @@ ...@@ -4,8 +4,15 @@
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="database" transaction-type="RESOURCE_LOCAL"> <persistence-unit name="database" transaction-type="RESOURCE_LOCAL">
<class>com.galaxytrucker.galaxytruckerreloaded.Model.User</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew</class> <class>com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Ship</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.User</class>
<properties> <properties>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:./database;DB_CLOSE_ON_EXIT=FALSE;" /> <property name="javax.persistence.jdbc.url" value="jdbc:h2:./database;DB_CLOSE_ON_EXIT=FALSE;" />
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
......
package com.galaxytrucker.galaxytruckerreloaded.Communication; package com.galaxytrucker.galaxytruckerreloaded.Communication;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject; import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject; import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
/** This class handles the client-side networking */
public class Client { public class Client {
/** /**
...@@ -34,16 +37,25 @@ public class Client { ...@@ -34,16 +37,25 @@ public class Client {
*/ */
private ObjectInputStream receiveObject; private ObjectInputStream receiveObject;
/**
* The client's ship
*/
@Getter
private Ship myShip;
/** /**
* Send a request to the server * Send a request to the server
*
* @param requestObject - the request object
* @return the server's response * @return the server's response
*
* @throws IllegalArgumentException on exception
*/ */
public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException { public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException {
try { try {
sendObject.writeObject(requestObject); sendObject.writeObject(requestObject);
return (ResponseObject) receiveObject.readObject(); return (ResponseObject) receiveObject.readObject();
} } catch (Exception e) {
catch (Exception e){
e.printStackTrace(); e.printStackTrace();
throw new IllegalArgumentException(e.getMessage()); throw new IllegalArgumentException(e.getMessage());
} }
...@@ -51,11 +63,23 @@ public class Client { ...@@ -51,11 +63,23 @@ public class Client {
/** /**
* Login * Login
*
* @param username - the username of the user to login
*
* @return whether the client is allowed to login or not
*
* @throws IllegalArgumentException on error
*/ */
public boolean login(String username) throws IllegalArgumentException { public boolean login(String username) throws IllegalArgumentException {
try { try {
send.println("[LOGIN]:" + username); send.println("[LOGIN]:" + username);
return receive.readLine().equals("[ACCEPTED]"); boolean successfulLogin = receive.readLine().equals("true");
if (successfulLogin) {
send.println("[GIVE-ME-SHIP]");
myShip = (Ship) receiveObject.readObject();
return true;
}
return false;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new IllegalArgumentException(e.getMessage()); throw new IllegalArgumentException(e.getMessage());
...@@ -64,6 +88,11 @@ public class Client { ...@@ -64,6 +88,11 @@ public class Client {
/** /**
* Constructor * Constructor
*
* @param ipAddress - the ipAddress of the server
* @param port - the server port
*
* @throws IllegalArgumentException on error
*/ */
public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException { public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException {
try { try {
......
...@@ -3,29 +3,49 @@ package com.galaxytrucker.galaxytruckerreloaded.Communication; ...@@ -3,29 +3,49 @@ package com.galaxytrucker.galaxytruckerreloaded.Communication;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet; import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import lombok.Getter; import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
import lombok.Setter; import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
import lombok.*;
@Setter @Setter
@Getter @Getter
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
public class ClientControllerCommunicator { public class ClientControllerCommunicator {
/** Client ship */ /**
* Client ship
*/
private Ship clientShip; private Ship clientShip;
private Overworld map; private Overworld map;
private Planet currentPlanet; private Planet currentPlanet;
/** Issue a new request and receive a response /**
* Client class
*/
@NonNull
private Client client;
/**
* Issue a new request and receive a response
*
* @param request - the request * @param request - the request
* @return the server's response */ * @return the server's response
public String sendRequest(String request){ */
return null; public ResponseObject sendRequest(RequestObject request) throws IllegalArgumentException {
return client.sendAndReceive(request);
} }
/** Issue login request /**
* Issue login request
*
* @param username - the username * @param username - the username
* @return true if the user already exists else create a enw spaceship */ * @return true if the user already exists else create a enw spaceship
public boolean login(String username){ */
return false; public boolean login(String username) {
boolean permittedLogin = client.login(username);
if (permittedLogin) {
clientShip = client.getMyShip();
}
return permittedLogin;
} }
} }
...@@ -5,10 +5,7 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; ...@@ -5,10 +5,7 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import lombok.*; import lombok.*;
import javax.persistence.Entity; import javax.persistence.*;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
...@@ -58,4 +55,8 @@ public class Planet implements Serializable { ...@@ -58,4 +55,8 @@ public class Planet implements Serializable {
/** Trader */ /** Trader */
@OneToOne @OneToOne
private Trader trader; private Trader trader;
/** The overWorld this planet belongs to */
@ManyToOne
private Overworld overworld;
} }
...@@ -5,9 +5,7 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; ...@@ -5,9 +5,7 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon; import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
import lombok.*; import lombok.*;
import javax.persistence.Entity; import javax.persistence.*;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.io.Serializable; import java.io.Serializable;
@Getter @Getter
...@@ -15,18 +13,20 @@ import java.io.Serializable; ...@@ -15,18 +13,20 @@ import java.io.Serializable;
@Entity @Entity
@RequiredArgsConstructor(access = AccessLevel.PUBLIC) @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC) @NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Trader extends Planet implements Serializable { public class Trader implements Serializable {
/** ID */ /** ID */
@Id @NonNull @Id
private int id; private int id;
/** Associated user */ /** Planet the trader is located at */
@OneToOne (cascade = CascadeType.ALL)
@NonNull
private Planet planet; private Planet planet;
/** Weapons for sale */ /** Weapons for sale */
@NonNull @NonNull
@OneToMany @OneToMany (cascade = CascadeType.ALL)
private List<Weapon> weaponStock; private List<Weapon> weaponStock;
/** Rockets for sale */ /** Rockets for sale */
...@@ -38,7 +38,7 @@ public class Trader extends Planet implements Serializable { ...@@ -38,7 +38,7 @@ public class Trader extends Planet implements Serializable {
private int fuelStock; private int fuelStock;
/** Crew for sale */ /** Crew for sale */
@OneToMany @OneToMany (cascade = CascadeType.ALL)
@NonNull @NonNull
private List<Crew> crewStock; private List<Crew> crewStock;
......
...@@ -78,6 +78,7 @@ public class Ship implements Serializable { ...@@ -78,6 +78,7 @@ public class Ship implements Serializable {
* The planet the ship is currently at * The planet the ship is currently at
*/ */
@NonNull @NonNull
@ManyToOne
private Planet planet; private Planet planet;
/** Shields */ /** Shields */
...@@ -92,12 +93,12 @@ public class Ship implements Serializable { ...@@ -92,12 +93,12 @@ public class Ship implements Serializable {
/** This ship's systems */ /** This ship's systems */
@NonNull @NonNull
@ElementCollection @OneToMany
private List<Room> systems; private List<Room> systems;
/** Inventory */ /** Inventory */
@NonNull @NonNull
@ElementCollection @OneToMany
private List<Weapon> inventory; private List<Weapon> inventory;
/** Whether or not the ship is in combat */ /** Whether or not the ship is in combat */
......
package com.galaxytrucker.galaxytruckerreloaded.Test.Server.Persistence;
import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.PlanetEvent;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database;
import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.TraderDAO;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import javax.persistence.EntityManager;
import java.util.ArrayList;
import java.util.Random;
import java.util.UUID;
/**
* Test the trader database access object
*/
public class TraderDAOTest {
/**
* EntityManager
*/
private EntityManager entityManager = Database.getEntityManager();
/**
* Trader DAO
*/
private TraderDAO traderDAO = new TraderDAO();
/**
* Test adding a new trader to the database
*/
@Test
public void testPersist() {
Trader trader = new Trader(UUID.randomUUID().hashCode(), new Planet(planetNameGenerator(), 10, 10,
PlanetEvent.SHOP, new ArrayList<Ship>()), new ArrayList<Weapon>(), 0, 0, new ArrayList<Crew>());
try {
traderDAO.persist(trader);
entityManager.getTransaction().begin();
Trader trader1 = entityManager.find(Trader.class, trader.getId());
entityManager.getTransaction().commit();
Assert.assertEquals(trader1.getId(), trader.getId());
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException();
}
}
/**
* Test editing an existing trader in the database
*/
@Test
public void testEdit() {
Trader trader = new Trader(UUID.randomUUID().hashCode(), new Planet(planetNameGenerator(), 10, 10,
PlanetEvent.SHOP, new ArrayList<Ship>()), new ArrayList<Weapon>(), 0, 0, new ArrayList<Crew>());
try {
traderDAO.persist(trader);
entityManager.getTransaction().begin();
Trader trader1 = entityManager.find(Trader.class, trader.getId());
trader1.setFuelStock(10);
traderDAO.update(trader1);
entityManager.getTransaction().commit();
Assert.assertEquals(trader1.getFuelStock(), 10);
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException();
}
}
/**
* Test removing an existing trader from the database
*/
@Test
public void testRemove() {
Trader trader = new Trader(UUID.randomUUID().hashCode(), new Planet(planetNameGenerator(), 10, 10,
PlanetEvent.SHOP, new ArrayList<Ship>()), new ArrayList<Weapon>(), 0, 0, new ArrayList<Crew>());
try {
traderDAO.persist(trader);
traderDAO.remove(trader);
entityManager.getTransaction().begin();
Trader trader1 = entityManager.find(Trader.class,trader.getId());
entityManager.getTransaction().commit();
Assert.assertNull(trader1);
}
catch (Exception e){
e.printStackTrace();
throw new IllegalArgumentException();
}
}
/** Random planet name generator
* @return a random planet name */
private String planetNameGenerator(){
Random random = new Random();
String alphabet = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
alphabet = alphabet.replace(',',' ');
StringBuilder builder = new StringBuilder();
for (int i=0;i<100;i++){
builder.append(alphabet.toCharArray()[random.nextInt(alphabet.length())]);
}
return builder.toString();
}
}
...@@ -4,8 +4,15 @@ ...@@ -4,8 +4,15 @@
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="database" transaction-type="RESOURCE_LOCAL"> <persistence-unit name="database" transaction-type="RESOURCE_LOCAL">
<class>com.galaxytrucker.galaxytruckerreloaded.Model.User</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew</class> <class>com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.Ship</class>
<class>com.galaxytrucker.galaxytruckerreloaded.Model.User</class>
<properties> <properties>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:./database;DB_CLOSE_ON_EXIT=FALSE;" /> <property name="javax.persistence.jdbc.url" value="jdbc:h2:./database;DB_CLOSE_ON_EXIT=FALSE;" />
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
......
# Persistence:
### Exception: java.lang.ClassCastException
* stack trace: class org.hibernate.mapping.SingleTableSubclass cannot be cast to class org.hibernate.mapping.RootClass
* Possible Solution: Remove @Id Tags from Subclasses.
###
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment