IStore
PIComposer APIPIComposer API

IStore abstract#

abstract class IStore

Central interface for managing the PIComposer database store.

This interface represents the singleton store that serves as the root container for all projects within a PIComposer application. There is exactly one store instance per application, providing centralized management of:

  • Project creation, retrieval, and deletion
  • Store initialization and configuration
  • License management and validation
  • Template management
  • Backup and restore operations

The store acts as the entry point for all database operations and provides the foundation for project management functionality.

Constructors#

IStore()#

IStore()

Properties#

hashCode no setter inherited#

int get hashCode

The hash code for this object.

A hash code is a single integer which represents the state of the object that affects operator == comparisons.

All objects have hash codes. The default hash code implemented by Object represents only the identity of the object, the same way as the default operator == implementation only considers objects equal if they are identical (see identityHashCode).

If operator == is overridden to use the object state instead, the hash code must also be changed to represent that state, otherwise the object cannot be used in hash based data structures like the default Set and Map implementations.

Hash codes must be the same for objects that are equal to each other according to operator ==. The hash code of an object should only change if the object changes in a way that affects equality. There are no further requirements for the hash codes. They need not be consistent between executions of the same program and there are no distribution guarantees.

Objects that are not equal are allowed to have the same hash code. It is even technically allowed that all instances have the same hash code, but if clashes happen too often, it may reduce the efficiency of hash-based data structures like HashSet or HashMap.

If a subclass overrides hashCode, it should override the operator == operator as well to maintain consistency.

Inherited from Object.

Implementation
external int get hashCode;

runtimeType no setter inherited#

Type get runtimeType

A representation of the runtime type of the object.

Inherited from Object.

Implementation
external Type get runtimeType;

Methods#

createProject()#

IProject createProject(ProjectInfo info)

Creates a new project with the specified information.

Parameters:

  • info: ProjectInfo object containing project metadata and configuration

Returns the newly created IProject instance ready for use.

The project is persisted to the store and can be retrieved immediately after creation.

Implementation
IProject createProject(ProjectInfo info);

deleteProject()#

bool deleteProject(String id)

Deletes a project by its unique identifier.

Parameters:

  • id: The unique identifier of the project to delete

Returns true if the project was successfully deleted, or false if:

  • The project ID is invalid or doesn't exist
  • Database operations fail

⚠️ Warning: This operation is irreversible and permanently removes all project data, including models, backups, and associated files.

Implementation
bool deleteProject(String id);

deleteProjects()#

int deleteProjects()

Deletes all projects from the store.

Returns the number of projects successfully deleted.

⚠️ Warning: This operation is irreversible and permanently removes all project data from the store. Use with extreme caution.

Implementation
int deleteProjects();

getLocation()#

String getLocation()

Gets the file system location of the store database.

Returns the absolute path to the directory containing the store's database files and project data.

Implementation
String getLocation();

getProject()#

IProject getProject(String id, [ bool initialize = false])

Retrieves a project by its unique identifier.

Parameters:

  • id: The unique identifier of the project to retrieve
  • initialize: When true, loads and initializes the project database; when false, returns the project without loading its database content

Returns the requested IProject instance, or returns a null project if:

  • The project ID is invalid or doesn't exist
Implementation
IProject getProject(String id, [bool initialize = false]);

getProjectCount()#

int getProjectCount()

Gets the total number of projects stored in the database.

Returns the count of all projects, including those that may not be currently loaded or initialized.

Implementation
int getProjectCount();

getProjectInfo()#

ProjectInfo getProjectInfo(String id)

Retrieves project information without loading the project database.

Parameters:

  • id: The unique identifier of the project

Returns the ProjectInfo object containing project metadata, or a null object if the project doesn't exist.

This method provides lightweight access to project metadata without the overhead of database loading and initialization.

Implementation
ProjectInfo getProjectInfo(String id);

getTemplateManager()#

ITemplateManager getTemplateManager()

Gets the template manager for accessing and managing project templates.

Returns the ITemplateManager instance that provides template management functionality for the store.

Implementation
ITemplateManager getTemplateManager();

getUserName()#

String getUserName()
Implementation
String getUserName();

initialize()#

FutureOr<bool> initialize(dynamic parameter)

Initializes the store with the specified configuration.

Parameters:

  • parameter: Configuration object specific to the store implementation. For RocksDB-based stores, this should be a JSON object with: - 'lib_path': Path to the picomposer_api.dll file
    • 'db_location': File system path for the store database folder

