1d9439845410cc5c9683aee3c0704ff13e0c2e31
[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 mir.util.*;
9 import mircoders.storage.*;
10 import mircoders.global.*;
11 import mircoders.entity.*;
12 import mircoders.localizer.*;
13
14 public class ContentAdapterDefinition extends EntityAdapterDefinition {
15   private static ContentAdapterDefinition instance;
16
17   public static ContentAdapterDefinition getInstance() {
18     synchronized (ContentAdapterDefinition.class) {
19       if (instance == null) {
20         instance = new ContentAdapterDefinition();
21       }
22       return instance;
23     }
24   }
25
26   public ContentAdapterDefinition() {
27     super();
28
29     addDBDateField("creationdate", "webdb_lastchange");
30     addDBDateField("changedate", "webdb_create");
31     addMirDateField("date", "date");
32     addCalculatedField("to_topics", new ContentToTopicsField());
33     addCalculatedField("to_comments", new ContentToCommentsField());
34     try {
35       addCalculatedField("to_media_images", new ContentToMediaField(
36           DatabaseImages.getInstance(), ImagesAdapterDefinition.getInstance()));
37       addCalculatedField("to_uploaded_media", new ContentToMediaField(
38           DatabaseUploadedMedia.getInstance(), UploadedMediaAdapterDefinition.getInstance()));
39       addCalculatedField("to_media_audio", new ContentToMediaField(
40           DatabaseAudio.getInstance(), AudioAdapterDefinition.getInstance()));
41       addCalculatedField("to_media_video", new ContentToMediaField(
42           DatabaseVideo.getInstance(), VideoAdapterDefinition.getInstance()));
43       addCalculatedField("to_media_other", new ContentToMediaField(
44           DatabaseOther.getInstance(), OtherAdapterDefinition.getInstance()));
45       addCalculatedField("to_media_icon", new ContentToIconField());
46     }
47     catch (Throwable t) {
48       System.out.println(t.getMessage());
49       t.printStackTrace(System.out);
50     }
51
52     addCalculatedField("description_parsed", new FilteredField("description"));
53     addCalculatedField("content_data_parsed", new FilteredField("content_data"));
54   }
55
56   private class FilteredField implements CalculatedField {
57     String fieldName;
58
59     public FilteredField(String aFieldName) {
60       fieldName = aFieldName;
61     }
62
63     public Object getValue(EntityAdapter anEntityAdapter) {
64       if (anEntityAdapter.get("is_html").equals("0")) {
65         return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName));
66       }
67       else {
68         return anEntityAdapter.get(fieldName);
69       }
70     }
71   }
72
73   private class ContentToCommentsField implements CalculatedField {
74     public Object getValue(EntityAdapter anEntityAdapter) {
75       try {
76         return getRelation(
77                     DatabaseComment.getInstance(),
78                     "to_media="+anEntityAdapter.get("id"),
79                     "title",
80                     CommentAdapterDefinition.getInstance());
81       }
82       catch (Throwable t) {
83         throw new RuntimeException(t.getMessage());
84       }
85     }
86   }
87
88   private class ContentToTopicsField implements CalculatedField {
89     public Object getValue(EntityAdapter anEntityAdapter) {
90       try {
91         return getRelation(
92                     DatabaseTopics.getInstance(),
93                     "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
94                     "title",
95                     TopicsAdapterDefinition.getInstance());
96       }
97       catch (Throwable t) {
98         throw new RuntimeException(t.getMessage());
99       }
100     }
101   }
102
103   private class ContentToMediaField implements CalculatedField {
104     StorageObject storage;
105     EntityAdapterDefinition definition;
106
107     public ContentToMediaField(StorageObject aStorage, EntityAdapterDefinition aDefinition) {
108       definition = aDefinition;
109       storage = aStorage;
110     }
111
112     public Object getValue(EntityAdapter anEntityAdapter) {
113       try {
114         return getRelation(
115                     storage,
116                     "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
117                     "title",
118                     definition);
119       }
120       catch (Throwable t) {
121         throw new RuntimeException(t.getMessage());
122       }
123     }
124   }
125
126   private class ContentToIconField implements CalculatedField {
127     public Object getValue(EntityAdapter anEntityAdapter) {
128       EntityAdapter media;
129       Entity mediaType;
130       RewindableIterator iterator;
131       Map result;
132       MirMedia mediaHandler;
133       String tinyIcon;
134       String iconAlt;
135
136       try {
137         iterator = (RewindableIterator) (anEntityAdapter.get("to_uploaded_media"));
138         iterator.rewind();
139
140         tinyIcon = MirGlobal.getConfigProperty("Producer.Icon.TinyText");
141         iconAlt = "Text";
142
143         if (iterator.hasNext()) {
144           media = (EntityAdapter) iterator.next();
145
146           mediaType = ((EntityUploadedMedia) (media.getEntity())).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       }
168       catch (Throwable t) {
169         System.out.println("ContentToIconField: exception: " +t.getMessage());
170         t.printStackTrace(System.out);
171         throw new RuntimeException(t.getMessage());
172       }
173
174       result = new HashMap();
175       result.put("tiny_icon", tinyIcon);
176       result.put("icon_alt", iconAlt);
177
178       return result;
179     }
180   }
181 }
182
183