added:
[mir.git] / source / mircoders / localizer / basic / MirBasicDataModelLocalizer.java
index 0c5714a..a1a9425 100755 (executable)
@@ -31,7 +31,11 @@ package mircoders.localizer.basic;
 
 import mir.config.MirPropertiesConfiguration;
 import mir.entity.Entity;
-import mir.entity.adapter.*;
+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;
@@ -41,20 +45,26 @@ import mir.misc.NumberUtils;
 import mir.util.JDBCStringRoutines;
 import mir.util.ParameterExpander;
 import mir.util.StructuredContentParser;
-import mircoders.entity.EntityUploadedMedia;
 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.media.MediaHelper;
+import mircoders.module.ModuleCommentStatus;
 import mircoders.module.ModuleContent;
 import mircoders.module.ModuleLanguage;
 import mircoders.storage.*;
 import multex.Failure;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   protected LoggerWrapper logger = new LoggerWrapper("Localizer.DataModel");
@@ -75,7 +85,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       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));
@@ -110,7 +120,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
       anEntityAdapterDefinition.addCalculatedField("operations",
           new EntityToSimpleOperationsField(MirGlobal.localizer().adminInterface().simpleArticleOperations()));
-      
+
       anEntityAdapterDefinition.addCalculatedField("languagename", new ContentToLanguageNameField());
 
       anEntityAdapterDefinition.addCalculatedField("is_original", new ContentIsOriginalField());
@@ -123,7 +133,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
             public Object getValue(EntityAdapter anEntityAdapter) {
               try {
-                return Boolean.valueOf(MirGlobal.localizer().openPostings().
+                return new Boolean(MirGlobal.localizer().openPostings().
                     allowArticlePublication((EntityContent) anEntityAdapter.getEntity()));
               }
               catch (Throwable t) {
@@ -209,27 +219,27 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
       definition = new EntityAdapterDefinition();
       definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
-      definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("value"));
+      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("value"));
+      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("value"));
+      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("value"));
+      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());
@@ -237,7 +247,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
       definition = new EntityAdapterDefinition();
       definition.addCalculatedField("mediafolder", new ToOneRelationField("to_media_folder", "mediaFolder", "id"));
-      definition.addCalculatedField("human_readable_size", new HumanReadableSizeField("value"));
+      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());
@@ -302,8 +312,8 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
         List availableOperations = new ArrayList();
 
         while (i.hasNext()) {
-          MirAdminInterfaceLocalizer.MirSimpleEntityOperation operation =
-            (MirAdminInterfaceLocalizer.MirSimpleEntityOperation) i.next();
+          MirAdminInterfaceLocalizer.EntityOperation operation =
+            (MirAdminInterfaceLocalizer.EntityOperation) i.next();
 
           if (operation.isAvailable(anEntityAdapter)) {
             availableOperations.add(operation.getName());
@@ -330,7 +340,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
         if (anEntityAdapter.get("is_html")!=null && anEntityAdapter.get("is_html").equals("1")) {
           return MirGlobal.localizer().producerAssistant().filterHTMLText((String) anEntityAdapter.get(fieldName));
         }
-                               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());
@@ -402,43 +412,45 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       }
     }
   }
