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