initial public commit

This commit is contained in:
2021-09-06 17:46:59 +03:00
commit b744b08829
824 changed files with 91593 additions and 0 deletions

View File

@ -0,0 +1,50 @@
/*-
* ~~~~~~licensing~~~~~~
* connector-manager
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ~~~~~~/licensing~~~~~~
*/
package ru.entaxy.esb.system.management.connector.manager;
import ru.entaxy.esb.system.connector.entity.Connector;
import ru.entaxy.esb.system.core.template.Template;
import ru.entaxy.esb.system.management.bundle.jpa.dto.BundleDto;
import ru.entaxy.esb.system.management.connector.manager.dto.ConnectorDto;
import java.util.List;
public interface ConnectorManager {
BundleDto installConnector(ConnectorDto connectorDto) throws Exception;
BundleDto startConnector(ConnectorDto connectorDto) throws Exception;
BundleDto stopConnector(ConnectorDto connectorDto) throws Exception;
BundleDto stopConnector(Connector connector) throws Exception;
BundleDto uninstallConnector(ConnectorDto connectorDto) throws Exception;
BundleDto uninstallConnector(Connector connector) throws Exception;
List<ConnectorDto> getListConnector();
List<Template> getTemplates();
Template getTemplate(String templateName);
void restore() throws Exception;
}

View File

