contentAdapterDefinition has been updated
[mir.git] / source / mircoders / entity / adapter / ContentAdapterDefinition.java
1 package mircoders.entity.adapter;
2
3 import mir.storage.*;
4 import mir.entity.*;
5 import mir.entity.adapter.*;
6 import mircoders.storage.*;
7 import mircoders.global.*;
8 import mircoders.localizer.*;
9
10 public class ContentAdapterDefinition extends EntityAdapterDefinition {
11   private static ContentAdapterDefinition instance;
12
13   public static ContentAdapterDefinition getInstance() {
14     synchronized (ContentAdapterDefinition.class) {
15       if (instance == null) {
16         instance = new ContentAdapterDefinition();
17       }
18       return instance;
19     }
20   }
21
22   public ContentAdapterDefinition() {
23     super();
24
25     addDateField("date", "date");
26     addCalculatedField("to_topics", new ContentToTopicsField());
27     addCalculatedField("to_comments", new ContentToCommentsField());
28     try {
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()));
39     }
40     catch (Throwable t) {
41       System.out.println(t.getMessage());
42       t.printStackTrace(System.out);
43     }
44
45     addCalculatedField("description_parsed", new FilteredField("description"));
46     addCalculatedField("content_data_parsed", new FilteredField("content_data"));
47   }
48
49   private class FilteredField implements CalculatedField {
50     String fieldName;
51
52     public FilteredField(String aFieldName) {
53       fieldName = aFieldName;
54     }
55
56     public Object getValue(EntityAdapter anEntityAdapter) {
57       if (anEntityAdapter.get("is_html").equals("0")) {
58         return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
59       }
60       else {
61         return anEntityAdapter.get(fieldName);
62       }
63     }
64   }
65
66   private class ContentToCommentsField implements CalculatedField {
67     public Object getValue(EntityAdapter anEntityAdapter) {
68       try {
69         return getRelation(
70                     DatabaseComment.getInstance(),
71                     "to_media="+anEntityAdapter.get("id"),
72                     "title",
73                     CommentAdapterDefinition.getInstance());
74       }
75       catch (Throwable t) {
76         throw new RuntimeException(t.getMessage());
77       }
78     }
79   }
80
81   private class ContentToTopicsField implements CalculatedField {
82     public Object getValue(EntityAdapter anEntityAdapter) {
83       try {
84         return getRelation(
85                     DatabaseTopics.getInstance(),
86                     "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
87                     "title",
88                     TopicsAdapterDefinition.getInstance());
89       }
90       catch (Throwable t) {
91         throw new RuntimeException(t.getMessage());
92       }
93     }
94   }
95
96   private class ContentToMediaField implements CalculatedField {
97     StorageObject storage;
98     EntityAdapterDefinition definition;
99
100     public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
101       definition = aDefinition;
102       storage = aStorage;
103     }
104
105     public Object getValue(EntityAdapter anEntityAdapter) {
106       try {
107         return getRelation(
108                     storage,
109                     "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
110                     "title",
111                     definition);
112       }
113       catch (Throwable t) {
114         throw new RuntimeException(t.getMessage());
115       }
116     }
117   }
118
119
120 }
121
122
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");
127
128
129 //      if (field.equals("date_formatted"))
130 //      {
131 //                if (hasValueForField("date"))
132 //              returnField = StringUtil.webdbDate2readableDate(getValue("date"));
133 //              }
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();
140
141 /*
142       else if (key.equals("to_media_icon")) {
143         try {
144           _entCache.put(key, getUploadedMediaForNewswire());
145           return (TemplateModel)_entCache.get(key);
146         }
147         catch (Exception ex) {
148           theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
149           throw new TemplateModelException(ex.toString());
150         }
151       }
152 */
153
154 /*
155   private boolean hasMedia() throws StorageObjectException
156   {
157     if (_hasMedia == null) {
158       _hasMedia =
159         new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this));
160     }
161     return _hasMedia.booleanValue();
162   }
163
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
168   {
169     if (hasMedia())
170       return DatabaseContentToMedia.getInstance().getImages(this);
171     else
172       return null;
173   }
174
175   private EntityList getAudioForContent()
176     throws StorageObjectException, TemplateModelException
177   {
178     if (hasMedia())
179       return DatabaseContentToMedia.getInstance().getAudio(this) ;
180     else
181       return null;
182   }
183
184   private EntityList getVideoForContent()
185     throws StorageObjectException, TemplateModelException
186   {
187     if (hasMedia())
188       return DatabaseContentToMedia.getInstance().getVideo(this) ;
189     else
190       return null;
191   }
192
193   private EntityList getOtherMediaForContent()
194     throws StorageObjectException, TemplateModelException
195   {
196     if (hasMedia())
197       return DatabaseContentToMedia.getInstance().getOther(this);
198     else
199       return null;
200   }
201
202 }
203 */