[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