At last the EntityBatchingProducerNode is working. This will replace the old
[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     addDBDateField("creationdate", "webdb_lastchange");
29     addDBDateField("changedate", "webdb_create");
30     addMirDateField("date", "date");
31     addCalculatedField("to_topics", new ContentToTopicsField());
32     addCalculatedField("to_comments", new ContentToCommentsField());
33     try {
34       addCalculatedField("to_media_images", new ContentToMediaField(
35           DatabaseImages.getInstance(), ImagesAdapterDefinition.getInstance()));
36       addCalculatedField("to_media_audio", new ContentToMediaField(
37           DatabaseAudio.getInstance(), AudioAdapterDefinition.getInstance()));
38       addCalculatedField("to_media_video", new ContentToMediaField(
39           DatabaseVideo.getInstance(), VideoAdapterDefinition.getInstance()));
40       addCalculatedField("to_media_other", new ContentToMediaField(
41           DatabaseOther.getInstance(), OtherAdapterDefinition.getInstance()));
42       addCalculatedField("to_media_icon", new ContentToIconField());
43     }
44     catch (Throwable t) {
45       System.out.println(t.getMessage());
46       t.printStackTrace(System.out);
47     }
48
49     addCalculatedField("description_parsed", new FilteredField("description"));
50     addCalculatedField("content_data_parsed", new FilteredField("content_data"));
51   }
52
53   private class FilteredField implements CalculatedField {
54     String fieldName;
55
56     public FilteredField(String aFieldName) {
57       fieldName = aFieldName;
58     }
59
60     public Object getValue(EntityAdapter anEntityAdapter) {
61       if (anEntityAdapter.get("is_html").equals("0")) {
62         return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
63       }
64       else {
65         return anEntityAdapter.get(fieldName);
66       }
67     }
68   }
69
70   private class ContentToCommentsField implements CalculatedField {
71     public Object getValue(EntityAdapter anEntityAdapter) {
72       try {
73         return getRelation(
74                     DatabaseComment.getInstance(),
75                     "to_media="+anEntityAdapter.get("id"),
76                     "title",
77                     CommentAdapterDefinition.getInstance());
78       }
79       catch (Throwable t) {
80         throw new RuntimeException(t.getMessage());
81       }
82     }
83   }
84
85   private class ContentToTopicsField implements CalculatedField {
86     public Object getValue(EntityAdapter anEntityAdapter) {
87       try {
88         return getRelation(
89                     DatabaseTopics.getInstance(),
90                     "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
91                     "title",
92                     TopicsAdapterDefinition.getInstance());
93       }
94       catch (Throwable t) {
95         throw new RuntimeException(t.getMessage());
96       }
97     }
98   }
99
100   private class ContentToMediaField implements CalculatedField {
101     StorageObject storage;
102     EntityAdapterDefinition definition;
103
104     public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
105       definition = aDefinition;
106       storage = aStorage;
107     }
108
109     public Object getValue(EntityAdapter anEntityAdapter) {
110       try {
111         return getRelation(
112                     storage,
113                     "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
114                     "title",
115                     definition);
116       }
117       catch (Throwable t) {
118         throw new RuntimeException(t.getMessage());
119       }
120     }
121   }
122
123   private class ContentToIconField implements CalculatedField {
124     public Object getValue(EntityAdapter anEntityAdapter) {
125       EntityUploadedMedia uploadedMedia;
126       Entity mediaType;
127       EntityBrowser browser;
128       Map result;
129       MirMedia mediaHandler;
130       String tinyIcon;
131       String iconAlt;
132
133
134       try {
135         browser =
136             new EntityBrowser(
137                 DatabaseUploadedMedia.getInstance(),
138                 "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
139                 "id",
140                 1);
141
142         tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
143         iconAlt = "Text";
144
145         if (browser.hasNext()) {
146           uploadedMedia = (EntityUploadedMedia) browser.next();
147
148           mediaType = uploadedMedia.getMediaType();
149           mediaHandler = MediaHelper.getHandler( mediaType );
150
151           if (mediaHandler.isVideo()) {
152             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyVideo");
153             iconAlt = "Video";
154           }
155           else if (mediaHandler.isAudio()) {
156             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyAudio");
157             iconAlt = "Audio";
158           }
159           else if (mediaHandler.isImage()) {
160             tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyImage");
161             iconAlt = "Image";
162           }
163           else {
164             tinyIcon = mediaHandler.getTinyIcon();
165             iconAlt = mediaHandler.getIconAlt();
166           }
167         }
168       }
169       catch (Throwable t) {
170         throw new RuntimeException(t.getMessage());
171       }
172
173       result = new HashMap();
174       result.put("tiny_icon", tinyIcon);
175       result.put("icon_alt", iconAlt);
176
177       return result;
178     }
179   }
180 }
181
182