Skip to content

Commit c038d9a

Browse files
authored
Merge pull request #8 from ifydev/feature/backends
Feature/backends
2 parents 02d4786 + 0dae808 commit c038d9a

File tree

23 files changed

+1035
-174
lines changed

23 files changed

+1035
-174
lines changed

API/src/main/java/me/ifydev/dimensify/api/DimensifyAPI.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@
2525
package me.ifydev.dimensify.api;
2626

2727
import lombok.Getter;
28+
import me.ifydev.dimensify.api.backend.AbstractDataHandler;
29+
import me.ifydev.dimensify.api.backend.BackendType;
30+
import me.ifydev.dimensify.api.backend.ConnectionInformation;
2831

32+
import java.lang.reflect.InvocationTargetException;
2933
import java.util.Optional;
3034

3135
/**
@@ -36,9 +40,31 @@
3640
*/
3741
public class DimensifyAPI {
3842

39-
@Getter private Optional<DimensifyAPI> api;
43+
private static Optional<DimensifyAPI> api;
4044

41-
public void intialize() {
45+
@Getter private Optional<AbstractDataHandler> databaseHandler;
46+
47+
public void initialize(Class<? extends AbstractDataHandler> handler, BackendType backendType, Optional<ConnectionInformation> connectionInformation) throws Exception {
4248
api = Optional.of(this);
49+
50+
try {
51+
// If we don't have a database handler, then we default to the flat-file handler.
52+
Class<? extends AbstractDataHandler> clazz = backendType.getHandler().orElse(handler);
53+
databaseHandler = Optional.of(clazz.getConstructor(ConnectionInformation.class).newInstance(connectionInformation.orElse(null)));
54+
} catch (IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
55+
e.printStackTrace();
56+
}
57+
if (!databaseHandler.isPresent()) throw new Exception("No data handler present.");
58+
59+
databaseHandler.ifPresent(h -> {
60+
h.initialize();
61+
h.reload();
62+
if (h.connect()) System.out.println("Connected to database!");
63+
else System.out.println("Unable to connect to database!");
64+
});
65+
}
66+
67+
public static Optional<DimensifyAPI> get() {
68+
return api;
4369
}
4470
}

API/src/main/java/me/ifydev/dimensify/api/DimensifyConstants.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ public class DimensifyConstants {
3838

3939
// Not enough arguments responses
4040
private static final String NOT_ENOUGH_ARGUMENTS_BASE = DIMENSIFY_PREFIX + "&c&lNot enough arguments: ";
41-
public static final String NOT_ENOUGH_ARGUMENTS_CREATE_WORLD = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify create [dimension_type] [world_name]";
42-
public static final String NOT_ENOUGH_ARGUMENTS_SEND_PLAYER = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify send [player] [world_name]";
43-
public static final String NOT_ENOUGH_ARGUMENTS_GO = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify go [world_name]";
44-
public static final String NOT_ENOUGH_ARGUMENTS_DELETE = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify delete [world_name]";
41+
public static final String NOT_ENOUGH_ARGUMENTS_CREATE_WORLD = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify create <dimension_type> <world_name>";
42+
public static final String NOT_ENOUGH_ARGUMENTS_SEND_PLAYER = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify send <player> <dimension>";
43+
public static final String NOT_ENOUGH_ARGUMENTS_GO = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify go <dimension>";
44+
public static final String NOT_ENOUGH_ARGUMENTS_DELETE = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify delete <dimension>";
4545
public static final String NOT_ENOUGH_ARGUMENTS_PORTAL = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify <create|delete|link> [args...]";
46-
public static final String NOT_ENOUGH_ARGUMENTS_PORTAL_LINK = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify link <source_portal> <destination_portal>";
46+
public static final String NOT_ENOUGH_ARGUMENTS_PORTAL_LINK = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify link <source_portal> <destination_dimension>";
4747
public static final String NOT_ENOUGH_ARGUMENTS_PORTAL_CREATE = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify portal create <name>";
4848
public static final String NOT_ENOUGH_ARGUMENTS_PORTAL_DELETE = NOT_ENOUGH_ARGUMENTS_BASE + "/dimensify portal delete <name>";
4949

5050
// General errors
51-
public static final String PLUGIN_NOT_PRESENT = DIMENSIFY_PREFIX + "&c&lUnable to continue: Plugin not present?!";
51+
public static final String DATABASE_HANDLER_NOT_PRESENT = DIMENSIFY_PREFIX + "&c&lUnable to continue: Database handler not present?!";
5252
public static final String WORLD_EXISTS = DIMENSIFY_PREFIX + "&c&lWorld '<WORLD>' already exists!";
5353
public static final String INVALID_WORLD = DIMENSIFY_PREFIX + "&c&lWorld '<WORLD>' doesn't exist.";
5454
public static final String INVALID_DIMENSION_TYPE = DIMENSIFY_PREFIX + "&c&lDimension type '<TYPE>' is invalid.";
@@ -66,12 +66,13 @@ public class DimensifyConstants {
6666
// General success
6767
public static final String CREATING_WORLD = DIMENSIFY_PREFIX + "World '<WORLD>' is being created...";
6868
public static final String WORLD_CREATED = DIMENSIFY_PREFIX + "World '<WORLD>' created!";
69-
public static final String WHOOSH = DIMENSIFY_PREFIX + "Whoosh!";
69+
public static final String WHOOSH = "&a&lWhoosh!";
7070
public static final String WORLD_DELETED = DIMENSIFY_PREFIX + "World '<WORLD>' has been deleted!";
7171
public static final String YOU_HAVE_BEEN_SENT = DIMENSIFY_PREFIX + "You have been sent to <WORLD>!";
7272
public static final String PLAYER_HAS_BEEN_SENT = DIMENSIFY_PREFIX + "<PLAYER> has been sent to <WORLD>!";
7373
public static final String PORTALS_LINKED = DIMENSIFY_PREFIX + "Portals have been linked!";
7474
public static final String PORTAL_CREATED = DIMENSIFY_PREFIX + "Portal '<PORTAL>' created!";
75+
public static final String PORTAL_DELETED = DIMENSIFY_PREFIX + "Portal '<PORTAL>' has been deleted!";
7576

7677
// Help response
7778
// TODO: This should automatically paginate.
@@ -85,7 +86,7 @@ public class DimensifyConstants {
8586
"&a&l/dimensify delete <world_name>",
8687
"&a&l/dimensify default [world_name]",
8788
"&a&l/dimensify list",
88-
"&a&l/dimensify link <source_portal> <destination_portal>"
89+
"&a&l/dimensify link <source_portal> <destination_dimension>"
8990
)
9091
);
9192
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package me.ifydev.dimensify.api.backend;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
import me.ifydev.dimensify.api.dimensions.Dimension;
6+
import me.ifydev.dimensify.api.portal.PortalMeta;
7+
8+
import java.util.*;
9+
10+
/**
11+
* @author Innectic
12+
* @since 06/26/2018
13+
*/
14+
@RequiredArgsConstructor
15+
public abstract class AbstractDataHandler {
16+
17+
protected List<Dimension> dimensions = new ArrayList<>();
18+
protected List<PortalMeta> portals = new ArrayList<>();
19+
protected Map<String, String> destinations = new HashMap<>();
20+
@Getter protected final ConnectionInformation connectionInformation;
21+
22+
/**
23+
* Setup anything that's needed before we can connect.
24+
*/
25+
public abstract void initialize();
26+
27+
/**
28+
* Connect to whatever kind of handler we're going for.
29+
*
30+
* @return if it was successful.
31+
*/
32+
public abstract boolean connect();
33+
34+
/**
35+
* Force all data within the cache to be reloaded.
36+
*/
37+
public abstract void reload();
38+
39+
/**
40+
* Drop all values from the cache.
41+
*/
42+
public abstract void drop();
43+
44+
public abstract boolean createPortal(PortalMeta meta);
45+
public abstract boolean removePortal(String name);
46+
public abstract List<PortalMeta> getPortals();
47+
48+
public abstract void setPortalDestination(String portal, String destination);
49+
50+
public abstract boolean createDimension(Dimension dimension);
51+
public abstract boolean removeDimension(String name);
52+
public abstract List<Dimension> getDimensions();
53+
54+
public abstract Optional<Dimension> getDimension(String name);
55+
public abstract Optional<PortalMeta> getPortal(String name);
56+
public abstract Optional<String> getDestinationForPortal(String portalName);
57+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package me.ifydev.dimensify.api.backend;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import me.ifydev.dimensify.api.backend.impl.SQLHandler;
6+
7+
import java.util.Arrays;
8+
import java.util.Optional;
9+
10+
/**
11+
* @author Innectic
12+
* @since 06/26/2018
13+
*/
14+
@AllArgsConstructor
15+
@Getter
16+
public enum BackendType {
17+
FLAT_FILE(Optional.empty(), "FlatFile"),
18+
MYSQL(Optional.of(SQLHandler.class), "MySQL"),
19+
SQLITE(Optional.of(SQLHandler.class), "SQLite");
20+
21+
private Optional<Class<? extends AbstractDataHandler>> handler;
22+
private String displayName;
23+
24+
public static Optional<BackendType> getHandlerForType(String type) {
25+
return Arrays.stream(values()).filter(handler -> handler.getDisplayName().equalsIgnoreCase(type)).findFirst();
26+
}
27+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.ifydev.dimensify.api.backend;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
/**
7+
* @author Innectic
8+
* @since 06/26/2018
9+
*/
10+
@AllArgsConstructor
11+
public enum ConnectionError {
12+
13+
REJECTED("Connection to the database server rejected."),
14+
DATABASE_EXPECTION("Exception in the database handler.");
15+
16+
@Getter private String display;
17+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.ifydev.dimensify.api.backend;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
import java.util.Map;
7+
8+
/**
9+
* @author Innectic
10+
* @since 06/26/2018
11+
*/
12+
@AllArgsConstructor
13+
@Getter
14+
public class ConnectionInformation {
15+
// TODO: This was copy-pasted from Permissify. This should be generified into some-kind of a core plugin.
16+
private String url;
17+
private String database;
18+
private int port;
19+
private String username;
20+
private String password;
21+
private Map<String, Object> meta;
22+
}

0 commit comments

Comments
 (0)