001package org.nuxeo.template.processors.xdocreport; 002 003import java.io.IOException; 004import java.io.StringWriter; 005 006import org.nuxeo.ecm.core.api.DocumentModel; 007import org.nuxeo.ecm.core.api.NuxeoException; 008import org.nuxeo.ecm.core.schema.DocumentType; 009import org.nuxeo.ecm.core.schema.SchemaManager; 010import org.nuxeo.ecm.core.schema.types.ComplexType; 011import org.nuxeo.ecm.core.schema.types.Field; 012import org.nuxeo.ecm.core.schema.types.Schema; 013import org.nuxeo.runtime.api.Framework; 014 015import fr.opensagres.xdocreport.template.TemplateEngineKind; 016import fr.opensagres.xdocreport.template.formatter.FieldsMetadata; 017 018/** 019 * @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a> 020 */ 021public class FieldDefinitionGenerator { 022 023 public static String generate(String type) { 024 SchemaManager sm = Framework.getLocalService(SchemaManager.class); 025 DocumentType docType = sm.getDocumentType(type); 026 027 return generate(docType.getSchemaNames()); 028 } 029 030 public static String generate(DocumentModel doc) { 031 return generate(doc.getSchemas()); 032 } 033 034 protected static String generate(String[] schemaNames) { 035 036 FieldsMetadata fieldsMetadata = new FieldsMetadata(TemplateEngineKind.Freemarker.name()); 037 038 for (String schemaName : schemaNames) { 039 SchemaManager sm = Framework.getLocalService(SchemaManager.class); 040 041 Schema schema = sm.getSchema(schemaName); 042 for (Field field : schema.getFields()) { 043 // String pname = field.getName().getPrefixedName(); 044 String name = field.getName().getLocalName(); 045 // String fieldName = "doc['" + name + "']"; 046 // fieldsMetadata.addField(fieldName, false, null, null, null); 047 String fieldName = "doc." + schemaName + "." + name; 048 if (field.getType().isListType()) { 049 fieldsMetadata.addField(fieldName, true, null, null, null); 050 } else { 051 fieldsMetadata.addField(fieldName, false, null, null, null); 052 if (field.getType().isComplexType()) { 053 054 ComplexType ct = (ComplexType) field.getType(); 055 if ("content".equals(ct.getName())) { 056 fieldsMetadata.addField(fieldName + ".filename", false, null, null, null); 057 } else { 058 for (Field subField : ct.getFields()) { 059 fieldsMetadata.addField(fieldName + "." + subField.getName().getLocalName(), false, 060 null, null, null); 061 } 062 } 063 } 064 } 065 } 066 } 067 068 fieldsMetadata.addField("doc.versionLabel", false, null, null, null); 069 fieldsMetadata.addField("doc.id", false, null, null, null); 070 fieldsMetadata.addField("doc.name", false, null, null, null); 071 fieldsMetadata.addField("doc.title", false, null, null, null); 072 fieldsMetadata.addField("doc.pathAsString", false, null, null, null); 073 fieldsMetadata.addField("doc.type", false, null, null, null); 074 fieldsMetadata.addField("doc.schemas", true, null, null, null); 075 fieldsMetadata.addField("doc.facets", true, null, null, null); 076 fieldsMetadata.addField("doc.locked", false, null, null, null); 077 fieldsMetadata.addField("doc.lockInfo", false, null, null, null); 078 fieldsMetadata.addField("doc.lockInfo.owner", false, null, null, null); 079 fieldsMetadata.addField("doc.lockInfo.created", false, null, null, null); 080 fieldsMetadata.addField("doc.checkedOut", false, null, null, null); 081 fieldsMetadata.addField("doc.", false, null, null, null); 082 083 // fieldsMetadata.load("principal", NuxeoPrincipal.class); // 084 // stackoverflow 085 086 fieldsMetadata.addField("principal.firstName", false, null, null, null); 087 fieldsMetadata.addField("principal.lastName", false, null, null, null); 088 fieldsMetadata.addField("principal.company", false, null, null, null); 089 fieldsMetadata.addField("principal.email", false, null, null, null); 090 fieldsMetadata.addField("principal.name", false, null, null, null); 091 092 fieldsMetadata.addField("auditEntries", false, null, null, null); 093 fieldsMetadata.addField("auditEntries.id", true, null, null, null); 094 fieldsMetadata.addField("auditEntries.principalName", true, null, null, null); 095 fieldsMetadata.addField("auditEntries.eventId", true, null, null, null); 096 fieldsMetadata.addField("auditEntries.eventDate", true, null, null, null); 097 fieldsMetadata.addField("auditEntries.docUUID", true, null, null, null); 098 fieldsMetadata.addField("auditEntries.docPath", true, null, null, null); 099 fieldsMetadata.addField("auditEntries.docType", true, null, null, null); 100 fieldsMetadata.addField("auditEntries.category", true, null, null, null); 101 fieldsMetadata.addField("auditEntries.comment", true, null, null, null); 102 fieldsMetadata.addField("auditEntries.docLifeCycle", true, null, null, null); 103 fieldsMetadata.addField("auditEntries.repositoryId", true, null, null, null); 104 105 StringWriter writer = new StringWriter(); 106 107 try { 108 fieldsMetadata.saveXML(writer, true); 109 } catch (IOException e) { 110 throw new NuxeoException(e); 111 } 112 113 return writer.getBuffer().toString(); 114 } 115}