/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
*
* This file is part of Mir.
*
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two. You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries. If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so. If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two. You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries. If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
*/
-
package mircoders.localizer.basic;
-import java.util.HashMap;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Vector;\r
-\r
-import mir.config.MirPropertiesConfiguration;\r
-import mir.entity.Entity;\r
-import mir.entity.adapter.EntityAdapter;\r
-import mir.entity.adapter.EntityAdapterDefinition;\r
-import mir.entity.adapter.EntityAdapterModel;\r
-import mir.log.LoggerWrapper;\r
-import mir.media.MediaHelper;\r
-import mir.media.MirMedia;\r
-import mir.util.ParameterExpander;\r
-import mir.util.RewindableIterator;\r
-import mircoders.entity.EntityUploadedMedia;\r
-import mircoders.global.MirGlobal;\r
-import mircoders.localizer.MirAdminInterfaceLocalizer;\r
-import mircoders.localizer.MirDataModelLocalizer;\r
-import mircoders.localizer.MirLocalizerExc;\r
-import mircoders.localizer.MirLocalizerFailure;\r
-import mircoders.storage.DatabaseArticleType;\r
-import mircoders.storage.DatabaseAudio;\r
-import mircoders.storage.DatabaseBreaking;\r
-import mircoders.storage.DatabaseComment;\r
-import mircoders.storage.DatabaseCommentStatus;\r
-import mircoders.storage.DatabaseContent;\r
-import mircoders.storage.DatabaseImageType;\r
-import mircoders.storage.DatabaseImages;\r
-import mircoders.storage.DatabaseLanguage;\r
-import mircoders.storage.DatabaseMedia;\r
-import mircoders.storage.DatabaseMediaType;\r
-import mircoders.storage.DatabaseMediafolder;\r
-import mircoders.storage.DatabaseMessages;\r
-import mircoders.storage.DatabaseOther;\r
-import mircoders.storage.DatabaseTopics;\r
-import mircoders.storage.DatabaseUploadedMedia;\r
-import mircoders.storage.DatabaseUsers;\r
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+
+import mir.config.MirPropertiesConfiguration;
+import mir.entity.Entity;
+import mir.entity.adapter.EntityAdapter;
+import mir.entity.adapter.EntityAdapterDefinition;
+import mir.entity.adapter.EntityAdapterModel;
+import mir.log.LoggerWrapper;
+import mir.media.MediaHelper;
+import mir.media.MirMedia;
+import mir.util.ParameterExpander;
+import mir.util.RewindableIterator;
+import mir.util.StructuredContentParser;
+import mircoders.entity.EntityUploadedMedia;
+import mircoders.global.MirGlobal;
+import mircoders.localizer.MirAdminInterfaceLocalizer;
+import mircoders.localizer.MirDataModelLocalizer;
+import mircoders.localizer.MirLocalizerExc;
+import mircoders.localizer.MirLocalizerFailure;
+import mircoders.storage.DatabaseArticleType;
+import mircoders.storage.DatabaseAudio;
+import mircoders.storage.DatabaseBreaking;
+import mircoders.storage.DatabaseComment;
+import mircoders.storage.DatabaseCommentStatus;
+import mircoders.storage.DatabaseContent;
+import mircoders.storage.DatabaseContentToMedia;
+import mircoders.storage.DatabaseContentToTopics;
+import mircoders.storage.DatabaseImageType;
+import mircoders.storage.DatabaseImages;
+import mircoders.storage.DatabaseLanguage;
+import mircoders.storage.DatabaseMediaType;
+import mircoders.storage.DatabaseMediafolder;
+import mircoders.storage.DatabaseMessages;
+import mircoders.storage.DatabaseOther;
+import mircoders.storage.DatabaseTopics;
+import mircoders.storage.DatabaseUploadedMedia;
+import mircoders.storage.DatabaseUsers;
import mircoders.storage.DatabaseVideo;
public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
- private EntityAdapterModel model;
protected LoggerWrapper logger;
protected MirPropertiesConfiguration configuration;
public MirBasicDataModelLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
- model=null;
logger = new LoggerWrapper("Localizer.DataModel");
try {
}
}
- public EntityAdapterModel adapterModel() throws MirLocalizerFailure {
- if (model==null)
- model = buildModel();
-
- return model;
- };
-
- protected void constructContentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {
+ protected void constructContentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure, MirLocalizerExc {
try {
- anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");
- anEntityAdapterDefinition.addDBDateField("changedate", "webdb_lastchange");
- anEntityAdapterDefinition.addMirDateField("date", "date");
+ anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ anEntityAdapterDefinition.addDBDateField("changedate", "webdb_lastchange", configuration.getString("Mir.DefaultTimezone"));
+ anEntityAdapterDefinition.addMirDateField("date", "date", configuration.getString("Mir.DefaultTimezone"));
anEntityAdapterDefinition.addCalculatedField("to_topics", new ContentToTopicsField());
anEntityAdapterDefinition.addCalculatedField("to_comments", new ContentToCommentsField());
anEntityAdapterDefinition.addCalculatedField("language", new ContentToLanguageField());
protected void constructCommentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {
try {
- anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");
+ anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
anEntityAdapterDefinition.addCalculatedField("to_content", new CommentToContentField());
anEntityAdapterDefinition.addCalculatedField("status", new CommentToStatusField());
}
}
- protected EntityAdapterModel buildModel() throws MirLocalizerFailure {
+ public EntityAdapterModel adapterModel() throws MirLocalizerFailure, MirLocalizerExc {
EntityAdapterModel result = new EntityAdapterModel();
try {
result.addMapping( "commentStatus", DatabaseCommentStatus.getInstance(), new EntityAdapterDefinition());
definition = new EntityAdapterDefinition();
- definition.addDBDateField("creationdate", "webdb_create");
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
result.addMapping( "breakingNews", DatabaseBreaking.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ result.addMapping( "internalMessage", DatabaseMessages.getInstance(), definition);
+
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new MediaToMediaFolderField());
+ result.addMapping( "uploadedMedia", DatabaseUploadedMedia.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new MediaToMediaFolderField());
+ result.addMapping( "image", DatabaseImages.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new MediaToMediaFolderField());
+ result.addMapping( "audio", DatabaseAudio.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new MediaToMediaFolderField());
+ result.addMapping( "video", DatabaseVideo.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new MediaToMediaFolderField());
+ result.addMapping( "otherMedia", DatabaseOther.getInstance(), definition);
+
+
+ result.addMapping( "mediaFolder", DatabaseMediafolder.getInstance(), new EntityAdapterDefinition());
result.addMapping( "imageType", DatabaseImageType.getInstance(), new EntityAdapterDefinition());
result.addMapping( "language", DatabaseLanguage.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "mediaFolder", DatabaseMediafolder.getInstance(), new EntityAdapterDefinition());
result.addMapping( "mediaType", DatabaseMediaType.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "internalMessage", DatabaseMessages.getInstance(), new EntityAdapterDefinition());
result.addMapping( "topic", DatabaseTopics.getInstance(), new EntityAdapterDefinition());
result.addMapping( "user", DatabaseUsers.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "media", DatabaseMedia.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "uploadedMedia", DatabaseUploadedMedia.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "image", DatabaseImages.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "audio", DatabaseAudio.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "video", DatabaseVideo.getInstance(), new EntityAdapterDefinition());
result.addMapping( "otherMedia", DatabaseOther.getInstance(), new EntityAdapterDefinition());
+
+ result.addMapping( "content_x_topic", DatabaseContentToTopics.getInstance(), new EntityAdapterDefinition());
+
}
catch (Throwable t) {
throw new MirLocalizerFailure(t.getMessage(), t);
public Object getValue(EntityAdapter anEntityAdapter) {
try {
if (anEntityAdapter.get("is_html")!=null && anEntityAdapter.get("is_html").equals("1")) {
- return anEntityAdapter.get(fieldName);
+ return MirGlobal.localizer().producerAssistant().filterHTMLText((String) anEntityAdapter.get(fieldName));
}
else {
- return MirGlobal.localizer().producerAssistant().filterText((String) anEntityAdapter.get(fieldName));
+ return MirGlobal.localizer().producerAssistant().filterNonHTMLText((String) anEntityAdapter.get(fieldName));
}
}
catch (Throwable t) {
}
}
+ protected class StructuredContentField implements EntityAdapterDefinition.CalculatedField {
+ private String expression;
+
+ public StructuredContentField(String anExpression) {
+ expression = anExpression;
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return StructuredContentParser.parse(ParameterExpander.evaluateStringExpression(anEntityAdapter, expression));
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
protected class ExpandedField implements EntityAdapterDefinition.CalculatedField {
private String expression;
}
}
+ protected class MediaToMediaFolderField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return anEntityAdapter.getToOneRelation(
+ "id="+anEntityAdapter.get("to_media_folder"),
+ "id",
+ "mediaFolder" );
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
protected class ContentToCommentsField implements EntityAdapterDefinition.CalculatedField {
+ private String extracondition;
+ private String order;
+
+ public ContentToCommentsField() {
+ this ( " and is_published='1'", "webdb_create");
+ }
+
+ public ContentToCommentsField(String anExtraCondition, String anOrder) {
+ order = anOrder;
+ extracondition = anExtraCondition;
+ }
+
public Object getValue(EntityAdapter anEntityAdapter) {
try {
return anEntityAdapter.getRelation(
- "to_media="+anEntityAdapter.get("id")+" and is_published='1'",
- "webdb_create",
+ "to_media="+anEntityAdapter.get("id")+" " + extracondition,
+ order,
"comment" );
}
catch (Throwable t) {
}
protected class ContentToTopicsField implements EntityAdapterDefinition.CalculatedField {
+ private String topicCondition;
+ private String topicOrder;
+
+ public ContentToTopicsField() {
+ this(null);
+ }
+
+ public ContentToTopicsField(String aTopicCondition) {
+ this(aTopicCondition, "title");
+ }
+
+ public ContentToTopicsField(String aTopicCondition, String aTopicOrder) {
+ topicCondition = aTopicCondition;
+ topicOrder = aTopicOrder;
+ }
+
+ // TODO rewrite as relational select
public Object getValue(EntityAdapter anEntityAdapter) {
try {
+ String condition = "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)";
+ if (topicCondition!=null && topicCondition.length()>0)
+ condition = "(" + topicCondition + ") and " + condition;
+
return anEntityAdapter.getRelation(
- "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
- "title",
+ condition,
+ topicOrder,
"topic" );
}
catch (Throwable t) {
public Object getValue(EntityAdapter anEntityAdapter) {
try {
+ // TODO rewrite as relational select
String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
if (published)
condition = "is_published='t' and " + condition;
public Object getValue(EntityAdapter anEntityAdapter) {
try {
+ // TODO rewrite as relational select
String condition = "exists (select * from comment_x_media where comment_id="+anEntityAdapter.get("id")+" and media_id=id)";
if (published)
condition = "is_published='t' and " + condition;
}
}
}
+
+ protected class ContentMediaCountField implements EntityAdapterDefinition.CalculatedField {
+ private String table;
+ private boolean published;
+
+ public ContentMediaCountField(String aTable, boolean anOnlyPublished) {
+ table = aTable;
+ published = anOnlyPublished;
+ }
+
+ public ContentMediaCountField(String aTable) {
+ this(aTable, true);
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ String subQuery = "select * from "+table+" where id = media_id";
+ if (published)
+ subQuery = subQuery + " and is_published='t'";
+
+ return Integer.toString(
+ DatabaseContentToMedia.getInstance().getSize(
+ "exists ("+subQuery+")"));
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
}