X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fstorage%2FDatabaseContentToMedia.java;h=c06f91ae5160491bbe871e24def130646d56f63e;hb=a459f111d85598df56c6ab711cec11632676b39c;hp=82d4ed30ade6b8f8ec5fea4c7d5cb064b0dbff9f;hpb=ce2691872c7f07f3ae7504a25aea25c8f3eb4d77;p=mir.git diff --git a/source/mircoders/storage/DatabaseContentToMedia.java b/source/mircoders/storage/DatabaseContentToMedia.java index 82d4ed30..c06f91ae 100755 --- a/source/mircoders/storage/DatabaseContentToMedia.java +++ b/source/mircoders/storage/DatabaseContentToMedia.java @@ -1,21 +1,53 @@ -package mircoders.storage; - -import java.lang.*; -import java.sql.*; -import java.io.*; -import java.util.*; +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with any library licensed under the Apache Software License, + * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library + * (or with modified versions of the above that use the same license as the above), + * and distribute linked combinations including the two. You must obey the + * GNU General Public License in all respects for all of the code used other than + * the above mentioned libraries. If you modify this file, you may extend this + * exception to your version of the file, but you are not obligated to do so. + * If you do not wish to do so, delete this exception statement from your version. + */ -import freemarker.template.*; +package mircoders.storage; -import mir.storage.*; -import mir.entity.*; -import mir.misc.*; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; -import mircoders.entity.*; +import mir.entity.EntityList; +import mir.log.LoggerWrapper; +import mir.storage.Database; +import mir.storage.StorageObject; +import mir.storage.StorageObjectExc; +import mir.storage.StorageObjectFailure; +import mircoders.entity.EntityContent; +import mircoders.entity.EntityUploadedMedia; /** - * Diese Klasse implementiert die Datenbankverbindung zur MetaObjekt-Tabelle + * implements abstract DB connection to the content_x_media SQL table * + * @author RK, mir-coders group + * @version $Id: DatabaseContentToMedia.java,v 1.18 2003/04/21 12:42:48 idfx Exp $ * */ @@ -23,97 +55,102 @@ public class DatabaseContentToMedia extends Database implements StorageObject{ private static DatabaseContentToMedia instance; - // the following *has* to be sychronized cause this static method - // could get preemted and we could end up with 2 instances of DatabaseFoo. - // see the "Singletons with needles and thread" article at JavaWorld -mh - public synchronized static DatabaseContentToMedia getInstance() - throws StorageObjectException { + public static DatabaseContentToMedia getInstance() { if (instance == null) { - instance = new DatabaseContentToMedia(); - instance.myselfDatabase = instance; + synchronized (DatabaseContentToMedia.class) { + if (instance == null) { + instance = new DatabaseContentToMedia(); + instance.myselfDatabase = instance; + } + } } return instance; } - private DatabaseContentToMedia() - throws StorageObjectException { - + private DatabaseContentToMedia() { super(); - this.hasTimestamp = false; - this.theTable="content_x_media"; - try { this.theEntityClass = Class.forName("mir.entity.GenericEntity"); } - catch (Exception e) { throw new StorageObjectException(e.toString()); } + + logger = new LoggerWrapper("Database.ContentToMedia"); + + hasTimestamp = false; + theTable = "content_x_media"; + theEntityClass = mir.entity.GenericEntity.class; } /** * get all the media-files belonging to a content entity * */ - public EntityList getMedia(EntityContent content) - throws StorageObjectException { - EntityList returnList=null; + public EntityList getMedia(EntityContent content) throws StorageObjectFailure { + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); - //this is not supported by mysql - String subselect = "id in (select media_id from " + theTable + " where content_id=" + id+")"; + String subselect = "id in (select media_id from " + theTable + + " where content_id=" + id + ")"; try { // media should stay in uploaded order. this is especially important // for photo stories which require a specific chronologic order. // this is why we have the the second parameter "id" - returnList = DatabaseMedia.getInstance().selectByWhereClause(subselect,"id",-1); - } catch (Exception e) { - theLog.printDebugInfo("-- get media failed " + e.toString()); - throw new StorageObjectException("-- get media failed " + e.toString()); + returnList = DatabaseMedia.getInstance().selectByWhereClause(subselect, + "id", -1); + } + catch (Throwable e) { + logger.debug("-- get media failed " + e.toString()); + throw new StorageObjectFailure("-- get media failed ", e); } } return returnList; } - public boolean hasMedia(EntityContent content) - throws StorageObjectException { - String wc = "content_id="+content.getId(); - if( content != null) { + public boolean hasMedia(EntityContent content) throws StorageObjectFailure, + StorageObjectExc { + if (content != null) { try { - if(selectByWhereClause(wc,-1).size() == 0) + if (selectByWhereClause("content_id=" + content.getId(), -1).size() == + 0) return false; else return true; - } catch (Exception e) { - theLog.printError("-- hasMedia failed " + e.toString()); - throw new StorageObjectException("-- hasMedia failed " + e.toString()); } - } else { - theLog.printError("-- hasMedia failed: content is NULL"); - throw new StorageObjectException("-- hasMedia failed: content is NULL"); + catch (Exception e) { + logger.error("DatabaseContentToMedia.hasMedia: " + e.toString()); + throw new StorageObjectFailure("DatabaseContentToMedia.hasMedia: " + + e.toString(), e); + } + } + else { + logger.error("DatabaseContentToMedia.hasMedia: content == null"); + throw new StorageObjectExc( + "DatabaseContentToMedia.hasMedia: content == null"); } } - - - /** * get all the audio belonging to a content entity * */ - public EntityList getAudio(EntityContent content) - throws StorageObjectException { - EntityList returnList=null; + public EntityList getAudio(EntityContent content) throws StorageObjectFailure { + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); //this is not supported by mysql - String subselect = "id in (select media_id from " + theTable + " where content_id=" + id+")"; + String subselect = "id in (select media_id from " + theTable + + " where content_id=" + id + ")"; try { // media should stay in uploaded order. this is especially important // for photo stories which require a specific chronologic order. // this is why we have the the second parameter "id" - returnList = DatabaseAudio.getInstance().selectByWhereClause(subselect,"id",-1); - } catch (Exception e) { - theLog.printDebugInfo("-- get audio failed " + e.toString()); - throw new StorageObjectException("-- get audio failed " + e.toString()); + returnList = DatabaseAudio.getInstance().selectByWhereClause(subselect, + "id", -1); + } + catch (Exception e) { + logger.error("DatabaseContentToMedia.getAudio: " + e.toString()); + throw new StorageObjectFailure("DatabaseContentToMedia.getAudio: " + + e.toString(), e); } } return returnList; @@ -123,23 +160,26 @@ public class DatabaseContentToMedia extends Database implements StorageObject{ * get all the video belonging to a content entity * */ - public EntityList getVideo(EntityContent content) - throws StorageObjectException { - EntityList returnList=null; + public EntityList getVideo(EntityContent content) throws StorageObjectFailure { + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); //this is not supported by mysql - String subselect = "id in (select media_id from " + theTable + " where content_id=" + id+")"; + String subselect = "id in (select media_id from " + theTable + + " where content_id=" + id + ")"; try { // media should stay in uploaded order. this is especially important // for photo stories which require a specific chronologic order. // this is why we have the the second parameter "id" - returnList = DatabaseVideo.getInstance().selectByWhereClause(subselect,"id",-1); - } catch (Exception e) { - theLog.printDebugInfo("-- get video failed " + e.toString()); - throw new StorageObjectException("-- get video failed " + e.toString()); + returnList = DatabaseVideo.getInstance().selectByWhereClause(subselect, + "id", -1); + } + catch (Exception e) { + logger.error("DatabaseContentToMedia.getVideo: " + e.toString()); + throw new StorageObjectFailure("DatabaseContentToMedia.getVideo: " + + e.toString(), e); } } return returnList; @@ -149,57 +189,57 @@ public class DatabaseContentToMedia extends Database implements StorageObject{ * get all the images belonging to a content entity * */ - public EntityList getImages(EntityContent content) - throws StorageObjectException { - EntityList returnList=null; + public EntityList getImages(EntityContent content) throws + StorageObjectFailure { + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); //this is not supported by mysql - String subselect = "id in (select media_id from " + theTable + " where content_id=" + id+")"; + String subselect = "id in (select media_id from " + theTable + + " where content_id=" + id + ")"; try { // media should stay in uploaded order. this is especially important // for photo stories which require a specific chronologic order. // this is why we have the the second parameter "id" - returnList = DatabaseImages.getInstance().selectByWhereClause(subselect,"id",-1); - } catch (Exception e) { - theLog.printDebugInfo("-- get images failed " + e.toString()); - throw new StorageObjectException("-- get images failed " + e.toString()); + returnList = DatabaseImages.getInstance().selectByWhereClause(subselect, + "id", -1); + } + catch (Exception e) { + logger.error("DatabaseContentToMedia.getImages: " + e.toString()); + throw new StorageObjectFailure("DatabaseContentToMedia.getImages: " + + e.toString(), e); } } return returnList; } - /** * get all the uploaded/other Media belonging to a content entity * */ - public EntityList getOther(EntityContent content) - throws StorageObjectException - { + public EntityList getOther(EntityContent content) throws StorageObjectFailure { /** @todo this should only fetch published media / rk */ - EntityList returnList=null; + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); //this is not supported by mysql String subselect = "id in (select media_id from " + theTable + - " where content_id=" + id+")"; + " where content_id=" + id + ")"; try { // media should stay in uploaded order. this is especially important // for photo stories which require a specific chronologic order. // this is why we have the the second parameter "id" returnList = DatabaseOther.getInstance().selectByWhereClause(subselect, - "id"); - } catch (Exception e) { - e.printStackTrace(); - theLog.printDebugInfo("-- get Other failed " + e.toString()); - throw new StorageObjectException("-- get Other failed " - + e.toString()); + "id"); + } + catch (Exception e) { + logger.error("DatabaseContentToMedia.getOther: " + e.toString()); + throw new StorageObjectFailure("DatabaseContentToMedia.getOther: " + e.toString(), e); } } return returnList; @@ -209,289 +249,311 @@ public class DatabaseContentToMedia extends Database implements StorageObject{ * get all the uploaded/other Media belonging to a content entity * */ - public EntityList getUploadedMedia(EntityContent content) - throws StorageObjectException - { + public EntityList getUploadedMedia(EntityContent content) throws + StorageObjectFailure { /** @todo this should only fetch published media / rk */ - EntityList returnList=null; + EntityList returnList = null; if (content != null) { // get all to_topic from media_x_topic String id = content.getId(); //this is not supported by mysql String subselect = "id in (select media_id from " + theTable + - " where content_id=" + id+")"; + " where content_id=" + id + ")"; try { - returnList = DatabaseUploadedMedia.getInstance().selectByWhereClause(subselect, - "id"); - } catch (Exception e) { - e.printStackTrace(); - theLog.printDebugInfo("-- get uploadedMedia failed " + e.toString()); - throw new StorageObjectException("-- get uploadedMedia failed " - + e.toString()); + returnList = DatabaseUploadedMedia.getInstance().selectByWhereClause( + subselect, + "id"); + } + catch (Exception e) { + logger.error("DatabaseContentToMedia.getUploadedMedia: " + e.toString()); + throw new StorageObjectFailure( + "DatabaseContentToMedia.getUploadedMedia: " + e.toString(), e); } } return returnList; } - - public void setMedia(String contentId, String[] mediaId) - throws StorageObjectException { - if (contentId == null){ + public void setMedia(String contentId, String[] mediaId) throws + StorageObjectFailure { + if (contentId == null) { return; } - if (mediaId==null || mediaId[0]==null) { + if (mediaId == null || mediaId[0] == null) { return; } //first delete all row with content_id=contentId - String sql = "delete from "+ theTable +" where content_id=" + contentId; + String sql = "delete from " + theTable + " where content_id=" + contentId; - Connection con=null;Statement stmt=null; + Connection con = null; + Statement stmt = null; try { con = getPooledCon(); // should be a preparedStatement because is faster stmt = con.createStatement(); - ResultSet rs = executeSql(stmt,sql); - } catch (Exception e) { - theLog.printDebugInfo("-- set media failed -- delete"); - throw new StorageObjectException("-- set media failed -- delete"+e.toString()); - } finally { - freeConnection(con,stmt); + ResultSet rs = executeSql(stmt, sql); + } + catch (Exception e) { + logger.error("-- set media failed -- delete"); + throw new StorageObjectFailure("-- set media failed -- delete", e); + } + finally { + freeConnection(con, stmt); } //now insert //first delete all row with content_id=contentId - for (int i=0;i