Aktueller Stand ccm-sci-publicpersonalprofile

git-svn-id: https://svn.libreccm.org/ccm/trunk@1001 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-07-12 15:06:34 +00:00
parent c3f13c765b
commit 94a846d859
3 changed files with 87 additions and 69 deletions

View File

@ -1,7 +1,5 @@
package com.arsdigita.london.exporter; package com.arsdigita.london.exporter;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.Folder; import com.arsdigita.cms.Folder;
@ -39,13 +37,10 @@ import org.apache.log4j.Logger;
public class ContentExporter { public class ContentExporter {
private static final Logger s_log = Logger.getLogger(ContentExporter.class); private static final Logger s_log = Logger.getLogger(ContentExporter.class);
private Map m_folders; private Map m_folders;
private Map m_elements; private Map m_elements;
private Map m_paths; private Map m_paths;
private List m_items; private List m_items;
private File m_itemDir; private File m_itemDir;
private File m_assetDir; private File m_assetDir;
@ -59,18 +54,20 @@ public class ContentExporter {
m_items = new ArrayList(); m_items = new ArrayList();
} }
public void exportManifest(ContentSection section, public void exportManifest(ContentSection section,
String version, String version,
String systemID) { String systemID) {
Session session = SessionManager.getSession(); Session session = SessionManager.getSession();
if (!m_itemDir.exists() && !m_itemDir.mkdirs()) { if (!m_itemDir.exists() && !m_itemDir.mkdirs()) {
throw new UncheckedWrapperException(new IOException("mkdirs " + m_itemDir + " failed")); throw new UncheckedWrapperException(new IOException("mkdirs "
+ m_itemDir
+ " failed"));
} }
DataCollection folders = session.retrieve(Folder.BASE_DATA_OBJECT_TYPE); DataCollection folders = session.retrieve(Folder.BASE_DATA_OBJECT_TYPE);
Filter f = folders.addInSubqueryFilter(ACSObject.ID, Filter f =
folders.addInSubqueryFilter(ACSObject.ID,
"com.arsdigita.london.exporter.itemIDsInSection"); "com.arsdigita.london.exporter.itemIDsInSection");
f.set("sectionID", section.getID()); f.set("sectionID", section.getID());
folders.addEqualsFilter("isDeleted", Boolean.FALSE); folders.addEqualsFilter("isDeleted", Boolean.FALSE);
@ -80,12 +77,16 @@ public class ContentExporter {
Element root = null; Element root = null;
while (folders.next()) { while (folders.next()) {
Folder folder = (Folder)DomainObjectFactory Folder folder = (Folder) DomainObjectFactory.newInstance(folders.
.newInstance(folders.getDataObject()); getDataObject());
Folder parent = getParent(folder); Folder parent = getParent(folder);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Folder" + folder.getOID() + " parent " + (parent == null ? null : parent.getOID())); s_log.debug("Folder" + folder.getOID() + " parent " + (parent
== null
? null
: parent.
getOID()));
} }
if (parent != null || folder.getName().equals("/")) { if (parent != null || folder.getName().equals("/")) {
@ -97,7 +98,8 @@ public class ContentExporter {
if (pel == null && parent != null) { if (pel == null && parent != null) {
s_log.debug("Oh damn " + folder.getOID()); s_log.debug("Oh damn " + folder.getOID());
throw new RuntimeException("No elemnent for " + parent.getOID()); throw new RuntimeException("No elemnent for " + parent.
getOID());
} }
Element el = new Element("cms:folder", CMS.CMS_XML_NS); Element el = new Element("cms:folder", CMS.CMS_XML_NS);
el.addAttribute("name", folder.getName()); el.addAttribute("name", folder.getName());
@ -105,12 +107,14 @@ public class ContentExporter {
el.addAttribute("oid", folder.getOID().toString()); el.addAttribute("oid", folder.getOID().toString());
m_elements.put(folder, el); m_elements.put(folder, el);
String path = (parent == null ? "" : m_paths.get(parent) + "/" + folder.getName()); String path = (parent == null ? "" : m_paths.get(parent) + "/"
+ folder.getName());
m_paths.put(folder, path); m_paths.put(folder, path);
File dir = new File(m_itemDir, path); File dir = new File(m_itemDir, path);
if (!dir.exists() && !dir.mkdir()) { if (!dir.exists() && !dir.mkdir()) {
throw new UncheckedWrapperException(new IOException("mkdir " + dir + " failed")); throw new UncheckedWrapperException(new IOException(
"mkdir " + dir + " failed"));
} }
if (pel != null) { if (pel != null) {
@ -125,22 +129,29 @@ public class ContentExporter {
} }
} }
DataCollection items = session.retrieve(ContentPage.BASE_DATA_OBJECT_TYPE); DataCollection items = session.retrieve(
ContentPage.BASE_DATA_OBJECT_TYPE);
items.addEqualsFilter("isDeleted", Boolean.FALSE); items.addEqualsFilter("isDeleted", Boolean.FALSE);
items.addEqualsFilter("version", version); items.addEqualsFilter("version", version);
items.addOrder("ancestors"); items.addOrder("ancestors");
while (items.next()) { while (items.next()) {
ContentPage item = (ContentPage)DomainObjectFactory ContentPage item =
.newInstance(items.getDataObject()); (ContentPage) DomainObjectFactory.newInstance(items.
getDataObject());
if (item.getObjectType().getQualifiedName().equals("com.arsdigita.london.cms.freeform.FreeformContentItem")) { if (item.getObjectType().getQualifiedName().equals(
"com.arsdigita.london.cms.freeform.FreeformContentItem")) {
continue; continue;
} }
Folder parent = getParent(item); Folder parent = getParent(item);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Item" + item.getOID() + " parent " + (parent == null ? null : parent.getOID())); s_log.debug("Item" + item.getOID() + " parent " + (parent
== null
? null
: parent.
getOID()));
} }
if (parent == null) { if (parent == null) {
s_log.warn("Skipping item " + item.getOID() + " has no parent"); s_log.warn("Skipping item " + item.getOID() + " has no parent");
@ -169,7 +180,9 @@ public class ContentExporter {
try { try {
s_log.debug("Got root " + root); s_log.debug("Got root " + root);
Element imp = new Element("imp:import", "http://xmlns.redhat.com/waf/london/importer/1.0"); Element imp =
new Element("imp:import",
"http://xmlns.redhat.com/waf/london/importer/1.0");
imp.addAttribute("source", systemID); imp.addAttribute("source", systemID);
imp.addContent(root); imp.addContent(root);
doc = new Document(imp); doc = new Document(imp);
@ -192,8 +205,8 @@ public class ContentExporter {
public void exportItems() { public void exportItems() {
Iterator oids = m_items.iterator(); Iterator oids = m_items.iterator();
while (oids.hasNext()) { while (oids.hasNext()) {
TransactionContext txn = SessionManager.getSession() TransactionContext txn = SessionManager.getSession().
.getTransactionContext(); getTransactionContext();
txn.beginTxn(); txn.beginTxn();
OID oid = (OID) oids.next(); OID oid = (OID) oids.next();
@ -206,12 +219,14 @@ public class ContentExporter {
try { try {
item = (ContentPage) DomainObjectFactory.newInstance(oid); item = (ContentPage) DomainObjectFactory.newInstance(oid);
} catch (DataObjectNotFoundException ex) { } catch (DataObjectNotFoundException ex) {
throw new UncheckedWrapperException("cannot find item " + oid, ex); throw new UncheckedWrapperException("cannot find item " + oid,
ex);
} }
Element el = new Element("cms:item", CMS.CMS_XML_NS); Element el = new Element("cms:item", CMS.CMS_XML_NS);
DomainObjectExporter exporter = new DomainObjectExporter(el, m_assetDir); DomainObjectExporter exporter = new DomainObjectExporter(el,
m_assetDir);
exporter.setNamespace("cms", CMS.CMS_XML_NS); exporter.setNamespace("cms", CMS.CMS_XML_NS);
exporter.setWrapAttributes(true); exporter.setWrapAttributes(true);
exporter.setWrapRoot(false); exporter.setWrapRoot(false);
@ -269,7 +284,8 @@ public class ContentExporter {
Folder parent = (Folder) m_folders.get(base); Folder parent = (Folder) m_folders.get(base);
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
s_log.debug("Item " + item.getOID() + " with " + ancestors + " parent " + base + " obj " + parent); s_log.debug("Item " + item.getOID() + " with " + ancestors
+ " parent " + base + " obj " + parent);
} }
return parent; return parent;

View File

@ -18,7 +18,9 @@
<xrd:adapter objectType="com.arsdigita.cms.contenttypes.SciPublicPersonalProfile" <xrd:adapter objectType="com.arsdigita.cms.contenttypes.SciPublicPersonalProfile"
extends="com.arsdigita.cms.ContentPage"> extends="com.arsdigita.cms.ContentPage">
<xrd:attributes rule="exclude">
<xrd:property name="/object/profileUrl"/>
</xrd:attributes>
</xrd:adapter> </xrd:adapter>
</xrd:context> </xrd:context>

View File

@ -17,7 +17,7 @@
</requires> </requires>
<provides> <provides>
<table name="ct_sci_public_personal_profiles"/> <table name="ct_sci_public_personal_profiles"/>
<initalizer class="com.arsdigita.cms.contenttypes.SciPublicPersonalProfileInizalizer"/> <initializer class="com.arsdigita.cms.contenttypes.SciPublicPersonalProfileInitializer"/>
</provides> </provides>
<scripts> <scripts>
<schema directory="ccm-sci-publicpersonalprofile"/> <schema directory="ccm-sci-publicpersonalprofile"/>