Fehlende Dateien für Rev. 1352

git-svn-id: https://svn.libreccm.org/ccm/trunk@1354 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-12-14 15:21:39 +00:00
parent b7f54a9921
commit 9f4b82bd16
3 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,14 @@
model com.arsdigita.cms;
import com.arsdigita.kernel.*;
object type PublishLock {
BigDecimal[1..1] id = cms_publish_lock.lock_id INTEGER;
String[0..1] lockedOid = cms_publish_lock.locked_oid VARCHAR(2048);
Date[0..1] timestamp = cms_publish_lock.lock_timestamp TIMESTAMP;
String[0..1] action = cms_publish_lock.action VARCHAR(256);
object key(id);
}

View File

@ -0,0 +1,9 @@
CREATE TABLE cms_publish_lock (
lock_id integer NOT NULL,
locked_oid character varying(2048),
lock_timestamp timestamp with time zone,
action character varying(256)
);
-- ALTER TABLE public.cms_publish_lock OWNER TO ccm;

View File

@ -0,0 +1,78 @@
package com.arsdigita.cms.ui.lifecycle;
import com.arsdigita.cms.ContentItem;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.SessionManager;
import java.util.Calendar;
/**
* Used by {@link ItemLifecycleSelectForm} and {@link ItemLifecycleItemPane}
* to lock an item if threaded publishing is active.
*
* @author Jens Pelzetter
* @version $Id$
*/
public class PublishLock {
public final static String LOCK_OBJECT_TYPE =
"com.arsdigita.cms.PublishLock";
public final static String ID = "id";
public final static String LOCKED_OID = "lockedOid";
public final static String TIMESTAMP = "timestamp";
public final static String ACTION = "action";
private static PublishLock instance = new PublishLock();
private PublishLock() {
}
protected static synchronized PublishLock getInstance() {
return instance;
}
protected synchronized void lock(final ContentItem item) {
lock(item, "publish");
}
protected synchronized void lock(final ContentItem item,
final String action) {
SessionManager.getSession().getTransactionContext().beginTxn();
final DataObject lock = SessionManager.getSession().create(
LOCK_OBJECT_TYPE);
lock.set(ID, item.getID());
lock.set(LOCKED_OID, item.getOID().toString());
lock.set(TIMESTAMP, Calendar.getInstance().getTime());
lock.set(ACTION, action);
lock.save();
SessionManager.getSession().getTransactionContext().commitTxn();
}
protected synchronized void unlock(final ContentItem item) {
SessionManager.getSession().getTransactionContext().beginTxn();
final DataCollection collection = SessionManager.getSession().retrieve(
LOCK_OBJECT_TYPE);
collection.addFilter(String.format("%s = '%s'", LOCKED_OID,
item.getOID().toString()));
if (!collection.isEmpty()) {
collection.next();
final DataObject lock = collection.getDataObject();
lock.delete();
}
collection.close();
SessionManager.getSession().getTransactionContext().commitTxn();
}
protected synchronized boolean isLocked(final ContentItem item) {
final DataCollection collection = SessionManager.getSession().retrieve(
LOCK_OBJECT_TYPE);
collection.addFilter(String.format("%s = '%s'", LOCKED_OID,
item.getOID().toString()));
if (collection.isEmpty()) {
collection.close();
return false;
} else {
collection.close();
return true;
}
}
}