/*******************************************************************************
* Copyright (c) 2014 Zend Technologies.
* All rights reserved. This program and the accompanying materials
* are the copyright of Zend Technologies and is protected under
* copyright laws of the United States.
* You must not copy, adapt or redistribute this document for
* any use.
*******************************************************************************/
package org.zend.php.zendserver.deployment.core;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.php.internal.server.core.Server;
import org.eclipse.php.internal.server.core.manager.IServersManagerListener;
import org.eclipse.php.internal.server.core.manager.ServerManagerEvent;
import org.eclipse.php.internal.server.core.manager.ServersManager;
import org.zend.php.zendserver.deployment.core.targets.TargetsManagerService;
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;
/**
* Implementation of {@link IServersManagerListener}. It is added during plug-in
* initialization to support changes in servers settings which should affect
* targets configuration.
*
* @author Wojciech Galanciak, 2014
*
*/
@SuppressWarnings("restriction")
public class ServersManagerListener implements IServersManagerListener {
private List<IZendTarget> removedTargets = new ArrayList<IZendTarget>();
@Override
public void serverRemoved(ServerManagerEvent event) {
Server removedServer = event.getServer();
if (removedServer != null
&& ServersManager.getServer(removedServer.getName()) == null) {
String name = removedServer.getName();
TargetsManager manager = TargetsManagerService.INSTANCE
.getTargetManager();
IZendTarget[] targets = manager.getTargets();
IZendTarget toRemove = null;
for (IZendTarget target : targets) {
if (name.equals(target.getServerName())) {
toRemove = target;
break;
}
}
if (toRemove != null) {
removedTargets.add(toRemove);
manager.remove(toRemove);
}
}
}
@Override
public void serverModified(ServerManagerEvent event) {
String key = event.getModifiedAttributeKey();
if (Server.NAME.equals(key)) {
String oldValue = event.getOldAttributeValue();
String newValue = event.getNewAttributeValue();
TargetsManager manager = TargetsManagerService.INSTANCE
.getTargetManager();
IZendTarget[] targets = manager.getTargets();
for (IZendTarget target : targets) {
if (oldValue.equals(target.getServerName())) {
ZendTarget t = (ZendTarget) target;
t.setServerName(newValue);
manager.updateTarget(t, true);
}
}
}
}
@Override
public void serverAdded(ServerManagerEvent event) {
for (IZendTarget target : removedTargets) {
String serverName = target.getServerName();
if (event.getServer().getName().equals(serverName)) {
TargetsManager manager = TargetsManagerService.INSTANCE
.getTargetManager();
try {
manager.add(target, true);
return;
} catch (TargetException e) {
// cannot occur, suppress connection
} catch (LicenseExpiredException e) {
// cannot occur, suppress connection
}
}
}
removedTargets.clear();
}
}