[jboss-svn-commits] JBL Code SVN: r5056 - in labs/shotoku/trunk: shotoku-base/src/etc shotoku-tags/src/java/org/jboss/shotoku/tags shotoku-tags/src/java/org/jboss/shotoku/tags/dal shotoku-tags/src/java/org/jboss/shotoku/tags/service shotoku-tags/src/java/org/jboss/shotoku/tags/tools

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 12 17:33:13 EDT 2006


Author: adamw
Date: 2006-07-12 17:33:09 -0400 (Wed, 12 Jul 2006)
New Revision: 5056

Modified:
   labs/shotoku/trunk/shotoku-base/src/etc/shotoku.properties.sample
   labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/AbstractTag.java
   labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/dal/TagEntity.java
   labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/service/TagServiceImpl.java
   labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/tools/Constants.java
Log:
http://jira.jboss.org/jira/browse/JBSHOTOKU-86


Modified: labs/shotoku/trunk/shotoku-base/src/etc/shotoku.properties.sample
===================================================================
--- labs/shotoku/trunk/shotoku-base/src/etc/shotoku.properties.sample	2006-07-12 21:31:43 UTC (rev 5055)
+++ labs/shotoku/trunk/shotoku-base/src/etc/shotoku.properties.sample	2006-07-12 21:33:09 UTC (rev 5056)
@@ -8,7 +8,8 @@
 shotoku.default.url = 
 shotoku.default.username = 
 shotoku.default.password =
-shotoku.default.localpath = 
+shotoku.default.localpath =
+shotoku.default.fullupdate = 1
 
 # shotoku.file.implementation = org.jboss.shotoku.files.FileContentManager
 # shotoku.file.localpath =
@@ -25,11 +26,18 @@
 shotoku.embedded = false
 
 # Feeds configuration
-
 # Content manager and directory in which feeds.properties is placed in shotoku
 shotoku.internal.feeds.configcmid =
 shotoku.internal.feeds.configdir =
 
+# Tags configuration
+# Content manager and base directory with which synchronization of Shotoku tags
+# will be done
+shotoku.internal.tags.synchronization = 1
+shotoku.internal.tags.cmid =
+shotoku.internal.tags.cmdir =
+shotoku.internal.tags.service.interval = 10000
+
 # Internal properties (best leave intact)
 
 shotoku.transfer.buffer.size = 1024

Modified: labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/AbstractTag.java
===================================================================
--- labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/AbstractTag.java	2006-07-12 21:31:43 UTC (rev 5055)
+++ labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/AbstractTag.java	2006-07-12 21:33:09 UTC (rev 5056)
@@ -1,6 +1,5 @@
 package org.jboss.shotoku.tags;
 
-import org.jboss.shotoku.tags.dal.TagEntity;
 import org.jboss.shotoku.tags.tools.TagTools;
 import org.jboss.shotoku.tags.tools.FeedType;
 
@@ -20,14 +19,14 @@
 
 	private Date dateCreated;
 
-	public AbstractTag(String name, String author, String resourceId,
+    public AbstractTag(String name, String author, String resourceId,
 			String data, Date dateCreated) {
 		this.name = name;
 		this.author = author;
 		this.resourceId = resourceId;
 		this.data = data;
 		this.dateCreated = dateCreated;
-	}
+    }
 
 	/*
 	 * TAG implementation.

Modified: labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/dal/TagEntity.java
===================================================================
--- labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/dal/TagEntity.java	2006-07-12 21:31:43 UTC (rev 5055)
+++ labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/dal/TagEntity.java	2006-07-12 21:33:09 UTC (rev 5056)
@@ -21,6 +21,7 @@
     private String resourceId;
     private String data;
     private String type;
+    private Boolean synced;
 
     private Date dateCreated;
 
@@ -83,6 +84,15 @@
         this.type = type;
     }
 
+    @Column
+    public Boolean isSynced() {
+        return synced;
+    }
+
+    public void setSynced(Boolean synced) {
+        this.synced = synced;
+    }
+
     /*
      * Other methods.
      */
