/**
* <copyright> </copyright>
*
* $Id$
*/
package org.talend.mdm.repository.model.mdmmetadata.impl;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.talend.core.model.metadata.builder.connection.impl.AbstractMetadataObjectImpl;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.model.mdmmetadata.MdmmetadataPackage;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import com.amalto.workbench.utils.PasswordUtil;
/**
* <!-- begin-user-doc --> An implementation of the model object '<em><b>MDM Server Def</b></em>'. <!-- end-user-doc -->
* <p>
* The following features are implemented:
* <ul>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getHost <em>Host</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getPasswd <em>Passwd</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getTempPasswd <em>Temp Passwd</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getPath <em>Path</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getPort <em>Port</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getUrl <em>Url</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getUser <em>User</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#isEnabled <em>Enabled</em>}</li>
* <li>{@link org.talend.mdm.repository.model.mdmmetadata.impl.MDMServerDefImpl#getAlgorithm <em>Algorithm</em>}</li>
* </ul>
* </p>
*
* @generated
*/
public class MDMServerDefImpl extends AbstractMetadataObjectImpl implements MDMServerDef {
private static Logger log = Logger.getLogger(MDMServerDefImpl.class);
private static final String PATTERN_URL = "[http|https]+://(.+):(\\d+)(/.*)"; //$NON-NLS-1$
private static final String FILE_PATTERN_URL = "file:///(\\w+:/)?(\\w+/)*(\\w+\\.xml|\\w+\\.wsdl)"; //$NON-NLS-1$
private static final String HTTP_PREFIX = "http://"; //$NON-NLS-1$
private static final String HTTPS_PREFIX = "https://"; //$NON-NLS-1$
private static final String FILE_PREFIX = "file:///"; //$NON-NLS-1$
/**
* The default value of the '{@link #getHost() <em>Host</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getHost()
* @generated
* @ordered
*/
protected static final String HOST_EDEFAULT = "localhost"; //$NON-NLS-1$
protected static final String NAME_DEFAULT = ""; //$NON-NLS-1$
/**
* The cached value of the '{@link #getHost() <em>Host</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getHost()
* @generated
* @ordered
*/
protected String host = HOST_EDEFAULT;
/**
* The default value of the '{@link #getPasswd() <em>Passwd</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getPasswd()
* @generated NOT
* @ordered
*/
protected static final String PASSWD_EDEFAULT = ""; //$NON-NLS-1$
/**
* The cached value of the '{@link #getPasswd() <em>Passwd</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getPasswd()
* @generated
* @ordered
*/
protected String passwd = PASSWD_EDEFAULT;
/**
* The default value of the '{@link #getTempPasswd() <em>Temp Passwd</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getTempPasswd()
* @generated
* @ordered
*/
protected static final String TEMP_PASSWD_EDEFAULT = null;
/**
* The cached value of the '{@link #getTempPasswd() <em>Temp Passwd</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getTempPasswd()
* @generated
* @ordered
*/
protected String tempPasswd = TEMP_PASSWD_EDEFAULT;
/**
* The default value of the '{@link #getPath() <em>Path</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getPath()
* @generated NOT
* @ordered
*/
protected static final String PATH_EDEFAULT = "/talendmdm/services/soap"; //$NON-NLS-1$
/**
* The cached value of the '{@link #getPath() <em>Path</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getPath()
* @generated
* @ordered
*/
protected String path = PATH_EDEFAULT;
/**
* The default value of the '{@link #getPort() <em>Port</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getPort()
* @generated NOT
* @ordered
*/
protected static final String PORT_EDEFAULT = "8180"; //$NON-NLS-1$
/**
* The cached value of the '{@link #getPort() <em>Port</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getPort()
* @generated
* @ordered
*/
protected String port = PORT_EDEFAULT;
/**
* The default value of the '{@link #getUniverse() <em>Universe</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getUniverse()
* @generated NOT
* @ordered
*/
protected static final String UNIVERSE_EDEFAULT = ""; //$NON-NLS-1$
/**
* The default value of the '{@link #getUrl() <em>Url</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getUrl()
* @generated
* @ordered
*/
protected static final String URL_EDEFAULT = null;
/**
* The cached value of the '{@link #getUrl() <em>Url</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @see #getUrl()
* @generated
* @ordered
*/
protected String url = URL_EDEFAULT;
/**
* The default value of the '{@link #getUser() <em>User</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getUser()
* @generated NOT
* @ordered
*/
protected static final String USER_EDEFAULT = ""; //$NON-NLS-1$
/**
* The cached value of the '{@link #getUser() <em>User</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc
* -->
*
* @see #getUser()
* @generated
* @ordered
*/
protected String user = USER_EDEFAULT;
/**
* The default value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #isEnabled()
* @generated
* @ordered
*/
protected static final boolean ENABLED_EDEFAULT = true;
/**
* The cached value of the '{@link #isEnabled() <em>Enabled</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #isEnabled()
* @generated
* @ordered
*/
protected boolean enabled = ENABLED_EDEFAULT;
/**
* The default value of the '{@link #getAlgorithm() <em>Algorithm</em>}' attribute. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @see #getAlgorithm()
* @generated not
* @ordered
*/
protected static final String ALGORITHM_EDEFAULT = null;
/**
* The cached value of the '{@link #getAlgorithm() <em>Algorithm</em>}' attribute.
* <!-- begin-user-doc --> <!--
* end-user-doc -->
* @see #getAlgorithm()
* @generated
* @ordered
*/
protected String algorithm = ALGORITHM_EDEFAULT;
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
protected MDMServerDefImpl() {
super();
label = NAME_DEFAULT;
name = NAME_DEFAULT;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return MdmmetadataPackage.Literals.MDM_SERVER_DEF;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getHost() {
return host;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setHost(String newHost) {
String oldHost = host;
host = newHost;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__HOST, oldHost, host));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getPasswd() {
return passwd;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setPasswd(String newPasswd) {
String oldPasswd = passwd;
passwd = newPasswd;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__PASSWD, oldPasswd, passwd));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getTempPasswd() {
return tempPasswd;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setTempPasswd(String newTempPasswd) {
String oldTempPasswd = tempPasswd;
tempPasswd = newTempPasswd;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__TEMP_PASSWD, oldTempPasswd, tempPasswd));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getPath() {
return path;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setPath(String newPath) {
String oldPath = path;
path = newPath;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__PATH, oldPath, path));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getPort() {
return port;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setPort(String newPort) {
String oldPort = port;
port = newPort;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__PORT, oldPort, port));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public String getUrl() {
if (url == null) {
StringBuffer sb = new StringBuffer();
sb.append(getProtocol());
sb.append(host);
sb.append(":");//$NON-NLS-1$
sb.append(port);
sb.append(path);
url = sb.toString();
}
return url;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setUrl(String newUrl) {
String oldUrl = url;
url = newUrl;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__URL, oldUrl, url));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getUser() {
return user;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setUser(String newUser) {
String oldUser = user;
user = newUser;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__USER, oldUser, user));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean isEnabled() {
return enabled;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setEnabled(boolean newEnabled) {
boolean oldEnabled = enabled;
enabled = newEnabled;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__ENABLED, oldEnabled, enabled));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getAlgorithm() {
return algorithm;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void setAlgorithm(String newAlgorithm) {
String oldAlgorithm = algorithm;
algorithm = newAlgorithm;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, MdmmetadataPackage.MDM_SERVER_DEF__ALGORITHM, oldAlgorithm, algorithm));
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public boolean validate(String url) {
if (url == null || url.length() == 0) {
return false;
}
String protocol = getProtocol(url);
if (protocol == null) {
return false;
}
Matcher m = Pattern.compile(PATTERN_URL).matcher(url);
boolean matchHttp = m.find();
if (!matchHttp) {
String tmp = url.replace("\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$
m = Pattern.compile(FILE_PATTERN_URL).matcher(tmp);
matchHttp = m.find();
}
return matchHttp;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated NOT
*/
@Override
public MDMServerDef parse(String newUrl) {
String protocol = getProtocol(newUrl);
if (protocol == null) {
return null;
}
if (protocol.equals(FILE_PREFIX)) {
newUrl = extractURL(newUrl);
}
Matcher m = Pattern.compile(PATTERN_URL).matcher(newUrl);
if (!m.find()) {
return null;
}
setHost(m.group(1));
setPort(m.group(2));
setPath(m.group(3));
return this;
}
protected String extractURL(String newUrl) {
try {
File file = new File(new URL(newUrl).toURI());
FileInputStream input = new FileInputStream(file);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(new InputSource(input));
NodeList elements = doc.getElementsByTagName("soap:address"); //$NON-NLS-1$
if (elements != null && elements.getLength() == 1) {
Node item = elements.item(0);
NamedNodeMap attributes = item.getAttributes();
Node namedItem = attributes.getNamedItem("location"); //$NON-NLS-1$
if (namedItem != null) {
newUrl = namedItem.getNodeValue();
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return newUrl;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated not
*/
@Override
public String getProtocol() {
if (url != null) {
String protocol = getProtocol(url);
if (FILE_PREFIX.equals(protocol)) {
protocol = getProtocol(extractURL(url));
}
return protocol;
}
return HTTP_PREFIX;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated not
*/
@Override
public boolean isEnableSSL() {
String protocol = getProtocol();
if (protocol != null) {
return protocol.equalsIgnoreCase(HTTPS_PREFIX);
}
return false;
}
private String getProtocol(String input) {
if (input != null) {
String tmp = input.toLowerCase().trim();
if (tmp.startsWith(HTTP_PREFIX)) {
return HTTP_PREFIX;
}
if (tmp.startsWith(HTTPS_PREFIX)) {
return HTTPS_PREFIX;
}
if (tmp.startsWith(FILE_PREFIX)) {
return FILE_PREFIX;
}
}
return null;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case MdmmetadataPackage.MDM_SERVER_DEF__HOST:
return getHost();
case MdmmetadataPackage.MDM_SERVER_DEF__PASSWD:
return getPasswd();
case MdmmetadataPackage.MDM_SERVER_DEF__TEMP_PASSWD:
return getTempPasswd();
case MdmmetadataPackage.MDM_SERVER_DEF__PATH:
return getPath();
case MdmmetadataPackage.MDM_SERVER_DEF__PORT:
return getPort();
case MdmmetadataPackage.MDM_SERVER_DEF__URL:
return getUrl();
case MdmmetadataPackage.MDM_SERVER_DEF__USER:
return getUser();
case MdmmetadataPackage.MDM_SERVER_DEF__ENABLED:
return isEnabled();
case MdmmetadataPackage.MDM_SERVER_DEF__ALGORITHM:
return getAlgorithm();
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case MdmmetadataPackage.MDM_SERVER_DEF__HOST:
setHost((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PASSWD:
setPasswd((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__TEMP_PASSWD:
setTempPasswd((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PATH:
setPath((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PORT:
setPort((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__URL:
setUrl((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__USER:
setUser((String)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__ENABLED:
setEnabled((Boolean)newValue);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__ALGORITHM:
setAlgorithm((String)newValue);
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case MdmmetadataPackage.MDM_SERVER_DEF__HOST:
setHost(HOST_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PASSWD:
setPasswd(PASSWD_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__TEMP_PASSWD:
setTempPasswd(TEMP_PASSWD_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PATH:
setPath(PATH_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__PORT:
setPort(PORT_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__URL:
setUrl(URL_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__USER:
setUser(USER_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__ENABLED:
setEnabled(ENABLED_EDEFAULT);
return;
case MdmmetadataPackage.MDM_SERVER_DEF__ALGORITHM:
setAlgorithm(ALGORITHM_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case MdmmetadataPackage.MDM_SERVER_DEF__HOST:
return HOST_EDEFAULT == null ? host != null : !HOST_EDEFAULT.equals(host);
case MdmmetadataPackage.MDM_SERVER_DEF__PASSWD:
return PASSWD_EDEFAULT == null ? passwd != null : !PASSWD_EDEFAULT.equals(passwd);
case MdmmetadataPackage.MDM_SERVER_DEF__TEMP_PASSWD:
return TEMP_PASSWD_EDEFAULT == null ? tempPasswd != null : !TEMP_PASSWD_EDEFAULT.equals(tempPasswd);
case MdmmetadataPackage.MDM_SERVER_DEF__PATH:
return PATH_EDEFAULT == null ? path != null : !PATH_EDEFAULT.equals(path);
case MdmmetadataPackage.MDM_SERVER_DEF__PORT:
return PORT_EDEFAULT == null ? port != null : !PORT_EDEFAULT.equals(port);
case MdmmetadataPackage.MDM_SERVER_DEF__URL:
return URL_EDEFAULT == null ? url != null : !URL_EDEFAULT.equals(url);
case MdmmetadataPackage.MDM_SERVER_DEF__USER:
return USER_EDEFAULT == null ? user != null : !USER_EDEFAULT.equals(user);
case MdmmetadataPackage.MDM_SERVER_DEF__ENABLED:
return enabled != ENABLED_EDEFAULT;
case MdmmetadataPackage.MDM_SERVER_DEF__ALGORITHM:
return ALGORITHM_EDEFAULT == null ? algorithm != null : !ALGORITHM_EDEFAULT.equals(algorithm);
}
return super.eIsSet(featureID);
}
@Override
public boolean isReadOnly() {
return false;
}
@Override
public void setReadOnly(boolean newReadOnly) {
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy()) return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (host: ");
result.append(host);
result.append(", passwd: ");
result.append(passwd);
result.append(", tempPasswd: ");
result.append(tempPasswd);
result.append(", path: ");
result.append(path);
result.append(", port: ");
result.append(port);
result.append(", url: ");
result.append(url);
result.append(", user: ");
result.append(user);
result.append(", enabled: ");
result.append(enabled);
result.append(", algorithm: ");
result.append(algorithm);
result.append(')');
return result.toString();
}
/*
* (non-Javadoc)
*
* @see org.talend.mdm.repository.model.mdmmetadata.MDMServerDef#getDecryptedServerDef()
*/
@Override
public MDMServerDef getDecryptedServerDef() {
MDMServerDef clone = EcoreUtil.copy(this);
if (clone.getPasswd() == null || clone.getPasswd().trim().length() == 0) {
clone.setPasswd(getTempPasswd());
} else {
String decryptedPassword = PasswordUtil.decryptPassword(getPasswd(), algorithm);
clone.setPasswd(decryptedPassword);
}
return clone;
}
@Override
public MDMServerDef getEncryptedServerDef() {
MDMServerDef clone = EcoreUtil.copy(this);
String encryptedPassword = PasswordUtil.encryptPassword(getPasswd(), algorithm);
clone.setPasswd(encryptedPassword);
return clone;
}
} // MDMServerDefImpl