This commit is contained in:
@@ -23,8 +23,13 @@ import de.steamwar.sql.internal.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import javax.swing.plaf.nimbus.State;
|
||||
import java.io.*;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
@AllArgsConstructor
|
||||
@@ -40,26 +45,47 @@ public class NodeData {
|
||||
|
||||
private static final Table<NodeData> table = new Table<>(NodeData.class);
|
||||
|
||||
private static final Statement updateDatabase = new Statement("INSERT INTO NodeData(NodeId, NodeFormat, SchemData) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE NodeFormat = VALUES(NodeFormat), SchemData = VALUES(SchemData)");
|
||||
private static final Statement selSchemData = new Statement("SELECT SchemData FROM NodeData WHERE NodeId = ?");
|
||||
private static final Statement updateDatabase = new Statement("INSERT INTO NodeData(NodeId, NodeFormat, SchemData) VALUES (?, ?, ?)", true);
|
||||
private static final Statement selSchemData = new Statement("SELECT SchemData FROM NodeData WHERE NodeId = ? AND CreatedAt = ?");
|
||||
private static final Statement delete = table.delete(Table.PRIMARY);
|
||||
|
||||
private static final SelectStatement<NodeData> get = table.select(Table.PRIMARY);
|
||||
private static final SelectStatement<NodeData> get = new SelectStatement<>(table, "SELECT NodeId, CreatedAt, NodeFormat FROM NodeData WHERE NodeId = ? ORDER BY CreatedAt ");
|
||||
private static final Statement getRevisions = new Statement("SELECT COUNT(DISTINCT CreatedAt) as CNT FROM NodeData WHERE NodeId = ?");
|
||||
private static final SelectStatement<NodeData> getLatest = new SelectStatement<>(table, "SELECT NodeId, CreatedAt, NodeFormat FROM NodeData WHERE NodeId = ? ORDER BY CreatedAt LIMIT 1");
|
||||
|
||||
public static NodeData get(SchematicNode node) {
|
||||
if(node.isDir())
|
||||
throw new IllegalArgumentException("Node is a directory");
|
||||
return get.select(rs -> {
|
||||
if(rs.next()) {
|
||||
return new NodeData(node.getId(), SchematicFormat.values()[rs.getInt("NodeFormat")]);
|
||||
public static NodeData getLatest(SchematicNode node) {
|
||||
if (node.isDir()) throw new IllegalArgumentException("Node is dir");
|
||||
return Optional.ofNullable(getLatest.select(node)).orElseGet(() -> new NodeData(node.getId(), Timestamp.from(Instant.now()), SchematicFormat.MCEDIT));
|
||||
}
|
||||
|
||||
public static List<NodeData> get(SchematicNode node) {
|
||||
return get.listSelect(node);
|
||||
}
|
||||
|
||||
public static NodeData get(SchematicNode node, int revision) {
|
||||
return get.listSelect(node).get(revision - 1);
|
||||
}
|
||||
|
||||
public static int getRevisions(SchematicNode node) {
|
||||
return getRevisions.select(rs -> {
|
||||
if (rs.next()) {
|
||||
return rs.getInt("CNT");
|
||||
} else {
|
||||
return new NodeData(node.getId(), SchematicFormat.MCEDIT);
|
||||
return 0;
|
||||
}
|
||||
}, node);
|
||||
}
|
||||
|
||||
public static void saveFromStream(SchematicNode node, InputStream blob, SchematicFormat format) {
|
||||
updateDatabase.update(node.getId(), format, blob);
|
||||
}
|
||||
|
||||
@Field(keys = {Table.PRIMARY})
|
||||
private final int nodeId;
|
||||
|
||||
@Field
|
||||
private Timestamp createdAt;
|
||||
|
||||
@Field
|
||||
private SchematicFormat nodeFormat;
|
||||
|
||||
@@ -84,15 +110,19 @@ public class NodeData {
|
||||
} catch (IOException e) {
|
||||
throw new SecurityException("SchemData is wrong", e);
|
||||
}
|
||||
}, nodeId);
|
||||
}, nodeId, createdAt);
|
||||
} catch (Exception e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void saveFromStream(InputStream blob, SchematicFormat newFormat) {
|
||||
updateDatabase.update(nodeId, newFormat, blob);
|
||||
nodeFormat = newFormat;
|
||||
saveFromStream(SchematicNode.getSchematicNode(nodeId), blob, newFormat);
|
||||
}
|
||||
|
||||
public void delete() {
|
||||
delete.update(nodeId, createdAt);
|
||||
}
|
||||
|
||||
@AllArgsConstructor
|
||||
|
||||
@@ -407,7 +407,7 @@ public class SchematicNode {
|
||||
public String getFileEnding() {
|
||||
if (isDir())
|
||||
throw new SecurityException("Node is Directory");
|
||||
return NodeData.get(this).getNodeFormat().getFileEnding();
|
||||
return NodeData.getLatest(this).getNodeFormat().getFileEnding();
|
||||
}
|
||||
|
||||
public int getRank() {
|
||||
|
||||
Reference in New Issue
Block a user