content.to_icon implemented
[mir.git] / source / mircoders / entity / adapter / ContentAdapterDefinition.java
1 package mircoders.entity.adapter;
2
3 import java.util.*;
4 import mir.storage.*;
5 import mir.entity.*;
6 import mir.entity.adapter.*;
7 import mir.media.*;
8 import mircoders.storage.*;
9 import mircoders.global.*;
10 import mircoders.entity.*;
11 import mircoders.localizer.*;
12
13 public class ContentAdapterDefinition extends EntityAdapterDefinition {
14   private static ContentAdapterDefinition instance;
15
16   public static ContentAdapterDefinition getInstance() {
17     synchronized (ContentAdapterDefinition.class) {
18       if (instance == null) {
19         instance = new ContentAdapterDefinition();
20       }
21       return instance;
22     }
23   }
24
25   public ContentAdapterDefinition() {
26     super();
27
28     addDateField("date", "date");
29     addCalculatedField("to_topics", new ContentToTopicsField());
30     addCalculatedField("to_comments", new ContentToCommentsField());
31     try {
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());
41     }
42     catch (Throwable t) {
43       System.out.println(t.getMessage());
44       t.printStackTrace(System.out);
45     }
46
47     addCalculatedField("description_parsed", new FilteredField("description"));
48     addCalculatedField("content_data_parsed", new FilteredField("content_data"));
49   }
50
51   private class FilteredField implements CalculatedField {
52     String fieldName;
53
54     public FilteredField(String aFieldName) {
55       fieldName = aFieldName;
56     }
57
58     public Object getValue(EntityAdapter anEntityAdapter) {
59       if (anEntityAdapter.get("is_html").equals("0")) {
60         return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
61       }
62       else {
63         return anEntityAdapter.get(fieldName);
64       }
65     }
66   }
67
68   private class ContentToCommentsField implements CalculatedField {
69     public Object getValue(EntityAdapter anEntityAdapter) {
70       try {
71         return getRelation(
72                     DatabaseComment.getInstance(),
73                     "to_media="+anEntityAdapter.get("id"),
74                     "title",
75                     CommentAdapterDefinition.getInstance());
76       }
77       catch (Throwable t) {
78         throw new RuntimeException(t.getMessage());
79       }
80     }
81   }
82
83   private class ContentToTopicsField implements CalculatedField {
84     public Object getValue(EntityAdapter anEntityAdapter) {
85       try {
86         return getRelation(
87                     DatabaseTopics.getInstance(),
88                     "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
89                     "title",
90                     TopicsAdapterDefinition.getInstance());
91       }
92       catch (Throwable t) {
93         throw new RuntimeException(t.getMessage());
94       }
95     }
96   }
97
98   private class ContentToMediaField implements CalculatedField {
99     StorageObject storage;
100     EntityAdapterDefinition definition;
101
102     public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
103       definition = aDefinition;
104       storage = aStorage;
105     }
106
107     public Object getValue(EntityAdapter anEntityAdapter) {
108       try {
109         return getRelation(
110                     storage,
111                     "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
112                     "title",
113                     definition);
114       }
115       catch (Throwable t) {
116         throw new RuntimeException(t.getMessage());
117       }
118     }
119   }
120
121   private class ContentToIconField implements CalculatedField {
122     public Object getValue(EntityAdapter anEntityAdapter) {
123       EntityUploadedMedia uploadedMedia;
124       Entity mediaType;
125       EntityBrowser browser;
126       Map result;
127       MirMedia mediaHandler;
128       String tinyIcon;
129       String iconAlt;
130
131
132       try {
133         browser =
134             new EntityBrowser(
135                 DatabaseUploadedMedia.getInstance(),
136                 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
137                 "id",
138                 1);
139
140         tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
141         iconAlt = "Text";
142
143         if (browser.hasNext()) {
144           uploadedMedia = (EntityUploadedMedia) browser.next();
145
146           mediaType = uploadedMedia.getMediaType();
147           mediaHandler = MediaHelper.getHandler( mediaType );
148
149           if (mediaHandler.isVideo()) {
150             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyVideo");
151             iconAlt = "Video";
152           }
153           else if (mediaHandler.isAudio()) {
154             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyAudio");
155             iconAlt = "Audio";
156           }
157           else if (mediaHandler.isImage()) {
158             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyImage");
159             iconAlt = "Image";
160           }
161           else {
162             tinyIcon = mediaHandler.getTinyIcon();
163             iconAlt = mediaHandler.getIconAlt();
164           }
165         }
166       }
167       catch (Throwable t) {
168         throw new RuntimeException(t.getMessage());
169       }
170
171       result = new HashMap();
172       result.put("tiny_icon", tinyIcon);
173       result.put("icon_alt", iconAlt);
174
175       return result;
176     }
177   }
178
179
180 /*
181   // @todo this needs to optimized. expensive SQL
182   private SimpleHash getUploadedMediaForNewswire()
183     throws StorageObjectException, TemplateModelException
184   {
185     // fetching/setting the images
186     // return to_media_icons
187     String        tinyIcon = null, iconAlt = null;
188     MirMedia      mediaHandler = null;
189     EntityUploadedMedia uploadedMedia;
190     Entity        mediaType;
191     SimpleHash    returnHash = new SimpleHash();
192
193     EntityList upMediaEntityList =
194                     DatabaseContentToMedia.getInstance().getUploadedMedia(this);
195     if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
196
197       for (int n=0; n < upMediaEntityList.size();n++) {
198         uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
199         mediaType = uploadedMedia.getMediaType();
200         try {
201           mediaHandler = MediaHelper.getHandler( mediaType );
202         } catch (MirMediaException ex) {
203           throw new TemplateModelException(ex.toString());
204         }
205         //the "best" media type to show
206         if (mediaHandler.isVideo()) {
207           tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
208           iconAlt = "Video";
209           break;
210         } else if (mediaHandler.isAudio()) {
211           tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
212           iconAlt = "Audio";
213         } else if (tinyIcon == null && !mediaHandler.isImage()) {
214           tinyIcon = mediaHandler.getTinyIcon();
215           iconAlt = mediaHandler.getIconAlt();
216         }
217
218       }
219       //it only has image(s)
220       if (tinyIcon == null) {
221         tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
222         iconAlt = "Image";
223       }
224     // uploadedMedia Entity list is empty.
225     // we only have text
226     } else {
227       tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
228       iconAlt = "Text";
229     }
230     returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon);
231     returnHash.put("icon_alt", iconAlt);
232     return returnHash;
233   }
234 */
235
236
237 }
238
239
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");
244
245
246 //      if (field.equals("date_formatted"))
247 //      {
248 //                if (hasValueForField("date"))
249 //              returnField = StringUtil.webdbDate2readableDate(getValue("date"));
250 //              }
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();
257
258 /*
259       else if (key.equals("to_media_icon")) {
260         try {
261           _entCache.put(key, getUploadedMediaForNewswire());
262           return (TemplateModel)_entCache.get(key);
263         }
264         catch (Exception ex) {
265           theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
266           throw new TemplateModelException(ex.toString());
267         }
268       }
269 */
270
271 /*
272   private boolean hasMedia() throws StorageObjectException
273   {
274     if (_hasMedia == null) {
275       _hasMedia =
276         new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this));
277     }
278     return _hasMedia.booleanValue();
279   }
280
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
285   {
286     if (hasMedia())
287       return DatabaseContentToMedia.getInstance().getImages(this);
288     else
289       return null;
290   }
291
292   private EntityList getAudioForContent()
293     throws StorageObjectException, TemplateModelException
294   {
295     if (hasMedia())
296       return DatabaseContentToMedia.getInstance().getAudio(this) ;
297     else
298       return null;
299   }
300
301   private EntityList getVideoForContent()
302     throws StorageObjectException, TemplateModelException
303   {
304     if (hasMedia())
305       return DatabaseContentToMedia.getInstance().getVideo(this) ;
306     else
307       return null;
308   }
309
310   private EntityList getOtherMediaForContent()
311     throws StorageObjectException, TemplateModelException
312   {
313     if (hasMedia())
314       return DatabaseContentToMedia.getInstance().getOther(this);
315     else
316       return null;
317   }
318
319 }
320 */