From 909b390f72f745523b89380b52d25c6f5472544f Mon Sep 17 00:00:00 2001 From: pb Date: Fri, 15 Feb 2008 16:46:33 +0000 Subject: [PATCH] Addendum to r20 (missing file) ------------------------------------------------------------------------ r1638 | chrisg23 | 2007-09-17 13:48:34 +0200 (Mo, 17 Sep 2007) | 1 line Sourceforge patch 1796156 - allow notes to be shown on basic properties authoring step files in ccm-cms-assets-notes had been forgotten in commit. git-svn-id: https://svn.libreccm.org/ccm/trunk@20 8810af33-2d31-482b-a856-94f89814c4df --- .../pdl/com/arsdigita/london/notes/Notes.pdl | 11 ++ .../com/arsdigita/cms/contentassets/Notes.xml | 11 +- .../src/com/arsdigita/london/notes/Note.java | 37 +++++ .../london/notes/NotesInitializer.java | 8 +- .../arsdigita/london/notes/ui/NotesEdit.java | 3 +- .../london/notes/ui/NotesSummary.java | 135 ++++++++++++++++++ 6 files changed, 199 insertions(+), 6 deletions(-) create mode 100644 ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesSummary.java diff --git a/ccm-cms-assets-notes/pdl/com/arsdigita/london/notes/Notes.pdl b/ccm-cms-assets-notes/pdl/com/arsdigita/london/notes/Notes.pdl index d168eca5d..e55740ea0 100755 --- a/ccm-cms-assets-notes/pdl/com/arsdigita/london/notes/Notes.pdl +++ b/ccm-cms-assets-notes/pdl/com/arsdigita/london/notes/Notes.pdl @@ -16,12 +16,23 @@ model com.arsdigita.london.notes; import com.arsdigita.cms.ContentItem; import com.arsdigita.kernel.ACSObject; +import com.arsdigita.auditing.BasicAuditTrail; object type Note extends ACSObject { String[0..1] content = ca_notes.content CLOB; Long[1..1] rank = ca_notes.rank; reference key ( ca_notes.note_id ); + + // Basic auditing info + unversioned BasicAuditTrail[0..1] auditing = + qualias { filter(all(com.arsdigita.auditing.BasicAuditTrail), + id == this.id) }; + aggressive load(auditing.id, + auditing.creationDate, + auditing.creationIP, + auditing.lastModifiedDate, + auditing.lastModifiedIP); } association { diff --git a/ccm-cms-assets-notes/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/Notes.xml b/ccm-cms-assets-notes/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/Notes.xml index 7b7cf2537..1cc50d292 100755 --- a/ccm-cms-assets-notes/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/Notes.xml +++ b/ccm-cms-assets-notes/src/WEB-INF/traversal-adapters/com/arsdigita/cms/contentassets/Notes.xml @@ -7,11 +7,15 @@ - + + + @@ -19,12 +23,15 @@ - + + + diff --git a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/Note.java b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/Note.java index 4b7bc2c34..dba23e18a 100755 --- a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/Note.java +++ b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/Note.java @@ -16,11 +16,16 @@ package com.arsdigita.london.notes; +import java.util.Date; + +import com.arsdigita.auditing.AuditingObserver; +import com.arsdigita.auditing.BasicAuditTrail; import com.arsdigita.cms.ContentItem; import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectInstantiator; import com.arsdigita.kernel.ACSObject; +import com.arsdigita.kernel.User; import com.arsdigita.kernel.permissions.PermissionService; import com.arsdigita.persistence.DataCollection; import com.arsdigita.persistence.DataObject; @@ -55,6 +60,11 @@ public class Note extends ACSObject { public static final String RANK = "rank"; public static final String OWNER = "owner"; public static final String NOTES = "ca_notes"; + public static final String AUDIT = "auditing"; + public static final String CREATION_DATE = AUDIT + "." + BasicAuditTrail.CREATION_DATE; + + + private BasicAuditTrail auditTrail; private boolean m_isNew = false; @@ -81,6 +91,25 @@ public class Note extends ACSObject { return note; } + /** + * Register auditing observer + * (non-Javadoc) + * @see com.arsdigita.domain.DomainObject#initialize() + */ + protected void initialize() { + super.initialize(); + + DataObject dataObj = (DataObject) get(AUDIT); + if (dataObj != null) { + auditTrail = new BasicAuditTrail(dataObj); + } else { + // creates a new one when one doesn't already exist + auditTrail = BasicAuditTrail.retrieveForACSObject(this); + } + + addObserver(new AuditingObserver(auditTrail)); + } + public String getContent() { return (String) get( CONTENT ); } @@ -131,6 +160,14 @@ public class Note extends ACSObject { return (ContentItem) DomainObjectFactory.newInstance( obj ); } + public User getNoteAuthor () { + return auditTrail.getCreationUser(); + } + + public Date getCreationDate () { + return auditTrail.getCreationDate(); + } + public static DataCollection getNotes( ContentItem item ) { Assert.exists( item, ContentItem.class ); diff --git a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/NotesInitializer.java b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/NotesInitializer.java index ecb5cef30..a1ca18a4b 100755 --- a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/NotesInitializer.java +++ b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/NotesInitializer.java @@ -16,16 +16,17 @@ package com.arsdigita.london.notes; -import com.arsdigita.cms.contenttypes.ContentAssetInitializer; import com.arsdigita.cms.ContentPage; import com.arsdigita.cms.ContentType; +import com.arsdigita.cms.contenttypes.ContentAssetInitializer; import com.arsdigita.cms.dispatcher.SimpleXMLGenerator; +import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.domain.DomainObjectTraversal; import com.arsdigita.domain.SimpleDomainObjectTraversalAdapter; import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.runtime.LegacyInitEvent; - import com.arsdigita.london.notes.ui.NotesStep; +import com.arsdigita.london.notes.ui.NotesSummary; +import com.arsdigita.runtime.LegacyInitEvent; public class NotesInitializer extends ContentAssetInitializer { public NotesInitializer() { @@ -73,5 +74,6 @@ public class NotesInitializer extends ContentAssetInitializer { DomainObjectTraversal.registerAdapter( Note.BASE_DATA_OBJECT_TYPE, new SimpleDomainObjectTraversalAdapter(), SimpleXMLGenerator.ADAPTER_CONTEXT ); + SimpleEditStep.addAdditionalDisplayComponent(new NotesSummary()); } } diff --git a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesEdit.java b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesEdit.java index bb240166b..4fe0cee7d 100755 --- a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesEdit.java +++ b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesEdit.java @@ -29,6 +29,7 @@ import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.parameters.NotNullValidationListener; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentSection; import com.arsdigita.kernel.ui.ACSObjectSelectionModel; import com.arsdigita.london.notes.Note; @@ -53,7 +54,7 @@ public class NotesEdit extends SimpleContainer { StringParameter contentParam = new StringParameter( "content" ); contentParam.addParameterListener( new NotNullValidationListener() ); - final DHTMLEditor content = new DHTMLEditor( contentParam ); + final DHTMLEditor content = new DHTMLEditor( contentParam,ContentSection.getConfig().getDHTMLEditorConfig() ); content.setRows( 20 ); m_form.add( content ); diff --git a/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesSummary.java b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesSummary.java new file mode 100644 index 000000000..5c3b26103 --- /dev/null +++ b/ccm-cms-assets-notes/src/com/arsdigita/london/notes/ui/NotesSummary.java @@ -0,0 +1,135 @@ +package com.arsdigita.london.notes.ui; + +import java.text.DateFormat; +import java.util.Date; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Table; +import com.arsdigita.bebop.table.TableCellRenderer; +import com.arsdigita.bebop.table.TableColumn; +import com.arsdigita.bebop.table.TableColumnModel; +import com.arsdigita.bebop.table.TableModel; +import com.arsdigita.bebop.table.TableModelBuilder; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.authoring.AdditionalDisplayComponent; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.kernel.User; +import com.arsdigita.london.notes.Note; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.util.LockableImpl; + +public class NotesSummary extends Table implements AdditionalDisplayComponent { + + private ItemSelectionModel m_itemSelectionModel; + + public NotesSummary() { + super(); + setModelBuilder(new NotesTableBuilder()); + TableColumnModel model = getColumnModel(); + model.add( new TableColumn( 0, "Note" )); + model.add( new TableColumn( 1, "Date" )); + model.add( new TableColumn( 2, "By" )); + setRowSelectionModel(null); + setColumnSelectionModel(null); + model.get(0).setCellRenderer(new TableCellRenderer() { + + public Component getComponent(Table table, PageState state, Object value, boolean isSelected, Object key, int row, int column) { + Label t = new Label((String)value); + t.setOutputEscaping(false); + + return t; + } + + + }); + + + + + } + + public void setItemSelectionModel(ItemSelectionModel model) { + m_itemSelectionModel = model; + } + + private class NotesTableBuilder extends LockableImpl implements TableModelBuilder { + + + public TableModel makeModel(Table t, PageState state) { + return new NotesTableModel(m_itemSelectionModel.getSelectedItem(state)); + + } + + + + } + + + private class NotesTableModel implements TableModel { + + private DataCollection m_notes = null; + private Note m_currentNote; + + public NotesTableModel (ContentItem item) { + if (item != null) { + m_notes = Note.getNotes(item); + // cg already ordered by rank m_notes.addOrder(Note.CREATION_DATE + " desc"); + } + } + public int getColumnCount() { + return 3; + } + + public Object getElementAt(int columnIndex) { + switch (columnIndex) { + case 0: + return m_currentNote.getContent(); + + + case 1: + String displayDate = "Not recorded"; + Date creationDate = m_currentNote.getCreationDate(); + if (creationDate != null) { + displayDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(creationDate); + } + return displayDate; + + + case 2: + String displayAuthor = "Not recorded"; + User author = m_currentNote.getNoteAuthor(); + if (author != null) { + displayAuthor = author.getName(); + } + return displayAuthor; + + default : + throw new IndexOutOfBoundsException( + "Column index " + columnIndex + " not in table model."); + } + } + + public Object getKeyAt(int columnIndex) { + return m_currentNote.getID(); + } + + public boolean nextRow () { + if ( m_notes.next() ) { + m_currentNote = (Note)DomainObjectFactory.newInstance(m_notes.getDataObject()); + return true; + } else { + m_notes.close(); + return false; + } + + } + + } + +} + + +