Returns true if initialization was successful, or false if:

  • The configuration is invalid or incomplete
  • Required libraries cannot be loaded
  • Database locations are inaccessible

This method must be called before any other store operations.

Implementation
FutureOr<bool> initialize(dynamic parameter);

isInitialized()#

bool isInitialized()

Checks if the store has been successfully initialized.

Returns true if initialize has been called successfully and the store is ready for operations, or false otherwise.

Most store methods will fail if called before successful initialization.

Implementation
bool isInitialized();

noSuchMethod() inherited#

dynamic noSuchMethod(Invocation invocation)

Invoked when a nonexistent method or property is accessed.

A dynamic member invocation can attempt to call a member which doesn't exist on the receiving object. Example:

dynamic object = 1;
object.add(42); // Statically allowed, run-time error

This invalid code will invoke the noSuchMethod method of the integer 1 with an Invocation representing the .add(42) call and arguments (which then throws).

Classes can override noSuchMethod to provide custom behavior for such invalid dynamic invocations.

A class with a non-default noSuchMethod invocation can also omit implementations for members of its interface. Example:

class MockList<T> implements List<T> {
  noSuchMethod(Invocation invocation) {
    log(invocation);
    super.noSuchMethod(invocation); // Will throw.
  }
}
void main() {
  MockList().add(42);
}

This code has no compile-time warnings or errors even though the MockList class has no concrete implementation of any of the List interface methods. Calls to List methods are forwarded to noSuchMethod, so this code will log an invocation similar to Invocation.method(#add, [42]) and then throw.

If a value is returned from noSuchMethod, it becomes the result of the original invocation. If the value is not of a type that can be returned by the original invocation, a type error occurs at the invocation.

The default behavior is to throw a NoSuchMethodError.

Inherited from Object.

Implementation
@pragma("vm:entry-point")
@pragma("wasm:entry-point")
external dynamic noSuchMethod(Invocation invocation);

projects()#

List<ProjectInfo> projects()

Retrieves information for all projects in the store.

Returns a list of ProjectInfo objects containing metadata for each project, regardless of whether they are currently loaded or not.

This method provides a lightweight overview of all available projects without loading their full database content.

Implementation
List<ProjectInfo> projects();

restoreProjectFromBackup()#

bool restoreProjectFromBackup(String projectId, int backupId)

Restores a project from a specific backup.

Parameters:

  • projectId: The unique identifier of the project to restore
  • backupId: The identifier of the backup to restore from

Returns true if the restore operation was successful, or false if:

  • The project or backup doesn't exist
  • The backup is corrupted or incompatible
  • Database operations fail

⚠️ Note: This method cannot restore projects that have been deleted. It only works with existing projects that have available backups.

Implementation
bool restoreProjectFromBackup(String projectId, int backupId);

toString() inherited#

String toString()

A string representation of this object.

Some classes have a default textual representation, often paired with a static parse function (like int.parse). These classes will provide the textual representation as their string representation.

Other classes have no meaningful textual representation that a program will care about. Such classes will typically override toString to provide useful information when inspecting the object, mainly for debugging or logging.

Inherited from Object.

Implementation
external String toString();

uninitialize()#

FutureOr<void> uninitialize()

Shuts down the store and releases all resources.

Performs cleanup operations including:

  • Closing all database connections
  • Unloading all projects
  • Releasing memory resources
  • Ensuring data persistence

This method should be called during application shutdown to ensure proper cleanup and data integrity.

Implementation
FutureOr<void> uninitialize();

Operators#

operator ==() inherited#

bool operator ==(Object other)

The equality operator.

The default behavior for all Objects is to return true if and only if this object and other are the same object.

Override this method to specify a different equality relation on a class. The overriding method must still be an equivalence relation. That is, it must be:

  • Total: It must return a boolean for all arguments. It should never throw.

  • Reflexive: For all objects o, o == o must be true.

  • Symmetric: For all objects o1 and o2, o1 == o2 and o2 == o1 must either both be true, or both be false.

  • Transitive: For all objects o1, o2, and o3, if o1 == o2 and o2 == o3 are true, then o1 == o3 must be true.

The method should also be consistent over time, so whether two objects are equal should only change if at least one of the objects was modified.

If a subclass overrides the equality operator, it should override the hashCode method as well to maintain consistency.

Inherited from Object.

Implementation
external bool operator ==(Object other);