X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fentity%2FEntityContent.java;h=64488d4958292726770af37eebf3f8fc42885435;hb=c26251faa299ed62d0e47c32636f440c554610ec;hp=3e6bbb3020c53badc3be1a57830b7f4afdec8bdf;hpb=1ba06c565ec314b8e189a25e7aead8b3a4ce3ad5;p=mir.git diff --git a/source/mircoders/entity/EntityContent.java b/source/mircoders/entity/EntityContent.java index 3e6bbb30..64488d49 100755 --- a/source/mircoders/entity/EntityContent.java +++ b/source/mircoders/entity/EntityContent.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001, 2002 The Mir-coders group + * Copyright (C) 2001, 2002 The Mir-coders group * * This file is part of Mir. * @@ -18,320 +18,89 @@ * 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 the com.oreilly.servlet library, 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. + * 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. */ package mircoders.entity; +import mir.entity.AbstractEntity; +import mir.storage.DatabaseFailure; +import mircoders.storage.DatabaseContentToMedia; + import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; -import java.util.HashMap; -import java.util.Map; - -import mir.entity.Entity; -import mir.entity.EntityList; -import mir.log.LoggerWrapper; -import mir.storage.StorageObject; -import mir.storage.StorageObjectExc; -import mir.storage.StorageObjectFailure; -import mircoders.storage.DatabaseContent; -import mircoders.storage.DatabaseContentToMedia; -import mircoders.storage.DatabaseContentToTopics; -import freemarker.template.SimpleScalar; -import freemarker.template.TemplateModel; -import freemarker.template.TemplateModelException; /** * this class implements mapping of one line of the database table content * to a java object * - * @version $Id: EntityContent.java,v 1.17 2003/03/05 19:23:15 idfx Exp $ + * @version $Id: EntityContent.java,v 1.19.2.13 2007/12/15 00:24:43 zapata Exp $ * @author mir-coders group * */ -public class EntityContent extends Entity -{ - - String mirconf_extLinkName = configuration.getString("Producer.ExtLinkName"); - String mirconf_intLinkName = configuration.getString("Producer.IntLinkName"); - String mirconf_mailLinkName = configuration.getString("Producer.MailLinkName"); - String mirconf_imageRoot = configuration.getString("Producer.ImageRoot"); - - //this should always be transient i.e it can never be stored in the db - //or ObjectStore. (so the ObjectStore should only be caching what comes - //directly out of the DB. @todo confirm this with rk. -mh - Map _entCache = new HashMap(); - Boolean _hasMedia = null; - - // constructors - - public EntityContent() - { - super(); - - logger = new LoggerWrapper("Entity.Content"); - } - - public EntityContent(StorageObject theStorage) { - this(); - setStorage(theStorage); - } - - // - // methods - +public class EntityContent extends AbstractEntity { /** * set is_produced flag for the article */ - - public void setProduced(boolean yesno) throws StorageObjectFailure - { + public void setProduced(boolean yesno) throws DatabaseFailure { String value = (yesno) ? "1":"0"; - if (value.equals( getValue("is_produced") )) return; + if (value.equals( getFieldValue("is_produced") )) return; Connection con=null;Statement stmt=null; String sql = "update content set is_produced='" + value + "' where id='" + getId()+"'"; try { - con = theStorageObject.getPooledCon(); - /** @todo should be preparedStatement: faster!! */ + con = database.obtainConnection(); + /** todo should be preparedStatement: faster!! */ stmt = con.createStatement(); - theStorageObject.executeUpdate(stmt,sql); + database.executeUpdate(stmt,sql); } - catch (StorageObjectFailure e) { - throwStorageObjectFailure(e, "\n -- set produced failed"); + catch (DatabaseFailure e) { + throw e; } catch (SQLException e) { - throwStorageObjectFailure(e, "\n -- set produced failed"); + throw new DatabaseFailure(e); } finally { - theStorageObject.freeConnection(con,stmt); - } - } - - - /** - * make openposting to newswire - */ - - public void newswire() throws StorageObjectFailure - { - String sql = "update content set to_article_type='1', is_produced='0' where id='" + getId()+"'"; - try { - theStorageObject.executeUpdate(sql); - } catch (StorageObjectFailure e) { - throwStorageObjectFailure(e, "\n -- newswire failed"); - } catch (SQLException e) { - throwStorageObjectFailure(e, "\n -- newswire failed"); + database.freeConnection(con,stmt); } } - /** - * dettach from media + * Deattaches media from an article + * + * @param anArticleId + * @param aMediaId + * @throws DatabaseFailure */ - public void dettach(String cid,String mid) throws StorageObjectFailure - { - if (mid!=null){ - try{ - DatabaseContentToMedia.getInstance().delete(cid,mid); - } - catch (Exception e){ - throwStorageObjectFailure(e, "\n -- failed to get instance"); - } + public void dettach(String anArticleId, String aMediaId) throws DatabaseFailure { + if (aMediaId!=null){ + DatabaseContentToMedia.getInstance().delete(anArticleId, aMediaId); - //set Content to unproduced setProduced(false); } } /** - * attach to media + * Attaches media to the article */ - public void attach(String mid) throws StorageObjectFailure - { - if (mid!=null) { - //write media-id mid and content-id in table content_x_media - try{ - DatabaseContentToMedia.getInstance().addMedia(getId(),mid); - } catch(StorageObjectFailure e){ - throwStorageObjectFailure(e, "attach: could not get the instance"); - } - //set Content to unproduced + public void attach(String aMediaId) throws DatabaseFailure { + if (aMediaId != null) { + DatabaseContentToMedia.getInstance().addMedia(getId(),aMediaId); setProduced(false); } else { - logger.error("EntityContent: attach without mid"); + getLogger().error("EntityContent: attach without mid"); } } - - /** - * overridden method getValue to include formatted date into every - * entityContent - */ - - public TemplateModel get(java.lang.String key) throws TemplateModelException - { - if (key!=null) { - if (_entCache.containsKey(key)) { - return (TemplateModel)_entCache.get(key); - } - if (key.equals("to_comments")) { - try { - _entCache.put(key, getComments()); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getComments: could not fetch data " + ex.toString()); - - throw new TemplateModelException(ex.toString()); - } - } - if (key.equals("to_media_images")) { - try { - _entCache.put(key, getImagesForContent()); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getImagesForContent: could not fetch data " + ex.toString()); - throw new TemplateModelException(ex.toString()); - } - } - if (key.equals("to_media_audio")) { - try { - _entCache.put(key, getAudioForContent()); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getAudioForContent: could not fetch data " + ex.toString()); - throw new TemplateModelException(ex.toString()); - } - } - if (key.equals("to_media_video")) { - try { - _entCache.put(key, getVideoForContent()); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getVideoForContent: could not fetch data " + ex.toString()); - throw new TemplateModelException(ex.toString()); - } - } - if (key.equals("to_media_other")) { - try { - _entCache.put(key, getOtherMediaForContent()); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getOtherMediaForContent: could not fetch data " + ex.toString()); - throw new TemplateModelException(ex.toString()); - } - } - else if (key.equals("to_topics")) { - try { - _entCache.put(key, - DatabaseContentToTopics.getInstance().getTopics(this)); - return (TemplateModel)_entCache.get(key); - } - catch (Exception ex) { - logger.warn("EntityContent.getTopics: could not fetch data " + ex.toString()); - throw new TemplateModelException(ex.toString()); - } - } - else { - return new SimpleScalar(getValue(key)); - } - - } - return null; - } - - /** - * overridden method setValues to patch creator_main_url - */ - public void setValues(Map theStringValues) { - if (theStringValues != null) { - if (theStringValues.containsKey("creator_main_url")){ - if (((String)theStringValues.get("creator_main_url")).equalsIgnoreCase("http://")){ - theStringValues.remove("creator_main_url"); - } - else if (!((String)theStringValues.get("creator_main_url")).startsWith("http://")){ - theStringValues.put("creator_main_url","http://"+((String)theStringValues.get("creator_main_url"))); - } - } - } - super.setValues(theStringValues); - } - - /** - * fetches all the comments belonging to an article - * - * @return freemarker.template.SimpleList - */ - private EntityList getComments() throws StorageObjectFailure { - return ((DatabaseContent)theStorageObject).getComments(this); - } - - private boolean hasMedia() throws StorageObjectFailure - { - if (_hasMedia == null) { - try { - _hasMedia = - new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this)); - } catch (StorageObjectExc e) { - throw new StorageObjectFailure(e); - } - } - return _hasMedia.booleanValue(); - } - - //######## @todo all of the following getBlahForContent should have - // and optimized version where LIMIT=1 sql for list view. - private EntityList getImagesForContent() - throws StorageObjectFailure, TemplateModelException - { - if (hasMedia()) - return DatabaseContentToMedia.getInstance().getImages(this); - else - return null; - } - - private EntityList getAudioForContent() - throws StorageObjectFailure, TemplateModelException - { - if (hasMedia()) - return DatabaseContentToMedia.getInstance().getAudio(this) ; - else - return null; - } - - private EntityList getVideoForContent() - throws StorageObjectFailure, TemplateModelException - { - if (hasMedia()) - return DatabaseContentToMedia.getInstance().getVideo(this) ; - else - return null; - } - - private EntityList getOtherMediaForContent() - throws StorageObjectFailure, TemplateModelException - { - if (hasMedia()) - return DatabaseContentToMedia.getInstance().getOther(this); - else - return null; - } - }