*/
package mircoders.localizer.basic;
-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.entity.adapter.ToManyRelationField;
+import mir.entity.adapter.ToOneRelationField;
+import mir.generator.Generator;
+import mir.generator.GeneratorExc;
+import mir.generator.GeneratorFailure;
import mir.log.LoggerWrapper;
-import mir.media.MediaHelper;
-import mir.media.MirMedia;
+import mir.media.MediaHandler;
+import mir.misc.NumberUtils;
+import mir.util.JDBCStringRoutines;
import mir.util.ParameterExpander;
-import mir.util.RewindableIterator;
+import mir.util.StructuredContentParser;
+import mircoders.entity.EntityContent;
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.DatabaseImageType;
-import mircoders.storage.DatabaseImages;
-import mircoders.storage.DatabaseLanguage;
-import mircoders.storage.DatabaseMedia;
-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;
+import mircoders.media.MediaHelper;
+import mircoders.module.ModuleContent;
+import mircoders.module.ModuleLanguage;
+import mircoders.module.ModuleCommentStatus;
+import mircoders.storage.*;
+import multex.Failure;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.awt.*;
public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
- protected LoggerWrapper logger;
- protected MirPropertiesConfiguration configuration;
-
- public MirBasicDataModelLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
- logger = new LoggerWrapper("Localizer.DataModel");
+ protected LoggerWrapper logger = new LoggerWrapper("Localizer.DataModel");
+ protected MirPropertiesConfiguration configuration = MirPropertiesConfiguration.instance();
+ protected ModuleLanguage languageModule = new ModuleLanguage();
+ protected void constructContentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure, MirLocalizerExc {
try {
- configuration = MirPropertiesConfiguration.instance();
- }
- catch (Throwable e) {
- throw new MirLocalizerFailure("Can't get configuration: " + e.getMessage(), e);
- }
- }
+ 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("lockinguser", new ToOneRelationField("to_locking_user", "id", "user"));
+ anEntityAdapterDefinition.addCalculatedField("is_locked", new ContentToIsLockedField());
- protected void constructContentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {
- try {
- anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");
- anEntityAdapterDefinition.addDBDateField("changedate", "webdb_lastchange");
- anEntityAdapterDefinition.addMirDateField("date", "date");
anEntityAdapterDefinition.addCalculatedField("to_topics", new ContentToTopicsField());
anEntityAdapterDefinition.addCalculatedField("to_comments", new ContentToCommentsField());
- anEntityAdapterDefinition.addCalculatedField("language", new ContentToLanguageField());
-
+ anEntityAdapterDefinition.addCalculatedField("language", new ToOneRelationField("to_language", "language", "id"));
anEntityAdapterDefinition.addCalculatedField("commentcount", new ContentCommentCountField(" and is_published='1'"));
anEntityAdapterDefinition.addCalculatedField("fullcommentcount", new ContentCommentCountField(""));
+ anEntityAdapterDefinition.addCalculatedField("commentstatuscount", new CommentStatusCountField());
+
+ anEntityAdapterDefinition.addCalculatedField("mediacount", new ContentMediaCountField("uploaded_media", true));
+ anEntityAdapterDefinition.addCalculatedField("fullmediacount", new ContentMediaCountField("uploaded_media", false));
anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new ContentToMediaField( "uploadedMedia" ));
anEntityAdapterDefinition.addCalculatedField("to_media_images", new ContentToMediaField( "image" ));
anEntityAdapterDefinition.addCalculatedField("to_media_audio", new ContentToMediaField( "audio" ));
anEntityAdapterDefinition.addCalculatedField("to_media_video", new ContentToMediaField( "video" ));
anEntityAdapterDefinition.addCalculatedField("to_media_other", new ContentToMediaField( "otherMedia" ));
+
+ anEntityAdapterDefinition.addCalculatedField("firstImage", new ContentToFirstMediaField( "image" ));
+ anEntityAdapterDefinition.addCalculatedField("firstAudio", new ContentToFirstMediaField( "audio" ));
+ anEntityAdapterDefinition.addCalculatedField("firstVideo", new ContentToFirstMediaField( "video" ));
+ anEntityAdapterDefinition.addCalculatedField("firstOther", new ContentToFirstMediaField( "otherMedia" ));
+
anEntityAdapterDefinition.addCalculatedField("to_all_uploaded_media", new ContentToMediaField( "uploadedMedia", false));
anEntityAdapterDefinition.addCalculatedField("to_all_media_images", new ContentToMediaField( "image", false));
anEntityAdapterDefinition.addCalculatedField("to_all_media_audio", new ContentToMediaField( "audio", false));
anEntityAdapterDefinition.addCalculatedField("to_all_media_other", new ContentToMediaField( "otherMedia", false));
anEntityAdapterDefinition.addCalculatedField("to_media_icon", new ContentToIconField());
- anEntityAdapterDefinition.addCalculatedField("article_type", new ContentToArticleTypeField());
+ anEntityAdapterDefinition.addCalculatedField("article_type", new ToOneRelationField("to_article_type", "articleType", "id"));
anEntityAdapterDefinition.addCalculatedField("description_parsed", new FilteredField("description"));
anEntityAdapterDefinition.addCalculatedField("content_data_parsed", new FilteredField("content_data"));
anEntityAdapterDefinition.addCalculatedField("children", new ContentToChildrenField());
- anEntityAdapterDefinition.addCalculatedField("parent", new ContentToParentField());
+ anEntityAdapterDefinition.addCalculatedField("parent", new ToOneRelationField("to_content", "content", "id"));
anEntityAdapterDefinition.addCalculatedField("publicurl", new ExpandedField(configuration.getString("Article.PublicUrl")));
anEntityAdapterDefinition.addCalculatedField("operations",
new EntityToSimpleOperationsField(MirGlobal.localizer().adminInterface().simpleArticleOperations()));
+
+ anEntityAdapterDefinition.addCalculatedField("languagename", new ContentToLanguageNameField());
+
+ anEntityAdapterDefinition.addCalculatedField("is_original", new ContentIsOriginalField());
+ anEntityAdapterDefinition.addCalculatedField("to_original", new ContentToOriginalField());
+ anEntityAdapterDefinition.addCalculatedField("to_translations", new ContentToTranslationsField());
+ anEntityAdapterDefinition.addCalculatedField("to_translation", new ContentToTranslationField());
+
+ anEntityAdapterDefinition.addCalculatedField("allow_publication",
+ new EntityAdapterDefinition.CalculatedField() {
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return new Boolean(MirGlobal.localizer().openPostings().
+ allowArticlePublication((EntityContent) anEntityAdapter.getEntity()));
+ }
+ catch (Throwable t) {
+ return Boolean.FALSE;
+ }
+ }
+ }
+ );
+
+ anEntityAdapterDefinition.addCalculatedField("previews", new EntityAdapterDefinition.CalculatedField() {
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return MirGlobal.localizer().adminInterface().getPreviewPages(anEntityAdapter);
+ }
+ catch (MirLocalizerExc e) {
+ throw new Failure("Cannot get previews for article", e);
+ }
+ }
+ });
}
catch (Throwable t) {
throw new MirLocalizerFailure(t.getMessage(), t);
}
}
+
+
protected void constructCommentAdapterDefinition(EntityAdapterDefinition anEntityAdapterDefinition) throws MirLocalizerFailure {
try {
- anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create");
- anEntityAdapterDefinition.addCalculatedField("to_content", new CommentToContentField());
+ anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ anEntityAdapterDefinition.addCalculatedField("to_content", new ToOneRelationField("to_media", "content", "id"));
anEntityAdapterDefinition.addCalculatedField("status", new CommentToStatusField());
anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new CommentToMediaField( "uploadedMedia" ));
definition = new EntityAdapterDefinition();
constructCommentAdapterDefinition( definition );
result.addMapping( "comment", DatabaseComment.getInstance(), definition);
+ result.addMapping( "commentStatus", DatabaseCommentStatus.getInstance(), new EntityAdapterDefinition());
result.addMapping( "articleType", DatabaseArticleType.getInstance(), new EntityAdapterDefinition());
- result.addMapping( "commentStatus", DatabaseCommentStatus.getInstance(), new EntityAdapterDefinition());
+
+ result.addMapping( "mediaType", DatabaseMediaType.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 ToOneRelationField("to_media_folder", "mediaFolder", "id"));
+ definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("size"));
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("info", new MediaToMediaInfoField());
+ result.addMapping( "uploadedMedia", DatabaseUploadedMedia.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
+ definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("size"));
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("info", new MediaToMediaInfoField());
+ definition.addCalculatedField("big_icon", new MediaToBigIconField());
+ result.addMapping( "image", DatabaseImages.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
+ definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("size"));
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("info", new MediaToMediaInfoField());
+ definition.addCalculatedField("big_icon", new MediaToBigIconField());
+ result.addMapping( "audio", DatabaseAudio.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
+ definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("size"));
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("info", new MediaToMediaInfoField());
+ definition.addCalculatedField("big_icon", new MediaToBigIconField());
+ result.addMapping( "video", DatabaseVideo.getInstance(), definition);
+
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
+ definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("size"));
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("info", new MediaToMediaInfoField());
+ definition.addCalculatedField("big_icon", new MediaToBigIconField());
+ 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());
+
+ definition = new EntityAdapterDefinition();
+ definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));
+ definition.addDBDateField("lastlogindate", "lastlogin", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("structuredProfile", new StructuredContentField("profile"));
+ result.addMapping( "user", DatabaseUsers.getInstance(), definition);
+
+ result.addMapping( "content_x_topic", DatabaseContentToTopics.getInstance(), new EntityAdapterDefinition());
+
+ definition = new EntityAdapterDefinition();
+ definition.addCalculatedField("to_filters",
+ new ToManyRelationField("id", "filter", "filter_group_id", "priority asc"));
+ result.addMapping("filterGroup", DatabaseFilterGroup.getInstance(), definition);
+ definition = new EntityAdapterDefinition();
+ definition.addDBDateField("lasthit", "last_hit", configuration.getString("Mir.DefaultTimezone"));
+ definition.addCalculatedField("to_filter_group",
+ new ToOneRelationField("filter_group_id", "filter_group", "id"));
+ result.addMapping("filter", DatabaseFilter.getInstance(), definition);
}
catch (Throwable t) {
throw new MirLocalizerFailure(t.getMessage(), t);
return result;
}
- protected class CommentToContentField implements EntityAdapterDefinition.CalculatedField {
- public Object getValue(EntityAdapter anEntityAdapter) {
- try {
- return anEntityAdapter.getToOneRelation(
- "id="+anEntityAdapter.get("to_media"),
- "id",
- "content" );
- }
- catch (Throwable t) {
- throw new RuntimeException(t.getMessage());
- }
- }
- }
-
protected class CommentToStatusField implements EntityAdapterDefinition.CalculatedField {
public Object getValue(EntityAdapter anEntityAdapter) {
try {
public Object getValue(EntityAdapter anEntityAdapter) {
try {
Iterator i = operations.iterator();
- List availableOperations = new Vector();
+ List availableOperations = new ArrayList();
while (i.hasNext()) {
MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation =
if (operation.isAvailable(anEntityAdapter)) {
availableOperations.add(operation.getName());
}
- };
+ }
return availableOperations;
}
if (anEntityAdapter.get("is_html")!=null && anEntityAdapter.get("is_html").equals("1")) {
return MirGlobal.localizer().producerAssistant().filterHTMLText((String) anEntityAdapter.get(fieldName));
}
- else {
- return MirGlobal.localizer().producerAssistant().filterNonHTMLText((String) anEntityAdapter.get(fieldName));
- }
+ return MirGlobal.localizer().producerAssistant().filterNonHTMLText((String) anEntityAdapter.get(fieldName));
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ExpandedField implements EntityAdapterDefinition.CalculatedField {
+ protected class StructuredContentField implements EntityAdapterDefinition.CalculatedField {
private String expression;
- public ExpandedField(String anExpression) {
+ public StructuredContentField(String anExpression) {
expression = anExpression;
}
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- return ParameterExpander.expandExpression(anEntityAdapter, expression);
+ return StructuredContentParser.parse(ParameterExpander.evaluateStringExpression(anEntityAdapter, expression));
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class EvaluatedField implements EntityAdapterDefinition.CalculatedField {
+ protected class ExpandedField implements EntityAdapterDefinition.CalculatedField {
private String expression;
- public EvaluatedField(String anExpression) {
+ public ExpandedField(String anExpression) {
expression = anExpression;
}
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- return ParameterExpander.evaluateExpression(anEntityAdapter, expression);
+ return ParameterExpander.expandExpression(anEntityAdapter, expression);
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ContentToParentField implements EntityAdapterDefinition.CalculatedField {
+ protected class EvaluatedField implements EntityAdapterDefinition.CalculatedField {
+ private String expression;
+
+ public EvaluatedField(String anExpression) {
+ expression = anExpression;
+ }
+
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- logger.debug("ContentToParentField.getValue");
- return anEntityAdapter.getToOneRelation(
- "id="+anEntityAdapter.get("to_content"),
- "id",
- "content" );
+ return ParameterExpander.evaluateExpression(anEntityAdapter, expression);
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ContentToLanguageField implements EntityAdapterDefinition.CalculatedField {
+ public static class MediaInfo {
+ private MediaHandler mediaHandler;
+ private Entity mediaType;
+
+ public MediaInfo(MediaHandler aHandler, Entity aMediaType) {
+ mediaHandler = aHandler;
+ mediaType = aMediaType;
+ }
+
+ public String getBigIcon() {
+ return mediaHandler.getBigIconName();
+ }
+
+ public String getSmallIcon() {
+ return mediaHandler.getTinyIconName();
+ }
+
+ public String getDescription() {
+ return mediaHandler.getDescr(mediaType);
+ }
+ }
+
+ protected static class MediaToMediaInfoField implements EntityAdapterDefinition.CalculatedField {
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- return anEntityAdapter.getToOneRelation(
- "id="+anEntityAdapter.get("to_language"),
- "id",
- "language" );
+ MediaHandler mediaHandler =
+ MediaHelper.getHandler(((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType());
+
+ return new MediaInfo(mediaHandler,
+ ((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType());
}
catch (Throwable t) {
- throw new RuntimeException(t.getMessage());
+ throw new Failure(t.getMessage(), t);
}
}
}
- protected class ContentToArticleTypeField implements EntityAdapterDefinition.CalculatedField {
+ protected static class MediaToBigIconField implements EntityAdapterDefinition.CalculatedField {
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- return anEntityAdapter.getToOneRelation(
- "id="+anEntityAdapter.get("to_article_type"),
- "id",
- "articleType" );
+ return MediaHelper.getHandler(((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType()).getBigIconName();
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ContentToCommentsField implements EntityAdapterDefinition.CalculatedField {
+ protected static 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 {
+ protected static 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;
+ }
+
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- return anEntityAdapter.getRelation(
- "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)",
- "title",
- "topic" );
+ String condition = "cxt.content_id="+anEntityAdapter.get("id")+
+ " and cxt.topic_id=t.id";
+
+ if (topicCondition!=null && topicCondition.length()>0) {
+ condition = "(" + topicCondition + ") and " + condition;
+ }
+
+ return anEntityAdapter.getComplexRelation("t", Collections.singletonList("content_x_topic cxt"),
+ condition, topicOrder, "topic" );
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {
+ protected static class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {
private String definition;
private boolean published;
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
+ String condition = "cxm.content_id="+ anEntityAdapter.get("id") +
+ " and cxm.media_id = m.id";
+
+ if (published) {
+ condition = "is_published='t' and " + condition;
+ }
+
+ List extraTables = new ArrayList();
+ extraTables.add("content_x_media cxm");
+
+ return anEntityAdapter.getComplexRelation("m", extraTables, condition, "id", definition);
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
+ protected static class ContentToFirstMediaField implements EntityAdapterDefinition.CalculatedField {
+ private String definition;
+ private boolean published;
+
+ public ContentToFirstMediaField(String aDefinition, boolean anOnlyPublished) {
+ definition = aDefinition;
+ published = anOnlyPublished;
+ }
+
+ public ContentToFirstMediaField(String aDefinition) {
+ this(aDefinition, true);
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ String condition = "cxm.content_id="+ anEntityAdapter.get("id") +
+ " and cxm.media_id = m.id";
if (published)
condition = "is_published='t' and " + condition;
- return anEntityAdapter.getRelation(
- condition,
- "id",
- definition);
+
+ List extraTables = new ArrayList();
+ extraTables.add("content_x_media cxm");
+
+ return anEntityAdapter.getComplexToOneRelation("m", extraTables, condition, "id", definition);
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class CommentToMediaField implements EntityAdapterDefinition.CalculatedField {
+ protected static class CommentToMediaField implements EntityAdapterDefinition.CalculatedField {
private String definition;
private boolean published;
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- 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;
- return anEntityAdapter.getRelation(
- condition,
- "id",
- definition);
+
+ String condition = "cxm.comment_id = " + anEntityAdapter.get("id") + " and cxm.media_id = m.id";
+
+ if (published) {
+ condition = "is_published='t' and " + condition;
+ }
+
+ return anEntityAdapter.getComplexRelation("m", Collections.singletonList("comment_x_media cxm"),
+ condition, "id", definition);
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
}
}
- protected class ContentToIconField implements EntityAdapterDefinition.CalculatedField {
+ protected static class ContentToIconField implements EntityAdapterDefinition.CalculatedField {
public Object getValue(EntityAdapter anEntityAdapter) {
- EntityAdapter media;
- Entity mediaType;
- RewindableIterator iterator;
- Map result;
- MirMedia mediaHandler;
String tinyIcon;
String iconAlt;
try {
- iterator = (RewindableIterator) (anEntityAdapter.get("to_uploaded_media"));
- iterator.rewind();
-
tinyIcon = MirGlobal.config().getString("Producer.Icon.TinyText");
iconAlt = "Text";
+ Iterator iterator = anEntityAdapter.getIterator("to_media_video");
+ if (!iterator.hasNext()) {
+ iterator = anEntityAdapter.getIterator("to_media_audio");
+ }
+ if (!iterator.hasNext()) {
+ iterator = anEntityAdapter.getIterator("to_media_images");
+ }
+ if (!iterator.hasNext()) {
+ iterator = anEntityAdapter.getIterator("to_media_other");
+ }
+
if (iterator.hasNext()) {
- media = (EntityAdapter) iterator.next();
+ EntityAdapter media = (EntityAdapter) iterator.next();
- mediaType = ((EntityUploadedMedia) (media.getEntity())).getMediaType();
- mediaHandler = MediaHelper.getHandler( mediaType );
-
- if (mediaHandler.isVideo()) {
- tinyIcon = MirGlobal.config().getString("Producer.Icon.TinyVideo");
- iconAlt = "Video";
- }
- else if (mediaHandler.isAudio()) {
- tinyIcon = MirGlobal.config().getString("Producer.Icon.TinyAudio");
- iconAlt = "Audio";
- }
- else if (mediaHandler.isImage()) {
- tinyIcon = MirGlobal.config().getString("Producer.Icon.TinyImage");
- iconAlt = "Image";
- }
- else {
- tinyIcon = mediaHandler.getTinyIconName();
- iconAlt = mediaHandler.getIconAltName();
- }
+ Entity mediaType = ((EntityUploadedMedia) (media.getEntity())).getMediaType();
+ MediaHandler mediaHandler = MediaHelper.getHandler(mediaType);
+ tinyIcon = mediaHandler.getTinyIconName();
+ iconAlt = mediaHandler.getIconAltName();
}
}
catch (Throwable t) {
- logger.error("ContentToIconField: " +t.getMessage());
- throw new RuntimeException(t.getMessage());
+ throw new Failure(t.getMessage(), t);
}
- result = new HashMap();
+ Map result = new HashMap();
result.put("tiny_icon", MirGlobal.config().getString("Producer.ImageRoot") + "/" + tinyIcon);
result.put("icon_alt", iconAlt);
}
}
- protected class ContentCommentCountField implements EntityAdapterDefinition.CalculatedField {
+ protected static class ContentCommentCountField implements EntityAdapterDefinition.CalculatedField {
private String extraCondition;
public ContentCommentCountField(String anExtraCondition) {
- super();
-
extraCondition = anExtraCondition;
}
}
}
}
+
+ protected static class HumanReadableSizeField implements EntityAdapterDefinition.CalculatedField {
+ private String fieldName;
+
+ public HumanReadableSizeField(String aFieldName) {
+ fieldName= aFieldName;
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ String size = (String) anEntityAdapter.get(fieldName);
+ if (size!=null) {
+ return NumberUtils.humanReadableSize(Double.parseDouble(size));
+ }
+ return "";
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
+
+ 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 {
+ ArrayList extraTable = new ArrayList();
+ extraTable.add(table+" m");
+ String selectSql = "cxm.media_id=m.id and cxm.content_id="+
+ anEntityAdapter.get("id");
+ if (published)
+ selectSql+= " and m.is_published='t'";
+
+ return Integer.toString(
+ DatabaseContentToMedia.getInstance().getSize(
+ "cxm", extraTable, selectSql));
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
+ protected class ContentToIsLockedField implements EntityAdapterDefinition.CalculatedField {
+ private ModuleContent contentModule;
+
+ public ContentToIsLockedField() {
+ contentModule = new ModuleContent();
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return new Boolean(contentModule.queryArticleLock(anEntityAdapter.getEntity().getId())!=null);
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+ protected class ContentIsOriginalField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) throws MirLocalizerFailure {
+ try {
+
+ //ML: add check on article type
+ boolean result = (anEntityAdapter.get("parent")==null);
+
+ return new Boolean(result);
+ }
+ catch (Throwable t) {
+ throw new MirLocalizerFailure(t);
+ }
+ }
+ }
+
+ protected class ContentToOriginalField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) throws MirLocalizerFailure {
+ try {
+ if (anEntityAdapter.get("parent")!=null)
+ return anEntityAdapter.get("parent");
+ return anEntityAdapter;
+ }
+ catch (Throwable t) {
+ throw new MirLocalizerFailure(t);
+ }
+ }
+ }
+
+ protected class ContentToTranslationsField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ return anEntityAdapter.getRelation(
+ "is_published='t' and to_content="+anEntityAdapter.get("id"),
+ "id",
+ "content" );
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
+ protected class ContentToLanguageNameField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) throws MirLocalizerFailure {
+ try {
+ String result = "";
+ EntityAdapter language = (EntityAdapter) anEntityAdapter.get("language");
+ if (language != null) {
+ if (language.get("code").equals("ot")) {
+ result = ((String) anEntityAdapter.get("subtitle")).trim();
+ if (result == null || result.equals(""))
+ result = (String) language.get("name");
+ } else {
+ result = (String) language.get("name");
+ }
+ }
+
+ return result;
+ }
+ catch (Throwable t) {
+ throw new MirLocalizerFailure(t);
+ }
+ }
+ }
+
+ protected class ContentToTranslationFunction implements Generator.Function {
+ private EntityAdapter target;
+ private String targetId;
+ private String targetLanguageId;
+
+ public ContentToTranslationFunction(EntityAdapter aTarget) {
+ target = aTarget;
+ targetId = (String) target.get("id");
+ targetLanguageId = (String) target.get("to_language");
+ }
+
+ public Object perform(List aParameters) throws GeneratorExc, GeneratorFailure {
+ if (aParameters.size()!=1 || !(aParameters.get(0) instanceof String))
+ throw new GeneratorExc("1 string parameter expected");
+
+ try {
+ String language = (String) aParameters.get(0);
+ String languageId = languageModule.languageIdForCode(language);
+ Object result = null;
+
+ if (languageId != null && !targetLanguageId.equals(languageId)) {
+ result = target.getToOneRelation(
+ "is_published='t' and to_content=" + targetId + " and to_language='" + JDBCStringRoutines.escapeStringLiteral(languageId) + "'",
+ "id", "content");
+ }
+
+ if (result == null)
+ result = target;
+
+ return result;
+ }
+ catch (Throwable t) {
+ t.printStackTrace(System.out);
+ throw new GeneratorFailure(t);
+ }
+ }
+ }
+
+ protected class ContentToTranslationField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) throws MirLocalizerFailure {
+ try {
+ return new ContentToTranslationFunction((EntityAdapter) anEntityAdapter.get("to_original"));
+ }
+ catch (Throwable t) {
+ throw new MirLocalizerFailure(t);
+ }
+ }
+ }
+
+ protected static class CommentStatusCountField implements EntityAdapterDefinition.CalculatedField {
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ return new CommentStatusCountField2(anEntityAdapter);
+ }
+ }
+
+ public static class CommentStatusCountField2 {
+ private final EntityAdapter comment;
+ private final ModuleCommentStatus mcs = new ModuleCommentStatus();
+
+ CommentStatusCountField2(EntityAdapter anEntityAdapter) {
+ comment = anEntityAdapter;
+ }
+
+ public String get(String aCommentStatus) {
+ try {
+ return Integer.toString(
+ DatabaseComment.getInstance().getSize(
+ "to_media=" + comment.get("id") + " and is_published='1' and to_comment_status = " +
+ mcs.commentStatusIdForName(aCommentStatus)));
+ }
+ catch (Exception e) {
+ return "0";
+ }
+ }
+ }
}
+