src/main/java/de/uapcore/lightpit/dao/postgres/PGVersionDao.java

changeset 59
c759c60507a2
parent 51
dd0a45ae25d7
child 62
833e0385572a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/de/uapcore/lightpit/dao/postgres/PGVersionDao.java	Sun May 17 16:23:39 2020 +0200
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2018 Mike Becker. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+package de.uapcore.lightpit.dao.postgres;
+
+import de.uapcore.lightpit.dao.VersionDao;
+import de.uapcore.lightpit.entities.Project;
+import de.uapcore.lightpit.entities.Version;
+import de.uapcore.lightpit.entities.VersionStatus;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public final class PGVersionDao implements VersionDao {
+
+    private final PreparedStatement insert, update, list, find;
+
+    public PGVersionDao(Connection connection) throws SQLException {
+        list = connection.prepareStatement(
+                "select id, project, name, ordinal, status " +
+                        "from lpit_version " +
+                        "where project = ? " +
+                        "order by ordinal, name");
+
+        find = connection.prepareStatement(
+                "select id, project, name, ordinal, status " +
+                        "from lpit_version " +
+                        "where id = ?");
+
+        insert = connection.prepareStatement(
+                "insert into lpit_version (project, name, ordinal, status) values (?, ?, ?, ?::version_status)"
+        );
+        update = connection.prepareStatement(
+                "update lpit_version set name = ?, ordinal = ?, status = ?::version_status where id = ?"
+        );
+    }
+
+    public Version mapColumns(ResultSet result) throws SQLException {
+        final var version = new Version(result.getInt("id"), new Project(result.getInt("project")));
+        version.setName(result.getString("name"));
+        version.setOrdinal(result.getInt("ordinal"));
+        version.setStatus(VersionStatus.valueOf(result.getString("status")));
+        return version;
+    }
+
+    @Override
+    public void save(Version instance) throws SQLException {
+        Objects.requireNonNull(instance.getName());
+        Objects.requireNonNull(instance.getProject());
+        insert.setInt(1, instance.getProject().getId());
+        insert.setString(2, instance.getName());
+        insert.setInt(3, instance.getOrdinal());
+        insert.setString(4, instance.getStatus().name());
+        insert.executeUpdate();
+    }
+
+    @Override
+    public boolean update(Version instance) throws SQLException {
+        Objects.requireNonNull(instance.getName());
+        update.setString(1, instance.getName());
+        update.setInt(2, instance.getOrdinal());
+        update.setString(3, instance.getStatus().name());
+        update.setInt(4, instance.getId());
+        return update.executeUpdate() > 0;
+    }
+
+    @Override
+    public List<Version> list(Project project) throws SQLException {
+        list.setInt(1, project.getId());
+        List<Version> versions = new ArrayList<>();
+        try (var result = list.executeQuery()) {
+            while (result.next()) {
+                versions.add(mapColumns(result));
+            }
+        }
+        return versions;
+    }
+
+    @Override
+    public Version find(int id) throws SQLException {
+        find.setInt(1, id);
+        try (var result = find.executeQuery()) {
+            if (result.next()) {
+                return mapColumns(result);
+            } else {
+                return null;
+            }
+        }
+    }
+}

mercurial