1 package mircoders.entity.adapter;
6 import mir.entity.adapter.*;
8 import mircoders.storage.*;
9 import mircoders.global.*;
10 import mircoders.entity.*;
11 import mircoders.localizer.*;
13 public class ContentAdapterDefinition extends EntityAdapterDefinition {
14 private static ContentAdapterDefinition instance;
16 public static ContentAdapterDefinition getInstance() {
17 synchronized (ContentAdapterDefinition.class) {
18 if (instance == null) {
19 instance = new ContentAdapterDefinition();
25 public ContentAdapterDefinition() {
28 addDateField("date", "date");
29 addCalculatedField("to_topics", new ContentToTopicsField());
30 addCalculatedField("to_comments", new ContentToCommentsField());
32 addCalculatedField("to_media_images", new ContentToMediaField(
33 DatabaseImages.getInstance(), ImagesAdapterDefinition.getInstance()));
34 addCalculatedField("to_media_audio", new ContentToMediaField(
35 DatabaseAudio.getInstance(), AudioAdapterDefinition.getInstance()));
36 addCalculatedField("to_media_video", new ContentToMediaField(
37 DatabaseVideo.getInstance(), VideoAdapterDefinition.getInstance()));
38 addCalculatedField("to_media_other", new ContentToMediaField(
39 DatabaseOther.getInstance(), OtherAdapterDefinition.getInstance()));
40 addCalculatedField("to_media_icon", new ContentToIconField());
43 System.out.println(t.getMessage());
44 t.printStackTrace(System.out);
47 addCalculatedField("description_parsed", new FilteredField("description"));
48 addCalculatedField("content_data_parsed", new FilteredField("content_data"));
51 private class FilteredField implements CalculatedField {
54 public FilteredField(String aFieldName) {
55 fieldName = aFieldName;
58 public Object getValue(EntityAdapter anEntityAdapter) {
59 if (anEntityAdapter.get("is_html").equals("0")) {
60 return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
63 return anEntityAdapter.get(fieldName);
68 private class ContentToCommentsField implements CalculatedField {
69 public Object getValue(EntityAdapter anEntityAdapter) {
72 DatabaseComment.getInstance(),
73 "to_media="+anEntityAdapter.get("id"),
75 CommentAdapterDefinition.getInstance());
78 throw new RuntimeException(t.getMessage());
83 private class ContentToTopicsField implements CalculatedField {
84 public Object getValue(EntityAdapter anEntityAdapter) {
87 DatabaseTopics.getInstance(),
88 "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
90 TopicsAdapterDefinition.getInstance());
93 throw new RuntimeException(t.getMessage());
98 private class ContentToMediaField implements CalculatedField {
99 StorageObject storage;
100 EntityAdapterDefinition definition;
102 public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
103 definition = aDefinition;
107 public Object getValue(EntityAdapter anEntityAdapter) {
111 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
115 catch (Throwable t) {
116 throw new RuntimeException(t.getMessage());
121 private class ContentToIconField implements CalculatedField {
122 public Object getValue(EntityAdapter anEntityAdapter) {
123 EntityUploadedMedia uploadedMedia;
125 EntityBrowser browser;
127 MirMedia mediaHandler;
135 DatabaseUploadedMedia.getInstance(),
136 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
140 tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
143 if (browser.hasNext()) {
144 uploadedMedia = (EntityUploadedMedia) browser.next();
146 mediaType = uploadedMedia.getMediaType();
147 mediaHandler = MediaHelper.getHandler( mediaType );
149 if (mediaHandler.isVideo()) {
150 tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyVideo");
153 else if (mediaHandler.isAudio()) {
154 tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyAudio");
157 else if (mediaHandler.isImage()) {
158 tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyImage");
162 tinyIcon = mediaHandler.getTinyIcon();
163 iconAlt = mediaHandler.getIconAlt();
167 catch (Throwable t) {
168 throw new RuntimeException(t.getMessage());
171 result = new HashMap();
172 result.put("tiny_icon", tinyIcon);
173 result.put("icon_alt", iconAlt);
181 // @todo this needs to optimized. expensive SQL
182 private SimpleHash getUploadedMediaForNewswire()
183 throws StorageObjectException, TemplateModelException
185 // fetching/setting the images
186 // return to_media_icons
187 String tinyIcon = null, iconAlt = null;
188 MirMedia mediaHandler = null;
189 EntityUploadedMedia uploadedMedia;
191 SimpleHash returnHash = new SimpleHash();
193 EntityList upMediaEntityList =
194 DatabaseContentToMedia.getInstance().getUploadedMedia(this);
195 if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
197 for (int n=0; n < upMediaEntityList.size();n++) {
198 uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
199 mediaType = uploadedMedia.getMediaType();
201 mediaHandler = MediaHelper.getHandler( mediaType );
202 } catch (MirMediaException ex) {
203 throw new TemplateModelException(ex.toString());
205 //the "best" media type to show
206 if (mediaHandler.isVideo()) {
207 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
210 } else if (mediaHandler.isAudio()) {
211 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
213 } else if (tinyIcon == null && !mediaHandler.isImage()) {
214 tinyIcon = mediaHandler.getTinyIcon();
215 iconAlt = mediaHandler.getIconAlt();
219 //it only has image(s)
220 if (tinyIcon == null) {
221 tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
224 // uploadedMedia Entity list is empty.
227 tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
230 returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon);
231 returnHash.put("icon_alt", iconAlt);
240 // String mirconf_extLinkName = MirConfig.getProp("Producer.ExtLinkName");
241 // String mirconf_intLinkName = MirConfig.getProp("Producer.IntLinkName");
242 // String mirconf_mailLinkName = MirConfig.getProp("Producer.MailLinkName");
243 // String mirconf_imageRoot = MirConfig.getProp("Producer.ImageRoot");
246 // if (field.equals("date_formatted"))
248 // if (hasValueForField("date"))
249 // returnField = StringUtil.webdbDate2readableDate(getValue("date"));
251 // else if (field.equals("description_parsed"))
252 // returnField = getDescriptionParsed();
253 // else if (field.equals("description_sentence"))
254 // returnField = getDescriptionSentence();
255 // else if (field.equals("content_data_parsed"))
256 // returnField = getContentDataParsed();
259 else if (key.equals("to_media_icon")) {
261 _entCache.put(key, getUploadedMediaForNewswire());
262 return (TemplateModel)_entCache.get(key);
264 catch (Exception ex) {
265 theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
266 throw new TemplateModelException(ex.toString());
272 private boolean hasMedia() throws StorageObjectException
274 if (_hasMedia == null) {
276 new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this));
278 return _hasMedia.booleanValue();
281 //######## @todo all of the following getBlahForContent should have
282 // and optimized version where LIMIT=1 sql for list view.
283 private EntityList getImagesForContent()
284 throws StorageObjectException, TemplateModelException
287 return DatabaseContentToMedia.getInstance().getImages(this);
292 private EntityList getAudioForContent()
293 throws StorageObjectException, TemplateModelException
296 return DatabaseContentToMedia.getInstance().getAudio(this) ;
301 private EntityList getVideoForContent()
302 throws StorageObjectException, TemplateModelException
305 return DatabaseContentToMedia.getInstance().getVideo(this) ;
310 private EntityList getOtherMediaForContent()
311 throws StorageObjectException, TemplateModelException
314 return DatabaseContentToMedia.getInstance().getOther(this);