/*
* Copyright (c) 1998-2011 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Alex Rojkov
*/
package com.caucho.netbeans;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.ChangeListener;
import org.netbeans.api.server.ServerInstance;
import org.netbeans.api.server.properties.InstanceProperties;
import org.netbeans.api.server.properties.InstancePropertiesManager;
import org.netbeans.modules.j2ee.deployment.plugins.api.InstanceCreationException;
import org.netbeans.spi.server.ServerInstanceFactory;
import org.netbeans.spi.server.ServerInstanceProvider;
import org.openide.util.ChangeSupport;
import org.openide.util.Exceptions;
public final class ResinInstanceProvider implements ServerInstanceProvider {
private final static Logger log = Logger.getLogger(ResinInstanceProvider.class.getName());
private static ResinInstanceProvider instance;
private final ChangeSupport _listeners = new ChangeSupport(this);
private final List<ResinInstance> _resins = new ArrayList<ResinInstance>();
private InstancePropertiesManager _persistence;
static {
//Logger.getLogger("org.netbeans.modules.j2ee").setLevel(Level.FINEST);
}
public static List<ResinInstanceProvider> getProviders(boolean initialize) {
List<ResinInstanceProvider> result = new ArrayList<ResinInstanceProvider>();
return result;
}
public synchronized final static ResinInstanceProvider getInstance() {
if (instance == null) {
instance = new ResinInstanceProvider();
instance.init();
}
return instance;
}
private ResinInstanceProvider() {
}
private void init() {
_persistence = InstancePropertiesManager.getInstance();
List<InstanceProperties> list = _persistence.getProperties("com.caucho.resin");
for (InstanceProperties properties : list) {
ResinInstance resin = new ResinInstance(properties);
ServerInstance server = ServerInstanceFactory.createServerInstance(resin);
resin.setServerInstance(server);
_resins.add(resin);
}
}
public ResinInstance getResinInstance(String url) {
for (ResinInstance resin : _resins) {
if (url.equals(resin.getUrl())) {
return resin;
}
}
throw new IllegalStateException("Instance does not appear to exist");
}
public void echo() {
/*
for (String serverInstanceID : Deployment.getDefault().getServerInstanceIDs()) {
String displayName = Deployment.getDefault().getServerInstanceDisplayName(serverInstanceID);
J2eePlatform j2eePlatform = Deployment.getDefault().getJ2eePlatform(serverInstanceID);
System.out.println("Display-name: " + displayName);
System.out.println("j2ee-platform: " + displayName);
}*/
}
public ServerInstance instantiate(ResinInstance resin) {
InstanceProperties properties = _persistence.createProperties("com.caucho.resin");
resin.persist(properties);
ServerInstance server = ServerInstanceFactory.createServerInstance(resin);
_resins.add(resin);
createJ2eeInstance(resin);
_listeners.fireChange();
return server;
}
private void createJ2eeInstance(ResinInstance resin) {
try {
String url = resin.getUrl();
org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties p =
org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.createInstancePropertiesWithoutUI(url, resin.getAddress(), resin.getDisplayName(), resin.getDisplayName(), new HashMap<String, String>());
} catch (InstanceCreationException ex) {
Exceptions.printStackTrace(ex);
}
}
void remove(ResinInstance resin) {
_resins.remove(resin);
resin.getInstanceProperties().remove();
try {
org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.removeInstance(resin.getUrl());
} catch (Exception e) {
log.log(Level.WARNING, e.getMessage(), e);
}
}
@Override
public List<ServerInstance> getInstances() {
List<ServerInstance> result = new ArrayList<ServerInstance>(_resins.size());
for (ResinInstance resin : _resins) {
result.add(resin.getServerInstance());
}
echo();
return result;
}
@Override
public void addChangeListener(ChangeListener listener) {
_listeners.addChangeListener(listener);
}
@Override
public void removeChangeListener(ChangeListener listener) {
_listeners.removeChangeListener(listener);
}
}