@ -0,0 +1,211 @@
/*-
* ~~~~~~licensing~~~~~~
* connector-manager
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ~~~~~~/licensing~~~~~~
*/
package ru.entaxy.esb.system.management.connector.manager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import ru.entaxy.esb.system.common.exception.TemplateNotFound;
import ru.entaxy.esb.system.connector.entity.Connector;
import ru.entaxy.esb.system.connector.impl.ConnectorService;
import ru.entaxy.esb.system.core.template.Template;
import ru.entaxy.esb.system.core.template.TemplateCollector;
import ru.entaxy.esb.system.jpa.SystemService;
import ru.entaxy.esb.system.jpa.entity.System;
import ru.entaxy.esb.system.management.bundle.jpa.dto.BundleDto;
import ru.entaxy.esb.system.management.bundle.jpa.dto.BundleStatus;
import ru.entaxy.esb.system.management.bundle.manager.BundleManager;
import ru.entaxy.esb.system.management.connector.manager.dto.ConnectorDto;
import ru.entaxy.esb.system.management.connector.manager.mapper.ConnectorMapper;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ConnectorManagerImpl implements ConnectorManager {
private static final Log LOG = LogFactory.getLog(ConnectorManagerImpl.class);
private static final String CONNECTOR = "connector";
private boolean isRestoreFromDB;
private BundleManager bundleManager;
private TemplateCollector templateCollector;
private SystemService systemService;
private ConnectorService connectorService;
private ConnectorMapper connectorMapper;
@Override
public BundleDto installConnector(ConnectorDto connectorDto)
throws Exception {
URL templateUrl = getTemplateLocation(connectorDto.getTemplateName());
System system = systemService.getByUuid(connectorDto.getSystemUuid());
Connector connector = connectorService.addConnector(system, connectorMapper.toConnectorEntity(connectorDto));
Template template = getTemplate(connectorDto.getTemplateName());
BundleDto bundle;
try {
bundle = bundleManager.installAndStartBundle(system.getName(), template.getTemplateName(), template.getTemplateFileName(),
CONNECTOR, String.valueOf(connector.getVersion()), templateUrl,
mergeParams(connectorDto.getTemplateName(), connectorDto.getConnectorParams()));
connectorService.setBundleEntity(connector, connectorMapper.toBundleEntity(bundle));
} catch (Exception ex) {
connectorService.removeConnector(connector);
throw ex;
}
return bundle;
}
@Override
public BundleDto startConnector(ConnectorDto connectorDto) throws Exception {
Connector connector = connectorService.getConnectorByName(connectorDto.getSystemUuid(), connectorDto.getTemplateName());
BundleDto bundle = bundleManager.startBundle(connectorMapper.toBundleDto(connector.getBundleEntity()));
connectorService.setBundleEntity(connector, connectorMapper.toBundleEntity(bundle));
return bundle;
}
@Override
public BundleDto stopConnector(ConnectorDto connectorDto) throws Exception {
Connector connector = connectorService.getConnectorByName(connectorDto.getSystemUuid(), connectorDto.getTemplateName());
BundleDto bundle = bundleManager.stopBundle(connectorMapper.toBundleDto(connector.getBundleEntity()));
connectorService.setBundleEntity(connector, connectorMapper.toBundleEntity(bundle));
return bundle;
}
@Override
public BundleDto stopConnector(Connector connector) throws Exception {
BundleDto bundle = bundleManager.stopBundle(connectorMapper.toBundleDto(connector.getBundleEntity()));
connectorService.setBundleEntity(connector, connectorMapper.toBundleEntity(bundle));
return bundle;
}
@Override
public BundleDto uninstallConnector(ConnectorDto connectorDto) throws Exception {
Connector connector = connectorService.getConnectorByName(connectorDto.getSystemUuid(), connectorDto.getTemplateName());
bundleManager.uninstallBundleByName(connector.getName(), CONNECTOR, String.valueOf(connector.getVersion()));
connectorService.removeConnector(connector);
return new BundleDto(connector.getName(), BundleStatus.UNINSTALL);
}
@Override
public BundleDto uninstallConnector(Connector connector) throws Exception {
bundleManager.uninstallBundleByName(connector.getName(), CONNECTOR, String.valueOf(connector.getVersion()));
return new BundleDto(connector.getName(), BundleStatus.UNINSTALL);
}
@Override
public List<ConnectorDto> getListConnector() {
return connectorMapper.toConnectorDtos(connectorService.getListConnector());
}
@Override
public List<Template> getTemplates() {
List<Template> templateList = new ArrayList<>();
for (String referenceName : templateCollector.getReferenceNames()) {
templateList.add(templateCollector.getReference(referenceName));
}
return templateList;
}
@Override
public Template getTemplate(String templateName) {
return templateCollector.getReference(templateName);
}
private Map<String, String> mergeParams(String templateName, Map<String, String> params) {
if (params == null) {
params = new HashMap<>();
}
if (templateCollector.getReference(templateName).getParams() == null) {
return params;
}
for (Map.Entry<String, String> entry : templateCollector.getReference(templateName).getParams().entrySet()) {
if (!params.containsKey(entry.getKey())) {
params.put(entry.getKey(), entry.getValue());
}
}
return params;
}
private URL getTemplateLocation(String templateName) throws TemplateNotFound {
try {
return templateCollector.getReference(templateName).getTemplateLocation();
} catch (NullPointerException e) {
throw new TemplateNotFound("Template " + templateName + " not found", e);
}
}
@Override
public void restore() throws Exception {
if (!isRestoreFromDB)
return;
for (Connector connector : connectorService.getListConnector()) {
try {
LOG.info("Restore connector " + connector.getName());
bundleManager.restore(connectorMapper.toBundleDto(connector.getBundleEntity()));
} catch (IOException e) {
LOG.warn("Recreate connector " + connector.getName());
restoreConnector(connector);
}
}
}
private void restoreConnector(Connector connector) throws Exception {
URL templateUrl = getTemplateLocation(connector.getTemplateName());
System system = systemService.get(connector.getSystemId());
Template template = getTemplate(connector.getTemplateName());
BundleDto bundle = bundleManager.installBundle(system.getName(), template.getTemplateName(), template.getTemplateFileName(),
CONNECTOR, String.valueOf(connector.getVersion()), templateUrl,
mergeParams(connector.getTemplateName(), connectorMapper.toConnectorParams(connector.getConnectorParams())));
bundle.setStatus(connectorMapper.toBundleDto(connector.getBundleEntity()).getStatus());
bundleManager.checkCurrentBundleStatus(connectorMapper.toBundleDto(connector.getBundleEntity()));
connectorService.setBundleEntity(connector, connectorMapper.toBundleEntity(bundle));
}
public void setBundleManager(BundleManager bundleManager) {
this.bundleManager = bundleManager;
}
public void setTemplateCollector(TemplateCollector templateCollector) {
this.templateCollector = templateCollector;
}
public void setSystemService(SystemService systemService) {
this.systemService = systemService;
}
public void setConnectorService(ConnectorService connectorService) {
this.connectorService = connectorService;
}
public void setConnectorMapper(ConnectorMapper connectorMapper) {
this.connectorMapper = connectorMapper;
}
public void setIsRestoreFromDB(String isRestoreFromDB) {
this.isRestoreFromDB = Boolean.parseBoolean(isRestoreFromDB);
}
}

View File

