1 package mircoders.entity.adapter;
5 import mir.entity.adapter.*;
6 import mircoders.storage.*;
7 import mircoders.global.*;
8 import mircoders.localizer.*;
10 public class ContentAdapterDefinition extends EntityAdapterDefinition {
11 private static ContentAdapterDefinition instance;
13 public static ContentAdapterDefinition getInstance() {
14 synchronized (ContentAdapterDefinition.class) {
15 if (instance == null) {
16 instance = new ContentAdapterDefinition();
22 public ContentAdapterDefinition() {
25 addDateField("date", "date");
26 addCalculatedField("to_topics", new ContentToTopicsField());
27 addCalculatedField("to_comments", new ContentToCommentsField());
29 addCalculatedField("to_media_images", new ContentToMediaField(
30 DatabaseImages.getInstance(), ImagesAdapterDefinition.getInstance()));
31 addCalculatedField("to_media_audio", new ContentToMediaField(
32 DatabaseAudio.getInstance(), AudioAdapterDefinition.getInstance()));
33 addCalculatedField("to_media_video", new ContentToMediaField(
34 DatabaseVideo.getInstance(), VideoAdapterDefinition.getInstance()));
35 addCalculatedField("to_media_other", new ContentToMediaField(
36 DatabaseOther.getInstance(), OtherAdapterDefinition.getInstance()));
37 addCalculatedField("to_media_icon", new ContentToMediaField(
38 DatabaseUploadedMedia.getInstance(), UploadedMediaAdapterDefinition.getInstance()));
41 System.out.println(t.getMessage());
42 t.printStackTrace(System.out);
45 addCalculatedField("description_parsed", new FilteredField("description"));
46 addCalculatedField("content_data_parsed", new FilteredField("content_data"));
49 private class FilteredField implements CalculatedField {
52 public FilteredField(String aFieldName) {
53 fieldName = aFieldName;
56 public Object getValue(EntityAdapter anEntityAdapter) {
57 if (anEntityAdapter.get("is_html").equals("0")) {
58 return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
61 return anEntityAdapter.get(fieldName);
66 private class ContentToCommentsField implements CalculatedField {
67 public Object getValue(EntityAdapter anEntityAdapter) {
70 DatabaseComment.getInstance(),
71 "to_media="+anEntityAdapter.get("id"),
73 CommentAdapterDefinition.getInstance());
76 throw new RuntimeException(t.getMessage());
81 private class ContentToTopicsField implements CalculatedField {
82 public Object getValue(EntityAdapter anEntityAdapter) {
85 DatabaseTopics.getInstance(),
86 "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
88 TopicsAdapterDefinition.getInstance());
91 throw new RuntimeException(t.getMessage());
96 private class ContentToMediaField implements CalculatedField {
97 StorageObject storage;
98 EntityAdapterDefinition definition;
100 public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
101 definition = aDefinition;
105 public Object getValue(EntityAdapter anEntityAdapter) {
109 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
113 catch (Throwable t) {
114 throw new RuntimeException(t.getMessage());
123 // String mirconf_extLinkName = MirConfig.getProp("Producer.ExtLinkName");
124 // String mirconf_intLinkName = MirConfig.getProp("Producer.IntLinkName");
125 // String mirconf_mailLinkName = MirConfig.getProp("Producer.MailLinkName");
126 // String mirconf_imageRoot = MirConfig.getProp("Producer.ImageRoot");
129 // if (field.equals("date_formatted"))
131 // if (hasValueForField("date"))
132 // returnField = StringUtil.webdbDate2readableDate(getValue("date"));
134 // else if (field.equals("description_parsed"))
135 // returnField = getDescriptionParsed();
136 // else if (field.equals("description_sentence"))
137 // returnField = getDescriptionSentence();
138 // else if (field.equals("content_data_parsed"))
139 // returnField = getContentDataParsed();
142 else if (key.equals("to_media_icon")) {
144 _entCache.put(key, getUploadedMediaForNewswire());
145 return (TemplateModel)_entCache.get(key);
147 catch (Exception ex) {
148 theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
149 throw new TemplateModelException(ex.toString());
155 private boolean hasMedia() throws StorageObjectException
157 if (_hasMedia == null) {
159 new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this));
161 return _hasMedia.booleanValue();
164 //######## @todo all of the following getBlahForContent should have
165 // and optimized version where LIMIT=1 sql for list view.
166 private EntityList getImagesForContent()
167 throws StorageObjectException, TemplateModelException
170 return DatabaseContentToMedia.getInstance().getImages(this);
175 private EntityList getAudioForContent()
176 throws StorageObjectException, TemplateModelException
179 return DatabaseContentToMedia.getInstance().getAudio(this) ;
184 private EntityList getVideoForContent()
185 throws StorageObjectException, TemplateModelException
188 return DatabaseContentToMedia.getInstance().getVideo(this) ;
193 private EntityList getOtherMediaForContent()
194 throws StorageObjectException, TemplateModelException
197 return DatabaseContentToMedia.getInstance().getOther(this);