summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-07 18:20:58 +0200
committerSimon Rettberg2015-09-07 18:20:58 +0200
commit2f140304dd193763b2aa9d509f972c6f23202e93 (patch)
tree8639a625543d78b35caccfe3dcdfa4740ba6d917 /src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java
parentStuff (diff)
downloadmasterserver-2f140304dd193763b2aa9d509f972c6f23202e93.tar.gz
masterserver-2f140304dd193763b2aa9d509f972c6f23202e93.tar.xz
masterserver-2f140304dd193763b2aa9d509f972c6f23202e93.zip
Start adapting to new DB/Thrift model
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java')
-rw-r--r--src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java b/src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java
new file mode 100644
index 0000000..cf1a20a
--- /dev/null
+++ b/src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java
@@ -0,0 +1,137 @@
+package org.openslx.imagemaster.db.mappers;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.openslx.bwlp.thrift.iface.Organization;
+import org.openslx.imagemaster.db.Database;
+import org.openslx.imagemaster.db.MysqlConnection;
+import org.openslx.imagemaster.db.MysqlStatement;
+
+/**
+ * Represents an organization in the database.
+ * Is used to authenticate the organization.
+ */
+public class DbOrganization
+{
+ private static final Logger LOGGER = Logger.getLogger( DbOrganization.class );
+
+ private static final String organizationBaseSql = "SELECT"
+ + " o.organizationid, o.name, o.authmethod, o.publickey"
+ + " FROM organization o";
+
+ private static final String suffixListFromOrgSql = "SELECT suffix FROM organization_suffix"
+ + " WHERE organizationid = :organizationid";
+
+ private static Organization fromResultSet( MysqlConnection connection, ResultSet rs ) throws SQLException
+ {
+ String organizationId = rs.getString( "organizationid" );
+ String ecpUrl = rs.getString( "authmethod" );
+ if ( ecpUrl != null && !ecpUrl.startsWith( "http" ) ) {
+ ecpUrl = null;
+ }
+ return new Organization( organizationId, rs.getString( "name" ), ecpUrl, getSuffixList( connection,
+ organizationId ) );
+ }
+
+ /**
+ * Get organization by id. Returns null if not found.
+ *
+ * @param organizationId
+ * @return
+ * @throws SQLException
+ */
+ public static Organization fromOrganizationId( String organizationId ) throws SQLException
+ {
+ try ( MysqlConnection connection = Database.getConnection() ) {
+ MysqlStatement stmt = connection.prepareStatement( organizationBaseSql + " WHERE o.organizationid = :organizationid" );
+ stmt.setString( "organizationid", organizationId );
+ ResultSet rs = stmt.executeQuery();
+ if ( !rs.next() )
+ return null;
+ return fromResultSet( connection, rs );
+ } catch ( SQLException e ) {
+ LOGGER.error( "Query failed in DbOrganization.fromOrganizationId()", e );
+ throw e;
+ }
+ }
+
+ public static Organization fromSuffix( String suffix ) throws SQLException
+ {
+ try ( MysqlConnection connection = Database.getConnection() ) {
+ MysqlStatement stmt = connection.prepareStatement( organizationBaseSql
+ + " INNER JOIN organization_suffix s USING (organizationid)"
+ + " WHERE s.suffix = :suffix" );
+ stmt.setString( "suffix", suffix );
+ ResultSet rs = stmt.executeQuery();
+ if ( !rs.next() )
+ return null;
+ return fromResultSet( connection, rs );
+ } catch ( SQLException e ) {
+ LOGGER.error( "Query failed in DbOrganization.fromSuffix()", e );
+ throw e;
+ }
+ }
+
+ private static List<String> suffixForOrg( MysqlStatement stmt, String organizationId ) throws SQLException
+ {
+ stmt.setString( "organizationid", organizationId );
+ ResultSet rs = stmt.executeQuery();
+ List<String> list = new ArrayList<>();
+ while ( rs.next() ) {
+ list.add( rs.getString( "suffix" ) );
+ }
+ return list;
+ }
+
+ /**
+ * Return all known satellites/organizations as List of {@link OrganizationData}, which can be
+ * used directly by the thrift API.
+ *
+ * @return list of all known organizations/satellites
+ * @throws SQLException
+ */
+ public static List<Organization> getAll() throws SQLException
+ {
+ try ( MysqlConnection connection = Database.getConnection() ) {
+ MysqlStatement stmt = connection.prepareStatement( organizationBaseSql );
+ ResultSet rsOrg = stmt.executeQuery();
+ MysqlStatement stmtSuffix = connection.prepareStatement( suffixListFromOrgSql );
+ List<Organization> list = new ArrayList<>();
+ while ( rsOrg.next() ) {
+ String organizationId = rsOrg.getString( "organizationid" );
+ String ecpUrl = rsOrg.getString( "authmethod" );
+ if ( ecpUrl != null && !ecpUrl.startsWith( "http" ) ) {
+ ecpUrl = null;
+ }
+ List<String> suffixList = suffixForOrg( stmtSuffix, organizationId );
+ list.add( new Organization( organizationId, rsOrg.getString( "name" ), ecpUrl, suffixList ) );
+ }
+ return list;
+ } catch ( SQLException e ) {
+ LOGGER.error( "Query failed in DbOrganization.getAll()", e );
+ throw e;
+ }
+ }
+
+ public static DbOrganization fromPrefix( String prefix )
+ {
+ return null;
+ }
+
+ public static List<String> getSuffixList( MysqlConnection connection, String organizationId ) throws SQLException
+ {
+ List<String> list = new ArrayList<>();
+ MysqlStatement stmt = connection.prepareStatement( suffixListFromOrgSql );
+ stmt.setString( "organizationid", organizationId );
+ ResultSet rs = stmt.executeQuery();
+ while ( rs.next() ) {
+ list.add( rs.getString( "suffix" ) );
+ }
+ return list;
+ }
+
+}