@ -0,0 +1,98 @@
/*-
* ~~~~~~licensing~~~~~~
* connector-manager
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ~~~~~~/licensing~~~~~~
*/
package ru.entaxy.esb.system.management.connector.manager.dto;
import java.util.Map;
public class ConnectorDto {
private String systemUuid;
private String name;
private String templateName;
private String type;
private String status;
private String createdBy;
private String createdDate;
private Map<String, String> connectorParams;
public String getSystemUuid() {
return systemUuid;
}
public void setSystemUuid(String systemUuid) {
this.systemUuid = systemUuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getCreatedDate() {
return createdDate;
}
public void setCreatedDate(String createdDate) {
this.createdDate = createdDate;
}
public Map<String, String> getConnectorParams() {
return connectorParams;
}
public void setConnectorParams(Map<String, String> connectorParams) {
this.connectorParams = connectorParams;
}
}

View File

@ -0,0 +1,89 @@
/*-
* ~~~~~~licensing~~~~~~
* connector-manager
* ==========
* Copyright (C) 2020 - 2021 EmDev LLC
* ==========
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ~~~~~~/licensing~~~~~~
*/
package ru.entaxy.esb.system.management.connector.manager.mapper;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import ru.entaxy.esb.system.connector.entity.Connector;
import ru.entaxy.esb.system.connector.entity.ConnectorParam;
import ru.entaxy.esb.system.management.bundle.jpa.dto.BundleDto;
import ru.entaxy.esb.system.management.bundle.jpa.entity.BundleEntity;
import ru.entaxy.esb.system.management.connector.manager.dto.ConnectorDto;
import java.text.SimpleDateFormat;
import java.util.*;
@Mapper(componentModel = "spring")
public interface ConnectorMapper {
@Mappings({
@Mapping(target = "createDate", expression = "java(new java.util.Date())"),
@Mapping(target = "version", source = "name", qualifiedByName = "generateVersion"),
@Mapping(source = "connectorParams", target = "connectorParams", qualifiedByName = "toConnectorParams")
})
Connector toConnectorEntity(ConnectorDto connectorDto);
@Mappings({
@Mapping(source = "bundleEntity.status", target = "status"),
@Mapping(source = "connectorParams", target = "connectorParams", qualifiedByName = "toConnectorParams")
})
ConnectorDto toConnectorDto(Connector connector);
List<ConnectorDto> toConnectorDtos(List<Connector> connectorList);
@Mappings({
@Mapping(source = "bundleName", target = "name"),
@Mapping(source = "bundleUrl", target = "url"),
})
BundleEntity toBundleEntity(BundleDto bundle);
@Mappings({
@Mapping(target = "bundleName", source = "name"),
@Mapping(target = "bundleUrl", source = "url"),
})
BundleDto toBundleDto(BundleEntity bundle);
default List<ConnectorParam> toConnectorParams(Map<String, String> connectorParams) {
List<ConnectorParam> connectorParamList = new ArrayList<>();
for (Map.Entry<String, String> entry : connectorParams.entrySet()) {
ConnectorParam connectorParam = new ConnectorParam();
connectorParam.setName(entry.getKey());
connectorParam.setValue(entry.getValue());
connectorParamList.add(connectorParam);
}
return connectorParamList;
}
default Map<String, String> toConnectorParams(List<ConnectorParam> connectorParams) {
Map<String, String> connectorParamMap = new HashMap<>();
for (ConnectorParam connectorParam : connectorParams) {
connectorParamMap.put(connectorParam.getName(), connectorParam.getValue());
}
return connectorParamMap;
}
@Named("generateVersion")
default String generateVersion(String version) {
SimpleDateFormat format = new SimpleDateFormat("1.yyMMdd.HHmmss");
return format.format(new Date());
}
}

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~~~~~~licensing~~~~~~
connector-manager
==========
Copyright (C) 2020 - 2021 EmDev LLC
==========
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
~~~~~~/licensing~~~~~~
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<cm:property-placeholder persistent-id="ru.entaxy.esb" update-strategy="reload">
<cm:default-properties>
<cm:property name="is.restore.from.db" value="true"/>
</cm:default-properties>
</cm:property-placeholder>
<bean id="connectorManager" class="ru.entaxy.esb.system.management.connector.manager.ConnectorManagerImpl">
<property name="isRestoreFromDB" value="${is.restore.from.db}"/>
<property name="systemService" ref="systemService"/>
<property name="connectorService" ref="connectorService"/>
<property name="bundleManager" ref="bundleManager"/>
<property name="connectorMapper" ref="connectorMapper"/>
<property name="templateCollector" ref="templateCollector"/>
</bean>
<service ref="connectorManager" interface="ru.entaxy.esb.system.management.connector.manager.ConnectorManager"/>
<bean id="connectorMapper" class="ru.entaxy.esb.system.management.connector.manager.mapper.ConnectorMapperImpl"/>
<reference id="systemService"
interface="ru.entaxy.esb.system.jpa.SystemService"
timeout="30000"
availability="mandatory"/>
<reference id="connectorService"
interface="ru.entaxy.esb.system.connector.impl.ConnectorService"
timeout="30000"
availability="mandatory"/>
<reference id="bundleManager"
interface="ru.entaxy.esb.system.management.bundle.manager.BundleManager"
timeout="30000"
availability="mandatory"/>
<reference-list id="templates"
interface="ru.entaxy.esb.system.core.template.Template"
availability="optional">
<reference-listener ref="templateCollector" bind-method="register" unbind-method="unregister"/>
</reference-list>
<bean id="templateCollector" class="ru.entaxy.esb.system.core.template.TemplateCollector"
activation="eager"/>
<camelContext id="connector-manager-context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="restore_connector">
<from uri="timer:restore?repeatCount=1&amp;delay=60000"/>
<to uri="bean:connectorManager?method=restore"/>
</route>
</camelContext>
</blueprint>