### Publish Connector Locally Source: https://github.com/zeenea/public-connector-sdk/blob/main/README.md Command to publish the connector package to the local Maven repository for use in other projects. ```shell ./gradelw publishToMavenLocal ``` -------------------------------- ### Implement the Connector interface Source: https://github.com/zeenea/public-connector-sdk/blob/main/README.md The Connector interface acts as a factory for creating connection instances. Ensure the class is annotated with @Extension for proper discovery. ```java package com.example.connector; import zeenea.connector.Connection; import zeenea.connector.ConnectionConfiguration; import zeenea.connector.Connector; import zeenea.connector.exception.InvalidConfigurationException; @Extension public class ExampleConnector implements Connector { public String getConnectorId() { // Used to select the connector return "example"; } public Connection newConnection(ConnectionConfiguration connectionConfiguration) throws InvalidConfigurationException { // Configuration validation might be performed here // Invalid configuration is best conveyed by throwing an InvalidConfigurationException return connector; } } ``` -------------------------------- ### Define plugin properties Source: https://github.com/zeenea/public-connector-sdk/blob/main/README.md A plugin.properties file is required for PF4J to identify and load the connector plugin. ```properties plugin.id=example-plugin plugin.provider=Example plugin.version=1.0.0 ``` -------------------------------- ### Implement a SynchronizeConnection Source: https://github.com/zeenea/public-connector-sdk/blob/main/README.md Defines a custom connection class by implementing the SynchronizeConnection interface to synchronize items like visualizations and fields. ```java package com.example.connector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import zeenea.connector.Connection; import zeenea.connector.synchronize.SynchronizeConnection; import zeenea.connector.contact.Contact; import zeenea.connector.property.PropertyDefinition; import zeenea.connector.property.StringPropertyDefinition; import zeenea.connector.Item; import zeenea.connector.visualization.Visualization; import zeenea.connector.field.Field; import zeenea.connector.common.ItemIdentifier; import zeenea.connector.common.IdentificationProperty; import zeenea.connector.common.ItemReference; import java.time.Instant; import java.util.*; import java.util.stream.Stream; public class ExampleConnection implements SynchronizeConnection { // slf4j might be used for logging private static final Logger LOGGER = LoggerFactory.getLogger(ExampleConnection.class); private static final StringPropertyDefinition TYPE_METADATA = PropertyDefinition.string("type", "Type of item"); public Set getProperties() { // Value returned here can be dynamic and change over successive calls return new HashSet<>(Collections.singletonList(TYPE_METADATA)); } @Override public Stream synchronize() { return Stream.of( Visualization.builder() .id( ItemIdentifier.of( IdentificationProperty.of("type", "visualization"), IdentificationProperty.of("report_id", "1234"), IdentificationProperty.of("workspace_id", "4321"))) .name("Visualization name") .description("Some description") .properties(PropertiesBuilder.create().put(TYPE_METADATA, "some type").build()) .fields( List.of( Field.builder() .id( ItemIdentifier.of(IdentificationProperty.of("field_key", "dim1"))) .name("dim1") .dataType(DataType.String) .nativeType("string") .description("some field description") .properties( PropertiesBuilder.create().put(TYPE_METADATA, "dimension").build()) .sourceFields(List.of()) .build(), Field.builder() .id( ItemIdentifier.of(IdentificationProperty.of("field_key", "mes1"))) .name("mes1") .dataType(DataType.String) .nativeType("string") .description("some field description") .properties( PropertiesBuilder.create().put(TYPE_METADATA, "measure").build()) .sourceFields( List.of( ItemReference.of( ItemIdentifier.of( IdentificationProperty.of("id", "dataset2"), IdentificationProperty.of("field_key", "mes1")), ConnectionReferenceCode.of("hostname:port/database")))) .build())) .sourceDatasets( List.of( ItemReference.of( ItemIdentifier.of(IdentificationProperty.of("id", "dataset2")), ConnectionReferenceCode.of("hostname:port/database")))) .contactRelations( List.of(Contact.of("test@zeenea.com", "Some name", "0600000000", "Owner"))) .build()); } public void close() { // Resources previously opened can be closed here } } ``` -------------------------------- ### Connector Plugin Structure Source: https://github.com/zeenea/public-connector-sdk/blob/main/README.md Represents the required directory structure for a connector plugin zip archive. ```text plugin.properties (plugin metadata) classes/ ├── (project classes) ├── META-INF/ ├── extensions.idx (list of connector factories) lib/ ├── (jar dependencies) ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.