@@ -99,4 +109,15 @@
             return null;
         }
     }
+
+    @Transient
+    public String getShotokuPropReprName() {
+        return Constants.SHOTOKU_TAG_REPR_PREFIX +
+                name + Constants.SHOTOKU_TAG_REPR_SEPARATOR + author;
+    }
+
+    @Transient
+    public String getShotokuPropReprValue() {
+        return dateCreated + Constants.SHOTOKU_TAG_REPR_SEPARATOR + data;
+    }
 }

Modified: labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/service/TagServiceImpl.java
===================================================================
--- labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/service/TagServiceImpl.java	2006-07-12 21:31:43 UTC (rev 5055)
+++ labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/service/TagServiceImpl.java	2006-07-12 21:33:09 UTC (rev 5056)
@@ -21,19 +21,12 @@
  */
 package org.jboss.shotoku.tags.service;
 
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 import java.net.URLEncoder;
 import java.io.UnsupportedEncodingException;
 
 import javax.ejb.Local;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
+import javax.persistence.*;
 
 import org.apache.log4j.Logger;
 import org.jboss.annotation.ejb.Management;
@@ -53,6 +46,11 @@
 import org.jboss.shotoku.tags.dal.TagEntity;
 import org.jboss.shotoku.tags.dal.CountersIdEntity;
 import org.jboss.shotoku.tags.dal.CountersEntity;
+import org.jboss.shotoku.ContentManager;
+import org.jboss.shotoku.Resource;
+import org.jboss.shotoku.Node;
+import org.jboss.shotoku.exceptions.SaveException;
+import org.jboss.shotoku.exceptions.ResourceDoesNotExist;
 
 /**
  * @author Adam Warski (adamw at aster.pl)
@@ -66,6 +64,9 @@
         TagService, TagServiceLocal {
     private static final Logger log = Logger.getLogger(AdministratedService.class);
 
+    private boolean syncOn;
+    private ContentManager cm;
+
     /*
       * Service lifecycle management.
       */
@@ -81,18 +82,37 @@
                     }
                 });
 
-        setTimerInterval(10000);
+        setTimerInterval(ContentManager.getProperty(
+                org.jboss.shotoku.tags.tools.Constants.PROPERTY_INTERVAL, 10000));
 
+        syncOn = ContentManager.getProperty(
+                org.jboss.shotoku.tags.tools.Constants.PROPERTY_SYNC, 0) == 1;
+        if (syncOn) {
+            cm = ContentManager.getContentManager(
+                    ContentManager.getProperty(
+                            org.jboss.shotoku.tags.tools.Constants.PROPERTY_CMID,
+                            Constants.DEFAULT_ID),
+                    ContentManager.getProperty(
+                            org.jboss.shotoku.tags.tools.Constants.PROPERTY_CMDIR, ""));
+        }
+
         log.info("Tag service created.");
     }
 
+    EntityManager updaterThreadEm;
+
     public void start() throws Exception {
         super.start();
 
         // Starting the updater thread.
         new Thread() {
+            EntityManagerFactory emf;
+
             {
                 setDaemon(true);
+
+                emf = Persistence.createEntityManagerFactory("tags");
+                updaterThreadEm = emf.createEntityManager();
             }
 
             public void run() {
@@ -106,13 +126,16 @@
                     try {
                         update();
                     } catch (Throwable t) {
-                        // Making sure that an exception won't stop the thread.
+                        log.error(t);
                     }
 
                     setLastUpdate(Calendar.getInstance().getTimeInMillis());
                 }
 
                 log.info("Tag service deaemon thread terminated.");
+
+                updaterThreadEm.close();
+                emf.close();
             }
         }.start();
 
