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 @@
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<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.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>
<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" />
......
package com.galaxytrucker.galaxytruckerreloaded.Communication;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
import lombok.Getter;
import lombok.NonNull;
import java.io.*;
import java.net.Socket;
/** This class handles the client-side networking */
public class Client {
/**
......@@ -34,16 +37,25 @@ public class Client {
*/
private ObjectInputStream receiveObject;
/**
* The client's ship
*/
@Getter
private Ship myShip;
/**
* Send a request to the server
*
* @param requestObject - the request object
* @return the server's response
*
* @throws IllegalArgumentException on exception
*/
public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException {
try {
sendObject.writeObject(requestObject);
return (ResponseObject) receiveObject.readObject();
}
catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
......@@ -51,11 +63,23 @@ public class Client {
/**
* 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 {
try {
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) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
......@@ -64,6 +88,11 @@ public class Client {
/**
* 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 {
try {
......
......@@ -3,29 +3,49 @@ package com.galaxytrucker.galaxytruckerreloaded.Communication;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld;
import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet;
import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
import lombok.Getter;
import lombok.Setter;
import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
import lombok.*;
@Setter
@Getter
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
public class ClientControllerCommunicator {
/** Client ship */
/**
* Client ship
*/
private Ship clientShip;
private Overworld map;
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
* @return the server's response */
public String sendRequest(String request){
return null;
* @return the server's response
*/
public ResponseObject sendRequest(RequestObject request) throws IllegalArgumentException {
return client.sendAndReceive(request);
}
/** Issue login request
/**
* Issue login request
*
* @param username - the username
* @return true if the user already exists else create a enw spaceship */
public boolean login(String username){
return false;
* @return true if the user already exists else create a enw spaceship
*/
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;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
......@@ -58,4 +55,8 @@ public class Planet implements Serializable {
/** Trader */
@OneToOne
private Trader trader;
/** The overWorld this planet belongs to */
@ManyToOne
private Overworld overworld;
}
......@@ -5,9 +5,7 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.*;
import java.io.Serializable;
@Getter
......@@ -15,18 +13,20 @@ import java.io.Serializable;
@Entity
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Trader extends Planet implements Serializable {
public class Trader implements Serializable {
/** ID */
@Id
@NonNull @Id
private int id;
/** Associated user */
/** Planet the trader is located at */
@OneToOne (cascade = CascadeType.ALL)
@NonNull
private Planet planet;
/** Weapons for sale */
@NonNull
@OneToMany
@OneToMany (cascade = CascadeType.ALL)
private List<Weapon> weaponStock;
/** Rockets for sale */
......@@ -38,7 +38,7 @@ public class Trader extends Planet implements Serializable {
private int fuelStock;
/** Crew for sale */
@OneToMany
@OneToMany (cascade = CascadeType.ALL)
@NonNull
private List<Crew> crewStock;
......
......@@ -78,6 +78,7 @@ public class Ship implements Serializable {
* The planet the ship is currently at
*/
@NonNull
@ManyToOne
private Planet planet;
/** Shields */
......@@ -92,12 +93,12 @@ public class Ship implements Serializable {
/** This ship's systems */
@NonNull
@ElementCollection
@OneToMany
private List<Room> systems;
/** Inventory */
@NonNull
@ElementCollection
@OneToMany
private List<Weapon> inventory;
/** 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 @@
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<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.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>
<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" />
......
# 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