Skip to content

Development

Josef Prinz edited this page Sep 4, 2024 · 6 revisions

Development Insights

Code Base

AutomationML Editor is a C# .NET Desktop WPF Application compiled for the .NET8 desktop runtime.

UI Design

  • The AutomationML Editor uses MahApps.Metro. MapApps.Metro is a framework that can be used to develop a Metro or Modern user interface for WPF applications with little effort; MIT License.
  • Most of UI Icons are provided by MahApps.Metro.IconPacks. This IconPacks library contains controls, markup extensions and converters to use icons in a simple way; MIT License.
  • The Ultimate UI for WPF product is used for the basic layout of the editor and other UI elements. The main component of this library is the WPF Docking Manager for window management. For software development of the AutomationML editor, a valid development license has to be purchased.
  • The WPF-based text editor component Avalon Edit used in SharpDevelop is used by the editor and the XML viewer PlugIn to visualize XML content; MIT License.

Model Building and Retrieval

  • The used AutomationML signature service is implemented with BouncyCastle.NET. BouncyCastle.NET is a popular cryptography library for .NET; MIT License.
  • The html-agility-pack is used to parse the AutomationML download pages. This packase is a .NET code library that allows you to parse "out of the web" HTML files. The parser is very tolerant with "real world" malformed HTML. The object model is very similar to what proposes System.Xml, but for HTML documents (or streams); MIT License.
  • The WebDAV-Client is used to access shared files on a remote location. This package is an easy-to-use async WebDAV client for .NET, .NETStandard, Blazor-WASM and Portable based on https://github.com/skazantsev/WebDavClient; MIT License.
  • Access to the AutomationML GitHub repository is provided by octokit. This packages is an async-based GitHub API client library for .NET and .NET Core; MIT License.

Related Packages

All listed AutomationML packages are licensed with MIT License.

  • The package Aml.Engine is used. Aml.Engine provides core functions for editing AutomationML documents.
  • AutomationML Standard Libraries, which are included when a new document is created, are provided by Aml.Engine.Resources.
  • The Aml.Engine.Services package is an extension package of Aml.Engine. The services for the transformation of CAEX versions, validation of AutomationML documents, split and merge applications and undo management or unique naming of objects are used by the editor.
  • The package Aml.Enginge.Services.Signing is used to sign AutomationML libraries.
  • The package Aml.Engine.Services.LibraryService is used to provide server based access to external AutomationML documents.
  • To support plugin embedding in the AutomationML Editor the packages Aml.Editor.API and Aml.Editor.Plugin are used.
  • Aml.Editor.IPC is a package, through which the editor can be used as a client of another application on a local computer. Communication with the editor takes place via an inter-process communication interface implemented with an anonymous pipe. Anonymous pipes provide interprocess communication on a local computer. They offer less functionality than named pipes, but also require less overhead. You cannot use anonymous pipes for communication over a network.
  • The editor provides some of the used UI elements also for plugin developers. The Aml.Toolkit provides the AML Treeview WPF control. The used Aml.Skins provides icons as the CAEX Icons as well as the colors and styles for the editor's light and dark skins.

Other AutomationML development resources

  • If you want to learn more about using the Aml.Engine in your own application the AmlEngine2.1 GitHub project offers some sample applications on different aspects of AutomationML. Sample source code a Wiki and an API documentation is provided.

  • If you want to implement export or import interfaces, you can find an executable tutorial under AMLImportExport, which introduces you to different design alternatives as well as the complete source code.

  • To support the PlugIn development the project AMLEditorPlugin offers a detailed manual and some example PlugIns. A Sandbox project allows plugin testing in a dummy editor environment.