diff options
Diffstat (limited to 'src/main/java/org/openslx/imagemaster/db')
4 files changed, 102 insertions, 86 deletions
diff --git a/src/main/java/org/openslx/imagemaster/db/DbImage.java b/src/main/java/org/openslx/imagemaster/db/DbImage.java index 5070c0d..ca3265f 100644 --- a/src/main/java/org/openslx/imagemaster/db/DbImage.java +++ b/src/main/java/org/openslx/imagemaster/db/DbImage.java @@ -15,19 +15,19 @@ public class DbImage { public final String uuid; - public final int imageVersion; - public final String imageName; + public final int revision; + public final String title; /** * Relative path of image file (relative to Globals.getImageDir()) */ - public final String imagePath; - public final long imageCreateTime; - public final long imageUpdateTime; - public final int imageOwnerId; - public final String contentOperatingSystem; + public final String relativePath; + public final long createTime; + public final long updateTime; + public final int ownerId; + public final String ownerLogin; + public final String operatingSystem; public final boolean isValid; public final boolean isDeleted; - public final String shortDescription; public final String longDescription; public final long fileSize; public final int[] blockStatus; @@ -35,37 +35,37 @@ public class DbImage public DbImage( String uuid ) { this.uuid = uuid; - this.imageVersion = 0; - this.imageName = null; - this.imagePath = null; - this.imageCreateTime = 0; - this.imageUpdateTime = 0; - this.imageOwnerId = 0; - this.contentOperatingSystem = null; + this.revision = 0; + this.title = null; + this.relativePath = null; + this.createTime = 0; + this.updateTime = 0; + this.ownerId = 0; + this.ownerLogin = null; + this.operatingSystem = null; this.isValid = false; this.isDeleted = false; - this.shortDescription = null; this.longDescription = null; this.fileSize = 0; this.blockStatus = null; } public DbImage( String uuid, int imageVersion, String imageName, String imagePath, - long imageCreateTime, long imageUpdateTime, int imageOwnerId, String contentOperatingSystem, - boolean isValid, boolean isDeleted, String shortDescription, String longDescription, + long imageCreateTime, long imageUpdateTime, int imageOwnerId, String imageOwnerLogin, String contentOperatingSystem, + boolean isValid, boolean isDeleted, String longDescription, long fileSize, String missingBlocksList ) { this.uuid = uuid; - this.imageVersion = imageVersion; - this.imageName = imageName; - this.imagePath = imagePath; - this.imageCreateTime = imageCreateTime; - this.imageUpdateTime = imageUpdateTime; - this.imageOwnerId = imageOwnerId; - this.contentOperatingSystem = contentOperatingSystem; + this.revision = imageVersion; + this.title = imageName; + this.relativePath = imagePath; + this.createTime = imageCreateTime; + this.updateTime = imageUpdateTime; + this.ownerId = imageOwnerId; + this.ownerLogin = imageOwnerLogin; + this.operatingSystem = contentOperatingSystem; this.isValid = isValid; this.isDeleted = isDeleted; - this.shortDescription = shortDescription; this.longDescription = longDescription; this.fileSize = fileSize; @@ -106,19 +106,18 @@ public class DbImage for ( int i = 0; i < numBlocks; i++ ) { missingBlocksList = missingBlocksList + String.valueOf( i ) + ";"; } - DbUser user = DbUser.forLogin( imageData.imageOwner ); + DbUser user = DbUser.forLogin( imageData.ownerLogin ); int owner = 0; - if (user != null) + if ( user != null ) owner = user.userId; return MySQL .update( - "INSERT INTO images (UUID, image_version, image_name, image_path, image_createTime, image_updateTime, image_owner, content_operatingSystem, status_isValid, status_isDeleted, image_shortDescription, image_longDescription, fileSize, missingBlocks) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", - imageData.uuid, imageData.imageVersion, imageData.imageName, filepath, - imageData.imageCreateTime, imageData.imageUpdateTime, owner, - imageData.contentOperatingSystem, imageData.statusIsValid, - imageData.statusIsDeleted, imageData.imageShortDescription, - imageData.imageLongDescription, imageData.fileSize, + "INSERT INTO image (uuid, revision, title, path, createtime, updatetime, ownerid, operatingsystem, isvalid, isdeleted, description, filesize, missingblocks) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", + imageData.uuid, imageData.revision, imageData.title, filepath, + imageData.createTime, imageData.updateTime, owner, + imageData.operatingSystem, imageData.isValid, + imageData.isDeleted, imageData.description, imageData.fileSize, missingBlocksList ); } @@ -136,24 +135,7 @@ public class DbImage missingBlocksList = missingBlocksList + String.valueOf( block ) + ";"; } } - return MySQL.update( "UPDATE images SET images.missingBlocks = ? WHERE images.UUID = ?", missingBlocksList, uuid ); - } - - /** - * Updates the database with a new version of an image and its missing blocks. - * - * @param version - * @param amountBlocks - */ - public void updateVersion( int version, int amountBlocks ) - { - if ( version <= 0 || amountBlocks <= 0 ) - return; - String missingBlocksList = ""; - for ( int i = 0; i < amountBlocks; i++ ) { - missingBlocksList = missingBlocksList + String.valueOf( i ) + ";"; - } - MySQL.update( "UPDATE images SET images.missingBlocks, images.version VALUES (?, ?)", missingBlocksList, version ); + return MySQL.update( "UPDATE image SET image.missingblocks = ? WHERE image.uuid = ?", missingBlocksList, uuid ); } /** @@ -163,7 +145,7 @@ public class DbImage */ public int delete() { - return MySQL.update( "UPDATE images SET images.isDeleted=? WHERE images.UUID=?", true, uuid ); + return MySQL.update( "UPDATE image SET image.isdeleted = 1 WHERE image.uuid = ?", this.uuid ); } /** @@ -176,8 +158,10 @@ public class DbImage return MySQL .findAll( DbImage.class, - "SELECT images.UUID, images.image_version, images.image_name, images.image_path, images.image_createTime, images.image_updateTime, images.image_owner, images.content_operatingSystem, images.status_isValid, images.status_isDeleted, images.image_shortDescription, images.image_longDescription, images.timestamp, images.fileSize, images.token, images.missingBlocks, images.serverSessionId FROM images WHERE missingBlocks != ?", - "" ); + "SELECT image.uuid, image.revision, image.title, image.path, image.createtime, image.updatetime, image.ownerid, user.login, image.operatingsystem, image.isvalid, image.isdeleted, image.description, image.filesize, image.missingblocks" + + " FROM image" + + " INNER JOIN user ON (image.ownerid = user.userid)" + + " WHERE missingBlocks != ''" ); } /** @@ -191,11 +175,34 @@ public class DbImage return MySQL .findUniqueOrNull( DbImage.class, - "SELECT images.UUID, images.image_version, images.image_name, images.image_path, images.image_createTime, images.image_updateTime, images.image_owner, images.content_operatingSystem, images.status_isValid, images.status_isDeleted, images.image_shortDescription, images.image_longDescription, images.fileSize, images.missingBlocks FROM images WHERE uuid = ?", + "SELECT image.uuid, image.revision, image.title, image.path, image.createtime, image.updatetime, image.ownerid, user.login, image.operatingsystem, image.isvalid, image.isdeleted, image.description, image.filesize, image.missingblocks" + + " FROM image" + + " INNER JOIN user ON (image.ownerid = user.userid)" + + " WHERE uuid = ?", uuid ); } /** + * Return all public images as ImageData list, which can be directly + * used by the thrift API. + * + * @param start + * @param limit + * @return + */ + public static List<ImageData> asImageDataList( int start, int limit ) + { + return MySQL + .findAll( + ImageData.class, + "SELECT image.uuid, image.revision, image.title, image.createtime, image.updatetime, user.login, image.operatingsystem, image.isvalid, image.isdeleted, image.description, image.filesize" + + " FROM image" + + " INNER JOIN user ON (image.ownerid = user.userid)" + + " ORDER BY uuid, revision" + + " LIMIT " + start + ", " + limit ); + } + + /** * Creates an instance of the thrift ImageData class of this DbImage object. * * @return The corresponding image data @@ -203,22 +210,22 @@ public class DbImage public ImageData getImageData() { String owner = "unknown"; - DbUser user = DbUser.forLogin( this.imageOwnerId ); - if (user != null) + DbUser user = DbUser.forLogin( this.ownerId ); + if ( user != null ) owner = user.getLogin(); - return new ImageData( this.uuid, this.imageVersion, this.imageName, this.imageCreateTime, - this.imageUpdateTime, owner, this.contentOperatingSystem, this.isValid, - this.isDeleted, this.shortDescription, this.longDescription, this.fileSize ); + return new ImageData( this.uuid, this.revision, this.title, this.createTime, + this.updateTime, owner, this.operatingSystem, this.isValid, + this.isDeleted, this.longDescription, this.fileSize ); } - + /** * Get absolute path of this image - * + * * @return absolute path */ public String getAbsolutePath() { - return Globals.getImageDir() + "/" + this.imagePath; + return Globals.getImageDir() + "/" + this.relativePath; } - + } diff --git a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java index a1c9b1a..d9c4366 100644 --- a/src/main/java/org/openslx/imagemaster/db/DbSatellite.java +++ b/src/main/java/org/openslx/imagemaster/db/DbSatellite.java @@ -6,8 +6,10 @@ import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.RSAPublicKeySpec; +import java.util.List; import org.apache.log4j.Logger; +import org.openslx.imagemaster.thrift.iface.OrganizationData; /** * Represents a satellite in the database. @@ -32,8 +34,7 @@ public class DbSatellite keyFact = kf; } - // needs to be public in order to be found by MySQL - public DbSatellite( String organizationId, String address, String name, String prefix, String publickeyString ) + public DbSatellite( String organizationId, String address, String name, String publickeyString ) { this.organizationId = organizationId; this.address = address; @@ -56,23 +57,31 @@ public class DbSatellite .findUniqueOrNull( DbSatellite.class, "SELECT satellite.organizationid, satellite.address, satellite.name, satellite.publickey FROM satellite" - + " INNER JOIN satellite_suffix USING (organizationid)" - + " WHERE satellite_suffix.suffix = ? LIMIT 1", + + " INNER JOIN satellite_suffix USING (organizationid)" + + " WHERE satellite_suffix.suffix = ? LIMIT 1", suffix ); } + /** + * 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 + */ + public static List<OrganizationData> asOrganizationDataList() + { + return MySQL.findAll( OrganizationData.class, "SELECT satellite.organizationid, satellite.name FROM satellite" ); + } + public static DbSatellite fromPrefix( String prefix ) { - /* - return MySQL - .findUniqueOrNull( - DbSatellite.class, - "SELECT satellite.organization, satellite.address, satellite.name, satellite.publickey FROM satellite WHERE satellite.prefix = ? LIMIT 1", - prefix ); - */ return null; } + /* + * Member methods + */ + public String getAddress() { return address; diff --git a/src/main/java/org/openslx/imagemaster/db/DbUser.java b/src/main/java/org/openslx/imagemaster/db/DbUser.java index b822e4d..6d9fe0a 100644 --- a/src/main/java/org/openslx/imagemaster/db/DbUser.java +++ b/src/main/java/org/openslx/imagemaster/db/DbUser.java @@ -12,11 +12,11 @@ public class DbUser extends User private static Logger log = Logger.getLogger( DbUser.class ); - public DbUser( int userId, String eppn, String password, String organizationId, + public DbUser( int userId, String login, String password, String organizationId, String firstName, String lastName, String eMail, String satelliteAddress ) { - super( userId, eppn, password, organizationId, firstName, lastName, eMail, + super( userId, login, password, organizationId, firstName, lastName, eMail, satelliteAddress ); } @@ -33,9 +33,9 @@ public class DbUser extends User return MySQL .findUniqueOrNull( DbUser.class, - "SELECT user.userid, user.eppn, user.password, user.organizationid, user.firstname, user.lastname, user.email, satellite.address FROM user" + "SELECT user.userid, user.login, user.password, user.organizationid, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organizationid)" - + " WHERE user.eppn = ? LIMIT 1", + + " WHERE user.login = ? LIMIT 1", login ); } @@ -51,7 +51,7 @@ public class DbUser extends User return MySQL .findUniqueOrNull( DbUser.class, - "SELECT user.userid, user.eppn, user.password, user.organizationid, user.firstname, user.lastname, user.email, satellite.address FROM user" + "SELECT user.userid, user.login, user.password, user.organizationid, user.firstname, user.lastname, user.email, satellite.address FROM user" + " LEFT JOIN satellite USING (organizationid)" + " WHERE user.userid = ? LIMIT 1", userid ); @@ -72,10 +72,10 @@ public class DbUser extends User public static boolean insertOrUpdate( User user ) { - log.debug( "Inserted user '" + user.eppn + "' into db." ); + log.debug( "Inserted user '" + user.login + "' into db." ); MySQL.update( - "INSERT INTO user (eppn, password, organizationid, firstname, lastname, email) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE password=VALUES(password), organizationid=VALUES(organizationid), firstname=VALUES(firstname), lastname=VALUES(lastname), email=VALUES(email)", - user.eppn, user.password, user.organizationId, user.firstName, user.lastName, user.eMail ); + "INSERT INTO user (login, password, organizationid, firstname, lastname, email) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE password=VALUES(password), organizationid=VALUES(organizationid), firstname=VALUES(firstname), lastname=VALUES(lastname), email=VALUES(email)", + user.login, user.password, user.organizationId, user.firstName, user.lastName, user.eMail ); return false; } diff --git a/src/main/java/org/openslx/imagemaster/db/LdapUser.java b/src/main/java/org/openslx/imagemaster/db/LdapUser.java index b026e7e..988f43a 100644 --- a/src/main/java/org/openslx/imagemaster/db/LdapUser.java +++ b/src/main/java/org/openslx/imagemaster/db/LdapUser.java @@ -150,7 +150,7 @@ public class LdapUser extends User /** * Login user locally if external Ldap server is not available - * @param eppn Must be in form "username@organization" + * @param login Must be in form "username@organization" * @param password The user's password */ private static LdapUser localLogin( String login, String password ) @@ -162,7 +162,7 @@ public class LdapUser extends User if (!Sha512Crypt.verifyPassword( password, user.password )) return null; // return ldapuser if valid - return new LdapUser( user.userId, user.eppn, Sha512Crypt.Sha512_crypt( password, null, 0 ), user.organizationId, user.firstName, + return new LdapUser( user.userId, user.login, Sha512Crypt.Sha512_crypt( password, null, 0 ), user.organizationId, user.firstName, user.lastName, user.eMail, user.satelliteAddress ); } } |