DeepaMehta Changelog

What's new in DeepaMehta 4.8.3

Sep 17, 2016
  • IMPROVEMENTS:
  • Webclient module: more robust topicmap rendering. Corrupted associations are suppressed from being rendered and are reported to the user (#998).
  • BUG FIXES:
  • Type Editor module: when editing an association definition and entering a non-existing assoc type in the "Custom Association Type" field, the input is ignored and a warning is displayed. The DB is not corrupted (#1003).
  • Topicmaps module: corrupting a topicmap through manual deleting Mapcontext associations is not possible anymore (#998).
  • PLUGIN DEVELOPMENT FRAMEWORK:
  • Geomaps module: suppress geocoding on a per-code-block basis (#980).
  • Core module:
  • ChildTopicsModel's multi-value put() method doesn't throw a java.lang.IllegalArgumentException exception (#985).
  • Fix association auto-typing: when creating an association and specify a topic player by URI no exception is thrown (#961).
  • Facets module:
  • Added missing put/add methods to FacetValueModel (#1002).
  • getFacet() returns a ReleatedTopic (instead Topic) (#981).

New in DeepaMehta 4.8.1 (Jun 23, 2016)

  • IMPROVEMENT:
  • When a file repo request (/filerepo/...) points to a directory, and the directory contains an index.html file, it is served (#971).
  • BUG FIXES:
  • Core module:
  • AccessControl object:
  • getWorkspace() is now a privileged method. This is required for the dm4-sign-up 3rd-party plugin (#963).
  • There is a privileged changePassword() method. This is required for the Reset Password mechanism of the dm4-sign-up 3rd-party plugin (#934).
  • There are privileged methods for mapping between usernames and email addresses. This is required for the dm4-sign-up and dm4-subscriptions 3rd-party plugins (#934, #825)
  • Permissions:
  • A user is granted implicit READ permission for a type if she has READ permission for a given instance of that type (#899).
  • The READ permission for types is enforced by the backend in every situation (#899).
  • The WRITE permission for topics/associations is enforced by the backend in every situation (#970).
  • The Webclient's "Show Configuration" submenu lists only configurations the current user has READ permission for (#964).
  • JSON bundle resources (//...) are served with Content-Type header (#950).
  • Storage Neo4j module:
  • Dealing with non-DM nodes: the CoreService?'s get-all methods doesn't throw if non-DM nodes exist in the DB. Non-DM nodes are those created by 3rd-party Neo4j components, e.g. Neo4j Spatial (#911).
  • Files module:
  • Uploading an image file via dm4-images 3rd-party plugin works again (was broken in DM 4.8). The "ckCsrfToken" is an unexpected field exception does not occur anymore (#952).
  • In case of enabled per-workspace file repositories: the on-demand creation of the workspace folder works in every situation (#965).
  • Webclient module:
  • The query parameters as send by the Webclient's RESTClient are properly URL-encoded. As a consequence creating topicmaps whose name contains a "&" is now possible (#984).
  • The CKEditor "File Browser" plugin is included again (was missing in DM 4.8). This is required for the Upload feature of the dm4-images 3rd-party plugin (#952).

New in DeepaMehta 4.8 (Jun 13, 2016)

  • NEW FEATURES:
  • Collaborative authoring in private views: within shared workspaces private topicmaps can be created (#927).
  • Standard Distribution comes with Plugin Hot Deployment (#846).
  • Association Auto-Typing (#931).
  • 2 new standard plugins:
  • DM4 Events: provides topic type "Event" as the basis for calendaring applications (#902).
  • DM4 Date/Time: provides topic types "Date", "Time", and "Date/Time" (#901).
  • IMPROVEMENTS:
  • Meta model: more than one assoc def with the same child type are allowed (#903).
  • For administrators:
  • Introduce "Administration" workspace (#855).
  • Fine granular request filter (#946).
  • Enable/disable workspace sharing modes at both levels, globally, and per-user (#856).
  • The disk quota can be disabled at both levels, globally, and per-user (#812).
  • Additional config property to set the initial admin password (dm4.security.initial_admin_password) (#943).
  • Webclient:
  • Renaming/deleting/inspecting properties of a topicmap or workspace is simplified (#852, #427).
  • Streamlined text editor with a hand-picked feature set (#700).
  • Detail panel: auto-scale images and videos (#876).
  • A Folder topic that represents a workspace root directory displays the workspace name (#850).
  • File sizes are displayed with units (bytes, KB, MB, GB) (#851)
  • The disk quota is displayed with unit (MB) (#851).
  • The System workspace does not appear in the Workspaces menu (#848).
  • Contacts model:
  • Person has a Date of Birth (#916).
  • New type "Organizational Role" to describe a Person-Institution relationship (#916).
  • BUG FIXES:
  • The "admin" account is enabled also if dm4.security.new_accounts_are_enabled is set to false before the first DM start (#849).
  • JSON files served via the file repo have a Content-Type header (#950).
  • Deleting a workspace doesn't corrupt the DB (#898).
  • Was broken in DM 4.7:
  • The file browser works also with non-default configurations (#883).
  • For a private installation the browser's own login dialog appears (#892).
  • Standard topicmaps keep their event handlers also when switching to a geomap (#896).
  • Type editor:
  • Assoc defs keep their renderers also when changing the assoc def order (#909).
  • Changing the label configuration has an immediate effect also if the parent type's URI has changed (#910).
  • Webclient:
  • Number values in combobox menus are sorted numerically (#928).
  • The toolbar does not line wrap on small displays (#926).
  • On Webclient start: the Geomaps module doesn't issue the failing /theme/default/style.css request anymore (#894).
  • CHANGES:
  • The disk quota is disabled by default (#812).
  • CKEditor updated 4.3.2 -> 4.5.8 (#700).
  • Extensive Core refactoring (#935).
  • PLUGIN DEVELOPMENT FRAMEWORK:
  • Configuration-free Plugin Hot Deployment (#847, #618).
  • Semantic markup in the detail panel supports individual styling of fields (#929).
  • Add property indexes afterwards (#897).
  • Composite renderers (#908).
  • Directives can be attached to any response (#932).
  • Files API: support for constructing repository paths (#884).
  • Config API: ConfigCustomizers allow to calculate a config value dynamically (#830).
  • Bug fixes:
  • The URI uniqueness check is also performed when updating a topic/association (#891).
  • Deleting a child type in a migration no longer depends on an activated Type Editor plugin (#942).
  • Revised Core API (#941):
  • New ModelFactory is responsible for creating Model objects (#933).
  • ChildTopics accessors which don't throw (#923).
  • By-URI deletion references (#631).

New in DeepaMehta 4.7 (Oct 24, 2015)

  • New features:
  • Access controlled file repositories. In particular private and collaborative file repositories are now supported (#815).
  • Administrators can interactively configure a Disk Quota (for file uploads) on a per-user basis (#812).
  • Administrators can interactively enable/disable user accounts (#842).
  • The Webclient is usable also on Touch Devices (still experimental) (#803).
  • Improvements:
  • Webclient: the detail panel's resize-handle is more wide and appears visually distinct when grasped. This is beneficial in particular on touch devices (#803).
  • Webclient: failed uploads are reported to the user (#815).
  • Bug fixes:
  • Anonymous can browse public file repositories (#573).
  • A file whose path contains a "+" character is properly rendered in the detail panel (#819).
  • A folder created by the File Browser's "Create Folder" command show's up in the detail panel immediately (#820).
  • Creating a file browser when one already exists doesn't throw an error (#826).
  • Changes:
  • We switched back from Pax Web to Felix HTTP. This is because the way Pax Web handles the relationship between an OSGi HttpContext and a web session manager. As a consequence private and collaborative DM file repositories do not work with Pax Web (see ticket:815#comment:13).
  • The dm4.webservice.path config property allows switching between Pax Web and Felix HTTP without recompiling the Core (#448).
  • The default value for the dm4.filerepo.path config property is / instead of empty. / regards the entire file system as the DM file repo (#832).
  • A file repository path contained in a /files/ or /filerepo/ request must be encoded as a URI component (#819).
  • The WebPublishingService is an internal Core facility. It is deliberately not consumable as an OSGi service (#834).

New in DeepaMehta 4.6.1 (Aug 19, 2015)

  • Bug fixes:
  • Changing passwords work again (#795).
  • There can't be 2 user accounts with the same username (#799).
  • Usernames can't be changed (#799).
  • When processing form input fails due to invalid user input the user can correct the input and submit the form again (#799).

New in DeepaMehta 4.6 (Jun 23, 2015)

  • NEW FEATURES:
  • Extended meta-model: association definitions can have custom association types (#341).
  • Error reporting: errors occurring at server-side are reported to the Webclient user (#790).
  • IMPROVEMENTS:
  • Refined Contacts model: the intermediate Address Entry and Phone Entry topic types/instances are gone. A person/institution is connected directly to its Address and Phone topics via a custom association. This renders the topic network more intuitive (#779).
  • Webclient usability:
  • The detail panel remembers a topic/association's vertical scrollbar position. When the user revisits the topic/association the remembered scrollbar position is restored (#783).
  • When a topic appears in several topicmaps, in each map it can have an individual color and expansion flag (the Note topic's triangle) (#761).
  • When clicking a topic in the detail panel which has more than one association to the selected topic only one association is revealed (instead of all), nameley the one that corresponds to the clicked list entry. This reduces the chance for selecting the wrong association on the canvas afterwards (#460).
  • The sensitive area of the detail panel's resize-handle is increased from 2 pixel width to 7 pixel width (#676).
  • In the New Workspace dialog the radio buttons to select the Workspace Sharing Mode feature a tooltip which explains the respective option (#784).
  • In the detail panel's "related topics" list besides the association type the association value is displayed (#793).
  • DM never creates empty simple child topics. In particular a combobox menu is not extended by an empty item when the user lefts the field (e.g. "Phone Label", "City") empty (#171).
  • In Number fields the Webclient does not fill in 0 automatically as 0 and "not set" are semantically different (#171).
  • DeepaMehta can be installed again in an existing Karaf environment by Karaf feature install. 2 features are provided: dm4-platform and dm4-standard-distribution (#711).
  • BUG FIXES:
  • The user can't select disabled menu items. In particular a user can't create a Membership if she is not authorized (#774).
  • The detail panel's form rendering works properly for child topics of data type "HTML" and cardinality "Many" (#792).
  • When a Note topic's triangle is clicked the Note content does appear in the topicmap in any situation (#762).
  • A type can't be deleted if instances still exist. If tried the Webclient displays an error message (#789).
  • The DB is not corrupted when an association definition is retyped into a non-association definition type and then retyped back into an association definition (#773).
  • The standard type's (Note, Person, ...) Association Definitions (and their View Configurations) are editable by logged in users (#771).
  • Interactively created types get creator info and creation timestamp (#772).
  • CHANGES:
  • Webclient: the standard topicmap view properties (x, y, and visibility) are stored as node properties (instead as child topics) (#761).
  • PLUGIN DEVELOPMENT FRAMEWORK:
  • Core module:
  • Error handling: when an error occurs at server-side the exception (including all cause exceptions) is transmitted to the client. The Webclient reports the error to the user. Server-side plugin developers can supply custom error objects. Client-side plugin developers (that is users of the RESTClient) can supply custom error handlers (#790).
  • The model object used to create/update a composite topic/association can contain the values (simple or composite) to be used to update the relating associations as well (#785).
  • The JSON format for a declarative migration is extended in order to create the entities in a specific order (#778).
  • REST APIs: the include_assoc_childs query parameter controls weather the child topics of the requested object's Relating Associations are included in the response (#659).
  • REST API and declarative migrations: simplified format for create/update requests. The child topic's type_uri must no longer be specified (#636).
  • Core API: an Association Definition can be added in the middle of the sequence (#770).
  • Core API orthogonality: in a create/update operation Topic References and Topic Deletion References are supported for all the 4 cases, that is Composition/Aggregation, One/Many.
  • Topic References are supported for Composition as well (#786).
  • Topic Deletion References are supported for Composition-One and Aggregation-One childs as well (#171).
  • Bug fixes:
  • Objects don't loose their label when updating their child topics (#766, #791).
  • ChildTopics manipulator methods work for child topics defined with cardinality many (#788).
  • When a type is deleted and the (then deleted) type is requested subsequently (via API) a proper "Type not found in DB" exception is raised (#765).
  • Access Control module:
  • New "System" authority: Code that is invoked by the system itself -- as opposed to be invoked by a user -- runs under the System authority. The System authority has unrestricted access to the database (#764).
  • REST API: the getPrivateWorkspace() service call is RESTful (#768).

New in DeepaMehta 4.5 (Feb 4, 2015)

  • NEW FEATURES:
  • Completely redesigned Access Control system (#592):
  • User configurable access levels by the means of Workspace Sharing Modes. A Workspace Sharing Mode lets the user control how (if at all) the workspace content is accessible by other users. To accommodate typical sharing scenarios 5 sharing modes are pre-defined: "Private", "Confidential", "Collaborative", "Public", and "Common". A matrix explaining the 5 sharing modes is available in ticket:592#comment:1
  • The Webclient GUI presents workspaces as well-defined content spaces between the user can switch. The Workspaces menu lists only the workspaces the user has access to. The Topicmaps menu lists only the topicmaps that belong to the selected workspace. Topicmaps can still contain (interrelated) contents belonging to different workspaces. Which parts of the topicmap are visible/accessible to the user depends on the user's authority.
  • 2 new commands in the topic/association context menu:
  • "Assign to Workspace": let the user assign a topic/association to another workspace and thus changing its accessibility (#592).
  • "Get Info": shows creator/modifier/owner info and timestamps for a topic/association (#747, #749).
  • PLUGIN DEVELOPMENT FRAMEWORK:
  • Service injection for migrations: in your plugin's migrations you have access to the services provided by other plugins, including your own (#324).
  • Core module:
  • The postInstall() hook is dropped. You can do the same with a migration now (#324).
  • The Core API provides a generic getObject(id) method (#760).
  • Workspaces module:
  • The automatic workspace assignment can be switched off on a per-request basis (#752).
  • The Workspaces API is RESTful (#592).
  • Access Control module: changes in client-side events (#592):
  • The logged_in and logged_out events are replaced by authority_increased and authority_decreased with extended semantics.
  • 2 logout levels (in shape of the authority_decreased and authority_decreased_2 events) allow plugin's to orchestrate their logout actions.
  • Webclient module: certain items rendered by GUIToolkit's topic_menu() can be disabled by the means of an indicator function (#755).
  • CHANGES:
  • Caching module optimization: GET topic/association requests perform faster (#685).
  • The dm4-assemblies module (DeepaMehta Karaf Distribution) is dropped from the git repository (#711). A Karaf based DeepaMehta distro is maintained here: ​https://github.com/digitalmemex/distribution
  • BUG FIXES:
  • The "Create Association" operation is only available if the user has the corresponding permission (#592).

New in DeepaMehta 4.4.3 (Jan 26, 2015)

  • BUG FIXES:
  • Webclient module:
  • Fix display of workspace details (#739) and user account details (#742). Was broken in DeepaMehta 4.4
  • The max_result_size=100 query parameter is dropped from requests (#741).

New in DeepaMehta 4.4.2 (Jan 20, 2015)

  • Bug fixes:
  • The Webclient properly handles form fields of type "Number" (#750).

New in DeepaMehta 4.4.1 (Jan 19, 2015)

  • CHANGES:
  • DeepaMehta can be easily deployed in an existing Karaf installation (#734).
  • All DeepaMehta Standard Distribution artifacts are deployed at Maven Central (#713).
  • BUG FIXES:
  • Webclient module:
  • The values of a composite association appear in the detail panel. Was broken in DeepaMehta 4.4 (#714).
  • Core module:
  • The label of a composite topic/association is properly calculated in a certain case (#715).
  • The POST_UPDATE_TOPIC_REQUEST core event is fired in a certain case. As a consequence the Time module's modification date bubbling works as expected (#510).

New in DeepaMehta 4.4 (Oct 28, 2014)

  • New feature:
  • Webclient: create Custom Role Types.
  • Felix HTTP is replaced by OPS4J Pax Web.
  • Plugin development framework:
  • Service Injection.
  • Declarative Transactions.
  • 3 global parameters removed: "directives", "clientState", "fetchComposite".
  • Compatible with a new plugin (optional install):
  • DM4 Geospatial.
  • Upgraded 3rd-party software:
  • Jetty 7.6.13 -> Jetty 8.x.x (Servlet API 2.5 -> Servlet API 3.0)
  • Felix 3.2.2 -> Felix 4.4.1 (OSGi 4.2 -> OSGi 5)

New in DeepaMehta 4.3 (May 23, 2014)

  • PLUGIN DEVELOPMENT FRAMEWORK:
  • Core module:
  • Add index modes to types afterwards and reindexing existing content (#649).
  • Core Service method getTopics(key, value, fetchComposite) is RESTful (#637).
  • Core API's CompositeValueModel is extended (#632):
  • has a method to add a multiple-value child.
  • has a method to add a deletion reference to a multiple-value child.
  • CompositeValueModel is an Iterable over the child type URIs.
  • Core API: RoleModel has a method to set the player ID (#654).
  • Core API: fail-fast ClientState accessors let the developer detect errors more early (#639).
  • Core API: an exposed DB vendor object allows plugins to utilize vendor specific DB extensions (#634).
  • Files module:
  • More flexible file upload:
  • An uploaded file can be processed by any plugin (not just the Files plugin).
  • The plugin can process the file on-the-fly (not necessarily writing it to disk). Arbitrary (JSON) data can be send back to the client (#655).
  • The file chooser dialog can upload files to an arbitrary plugin service (not just the Files service) (#655).
  • The Files service has a method to create new files in the file repository programmatically (#506).
  • Facets module:
  • The Facets service is now RESTful (#629).
  • The Facets service has a method to fetch a topic along with selected facets (#652).
  • Geomaps module:
  • The geocoder can be switched off on a per-request basis (#641).
  • The Geomaps service has a method to access the geo coordinate of a geo-facetted topic (#645).
  • The Geomaps service methods are renamed to be more clear (#645).
  • Topicmaps module:
  • The Topicmaps service has a method to load a topicmap while including the topic's child topics (#653).
  • The client-side Topicmaps API has a method to add a newly (server-side) created topicmap to the Topicmap menu, and display it in the Webclient (#656).
  • Webclient module:
  • The Webclient features a post_refresh_topicmap_menu event which allows plugins to customize the Topicmap menu (#646).
  • COMPATIBILITY NOTES:
  • Core API:
  • CompositeValueModel has incompatible changes (#632).
  • Type interface and TypeModel class have incompatible changes related to index modes (#649).
  • Topicmaps module:
  • Server-side API has incompatible changes related to topicmap loading (#653).
  • Client-side API has incompatible changes related to selecting and creating a topicmap programmatically (#656).
  • The Facets API has incompatible changes (#629).
  • The Geomaps API has incompatible changes (client-side and server-side) (#645).
  • The Files API (client-side) has incompatible changes related to file uploading (#655).
  • BUG FIXES:
  • Core module:
  • Deleting an association definition programatically does not corrupt the DB (#640).
  • A plugin whose initialization fails is not tried to restart endlessly (#635).
  • The server is robust against empty-valued (non-DM) cookies (#625).
  • Workspaces module:
  • Editing a newly created Workspace in the Webclient does not run into an endless recursion (#627).

New in DeepaMehta 4.2 (Feb 19, 2014)

  • GUI improvements:
  • A topic/association type's Data Type is not displayed twice in the detail panel (#606).
  • The user can select/enter an aggregated number via a combo box (#240). Aggregated number instances are created only once (#588).
  • Bug fixes:
  • Webclient:
  • Pressing the "Create a Note instantly" button (Alt-N) while another topic is being edited causes no lost edits (#595).
  • Deleted types disappear from type menus (#246).
  • A Folder topic's content listing is sorted on all platforms (#605).
  • On a Mac: ctrl-clicking a topic's type icon does not initiate association drawing (#604).
  • Clicking on a long menu's scrollbar does not close the menu prematurely on mouseup (Firefox, Chrome) (#609).
  • Closed dialogs do not pollute the DOM (#583).
  • Server-side:
  • Deleting an Association Definition does not corrupt the DB (#615).
  • Topic create/update logic: resolved topic references have a composite value (#614).
  • Time plugin: when a child topic is updated the modification timestamp bubbles up to all composite parent objects. Thus the browser cache is invalidated and the up-to-date parent topic/association is retrieved (#510).
  • When updating a topic/association its URI is not lost (#311).
  • Plugin Development Framework:
  • Server-side:
  • New feature: Custom Events. A plugin can define and fire its own specific events. Other plugins can implement listeners for these events (analogous to Core Event listeners) (#290).
  • Core API: a DeepaMehtaObject provides a loadChildTopics() method to fetch all its child topics afterwards (#522).
  • 2 new RESTful Core Service methods (#607):
  • deleteTopicType()
  • deleteAssociationType()
  • The Core Service provides a deliverEvent() method for delivering an event to a particular plugin (#597).
  • 3 new Core Events:
  • POST_UPDATE_TOPIC_REQUEST (#587).
  • PRE_DELETE_TOPIC (#616).
  • POST_DELETE_TOPIC (#616).
  • A plugin can react on Login and Logout events as fired by the Access Control module (#538).
  • A plugin can react on being stopped by the means of a shutdown() hook (#594).
  • A plugin can determine its own URI (#598).
  • Client-side:
  • 2 new Webclient events (#608):
  • post_delete_topic_type
  • post_delete_association_type
  • GUIToolkit's Dialog class supports auto-closing and Return key handling (#610).
  • Callers of dm4c.on_return_key() can stop event propagation (#610).
  • The Webclient's context menus are reusable by 3rd-party Topicmap Renderers (#602).
  • The Topicmap plugin's TopicmapViewmodel class is reusable by 3rd-party webclients (#612).
  • COMPATIBILITY NOTES
  • There are breaking API changes in the Webclient's GUIToolkit: if your plugin displays dialog boxes (dm4c.ui.dialog()) it must be adapted. See comments in #583 and #610.
  • Further changes:
  • Deleting topics perform faster (#617).
  • 3rd-party components are updated:
  • Jetty 6.1.2 -> 7.6.13 (#584).
  • CKEditor 3.6.2 -> 4.3.2 (#585).

New in DeepaMehta 4.1.3 (Dec 10, 2013)

  • New features:
  • ### Box Renderer (#577).
  • ### View Customization Framework (#505).
  • Support for complex data models, namely "Aggregated Composites". Topic/association instances can be edited via Detail Panel (#337, #30).
  • The Apache Felix Gogo Shell is included. That enables you to e.g. start and stop DeepaMehta plugins, and even install new plugins without restarting DeepaMehta.
  • GUI improvements:
  • Topicmap Panel:
  • New look & feel (provided by the Box Renderer plugin):
  • Topics are rendered as solid boxes with a reduced-size type icon in the corner. This way the topic content takes center stage (instead of the icon).
  • The content of Note topics is displayable right on the topicmap. Note topics have an expand/collapse handle. The goal is to increase the topicmap's information density. Don't show a proxy, but the real thing.
  • Each topic box can have an individual color (independent of topic type). The color is set via context menu. The goal is to provide the user increased means of expression as known from graphics applications.
  • Associations can be drawn by pulling the topic's type icon. No context menu and no Shift key is involved (although these gestures still work.)
  • Create topics directly on the topicmap: right-click and choose a type from the list. The topic is created on-the-spot (#529).
  • Associations are displayed along with their values (as entered in the detail panel) (#34).
  • Shortcut: double clicking a topic/association enters edit mode (#526).
  • Clearing the Detail Panel: clicking on the topicmap removes current topic/association selection (#523).
  • Mouse cursor shapes: while something is moved a grabbing hand is shown, while an association is drawn a crosshair is shown (#552).
  • The topicmap uses full window height. No dead space at the bottom (#543).
  • Detail Panel:
  • "Related Topics" list:
  • Redundant topics are suppressed. A topic is regarded redundant if it is already represented in the detail panel's upper area (the "model-driven nested boxes") (#315). Suppressed topics can still be revealed in the topicmap, namely via the page panel's upper area: when hovered the corresponding box is highlighted. A click reveals the underlying topic.
  • The topics are grouped by Topic Type (instead of Association Type). The respective association type is now shown beneath each topic. The Related Topics list is much more readable this way (#315).
  • Revised icon vs topic label click behavior: the icons of the topics which are contained in the current topicmap are now surrounded by a thin red line (instead of appearing dimmed). Clicking such an icon a) reveals the respective association (in case it was hidden), and b) translates the topicmap to bring the topic into the viewport (in case it was outside the viewport) (#579).
  • Long topic labels are not truncated (instead of applying a limit of 50 characters) (#315).
  • The topics are sorted case-insensitively (#521).
  • Long words (like file names) are line-breaked. No horizontal scrollbar appears in the detail panel (#537, #575).
  • Menus:
  • Long menus (exceeding the screen) have a scrollbar. The former upper/lower "scrolling areas" are gone. You can use the mouse wheel or whatever gesture for scrolling (#534).
  • Menu items can be selected via 1-click gesture (mousedown-select-mouseup) or 2-click gesture (click-to-open, click-to-select) (#534).
  • All menus can be controlled via keyboard (#534).
  • Toolbar:
  • In the toolbar, beside the Create menu, there is a "Create Note instantly" button. It can be triggered via Alt-n. The button creates a Note topic instantly (#529).
  • When clicking the logged in username (upper/right corner) and the respective User Account topic is already contained in the topicmap but outside the viewport, the topicmap is translated to bring the revealed User Account into view (#570).
  • Plugin Development Framework:
  • More data binding (automatic sync'ing of DB and topicmap view):
  • The RESTful plugin methods can return Directives now. They are automatically processed by the Webclient (#556).
  • The CompositeValue's manipulator methods (set(), setRef(), remove()) extend the passed Directives (by a UPDATE_TOPIC resp. UPDATE_ASSOCIATION directive) (#576).
  • Core API Type interface: setDataTypeUri() and setLabelConfig() take a directives parameter (#576).
  • The DeepaMehta Core thoroughly uses Lists instead of Sets. One advantage is better performance (#559).
  • Core API: there is a new model class: de.deepamehta.core.model.TopicReferenceModel: A reference to a topic, either by ID, or by URI (#574).
  • Core API: DeepaMehtaObject has a method to fetch child topics selectively: loadChildTopics() (#522). This is particularly useful in conjunction with a Viewmodel Customizer (#505).
  • Extended server-side Topicmaps API (#544).
  • Client-side:
  • Plugins can add icons and disabled items to the topic/association/canvas context menus (#529).
  • DeepaMehta GUI Toolkit:
  • Support for context menus (#532).
  • Disabled items can be added to menus (#529).
  • 2 new client-side events:
  • pre_submit_form (#547).
  • association_doubleclicked (#530).
  • Support for more complex Detail Panel renderers: a Simple Renderer or Multi Renderer can navigate to the parent page model (#567).
  • Interwoven plugin initialization: 2 new init events init_2 and init_3 (#518).
  • The JAX-RS Exception Mapper also maps checked exceptions and errors (#484).
  • 3rd-party plugins must no longer declare a deepamehta-core dependency [0546cfef].
  • Bug fixes:
  • When updating an aggregated composite no error occurs (#574).
  • The Caching plugin no longer prevents updating topics/associations which are not selected (and thus appearing in the page panel) (#547).
  • Changed Person data is saved properly also if its Address can't be resolved (via Google Geocoder) (#565).
  • Topicmaps keep URI when translated (#311).
  • A serialized topicmap contains the association values (#531).
  • The main toolbar's menus reveal all their items without scrolling (#534).
  • On a Mac where ctrl-click emulates the right mouse button: when invoking an association's context menu via ctrl-click the respective topic cluster does not stick to the mouse pointer (#517).
  • The canvas context menus do scroll when invoked near screen bottom (#534).
  • Sync view on file upload: Once an upload is complete the new file appears in the page panel immediately (#563).
  • Sync view on topic retype (#508).
  • Sync view on type change (#576).
  • When changing the "Include in Label" setting in a type form while the respective association definition is visible on the canvas, the association label on the canvas is updated (#564).
  • When changing a type's data type in a type form while the former data type and the association are visible on the canvas, the association disappears.
  • No accidental browser window scrollbars appear (#543).
  • File content renderer works when embedded in parent topic (#566).
  • Various client-side topicmap management oddities are fixed, e.g. after deleting a topicmap the selector does not show 2 "untitled" topicmaps (#520).
  • Further changes:
  • The overall Webclient style is flat. There are no gradients in buttons, menu items, dialog titles etc. (#532).
  • The "success" alertbox after a file upload is gone (#563).
  • The markup generated by dm4c.render.topic_list() contains no anymore (#575).
  • The RESTClient no longer depends on the Webclient (#557).
  • The GUIToolkit menus and context menus rely on the jQuery UI Menu widget (#532).
  • Updates (#507):
  • jQuery 1.7.2 -> 2.0.3
  • jQuery UI 1.8.21 -> 1.10.3

New in DeepaMehta 4.1.2 (Sep 9, 2013)

  • Bug fix:
  • Editing a topic displayed in a geomap throws no error (#503). The error was introduced in DeepaMehta 4.1.1 in conjunction with caching/conditional requests.

New in DeepaMehta 4.1.1 (Sep 3, 2013)

  • New features:
  • Timestamps (#386). Each topic/association have creation and modification timestamps. Timestamps are delivered along with topics/associations retrieved via the REST API. The new Time API allows programmatic timestamp access and topic/association retrieval based on time ranges. Timestamps are also the basis for validating the browser cache and for Edit Conflict Detection. The entire time aspect is realized as a separate module (dm4-time).
  • Exploiting the browser cache (#478). Consequent usage of intrinsic HTTP features (Last-Modified and Cache-Control response headers and If-Modified-Since request header) results in lesser network traffic and better perceived performance. The caching aspect is realized as a separate module (dm4-caching).
  • Edit Conflict Detection (#479). The server rejects a PUT request when the resource has changed meanwhile. The check is based on the resource's modification timestamp. This fights the "lost update" problem when working collaboratively. Edit conflict detection is realized at HTTP level, that is a conditional PUT request (involving an If-Unmodified-Since request header). Conflict resolution is not yet realized.
  • Plugin Development Framework:
  • The new Property API allows plugins to attach Node Properties to topics and associations. Node properties are metadata like timestamps, ACL information, or geo coordinates. Topics/associations can be retrieved based on property value or value range (#472). Node properties can be indexed. Numeric properties are trie-indexed which allows for performant range queries (#490). Property keys are namespaced (#491).
  • HTTP response generation:
  • A plugin can produce specific HTTP (error) responses by throwing a WebApplicationException from its resource methods or event handlers (#484, #481).
  • Exceptions thrown from resource methods or event handlers must no longer be wrapped in a WebApplicationException if a 500 response is intended (#484).
  • The entity parameter (represented in the message body) of a REST resource method can use an arbitrary class as long as the representation is JSON and the class has a public JSON constructor. Implementing a custom JAX-RS provider class (a message body reader) is no longer required (#277).
  • 3 new Core Events:
  • SERVICE_REQUEST_FILTER allows plugins to manipulate or interrupt REST service requests (#480).
  • RESOURCE_REQUEST_FILTER allows plugins to manipulate or interrupt static resource requests (#480).
  • SERVICE_RESPONSE_FILTER allows plugins to manipulate REST service responses, e.g. by setting certain response headers (#477).
  • Webclient:
  • (Client-side) plugins can send REST service requests asynchronously (#476).
  • New Webclient event (client-side): pre_send_request allows plugins to investigate and manipulate a request before it is send to the server (#486).
  • The default topicmap view model is renderer agnostic. It is reusable by custom topicmap renderer implementations (#443).
  • Access Control API: there are methods for retrieving topics/associations based on creator or owner (#458).
  • Core Service: there are methods for retrieving all topics/associations from the DB. These are useful for migrations which transform the entire database (#495).
  • Core API and standard plugin APIs: the clientState parameter is no longer required in get/retrieve/delete service methods (#496).
  • Bug fixes:
  • Login/Logout:
  • Logout works for private DM installations as well. (A private installation is one with read_requires_login=true.) Missing HTTP Logout is worked around by bringing up a bogus browser login dialog (#423).
  • Login works for open DM installations as well. (An open installation is one with write_requires_login=false.) (#475).
  • When the user enters wrong credentials in DM's login dialog the browser's login dialog does not appear. The user stays in DM's login dialog (#471).
  • When the user enters neither a username nor a password in the login dialog and presses OK no error occurs (#473).
  • The type loader doesn't throw a bogus "Endless recursion" exception when repeatedly tried to load a type with an invalid URI (#487).
  • Exceptions thrown from request filters (formerly servlet filters) appear in the log file (if file logging is activated) (#474).
  • Webclient model update:
  • When processing the directives of an update request the dm4c.selected_object is properly updated (#488).
  • Construction of the object model passed to a topic/association update request no longer manipulates the dm4c.selected_object in place. This allows a plugin to investigate the selected object's metadata (e.g. timestamps, access control information) before the request is send (#486).
  • Requests issued by the Webclient have no superfluous "?" character at the end as it might confuse the browser's or network proxy's cache heuristic (#483).
  • Web application plugins (derived from WebActivatorPlugin) are detected as DeepaMehta plugins. The ALL_PLUGINS_ACTIVE event is fired properly (#498).
  • Further changes:
  • The dependency on Felix's proprietary "Extended HTTP Service" is dropped. Thus we are ready to replace Felix HTTP Service with OPS4J Pax Web soon (#448). OPS4J Pax Web is the far more modern and flexible OSGi HTTP Service implementation which enables e.g. server push and WebSockets as well as binding the web server socket to a specific network interface (#39).
  • Core Service REST API: the URLs for topic/association update (PUT) requests are REST-conform (#482).
  • The REST service no longer enriches topic/association responses with user-related permission information. Instead permissions are explicitly requested through the Access Control service (#489). This makes topic/association responses eligible for the browser cache (#478).
  • The DeepaMehta Karaf Distribution comes with the same default configuration as the DeepaMehta Standard Distribution (#447).
  • COPYRIGHT.txt is updated (#434).

New in DeepaMehta 4.1 (Mar 12, 2013)

  • GUI improvements:
  • In the type builder: easy navigation to a type's View Configuration (#364).
  • Clicking the user name link in the upper/right corner reveals the User Account topic of the current user. This is useful for changing the password (#415).
  • The "Edit" command is also available in the topic's and association's context menu (#416).
  • Further improvements:
  • File browser access control: the "Upload File" and "Create Folder" commands are available only for authorized users (#409).
  • Encoded passwords are not visible in the webclient (#375).
  • More complex searches for composite topics: you can e.g. search a person by its entire name. And you can search Persons or Institutions by combined Address terms (#420).
  • Updating composite values perform faster (#339).
  • More familiar wording of DM Core concepts: "Parent/Child" replaces "Whole/Part". This benefits both, API and GUI (#67).
  • For developers: the Neo4j Shell can be launched while DeepaMehta is running [3601ae4a].
  • Access Control bug fixes:
  • The admin user can change hers password (#369).
  • A User Account is editable only by a) the respective user, and b) by the creator of the User Account (#375).
  • The View Configurations of the standard types, e.g. Person, can be edited via GUI. They have access control information and Workspace assignments (#377).
  • Association types get Workspace assignments (analogous to topic types) (#376).
  • Further bug fixes:
  • View Configuration default values are reflected in the GUI. In particular the "Viewable", "Editable", and "Rows" settings are no longer changed by accident (#208).
  • Multiple-value fields (cardinality "Many") can be involved in labeling rules (#250).
  • Search topics and Webpage topics show no "Edit" button (#259, #248).
  • After a multi-facet update topics do not appear twice in the webclient (#339).
  • Deleting all Email Addresses or Phone Numbers from a Person or Institution does not throw an error (#414).
  • A Person or an Institution can still be updated if Address child instances (Street, Postal Code, City, Country) are missing (#407).
  • Plugin Development Framework:
  • The core class CompositeValue is attached to the DB. So, for complex update operations of composite values the plugin developer must not care about model updates vs. DB-updates. The underlying model and the DB are always in-sync automatically. CompositeValue is now on a par with all the other Core objects (#339).
  • Composite values are loaded lazily (#411).
  • The core classes CompositeValue and CompositeValueModel provide convenience accessors which take a "defaultValue" argument (#418).

New in DeepaMehta 4.0.14 (Jan 31, 2013)

  • Main aspects of the new storage layer:
  • High-speed traversal: Traversal is significantly speed up by the means of a Lucene index for association metadata. In particular, highly connected nodes (so called "supernodes") have no negative impact on traversal speed (#389).
  • Compact architecture: The concept of a DM-independant MehtaGraph API is abolished. A storage implementation is coded directly to the DeepaMehta Model API. The additional bridging layer is dropped. There is no dependency on the external Neo4j MehtaGraph library anymore (#389).
  • Modular storage layer: a service provider interface (de.deepamehta.core.storage.spi.DeepaMehtaStorage) allows 3rd-party developers to implement alternate storage layers for DeepaMehta, based on DBs other than Neo4j. A Storage layer implementation is deployed as an OSGi service (#391).
  • 1st-class associations: Association user data is indexed as well (just like topic user data) (#389).
  • Additional performance measures:
  • For DB read operations no transactions are created (#406).
  • Delivering core events involves no runtime reflection (#352).
  • Further improvements:
  • The AssociationDefinition API is simplified and redundancy is removed from the serialization format (#393).
  • Neo4j is updated from 1.8 to 1.8.1
  • Bug fixes:
  • This exception should no longer occur (#392): java.lang.IllegalArgumentException: Reference error: ID 1234 refers to a MehtaEdge when the caller expects a MehtaNode
  • Association's Instantiation associations can be queried by type (#338).
  • Updating from previous DeepaMehta versions is not supported.

New in DeepaMehta 4.0.13 (Dec 27, 2012)

  • New Features:
  • The Geomaps plugin is included.
  • Apache Karaf-based distribution for easy client-server setup and maintenance.
  • Association Type editor: Allows the user to create custom association types. The color is configurable on a per-type basis. Simple and complex association types are supported (analogous to topic types).
  • Association instance editor: Let the user enter data for an association instance according to the association's type definition (analogous to topic types).
  • For developers: Server-side HTML generation with Thymeleaf templates.
  • GUI Improvements:
  • Topic revelation via Page Panel:
  • More informative page panel: Topics which are already visible on the canvas are displayed with an disabled icon. This provides a useful hint when revealing topics.
  • Differentiated gestures for revealing topics via the page panel: a) Clicking the topic's icon reveals it, b) Clicking the topic's label reveals and focuses it.
  • Page panel: Associations are grouped by type, using the association type names as group headers.
  • Optimized Canvas:
  • Cluster move: Moving an association moves the visually connected subnetwork.
  • Canvas auto-panning ensures that auto-positioned topics are always visible within in the current viewport.
  • Topic labels on canvas: a) Line breaks are preserved, b) Long labels are truncated.
  • Working with associations:
  • Keyboard shortcut: Create associations via shift-drag.
  • Once an association is created the Edit mode is entered automatically.
  • When an association is retyped the association form is updated immediately. The user must no longer leave and re-enter the form.
  • Fulltext seach: Wildcards, phrase search, and escaping is supported.
  • Further Improvements:
  • Performance: A different storage aproach for the Access Control information brings back the performance known from DM 4.0.11 and before.
  • Better support for virtual host environments: The new config property dm4.host.url allows the admin to specify the installation's public URL.
  • Data model: Meta Types are applicable as child types in association definitions.
  • 3rd-party components are updated, most notably Neo4j 1.2 -> 1.8 (#350).
  • Internal: Refactored object fetch/store code.
  • Bug Fixes:
  • Handle transitive plugin service dependencies.
  • Join users to workspaces: Interactively created associations between a Username and a Workspace are editable.
  • Delete search topics.
  • Don't select toolbar accidentally.
  • Don't create circular associations.
  • Edit an association type's View Configuration interactively.
  • Edit a meta type's View Configuration via REST API.
  • Redeploy the Core while active HTTP sessions exist.
  • Plugin Development Framework:
  • Simplified service providing/consumption:
  • A plugin consumes services by annotation. The consumedServiceInterfaces config property is no longer required.
  • A plugin's provided service is automatically picked up by the Core. The providedServiceInterface config property is no longer required.
  • Further server-side improvements:
  • The concept of "internal plugin events" is replaced by method overriding. Thus, importing certain Listener interfaces is no longer required (#366).
  • Flexible REST resources registration: A plugin which provides no Root Resource can still provide JAX-RS Provider classes.
  • More efficient aggregation update logic and idempotent operations.
  • 3 new core events: PreUpdateAssociation, PostUpdateAssociation, IntroduceAssociationType.
  • The "association" part of a RelatedTopic is serialized.
  • Client-side improvements:
  • Client-side load mechanism for auxiliary scripts: Scripts located in script/helper/ are loaded synchronously before the plugin is loaded. This allows e.g. renderers to share a common base class.
  • New client-side event option_topics allows filtering the selection lists. Applies to both, combo boxes and checkbox lists.
  • Webclient API: The Topic's and Association's composite property contains true Topic objects (instead of plain JavaScript objects) and thus provides access to the client-side Topic API.

New in DeepaMehta 4.0.12 (Sep 20, 2012)

  • NEW FEATURES:
  • Access Control Foundation (#262):
  • Each topic, association, and type is attached with a Access Control List. There are 2 operations: WRITE, CREATE. There are 5 user roles: CREATOR, OWNER, MEMBER, USER, EVERYONE.
  • Scenario 1: Publishing fully interactive read-only topicmaps (#269).
  • Scenario 2: Fully closed workgroup installations [a661efb0].
  • Backend Security (#293):
  • Global request filter [a0b48d3a].
  • Global subnet filter [aef56ac8].
  • HTTPS support (#295).
  • Shared File Repository (#291):
  • File Upload (#289) [3e6c020c].
  • Create folders (#292) [264c83a7].
  • IMPROVEMENTS:
  • The detail panel lists the topics associated with the selected association (#306).
  • Modelers can utilize a Checkbox Renderer for multiple selection (#270) [6c4d87ad].
  • Launching and reloading the Webclient is speeded up (#286).
  • BUG FIXES:
  • For plugin developers: Hot Deployment works as expected. When a plugin is re-compiled the OSGi runtime shuts it (and only it!) down and redeploys it automatically. All dependencies to other plugins are handled by the framework (#272, #274).
  • Pressing the Return key inside a (multi-line) text area, e.g. the CKEditor's source view, does not trigger the OK button (#206, #288).
  • The default Topic Renderer works with hidden many composite child topics (#283).
  • PLUGIN DEVELOPMENT FRAMEWORK:
  • More Convention Over Configuration:
  • A plugin's REST resources and (JAX-RS) Provider classes are registered automatically. Plugins must no longer provide (JAX-RS) Application classes nor do manual configuration (#272) [a39e39c1].
  • All (JAX-RS) Provider classes are available to all plugins automatically [44d49e12].
  • A plugin's client-side main file is picked up automatically (#276) [b30004d6].
  • A plugin's custom renderers are picked up automatically (#284) [19aca819].
  • A plugin's CSS stylesheets are picked up automatically (#285) [2bee421c].
  • Plugin developers must no longer care about firing PRE_SEND (formerly POST_FETCH) events (#297, #268).
  • A plugin's client-side part is no longer required to contain a main file (plugin.js). This is perfect for plugins whose only purpose is to provide custom renderers [3a4a0cbe].
  • Plugin infrastructure:
  • A plugin can publish a directory of the server's file system to the web (#292) [dea0910b].
  • A plugin can register a (Servlet API) filter (#293) [520c95c0].
  • A plugin's client-side part is namespaced per URI for friendly co-existence (#275) [082a4651][faf8d006].
  • Custom renderer implementations (page renderers, simple renderers, multi renderers) are namespaced per URI for friendly co-existence (#282) [9bb0c6a7][4aab34b1].
  • A plugin can register listeners for 4 new Core Events: PRE_CREATE_ASSOCIATION, POST_CREATE_ASSOCIATION, PRE_SEND_ASSOCIATION [98fb628d], INITIALIZE_PLUGIN [435f4285].
  • A plugin can operate on the logged in user's HTTP session (#293) [faa7485e].
  • Renderer Framework:
  • New renderer type: Multi Renderer. A plugin can provide custom renderers for multi-value topics (in conjunction with cardinality "Many") (#270) [6c4d87ad][7fe0a806].
  • Topicmap renderers have a server-side part as well (#294).
  • Core consolidation and optimization:
  • The core service is now able to process update requests where aggreagted composite child topics are involved (#30, #267).
  • For handling core events plugins implement listener interfaces instead of overriding methods. A plugin's listeners are registered automatically. The core delivers events to the registered listeners instead of iterating over all plugins. This is the more efficient approach (#261) [b59fff18].
  • The application layer is separated from the network layer. This avoids high-rate firing of unnecessary core events (#268).
  • Core is modularized and its API is cleaned up (#281).
  • Miscellaneous:
  • The Proxy plugin is dropped. Its features are transfered to the Files plugin (#292).
  • The Facets plugin is included to the DeepaMehta Standard Distribution (required by the Access Control and Workspaces plugins).
  • The Javadoc Maven plugin is configured to generate cross-referenced API Docs with inlined class hierarchy diagrams [5d6b13bc].
  • A lot of API changes and extensions in various plugins, e.g. the Facets API supports multi-value facets.
  • Updated jQuery 1.7 -> 1.7.2 and jQuery UI 1.8.16 -> 1.8.21

New in DeepaMehta 4.0.11 (Jul 5, 2012)

  • Improvements:
  • Implicit Saving. The user must no longer care about saving. DM ensures nothing is lost, e.g. when the user selects another topic while being in edit mode. The "Save" and "Cancel" buttons are replaced by an "OK" button. The "OK" button just allows the user to say "I'm done with editing". There is no need to press it. (#243).
  • The detail panel's type editor is now fully functional. Select a type and press "Edit". You can change the Association type (Composition or Aggregation) and Cardinality (#77).
  • Consolidated data model: the "many" cardinality is now operational. For "many" the detail panel's form generator automatically provide the user with "Add another ..." and "Remove" buttons. Thus, its easy to add e.g. another phone number or email address to a Person topic (#76).
  • Nested detail panel rendering: The detail panel visualizes the composite structure as nested boxes, filled with a distinct color for each nesting-level. This is useful in particular with cardinality "many" (#104).
  • Bug Fixes:
  • Links in the detail panel's Associations list are truncated (#247).
  • Invalid association definitions doesn't prevent the Webclient from starting (#253).
  • Plugin development framework:
  • Webclient: revised FieldRenderer? and PageRenderer? APIs make the plugin code more clean [ebcbb429][7e5cdfd0][d0a960cc][d3f656e2].
  • Core: An ObjectFactory? supports the development of system-near plugins, like e.g. the Type Editor [c57ca5fb][c0034f0c][2b77e475].
  • The core service accepts update requests in 2 formats: the canonic format and a simplified format. The former contains full topic models and is required for cardinality "many" associations. The latter contains just the topic values and is sufficient for cardinality "one" associations. Within one request both formats can be mixed (#237).
  • The updateTopicType() core service call returns a set of directives. Thus, a client is provieded with detailed hints about how to keep the GUI in-sync [377ed738].
  • New directive DELETE_TOPIC_TYPE [37c66c51].
  • Compatibility with 3 updated plugins (optional install):
  • DM4 Kiezatlas 2.0.1: a geographical content management system.
  • DM4 Geomaps 0.3: displays geo-related topics on a geographical map.
  • DM4 Facets 0.3: introduces multi-typing to the DeepaMehta data model.

New in DeepaMehta 2.0 Beta 8 (Jun 16, 2009)

  • Remarkably simplified set up
  • Extended team functions
  • New application: shared calendars
  • Extended email application
  • Usability: easier navigation in search results
  • For developers: convenient build and configuration management / more flexible HTML generator