Script - Change the author of the documents into folder
The script changes the author of all the documents into some folder and subfolder childs.
The script applies changes at database level, you should execute the "lucene rebuild index" to propagate the changes into the search engine.
For more information about it, take a look at Rebuild indexes.
The string "/okm:root/importOne" is the root folder where the changes will be applied.
The string "newAuthor" is the author Id what will be set.
import com.openkm.bean.*;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.openkm.dao.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import com.openkm.api.*;
class Util {
public void changeAuthor(String uuid) {
String qsUUIDList = "select uuid from NodeDocument nf where nf.parent=:parent";
Session session = null;
Transaction tx = null;
int value = 0;
List uuidList = new ArrayList();
try {
// Get document by folder ( parent node is the folder uuid )
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
Query q = session.createQuery(qsUUIDList).setCacheable(true);
q.setString("parent", uuid);
uuidList = q.list();
// Change document versions author
for (String docUUID : uuidList) {
// Document version ( parent node is the document uuid )
q = session.createQuery("update NodeDocumentVersion set author=:author where parent=:parent");
q.setString("parent", docUUID);
q.setString("author", "newAuthor");
q.executeUpdate();
// Document first creation author ( uuid is the main node UUID in the node base )
q = session.createQuery("update NodeBase set author=:author where uuid=:uuid");
q.setString("uuid", docUUID);
q.setString("author", "newAuthor");
q.executeUpdate();
}
HibernateUtil.commit(tx);
} catch (HibernateException e) {
HibernateUtil.rollback(tx);
} finally {
HibernateUtil.close(session);
}
}
public void renameDocumentsAuthorInFolder(String fldUuid) {
changeAuthor(fldUuid);
for (Folder fld : OKMFolder.getInstance().getChildren(null, fldUuid)) {
renameDocumentsAuthorInFolder(fld.getUuid());
}
}
}
String fldUUID = OKMRepository.getInstance().getNodeUuid(null, "/okm:root/importOne");
Util util = new Util();
util.renameDocumentsAuthorInFolder(fldUUID);