@@ -128,7 +151,44 @@
       */
 
     public void update() {
+        if (!syncOn) {
+            // Synchronization is turned off.
+            return;
+        }
 
+        // Performing synchronization (tags -> shotoku).
+        // noinspection unchecked
+        List<TagEntity> result = updaterThreadEm
+                .createQuery("FROM TagEntity WHERE synced = 0 OR synced IS NULL")
+                .getResultList();
+
+        Set<Resource> toSave = new HashSet<Resource>();
+        for (TagEntity te : result) {
+            if (org.jboss.shotoku.tags.tools.Constants.SHOTOKU_TAG.equals
+                    (te.getType())) {
+                try {
+                    Node n = cm.getNode(te.getResourceId());
+                    n.setProperty(te.getShotokuPropReprName(),
+                            te.getShotokuPropReprValue());
+                    toSave.add(n);
+                } catch (ResourceDoesNotExist e) {
+                    log.warn("Unable to synchronize tag with Shotoku resource, " +
+                            "the tagged resource does not exist.", e);
+                }
+            }
+        }
+
+        try {
+            cm.save(toSave, "");
+        } catch (SaveException e) {
+            throw new RuntimeException(e);
+        }
+
+        updaterThreadEm.getTransaction().begin();
+        for (TagEntity te : result) {
+            te.setSynced(true);
+        }
+        updaterThreadEm.getTransaction().commit();
     }
 
     public String getServiceId() {
@@ -147,6 +207,7 @@
       * TagService implementation.
       */
 
+    @SuppressWarnings({"UNUSED_SYMBOL"})
     @PersistenceContext
     private EntityManager manager;
 
@@ -256,6 +317,7 @@
         }
     }
 
+    @SuppressWarnings({"unchecked"})
     public List<Tag> getRelatedTags(List<Tag> relateTo) throws TagGetException {
         List<Tag> ret = new ArrayList<Tag>();
 
@@ -361,14 +423,14 @@
     }
 
     public List<String> getAllTagsNames() throws TagGetException {
-        List<String> result = manager.createQuery("SELECT DISTINCT name FROM TagEntity")
+        //noinspection unchecked
+        return (List<String>) manager.createQuery("SELECT DISTINCT name FROM TagEntity")
                 .getResultList();
-
-        return result;
     }
 
     public List<Tag> getAllTags() throws TagGetException {
         List<Tag> result = new ArrayList<Tag>();
+        //noinspection unchecked
         List<TagEntity> tagEnitites = manager.createQuery("from TagEntity")
                 .getResultList();
 
@@ -395,7 +457,6 @@
                 }
             }
         } catch (TagGetException e) {
-            // TODO Auto-generated catch block
             e.printStackTrace();
         }
 

Modified: labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/tools/Constants.java
===================================================================
--- labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/tools/Constants.java	2006-07-12 21:31:43 UTC (rev 5055)
+++ labs/shotoku/trunk/shotoku-tags/src/java/org/jboss/shotoku/tags/tools/Constants.java	2006-07-12 21:33:09 UTC (rev 5056)
@@ -10,4 +10,35 @@
     public static final String WEBSITE_TAG      = "website";
 
     public static final String TAG_FEED_TYPE_VARIABLE   = "%type%";
+
+    /*
+     * Property names, under which id and content manager directory can be
+     * found, with which Shotoku tags -> Shotoku synchrozniation should be
+     * done.
+     */
+    public static final String PROPERTY_CMID    = "shotoku.internal.tags.cmid";
+    public static final String PROPERTY_CMDIR   = "shotoku.internal.tags.cmdir";
+
+    /**
+     * Property name, under which information if synchronization of tags
+     * with shotoku should be done.
+     */
+    public static final String PROPERTY_SYNC   = "shotoku.internal.tags.synchronization";
+
+    /**
+     * Property name, under which the length of the interval between tags
+     * service updates can be found.
+     */
+    public static final String PROPERTY_INTERVAL = "shotoku.internal.tags.service.interval";
+
+    /**
+     * Separator of tokens in a string representation of a tag.
+     */
+    public static final String SHOTOKU_TAG_REPR_SEPARATOR = "::";
+
+    /**
+     * A prefix of all shotoku property names, which are representations
+     * of tags.
+     */
+    public static final String SHOTOKU_TAG_REPR_PREFIX      = "shotoku::tag::";
 }




More information about the jboss-svn-commits mailing list