Studio Developer Manual / Version 2107
Table Of ContentsCopyright CoreMedia GmbH © 2023
CoreMedia GmbH
Altes Klöpperhaus, 5. OG
Rödingsmarkt 9
20459 Hamburg
International
All rights reserved. No part of this manual or the corresponding program may be reproduced or copied in any form (print, photocopy or other process) without the written permission of CoreMedia GmbH.
Germany
Alle Rechte vorbehalten. CoreMedia und weitere im Text erwähnte CoreMedia Produkte sowie die entsprechenden Logos sind Marken oder eingetragene Marken der CoreMedia GmbH in Deutschland. Alle anderen Namen von Produkten sind Marken der jeweiligen Firmen.
Das Handbuch bzw. Teile hiervon sowie die dazugehörigen Programme dürfen in keiner Weise (Druck, Fotokopie oder sonstige Verfahren) ohne schriftliche Genehmigung der CoreMedia GmbH reproduziert oder vervielfältigt werden. Unberührt hiervon bleiben die gesetzlich erlaubten Nutzungsarten nach dem UrhG.
Licenses and Trademarks
All trademarks acknowledged.
December 08, 2023- 1. Introduction
- 2. Overview
- 3. Deployment
- 4. Quick Start
- 5. Concepts and Technology
- 6. Using the Development Environment
- 7. Customizing CoreMedia Studio
- 7.1. Studio Plugins
- 7.2. Localizing Labels
- 7.3. Document Type Model
- 7.4. Customizing Property Fields
- 7.5. Hiding Components on Content Forms
- 7.6. Coupling Studio and Embedded Preview
- 7.7. Storing Preferences
- 7.8. Customizing Central Toolbars
- 7.9. Managed Actions
- 7.10. Adding Shortcuts
- 7.11. Inheritance of Property Values
- 7.12. Customizing the Library Window
- 7.13. Studio Frontend Development
- 7.14. Work Area Tabs
- 7.15. Re-Using Studio Tabs For Better Performance
- 7.16. Dashboard
- 7.17. Configuring MIME Types
- 7.18. Server-Side Content Processing
- 7.19. Available Locales
- 7.20. Notifications
- 7.21. Annotated LinkLists
- 7.22. Image LinkLists
- 7.23. Customizing Workflow UI
- 7.24. Content Hub
- 7.25. Feedback Hub
- 7.26. User Manager
- 7.27. User Properties
- 7.28. Adding Entity Controllers
- 7.29. Multiple Previews Configuration
- 7.29.1. Configuration of a preview
- 7.29.2. CAE Preview Provider
- 7.29.3. Headless Preview Provider
- 7.29.4. Commerce Headless Preview Provider
- 7.29.5. Studio URI-Template Preview Provider
- 7.29.6. Common URI-Template Preview Provider
- 7.29.7. Generic Preview URL Service Provider
- 7.29.8. Public API of the Preview URL Service
- 8. Security
- 9. Configuration Reference
- Glossary
- Index
List of Figures
- 2.1. Architecture of CoreMedia Studio
- 2.2. Runtime components
- 4.1. File structure of a simple Studio plugin
- 4.2. Added string property with the title of the content
- 5.1. Ext JSON
- 5.2. MXML compared to Ext JSON
- 6.1. Custom App Overlay Workspace
- 6.2. Studio project within the Project workspace in IntelliJ Idea
- 6.3. Open Chrome Developer Tools settings
- 6.4. Enable Source Maps in Chrome Developer Tools settings
- 6.5. Google Chrome Console
- 6.6. The Browser Console Log Button
- 6.7. Example of a content dump
- 6.8. Inspect an Ext JS component selected in the DOM
- 6.9. Studio main view component tree
- 6.10. Record Ext JS component events
- 6.11. Google Chrome's Developer Tools Support Comparing Heap Snapshots
- 7.1. Plugin structure
- 7.2. Document form with a collapsible property field group
- 7.3. Hide Service Dialog
- 7.4. Apps Button
- 7.5. Theming Inheritance in ExtJS and CoreMedia
- 7.6. Premular Reusability (For A Reusability Limit Of 2 For Articles)
- 7.7. Dashboard UML overview
- 7.8. Annotated LinkList with item with changed default value
- 7.9. Image LinkList
- 7.10. Default Rendering of FeedbackItems used for the CoreMedia Labs project "Imagga"
- 7.11. Tabbed Rendering of FeedbackItems used for the CoreMedia Labs project "Searchmetrics"
- 7.12. Example of a ScoreBarFeedbackItem
- 7.13. Example of a RatingBarFeedbackItem
- 7.14. Example of a PercentageBarFeedbackItem
- 7.15. Example of a GaugeFeedbackItem
- 7.16. Example of a KeywordFeedbackItem with service "Imagga".
- 7.17. Example of a ComparingScoreBarFeedbackItem
- 7.18. Example of a bold LabelFeedbackItem
- 7.19. Example of a ExternalLinkFeedbackItem used inside a "Siteimprove" integration
- 7.20. Example of a ErrorFeedbackItem inside an integration of "Siteimprove"
- 7.21. Settings Document with two configured previews
- 7.22. Example configuration of the Generic URI-Template Preview Provider
- 7.23. Studio with multiple Previews
List of Tables
- 1.1. Typographic conventions
- 1.2. Pictographs
- 1.3. CoreMedia manuals
- 1.4. Changes
- 7.1. Property Fields
- 7.2.
ImageEditorPropertyField
Configuration Settings - 7.3. Hide Service Spring Properties
- 7.4. Different Icon Scales
- 7.5. List of SpacingPlugin Modifiers
- 7.6. Predefined Widget Types
- 7.7. Selected predefined validators available in CoreMedia Studio
- 7.8. Connection Struct Properties
- 7.9. Settings Struct Properties
- 7.10. Settings Struct Properties
- 7.11. Connection Struct Properties
- 7.12. Localization for Custom Feedback Hub Adapter
- 7.13.
FeedbackItem
ScoreBarFeedbackItem
- 7.14.
FeedbackItem
RatingBarFeedbackItem
- 7.15.
FeedbackItem
PercentageBarFeedbackItem
- 7.16.
FeedbackItem
GaugeFeedbackItem
- 7.17.
FeedbackItem
KeywordFeedbackItem
- 7.18.
FeedbackItem
ComparingScoreBarFeedbackItem
- 7.19.
FeedbackItem
LabelFeedbackItem
- 7.20.
FeedbackItem
ExternalLinkFeedbackItem
- 7.21.
FeedbackItem
EmptyFeedbackItem
- 7.22.
FeedbackItem
FeedbackLinkFeedbackItem
- 7.23.
FeedbackItem
ErrorFeedbackItem
- 7.24. User Manager Spring Properties
- 7.25. User Provider Property Mapping
List of Examples
- 3.1. Running Liquibase via cmd tool
- 3.2. Release lock via docker-container
- 4.1. pom.xml of the example plugin
- 4.2. Example Studio plugin
- 5.1. Ext JSON
- 5.2. Plugin usage in Ext JSON
- 5.3. Component instantiation using Ext JSON
- 5.4. Component instantiation using typed wrapper
- 5.5. Component instantiation using typed setters
- 5.6. Updating multiple bean properties
- 5.7. Model bean factory method
- 5.8. Model bean access
- 5.9. Adding a listener and initializing
- 5.10. Creating a property path expression
- 5.11. The valueExpression MXML element
- 5.12. Creating a function value expression
- 5.13. Creating a value expression from a private function
- 5.14. Creating a value expression from a static function
- 5.15. Manual dependency tracking
- 5.16. The BindPropertyPlugin MXML element
- 5.17. Comprehensive example of a FunctionValueExpression
- 5.18. Property paths into struct
- 5.19. Adding struct properties
- 5.20.
- 6.1. Detecting public API violations
- 6.2. ckdebug, non-verbose
- 6.3. ckdebug, verbose
- 7.1. Adding a plugin rule to customize the actions toolbar
- 7.2. Adding a separator and a button with a custom action to a toolbar
- 7.3. Adding a plugin rule to customize all LinkList property field toolbars
- 7.4. Using <ui:NestedRulesPlugin> to customize a subcomponent using its container's API
- 7.5. Using <ui:NestedRulesPlugin> to customize a subcomponent
- 7.6. Registering a plugin
- 7.7. Loading external resources
- 7.8. Add Resource Bundle
- 7.9. Adding a search button
- 7.10. Example property file
- 7.11. Overriding properties
- 7.12. Localizing document types
- 7.13. Article form
- 7.14. Collapsible Property Field Group
- 7.15. Configuring the Image Editor
- 7.16. Configuring an image variant
- 7.17. Configuring an Image Map Editor
- 7.18. Configuring a validator for image maps
- 7.19. Defining document types without preview
- 7.20. Defining excluded document types
- 7.21. Defining excluded document types in MXML
- 7.22. Defining a content initializer
- 7.23. Custom property field
- 7.24. Using a base class method
- 7.25. Inline images in richtext
- 7.26. Adding table cell merge and split commands
- 7.27. Configuring the rich text symbol mapping
- 7.28. Customizing the rich text editor toolbar
- 7.29. Adding a custom icon to the rich text editor toolbar
- 7.30. Adding InternalLinkButton to the toolbar in TeaserOverlayPropertyField
- 7.31. Adding two more buttons to the toolbar
- 7.32. Adding resource path to
pom.xml
- 7.33. Customizing the CKEditor
- 7.34. Customizing the CKEditor configuration
- 7.35. Adding resource path of skin to
pom.xml
- 7.36. IHidableMixin.as
- 7.37. DocumentFormBase.as
- 7.38. CMArticleForm.mxml
- 7.39. DetailsDocumentForm.mxml
- 7.40. Adding a search for documents to be published
- 7.41. Adding a custom search folder
- 7.42. Creating a custom action
- 7.43. Creating a custom action base class
- 7.44. Using a custom action
- 7.45. Adding disapprove action using enableDisapprovePlugin
- 7.46. Configuring Property Inheritance
- 7.47. Defining list view fields
- 7.48. Configuring the thumbnail view
- 7.49. Two additional attributes for sorting.
- 7.50. Optional
sortDirection
Attribute to enable only one sort direction. - 7.51.
defaultSortColumn
Attribute to configure one column as the default for sorting. - 7.52. Overriding theme variables
- 7.53. Overriding global CoreMedia variables
- 7.54. Simple Skin Example
- 7.55. Switching off skins
- 7.56. ActionScript Skin Constants
- 7.57. Applying a Skin to a Component
- 7.58. Usage of CoreIcons.properties
- 7.59. Usage of CoreMedia Icons in SCSS
- 7.60. Get Resources in SCSS Code
- 7.61. Use Image as IconClass
- 7.62. BEM Example HTML Code
- 7.63. BEM Example SCSS Code
- 7.64. Usage of the BEM Plugin
- 7.65. BEM Plugin with Untyped Element
- 7.66. Usage of the BEM Mixin
- 7.67. VerticalSpacing Plugin Example
- 7.68. Set Validation State
- 7.69. Adding a button to open a tab
- 7.70. Adding a button to open a browser tab
- 7.71. Base class for browser tab
- 7.72. Dashboard Configuration
- 7.73. Fixed Search widget Configuration
- 7.74. Simple Search Widget Configuration
- 7.75. Simple Search Widget Type
- 7.76. Simple Search Widget Component
- 7.77. Simple Search widget Type with Editor Component
- 7.78. Simple Search Widget Editor Component
- 7.79. widget State Class for Simple Search widget
- 7.80. Override
*.exe
MIME Type Detection - 7.81. Implementing a property validator
- 7.82. Configuring a property validator
- 7.83. Implementing a content validator
- 7.84. Configuring a content validator
- 7.85. Configuring validator messages
- 7.86. Defining a Write Interceptor
- 7.87. Configuring a Write Interceptor
- 7.88. Configuring Immediate Validation
- 7.89. Example thumbnail resolver configuration
- 7.90. Add a new workflow with the name StudioThreeStepPublication to publicationProcessNames
- 7.91. Enable notifications for new StudioThreeStepPublication workflow
- 7.92. Workflow definition of a new StudioThreeStepPublication workflow
- 7.93. Workflow validation configuration for the StudioThreeStepPublication workflow
- 7.94. Usage of the AddPublicationWorkflowPlugin for the StudioThreeStepPublication workflow
- 7.95. Usage of AddMergeStrategyPlugin
- 7.96. Implementing a ContentHubTransformer (1)
- 7.97. Implementing a ContentHubTransformer (2)
- 7.98. Defining a Custom ColumnModelProvider
- 7.99. Note model
- 7.100. Representation class for note model
- 7.101. Service for note handling
- 7.102. Entity Controller class for TEST operations
- 7.103. Annotation for bean creation
- 7.104. REST GET method of NoteEntityController
- 7.105. Deletion of note in NoteEntityController
- 7.106. Update of note in NoteEntityController
- 7.107. Declare NoteEntityController as bean
- 7.108. Interface of Note remote bean
- 7.109. Implementing class of Note remote bean
- 7.110. Remote Bean URI path
- 7.111. Register class as remote bean
- 7.112. Result of Note
- 7.113. Invoke class from ActionScript
- 7.114. Output from remote bean
- 7.115. Remote bean used inside a component
- 7.116. Java class for notes list
- 7.117. Notes list representation
- 7.118. NotesEntityController for notes list
- 7.119. Put mapping for notes list
- 7.120. Adding a Spring bean to Spring configuration
- 7.121. Interface for remote bean for notes list
- 7.122. Implementing class for remote bean for notes list
- 7.123. Register remote bean with Studio
- 7.124. Test result of remote bean
- 7.125. Invoke notes in ActionScript
- 7.126. Display child elements of notes list
- 7.127. Output of notes list
- 7.128. Reverse order of notes list
- 7.129. Request header of PUT request
- 8.1. Import base context
- 8.2. Spring Security context
- 8.3. Logout filter
- 8.4. User finder
- 8.5. Enable user finder
- 8.6. Example Output
- 8.7. Marker Hierarchy
- 8.8. Configure Access Log
- 8.9. Configure Security Log
- 8.10. Configure Default Log
- 8.11. Configure Logger
- 8.12. Suppress Security Logging