small fixes here and there
[mir.git] / source / mircoders / localizer / basic / MirBasicDataModelLocalizer.java
index 1523560..e3d2d17 100755 (executable)
@@ -41,9 +41,8 @@ import mir.entity.adapter.EntityAdapter;
 import mir.entity.adapter.EntityAdapterDefinition;\r
 import mir.entity.adapter.EntityAdapterModel;\r
 import mir.log.LoggerWrapper;\r
-import mircoders.media.MediaHelper;\r
-import mir.misc.NumberUtils;\r
 import mir.media.MediaHandler;\r
+import mir.misc.NumberUtils;\r
 import mir.util.ParameterExpander;\r
 import mir.util.RewindableIterator;\r
 import mir.util.StructuredContentParser;\r
@@ -53,6 +52,8 @@ import mircoders.localizer.MirAdminInterfaceLocalizer;
 import mircoders.localizer.MirDataModelLocalizer;\r
 import mircoders.localizer.MirLocalizerExc;\r
 import mircoders.localizer.MirLocalizerFailure;\r
+import mircoders.media.MediaHelper;\r
+import mircoders.module.ModuleContent;\r
 import mircoders.storage.DatabaseArticleType;\r
 import mircoders.storage.DatabaseAudio;\r
 import mircoders.storage.DatabaseBreaking;\r
@@ -93,6 +94,10 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       anEntityAdapterDefinition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));\r
       anEntityAdapterDefinition.addDBDateField("changedate", "webdb_lastchange", configuration.getString("Mir.DefaultTimezone"));\r
       anEntityAdapterDefinition.addMirDateField("date", "date", configuration.getString("Mir.DefaultTimezone"));\r
+\r
+      anEntityAdapterDefinition.addCalculatedField("lockinguser", new ContentToUserField("to_locking_user"));\r
+      anEntityAdapterDefinition.addCalculatedField("is_locked", new ContentToIsLockedField());\r
+\r
       anEntityAdapterDefinition.addCalculatedField("to_topics", new ContentToTopicsField());\r
       anEntityAdapterDefinition.addCalculatedField("to_comments", new ContentToCommentsField());\r
       anEntityAdapterDefinition.addCalculatedField("language", new ContentToLanguageField());\r
@@ -231,7 +236,13 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       result.addMapping( "language", DatabaseLanguage.getInstance(), new EntityAdapterDefinition());\r
       result.addMapping( "mediaType", DatabaseMediaType.getInstance(), new EntityAdapterDefinition());\r
       result.addMapping( "topic", DatabaseTopics.getInstance(), new EntityAdapterDefinition());\r
-      result.addMapping( "user", DatabaseUsers.getInstance(), new EntityAdapterDefinition());\r
+\r
+      definition = new EntityAdapterDefinition();\r
+      definition.addDBDateField("creationdate", "webdb_create", configuration.getString("Mir.DefaultTimezone"));\r
+      definition.addDBDateField("lastlogindate", "lastlogin", configuration.getString("Mir.DefaultTimezone"));\r
+      definition.addCalculatedField("structuredProfile", new StructuredContentField("profile"));\r
+      result.addMapping( "user", DatabaseUsers.getInstance(), definition);\r
+\r
       result.addMapping( "otherMedia", DatabaseOther.getInstance(), new EntityAdapterDefinition());\r
 \r
       result.addMapping( "content_x_topic", DatabaseContentToTopics.getInstance(), new EntityAdapterDefinition());\r
@@ -377,7 +388,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   protected class ContentToParentField implements EntityAdapterDefinition.CalculatedField {\r
     public Object getValue(EntityAdapter anEntityAdapter) {\r
       try {\r
-        logger.debug("ContentToParentField.getValue");\r
+        logger.debug("ContentToParentField.getFieldValue");\r
         return anEntityAdapter.getToOneRelation(\r
                     "id="+anEntityAdapter.get("to_content"),\r
                     "id",\r
@@ -734,95 +745,41 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       }\r
     }\r
   }\r
-}\r
 \r
