package org.zend.php.zendserver.deployment.core.targets;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.php.internal.server.core.Server;
import org.zend.php.zendserver.deployment.core.DeploymentCore;
import org.zend.php.zendserver.deployment.core.utils.DeploymentUtils;
import org.zend.sdklib.internal.target.ZendTarget;
import org.zend.sdklib.manager.TargetException;
import org.zend.sdklib.manager.TargetsManager;
import org.zend.sdklib.target.IZendTarget;
import org.zend.sdklib.target.LicenseExpiredException;
public class EclipseTargetsManager extends TargetsManager {
private static final String LISTENERS_ELEMENT = "listener"; //$NON-NLS-1$
private static final String LISTENERS_EXTENSION = DeploymentCore.PLUGIN_ID + ".targetsManagerListener"; //$NON-NLS-1$
private ITargetsManagerListener[] listeners;
public EclipseTargetsManager() {
super();
this.listeners = getManagerListeners();
// TODO on startup check if there are targets added from command-line
}
@Override
public IZendTarget add(IZendTarget target,
boolean suppressConnect) throws TargetException,
LicenseExpiredException {
// Create PHP Server associated with this target
Server server = DeploymentUtils.findExistingServer(target);
if (server != null) {
String baseUrl = server.getBaseURL();
ZendTarget t = (ZendTarget) target;
try {
t.setDefaultServerURL(new URL(baseUrl));
if (target.getServerName() == null) {
t.setServerName(server.getName());
}
} catch (MalformedURLException e) {
// should not occur
}
}
IZendTarget result = super.add(target, suppressConnect);
for (ITargetsManagerListener listener : listeners) {
listener.targetAdded(target);
}
return result;
}
@Override
public IZendTarget remove(IZendTarget target) {
for (ITargetsManagerListener listener : listeners) {
listener.targetRemoved(target);
}
return super.remove(target);
}
@Override
public IZendTarget updateTarget(String targetId, String host,
String defaultServer, String key, String secretKey)
throws LicenseExpiredException {
return super
.updateTarget(targetId, host, defaultServer, key, secretKey);
// TODO update SSH key?
}
private static ITargetsManagerListener[] getManagerListeners() {
IConfigurationElement[] elements = Platform
.getExtensionRegistry()
.getConfigurationElementsFor(
LISTENERS_EXTENSION);
List<ITargetsManagerListener> result = new ArrayList<ITargetsManagerListener>();
for (IConfigurationElement element : elements) {
if (LISTENERS_ELEMENT.equals(element.getName())) {
try {
Object listener = element
.createExecutableExtension("class"); //$NON-NLS-1$
if (listener instanceof ITargetsManagerListener) {
result.add((ITargetsManagerListener) listener);
break;
}
} catch (CoreException e) {
DeploymentCore.log(e);
}
}
}
return result.toArray(new ITargetsManagerListener[result.size()]);
}
}