publicurl's for comments and articles
authorzapata <zapata>
Sat, 19 Apr 2003 14:07:30 +0000 (14:07 +0000)
committerzapata <zapata>
Sat, 19 Apr 2003 14:07:30 +0000 (14:07 +0000)
source/default.properties
source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java

index a5e74d6..480ce82 100755 (executable)
@@ -150,6 +150,10 @@ ServletModule.FileEdit.FileDirectory=/pub/Dokumente/Indymedia/de-tech/Mir/produc
 ServletModule.FileEdit.ExtFilter=.*\.inc$
 ServletModule.FileEdit.Recursive=0
 
+# Settings allowing the admin interface to show what the public urls are:
+Article.PublicUrl=/en/${date.formatted.yyyy}/${date.formatted.MM}/${id}.shtml
+Comment.PublicUrl=/en/${to_content.date.formatted.yyyy}/${to_content.date.formatted.MM}/${to_content.id}.shtml
+
 #
 #
 # DYNAMIC SITE CONFIG
@@ -234,11 +238,11 @@ Producer.Icon.BigText=text_big.gif
 Producer.HTML2FOStyleSheet=/some/dir/mir/etc/producer/html2fo.xsl
 
 # the following lines are used to construct PDFs on the fly from one or more articles
-# for the moment, if you want to change anything else about your pdfs, you 
+# for the moment, if you want to change anything else about your pdfs, you
 # will have to learn some java!
 #
-# keep in mind that there may not be enough room for all the text you enter as the 
-# value of one these options, if text doesn't appear, the only easy thing to do is 
+# keep in mind that there may not be enough room for all the text you enter as the
+# value of one these options, if text doesn't appear, the only easy thing to do is
 # use less text!
 #
 
@@ -246,10 +250,10 @@ Producer.HTML2FOStyleSheet=/some/dir/mir/etc/producer/html2fo.xsl
 
 PDF.Title=INDYMEDIA SOMEWHERE
 
-# about two lines of small text which will appear at the bottom of every page 
+# about two lines of small text which will appear at the bottom of every page
 
 PDF.Footer=Indymedia does blah.  Content is good, and free to use for non-commercial purposes under the Open Content license. if you have questions, email someone.
+
 #
 # the size paper your target audience will likely have in their printers.  pick one of A4 or LETTER
 #
index e7d7857..597248b 100755 (executable)
 
 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.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.RewindableIterator;
-import mircoders.entity.EntityUploadedMedia;
-import mircoders.global.MirGlobal;
-import mircoders.localizer.MirAdminInterfaceLocalizer;
-import mircoders.localizer.MirDataModelLocalizer;
-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 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 mircoders.storage.DatabaseVideo;
 
 public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   private EntityAdapterModel model;
   protected LoggerWrapper logger;
+  protected MirPropertiesConfiguration configuration;
 
-  public MirBasicDataModelLocalizer() {
+  public MirBasicDataModelLocalizer() throws MirLocalizerFailure, MirLocalizerExc {
     model=null;
     logger = new LoggerWrapper("Localizer.DataModel");
+
+    try {
+      configuration = MirPropertiesConfiguration.instance();
+    }
+    catch (Throwable e) {
+      throw new MirLocalizerFailure("Can't get configuration: " + e.getMessage(), e);
+    }
   }
 
   public EntityAdapterModel adapterModel() throws MirLocalizerFailure {
@@ -117,6 +128,8 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       anEntityAdapterDefinition.addCalculatedField("children", new ContentToChildrenField());
       anEntityAdapterDefinition.addCalculatedField("parent", new ContentToParentField());
 
+      anEntityAdapterDefinition.addCalculatedField("publicurl", new ExpandedField(configuration.getString("Article.PublicUrl")));
+
       anEntityAdapterDefinition.addCalculatedField("operations",
           new EntityToSimpleOperationsField(MirGlobal.localizer().adminInterface().simpleArticleOperations()));
     }
@@ -142,6 +155,8 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
       anEntityAdapterDefinition.addCalculatedField("to_all_media_video", new CommentToMediaField( "video", false));
       anEntityAdapterDefinition.addCalculatedField("to_all_media_other", new CommentToMediaField( "otherMedia", false));
 
+      anEntityAdapterDefinition.addCalculatedField("publicurl", new ExpandedField(configuration.getString("Comment.PublicUrl")));
+
       anEntityAdapterDefinition.addCalculatedField("description_parsed", new FilteredField("description"));
       anEntityAdapterDefinition.addCalculatedField("operations",
           new EntityToSimpleOperationsField(MirGlobal.localizer().adminInterface().simpleCommentOperations()));
@@ -251,7 +266,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
   }
 
   protected class FilteredField implements EntityAdapterDefinition.CalculatedField {
-    String fieldName;
+    private String fieldName;
 
     public FilteredField(String aFieldName) {
       fieldName = aFieldName;
@@ -272,6 +287,40 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer {
     }
   }
 
+  protected class ExpandedField implements EntityAdapterDefinition.CalculatedField {
+    private String expression;
+
+    public ExpandedField(String anExpression) {
+      expression = anExpression;
+    }
+
+    public Object getValue(EntityAdapter anEntityAdapter) {
+      try {
+        return ParameterExpander.expandExpression(anEntityAdapter, expression);
+      }
+      catch (Throwable t) {
+        throw new RuntimeException(t.getMessage());
+      }
+    }
+  }
+
+  protected class EvaluatedField implements EntityAdapterDefinition.CalculatedField {
+    private String expression;
+
+    public EvaluatedField(String anExpression) {
+      expression = anExpression;
+    }
+
+    public Object getValue(EntityAdapter anEntityAdapter) {
+      try {
+        return ParameterExpander.evaluateExpression(anEntityAdapter, expression);
+      }
+      catch (Throwable t) {
+        throw new RuntimeException(t.getMessage());
+      }
+    }
+  }
+
   protected class ContentToParentField implements EntityAdapterDefinition.CalculatedField {
     public Object getValue(EntityAdapter anEntityAdapter) {
       try {