diff options
author | Simon Rettberg | 2015-09-07 18:20:58 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-07 18:20:58 +0200 |
commit | 2f140304dd193763b2aa9d509f972c6f23202e93 (patch) | |
tree | 8639a625543d78b35caccfe3dcdfa4740ba6d917 /src/main/java/org/openslx/imagemaster/db/mappers/DbOrganization.java | |
parent | Stuff (diff) | |
download | masterserver-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.java | 137 |
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; + } + +} |