@Override public void synchronizeWithDatabase(ConnectorManager connectorManager) { ConnectorTypeServices connectorTypeServices = ConstellioSpringUtils.getConnectorTypeServices(); // Add missing connector types List<String> connectorTypeNames = getConnectorTypes(connectorManager); for (String connectorTypeName : connectorTypeNames) { ConnectorType connectorType = connectorTypeServices.get(connectorTypeName); if (connectorType == null) { connectorType = new ConnectorType(); connectorType.setName(connectorTypeName); File connectorsDir = ConstellioSpringUtils.getGoogleConnectorsDir(); File connectorTypeDir = new File(connectorsDir, connectorType.getName()); File iconFile = new File(connectorTypeDir, "icon.gif"); if (iconFile.exists()) { try { byte[] iconBytes = FileUtils.readFileToByteArray(iconFile); connectorType.setIconFileContent(iconBytes); } catch (IOException e) { throw new RuntimeException(e); } } File connectorTypeMetaXmlFile = new File(connectorTypeDir, "connectorTypeMeta.xml"); if (connectorTypeMetaXmlFile.exists()) { String path = connectorTypeMetaXmlFile.toURI().toString(); BeanFactory connectorTypeMeta = new FileSystemXmlApplicationContext(path); if (connectorTypeMeta.containsBean("searchResultPanelClassName")) { String searchResultPanelClassName = (String) connectorTypeMeta.getBean("searchResultPanelClassName"); connectorType.setSearchResultPanelClassName(searchResultPanelClassName); } if (connectorTypeMeta.containsBean("initInstanceHandlerClassName")) { String initInstancePluginClassName = (String) connectorTypeMeta.getBean("initInstanceHandlerClassName"); connectorType.setInitInstanceHandlerClassName(initInstancePluginClassName); } } connectorType.setConnectorManager(connectorManager); connectorTypeServices.makePersistent(connectorType); } } // Remove deleted connector types List<ConnectorType> dbConnectorType = connectorTypeServices.list(); for (ConnectorType connectorType : dbConnectorType) { if (!connectorTypeNames.contains(connectorType.getName())) { connectorTypeServices.makeTransient(connectorType); } } ConnectorInstanceServices connectorInstanceServices = ConstellioSpringUtils.getConnectorInstanceServices(); BackupServices backupServices = ConstellioSpringUtils.getBackupServices(); List<ConnectorInstance> connectorInstances = connectorInstanceServices.list(); for (ConnectorInstance connectorInstance : connectorInstances) { String connectorName = connectorInstance.getName(); String connectorTypeName = connectorInstance.getConnectorType().getName(); boolean existingConnector = isExistingConnector(connectorManager, connectorName); boolean hasConfigBackup = backupServices.hasConfigBackup(connectorName, connectorTypeName); if (!existingConnector && hasConfigBackup) { backupServices.restoreConfigBackup(connectorName, connectorTypeName); } else if (existingConnector && !hasConfigBackup) { backupServices.backupConfig(connectorName, connectorTypeName); } } }