+
   public static class MediaInfo {
     private MediaHandler mediaHandler;
+    private Entity mediaType;
 
-    public MediaInfo(MediaHandler aHandler) {
+    public MediaInfo(MediaHandler aHandler, Entity aMediaType) {
       mediaHandler = aHandler;
+      mediaType = aMediaType;
     }
+
     public String getBigIcon() {
-      if (mediaHandler == null)
-        return "bla";
-                       return mediaHandler.getBigIconName();
+      return mediaHandler.getBigIconName();
     }
 
     public String getSmallIcon() {
-      if (mediaHandler == null)
-        return "bla";
-                       return mediaHandler.getTinyIconName();
+      return mediaHandler.getTinyIconName();
     }
 
-    public String getMediaType() {
-      return "";
+    public String getDescription() {
+      return mediaHandler.getDescr(mediaType);
     }
   }
 
-  protected class MediaToMediaInfoField implements EntityAdapterDefinition.CalculatedField {
+  protected static class MediaToMediaInfoField implements EntityAdapterDefinition.CalculatedField {
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {
-        MediaHandler mediaHandler = MediaHelper.getHandler(((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType());
+        MediaHandler mediaHandler =
+            MediaHelper.getHandler(((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType());
 
-        return new MediaInfo(mediaHandler);
+        return new MediaInfo(mediaHandler,
+            ((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType());
       }
       catch (Throwable t) {
-        throw new RuntimeException(t.getMessage());
+        throw new Failure(t.getMessage(), t);
       }
     }
   }
 
-  protected class MediaToBigIconField implements EntityAdapterDefinition.CalculatedField {
+  protected static class MediaToBigIconField implements EntityAdapterDefinition.CalculatedField {
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {
         return MediaHelper.getHandler(((EntityUploadedMedia) anEntityAdapter.getEntity()).getMediaType()).getBigIconName();
@@ -449,7 +461,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentToCommentsField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentToCommentsField implements EntityAdapterDefinition.CalculatedField {
     private String extracondition;
     private String order;
 
@@ -475,7 +487,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentToTopicsField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentToTopicsField implements EntityAdapterDefinition.CalculatedField {
     private String topicCondition;
     private String topicOrder;
 
@@ -494,13 +506,12 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
 
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {
-
-
         String condition = "cxt.content_id="+anEntityAdapter.get("id")+
           " and cxt.topic_id=t.id";
 
-        if (topicCondition!=null && topicCondition.length()>0)
+        if (topicCondition!=null && topicCondition.length()>0) {
           condition = "(" + topicCondition + ") and " + condition;
+        }
 
         return anEntityAdapter.getComplexRelation("t", Collections.singletonList("content_x_topic cxt"),
                     condition, topicOrder, "topic" );
@@ -511,7 +522,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {
     private String definition;
     private boolean published;
 
@@ -544,7 +555,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentToFirstMediaField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentToFirstMediaField implements EntityAdapterDefinition.CalculatedField {
     private String definition;
     private boolean published;
 
@@ -575,7 +586,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class CommentToMediaField implements EntityAdapterDefinition.CalculatedField {
+  protected static class CommentToMediaField implements EntityAdapterDefinition.CalculatedField {
     private String definition;
     private boolean published;
 
@@ -606,38 +617,41 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentToIconField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentToIconField implements EntityAdapterDefinition.CalculatedField {
     public Object getValue(EntityAdapter anEntityAdapter) {
-      EntityAdapter media;
-      Entity mediaType;
-      Iterator iterator;
-      Map result;
-      MediaHandler mediaHandler;
       String tinyIcon;
       String iconAlt;
 
       try {
-        iterator = anEntityAdapter.getIterator("to_uploaded_media");
-
         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 );
+          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);
 
@@ -645,12 +659,10 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class ContentCommentCountField implements EntityAdapterDefinition.CalculatedField {
+  protected static class ContentCommentCountField implements EntityAdapterDefinition.CalculatedField {
     private String extraCondition;
 
     public ContentCommentCountField(String anExtraCondition) {
-      super();
-
       extraCondition = anExtraCondition;
     }
 
@@ -666,7 +678,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
-  protected class HumanReadableSizeField implements EntityAdapterDefinition.CalculatedField {
+  protected static class HumanReadableSizeField implements EntityAdapterDefinition.CalculatedField {
       private String fieldName;
 
       public HumanReadableSizeField(String aFieldName) {
@@ -676,9 +688,10 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       public Object getValue(EntityAdapter anEntityAdapter) {
         try {
           String size = (String) anEntityAdapter.get(fieldName);
-          if (size!=null)
+          if (size!=null) {
             return NumberUtils.humanReadableSize(Double.parseDouble(size));
-                                       return "";
+          }
+          return "";
         }
         catch (Throwable t) {
           throw new RuntimeException(t.getMessage());
@@ -755,7 +768,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       try {
         if (anEntityAdapter.get("parent")!=null)
           return anEntityAdapter.get("parent");
-                               return anEntityAdapter;
+        return anEntityAdapter;
       }
       catch (Throwable t) {
         throw new MirLocalizerFailure(t);
@@ -848,5 +861,32 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       }
     }
   }
+
+  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";
+      }
+    }
+  }
 }