MirBasicChildArticlePostingHandler: fixed build failure
[mir.git] / source / mircoders / localizer / basic / MirBasicChildArticlePostingHandler.java
index 8e4cdcb..da7fa90 100755 (executable)
@@ -35,8 +35,16 @@ import mir.session.Session;
 import mir.session.SessionExc;
 import mir.session.SessionFailure;
 import mircoders.entity.EntityContent;
+import mir.entity.adapter.EntityAdapter;
+import mircoders.global.MirGlobal;
+import mircoders.storage.DatabaseContent;
+import mircoders.localizer.MirLocalizerExc;
+import mir.storage.DatabaseExc;
 
-
+/**
+ * Handler for open postings of "child articles", that is articles
+ * linked to other articles. Used frequently for translations.
+ */
 public class MirBasicChildArticlePostingHandler extends MirBasicArticlePostingHandler {
   public MirBasicChildArticlePostingHandler() {
     super();
@@ -44,19 +52,50 @@ public class MirBasicChildArticlePostingHandler extends MirBasicArticlePostingHa
     setNormalResponseGenerator(configuration.getString("Localizer.OpenSession.article.EditTemplate"));
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * <p>
+   * This class overrides this method to set the parent article.
+   */
   public void finalizeArticle(Request aRequest, Session aSession, EntityContent anArticle) throws SessionExc, SessionFailure {
     super.finalizeArticle(aRequest, aSession, anArticle);
 
     anArticle.setFieldValue("to_content", (String) aSession.getAttribute("to_content"));
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * <p>
+   * Overridden by this class to retrieve and store the to be associated
+   * parent article for subsequent usage.
+   */
   protected void initializeSession(Request aRequest, Session aSession) throws SessionExc, SessionFailure {
     super.initializeSession(aRequest, aSession);
 
     String parentId = aRequest.getParameter("to_content");
     if (parentId==null)
       throw new SessionExc("initializeSession: parent id not set!");
+    // check if the parent article is published.
+    EntityAdapter article;
+    try {
+       article = MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter("content",
+                       DatabaseContent.getInstance().selectById(parentId));
+    }
+    catch(MirLocalizerExc e)
+    {
+       throw new SessionExc("Mir localizer error: " + e.getMessage());
+    }
+    catch(DatabaseExc e)
+    {
+       throw new SessionExc("Database error: " + e.getMessage());
+    }
+    if (!MirGlobal.localizer().openPostings().allowArticlePublication((EntityContent)article.getEntity())) {
+      throw new SessionExc("Illegal article");
+    }
+
 
     aSession.setAttribute("to_content", parentId);
-  };
-}
\ No newline at end of file
+  }
+}