Initial revision
[mir.git] / source / mircoders / storage / DatabaseContentToTopics.java
diff --git a/source/mircoders/storage/DatabaseContentToTopics.java b/source/mircoders/storage/DatabaseContentToTopics.java
new file mode 100755 (executable)
index 0000000..fadadf8
--- /dev/null
@@ -0,0 +1,217 @@
+package mircoders.storage;
+
+import java.lang.*;
+import java.sql.*;
+import java.io.*;
+import java.util.*;
+
+import freemarker.template.*;
+
+import webdb.storage.*;
+import webdb.entity.*;
+import webdb.misc.*;
+
+import mir.entity.*;
+
+/**
+ * <b>Diese Klasse implementiert die Datenbankverbindung zur MetaObjekt-Tabelle
+ *
+ *
+ */
+
+public class DatabaseContentToTopics extends Database implements StorageObject{
+
+       private static DatabaseContentToTopics instance;
+
+       public static DatabaseContentToTopics getInstance()
+               throws StorageObjectException {
+               if (instance == null) {
+                       instance = new DatabaseContentToTopics();
+                       instance.myselfDatabase = instance;
+               }
+               return instance;
+       }
+
+       private DatabaseContentToTopics()
+               throws StorageObjectException {
+
+               super();
+               this.hasTimestamp = false;
+               this.theTable="content_x_topic";
+               try {
+                       // this.theEntityClass = Class.forName("mir.entity.EntityGruppen");
+               } catch (Exception e) {
+                       throw new StorageObjectException(e.toString());
+               }
+       }
+
+
+       public EntityList getTopics(EntityContent content) {
+               EntityList returnList=null;
+               if (content != null) {
+                       // get all to_topic from content_x_topic
+                       String id = content.getId();
+                       String subselect = "id in (select topic_id from " + theTable + " where content_id=" + id+")";
+
+                       try {
+                               returnList = DatabaseTopics.getInstance().selectByWhereClause(subselect,-1);
+                       } catch (Exception e) {
+                               theLog.printDebugInfo("-- get topics failed " + e.toString());
+                       }
+               }
+               return returnList;
+       }
+
+
+       public void setTopics(EntityContent content, ArrayList topicId) {
+               if (content == null && topicId == null) {
+                       return;
+               }
+               String contentId = content.getId();
+               //first delete all row with content_id=contentId
+               String sql = "delete from "+ theTable +" where content_id=" + contentId;
+
+               Connection con=null;Statement stmt=null;
+               try {
+                       con = getPooledCon();
+                       // should be a preparedStatement because is faster
+                       stmt = con.createStatement();
+                       ResultSet rs = executeSql(stmt,sql);
+               } catch (Exception e) {
+                       theLog.printDebugInfo("-- set topics failed -- delete");
+               } finally {
+                       freeConnection(con,stmt);
+               }
+
+               //now insert
+               //first delete all row with content_id=contentId
+
+               for (Iterator i = topicId.listIterator(); i.hasNext();) {
+                       sql = "insert into "+ theTable +" (content_id,topic_id) values ("
+                                               + contentId + "," + i.next().toString() + ")";
+                       try {
+                               con = getPooledCon();
+                               // should be a preparedStatement because is faster
+                               stmt = con.createStatement();
+                               ResultSet rs = executeSql(stmt,sql);
+                       } catch (Exception e) {
+                               theLog.printDebugInfo("-- set topics failed -- insert");
+                       } finally {
+                               freeConnection(con,stmt);
+                       }
+               }
+       }
+
+
+       public void setTopics(String contentId, String topicId) {
+               if (contentId == null && topicId == null) {
+                       return;
+               }
+               //first delete all row with content_id=contentId
+               String sql = "delete from "+ theTable +" where content_id=" + contentId;
+
+               Connection con=null;Statement stmt=null;
+               try {
+                       con = getPooledCon();
+                       // should be a preparedStatement because is faster
+                       stmt = con.createStatement();
+                       int rs = executeUpdate(stmt,sql);
+               } catch (Exception e) {
+                       theLog.printDebugInfo("-- set topics failed -- delete");
+               } finally {
+                       freeConnection(con,stmt);
+               }
+
+               //now insert
+               //first delete all row with content_id=contentId
+
+               sql = "insert into "+ theTable +" (content_id,topic_id) values ("
+                                       + contentId + "," + topicId + ")";
+               try {
+                       con = getPooledCon();
+                       // should be a preparedStatement because is faster
+                       stmt = con.createStatement();
+                       int rs = executeUpdate(stmt,sql);
+               } catch (Exception e) {
+                       theLog.printDebugInfo("-- set topics failed -- insert");
+               } finally {
+                       freeConnection(con,stmt);
+               }
+       }
+
+       public void deleteByContentId(String contentId) {
+               if (contentId == null) {
+                       //theLog.printDebugInfo("-- delete topics failed -- no content id");
+                       return;
+               }
+               //delete all row with content_id=contentId
+               String sql = "delete from "+ theTable +" where content_id=" + contentId;
+
+               Connection con=null;Statement stmt=null;
+               try {
+                       con = getPooledCon();
+                       // should be a preparedStatement because is faster
+                       stmt = con.createStatement();
+                       ResultSet rs = executeSql(stmt,sql);
+               } catch (Exception e) {
+                       //theLog.printDebugInfo("-- delete topics failed  ");
+               } finally {
+                       freeConnection(con,stmt);
+               }
+       }
+
+       public void deleteByTopicId(String topicId) {
+               if (topicId == null) {
+                       //theLog.printDebugInfo("-- delete topics failed -- no topic id");
+                       return;
+               }
+               //delete all row with content_id=contentId
+               String sql = "delete from "+ theTable +" where topic_id=" + topicId;
+
+               Connection con=null;Statement stmt=null;
+               try {
+                       con = getPooledCon();
+                       // should be a preparedStatement because is faster
+                       stmt = con.createStatement();
+                       ResultSet rs = executeSql(stmt,sql);
+               } catch (Exception e) {
+                       theLog.printDebugInfo("-- delete topics failed ");
+               } finally {
+                       freeConnection(con,stmt);
+               }
+       }
+
+
+       public EntityList getContent(EntityTopics topic) {
+               EntityList returnList=null;
+               if (topic != null) {
+                       String id = topic.getId();
+                       String select = "select content_id from " + theTable + " where topic_id=" + id;
+
+                       // execute select statement
+                       Connection con=null;Statement stmt=null;
+                       try {
+                               con = getPooledCon();
+                               // should be a preparedStatement because is faster
+                               stmt = con.createStatement();
+                               ResultSet rs = executeSql(stmt,select);
+                               if (rs!=null) {
+                                       String topicSelect= "id IN (";
+                                       boolean first=true;
+                                       while (rs.next()) {
+                                               if (first==false) topicSelect+=",";
+                                               topicSelect += rs.getString(1);
+                                               first=false;
+                                       }
+                                       topicSelect+=")";
+                                       if (first==false)
+                                               returnList = DatabaseContent.getInstance().selectByWhereClause(topicSelect,-1);
+                               }
+                       }
+                       catch (Exception e) {theLog.printDebugInfo("-- get contetn failed");}
+                       finally { freeConnection(con,stmt);}
+               }
+               return returnList;
+       }
+
+}