+  protected class ContentToUserField implements EntityAdapterDefinition.CalculatedField {\r
+    private String fieldName;\r
 \r
-/*\r
-  public String getValue(String key) {\r
-    String returnValue = null;\r
-\r
-    if (key != null) {\r
-      if (key.equals("big_icon"))\r
-        returnValue = getBigIconName();\r
-      else if (key.equals("descr") || key.equals("media_descr"))\r
-        returnValue = getDescr();\r
-      else if (key.equals("mediatype"))\r
-        returnValue = getMediaTypeString();\r
-      else if (key.equals("mimetype"))\r
-        returnValue = getMimeType();\r
-      else\r
-        returnValue = super.getValue(key);\r
+    public ContentToUserField(String aFieldName) {\r
+      fieldName = aFieldName;\r
     }\r
-    return returnValue;\r
-  }\r
-\r
-  // @todo  all these methods should be merged into 1\r
-  // and the MediaHandler should be cached somehow.\r
-  private String getMediaTypeString() {\r
-    if (this instanceof EntityImages)\r
-      return "image";\r
-    if (this instanceof EntityAudio)\r
-      return "audio";\r
-    if (this instanceof EntityVideo)\r
-      return "video";\r
-    else\r
-      return "other";\r
-  }\r
-\r
-private String getBigIconName() {\r
-  MediaHandler mediaHandler = null;\r
-  Entity mediaType = null;\r
-\r
-  try {\r
-    mediaType = getMediaType();\r
-    mediaHandler = MediaHelper.getHandler(mediaType);\r
-    return mediaHandler.getBigIconName();\r
-  }\r
-  catch (Exception ex) {\r
-    logger.warn("EntityUploadedMedia.getBigIconName: could not fetch data: " + ex.toString());\r
-  }\r
-  return null;\r
-}\r
 \r
-private List getUrl() {\r
-  MediaHandler mediaHandler = null;\r
-  Entity mediaType = null;\r
-\r
-  try {\r
-    mediaType = getMediaType();\r
-    mediaHandler = MediaHelper.getHandler(mediaType);\r
-    return mediaHandler.getURL(this, mediaType);\r
-  }\r
-  catch (Throwable t) {\r
-    logger.warn("EntityUploadedMedia.getUrl: could not fetch data: " + t.toString());\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return anEntityAdapter.getToOneRelation(\r
+            "id=" + anEntityAdapter.get(fieldName),\r
+            "id",\r
+            "user");\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
   }\r
-  return null;\r
-}\r
 \r
-private String getDescr() {\r
-  MediaHandler mediaHandler = null;\r
-  Entity mediaType = null;\r
+  protected class ContentToIsLockedField implements EntityAdapterDefinition.CalculatedField {\r
+    private ModuleContent contentModule;\r
 \r
-  try {\r
-    mediaType = getMediaType();\r
-    mediaHandler = MediaHelper.getHandler(mediaType);\r
-    return mediaHandler.getDescr(mediaType);\r
-  }\r
-  catch (Exception ex) {\r
-    logger.warn("EntityUploadedMedia.getDescr: could not fetch data: " + ex.toString());\r
-  }\r
-  return null;\r
-}\r
-private String getMimeType() {\r
-  Entity mediaType = null;\r
+    public ContentToIsLockedField() {\r
+      contentModule = new ModuleContent(DatabaseContent.getInstance());\r
+    }\r
 \r
-  try {\r
-    mediaType = getMediaType();\r
-    return mediaType.getValue("mime_type");\r
-  }\r
-  catch (Exception ex) {\r
-    logger.warn("EntityUploadedMedia.getBigIconName: could not fetch data: " + ex.toString());\r
+    public Object getValue(EntityAdapter anEntityAdapter) {\r
+      try {\r
+        return new Boolean(contentModule.queryArticleLock(anEntityAdapter.getEntity().getId())!=null);\r
+      }\r
+      catch (Throwable t) {\r
+        throw new RuntimeException(t.getMessage());\r
+      }\r
+    }\r
   }\r
-  return null;\r
 }\r
-*/
\ No newline at end of file