/**
* Copyright (c) 2013-2016 Angelo ZERR.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
*/
package tern.eclipse.ide.internal.core;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import tern.ITernProject;
import tern.eclipse.ide.core.ITernServerFactory;
import tern.eclipse.ide.core.ITernServerType;
import tern.server.ITernServer;
import tern.server.ITernServerListener;
public class TernServerType implements ITernServerType {
private final String id;
private final String name;
private final ITernServerFactory factory;
private final List<ITernServer> servers;
private final ITernServerListener serverListener;
/**
* GeneratorType constructor comment.
*
* @param element
* a configuration element
* @throws CoreException
*/
public TernServerType(IConfigurationElement element) throws CoreException {
this.servers = new ArrayList<ITernServer>();
this.id = element.getAttribute("id");
this.name = element.getAttribute("name");
this.factory = (ITernServerFactory) element
.createExecutableExtension("factory");
this.serverListener = new ITernServerListener() {
@Override
public void onStart(ITernServer server) {
synchronized (servers) {
servers.add(server);
}
}
@Override
public void onStop(ITernServer server) {
synchronized (servers) {
servers.remove(server);
}
}
};
}
@Override
public String getId() {
return id;
}
@Override
public String getName() {
return name;
}
ITernServerFactory getFactory() {
return factory;
}
public void dispose() {
synchronized (servers) {
List<ITernServer> servers = new ArrayList<ITernServer>(this.servers);
for (ITernServer server : servers) {
server.dispose();
}
this.servers.clear();
}
}
@Override
public ITernServer createServer(ITernProject project) throws Exception {
ITernServer server = getFactory().create(project);
server.addServerListener(serverListener);
return server;
}
}