// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package com.amalto.workbench.utils; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.eclipse.core.runtime.Platform; import org.talend.core.GlobalServiceRegister; import com.amalto.workbench.service.ILegendServerDefService; public class MDMServerHelper { public static final String ROOT = "MDMServer"; //$NON-NLS-1$ public static final String PROPERTIES = "properties"; //$NON-NLS-1$ public static final String NAME = "name"; //$NON-NLS-1$ public static final String URL = "url"; //$NON-NLS-1$ public static final String USER = "user"; //$NON-NLS-1$ public static final String PASSWORD = "password"; //$NON-NLS-1$ public static final String workbenchConfigFile = Platform.getInstanceLocation().getURL().getPath() + "/mdm_workbench_config.xml"; //$NON-NLS-1$ private static final Log log = LogFactory.getLog(MDMServerHelper.class); public static List<MDMServerDef> getServers() { ILegendServerDefService service = (ILegendServerDefService) GlobalServiceRegister.getDefault().getService( ILegendServerDefService.class); if (service != null) { return service.getLegendServerDefs(); } return Collections.EMPTY_LIST; } public static MDMServerDef getServer(String name) { Element rootElement = getRootElement(); if (rootElement == null) { return null; } Element serverElement = getServerElement(rootElement, name); if (serverElement != null) { return getServer(serverElement); } return null; } private static MDMServerDef getServer(Element serverElement) { String name = serverElement.element(NAME).getText(); String url = serverElement.element(URL).getText(); String user = serverElement.element(USER).getText(); String password = serverElement.element(PASSWORD).getText(); password = PasswordUtil.decryptPassword(password); MDMServerDef def = MDMServerDef.parse(url, user, password, name); return def; } public static boolean deleteServer(String name) { boolean deleted = false; Element rootElement = getRootElement(); Element serverElement = getServerElement(rootElement, name); if (serverElement != null) { rootElement.remove(serverElement); deleted = saveRootElement(rootElement); } return deleted; } public static boolean saveServer(MDMServerDef serverDef) { Element rootElement = getRootElement(); Element serverElement = getServerElement(rootElement, serverDef.getName()); if (serverElement == null) { addServerElement(rootElement, serverDef); } else { addServerProperties(serverElement, serverDef); } return saveRootElement(rootElement); } public static boolean updateServer(MDMServerDef oldServerDef, MDMServerDef newServerDef) { Element rootElement = getRootElement(); String oldName = oldServerDef.getName(); Element serverElement = null; String newName = newServerDef.getName(); if (oldName.equals(newName)) { serverElement = getServerElement(rootElement, oldName); } else { serverElement = getServerElement(rootElement, oldName); if (serverElement != null) { rootElement.remove(serverElement); } serverElement = getServerElement(rootElement, newName); } if (serverElement == null) { addServerElement(rootElement, newServerDef); } else { addServerProperties(serverElement, newServerDef); } return saveRootElement(rootElement); } private static void addServerElement(Element root, MDMServerDef serverDef) { Element prop = root.addElement(MDMServerHelper.PROPERTIES); addServerProperties(prop, serverDef); Element name = prop.element(MDMServerHelper.NAME); if (name == null) { name = prop.addElement(MDMServerHelper.NAME); } name.setText(serverDef.getName()); } private static void addServerProperties(Element prop, MDMServerDef serverDef) { Element url = prop.element(MDMServerHelper.URL); if (url == null) { url = prop.addElement(MDMServerHelper.URL); } url.setText(serverDef.getUrl()); Element user = prop.element(MDMServerHelper.USER); if (user == null) { user = prop.addElement(MDMServerHelper.USER); } user.setText(serverDef.getUser()); Element password = prop.element(MDMServerHelper.PASSWORD); if (password == null) { password = prop.addElement(MDMServerHelper.PASSWORD); } password.setText(PasswordUtil.encryptPassword(serverDef.getPasswd())); } private static Element getRootElement() { Document logininfoDocument; Element rootElement; if (new File(workbenchConfigFile).exists()) { try { SAXReader reader = new SAXReader(); logininfoDocument = reader.read(new File(workbenchConfigFile)); } catch (DocumentException e) { log.error(e.getMessage(), e); return null; } rootElement = logininfoDocument.getRootElement(); } else { logininfoDocument = DocumentHelper.createDocument(); rootElement = logininfoDocument.addElement(ROOT); } return rootElement; } private static Element getServerElement(Element rootElement, String matchingName) { List<?> properties = rootElement.elements(MDMServerHelper.PROPERTIES); for (Iterator<?> iterator = properties.iterator(); iterator.hasNext();) { Element serverElement = (Element) iterator.next(); Element nameElement = serverElement.element(MDMServerHelper.NAME); if (nameElement != null) { String name = nameElement.getText(); if (matchingName.equals(name)) { return serverElement; } } } return null; } private static boolean saveRootElement(Element rootElement) { try { XMLWriter writer = new XMLWriter(new FileWriter(MDMServerHelper.workbenchConfigFile)); writer.write(rootElement.getDocument()); writer.close(); return true; } catch (IOException e) { log.error(e.getMessage(), e); return false; } } }