Fehlende Dateien für Rev. 1352
git-svn-id: https://svn.libreccm.org/ccm/trunk@1354 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
b7f54a9921
commit
9f4b82bd16
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue