/*
* 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.io.File;
import java.util.Collection;
import java.util.LinkedList;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import org.netbeans.api.server.ServerInstance;
import org.netbeans.api.server.properties.InstanceProperties;
import org.netbeans.spi.server.ServerInstanceImplementation;
import org.openide.nodes.Children;
import org.openide.nodes.Node;
import static org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.URL_ATTR;
import static org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.USERNAME_ATTR;
import static org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.PASSWORD_ATTR;
import static org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.DISPLAY_NAME_ATTR;
import static org.netbeans.modules.j2ee.deployment.plugins.api.InstanceProperties.HTTP_PORT_NUMBER;
public class ResinInstance implements ServerInstanceImplementation {
private final static Logger log = Logger.getLogger(ResinInstance.class.getName());
private ServerInstance _server;
private InstanceProperties _instanceProperties;
private ResinNode _basicNode;
private ResinNode _fullNode;
private String _displayName = "Resin";
private String _home;
private String _root;
private String _host;
private String _address;
private int _port;
private String _url;
private String _user = "deploy";
private String _password = "deploy";
private String _conf;
private String _webapps = "webapps";
public ResinInstance(InstanceProperties properties) {
_instanceProperties = properties;
_url = properties.getString(URL_ATTR, null);
_displayName = properties.getString(DISPLAY_NAME_ATTR, null);
_home = properties.getString("home", null);
_root = properties.getString("root", null);
_host = properties.getString("host", null);
_address = properties.getString("address", null);
_port = properties.getInt(HTTP_PORT_NUMBER, 8080);
_user = properties.getString(USERNAME_ATTR, "admin");
_password = properties.getString(PASSWORD_ATTR, "deploy");
_conf = properties.getString("conf", null);
_webapps = properties.getString("webapps", null);
}
public ResinInstance(String displayName, String home, String root, String host, String address, int port, String user, String password, String conf, String webapps) {
_displayName = displayName;
_home = home;
_root = root;
_host = host;
_address = address;
_port = port;
_user = user;
_password = password;
_conf = conf;
_webapps = webapps;
_url = createUrl(home, root, host, address, port, displayName);
}
void persist(InstanceProperties properties) {
_instanceProperties = properties;
properties.putString(URL_ATTR, _url);
properties.putString(DISPLAY_NAME_ATTR, _displayName);
properties.putString("home", _home);
properties.putString("root", _root);
properties.putString("host", _host);
properties.putString("address", _address);
properties.putString(USERNAME_ATTR, _user);
properties.putString(PASSWORD_ATTR, _password);
properties.putString("conf", _conf);
properties.putString("webapps", _webapps);
properties.putInt(HTTP_PORT_NUMBER, _port);
}
InstanceProperties getInstanceProperties() {
return _instanceProperties;
}
public void setServerInstance(ServerInstance server) {
_server = server;
}
public ServerInstance getServerInstance() {
return _server;
}
@Override
public String getDisplayName() {
return _displayName;
}
@Override
public String getServerDisplayName() {
return _displayName;
}
public String getName() {
return _displayName;
}
public void setName(String _name) {
this._displayName = _name;
}
public String getAddress() {
return _address;
}
public void setAddress(String _address) {
this._address = _address;
}
public String getHome() {
return _home;
}
public void setHome(String _home) {
this._home = _home;
}
public String getHost() {
return _host;
}
public void setHost(String _host) {
this._host = _host;
}
public int getPort() {
return _port;
}
public void setPort(int _port) {
this._port = _port;
}
public String getRoot() {
return _root;
}
public void setRoot(String _root) {
this._root = _root;
}
public String getPassword() {
return _password;
}
public void setPassword(String _password) {
this._password = _password;
}
public String getUser() {
return _user;
}
public void setUser(String _user) {
this._user = _user;
}
public String getConf() {
return _conf;
}
public void setConf(String _conf) {
this._conf = _conf;
}
public String getUrl() {
return _url;
}
public String getWebapps() {
return _webapps;
}
public void setWebapps(String webapps) {
_webapps = webapps;
}
@Override
public Node getFullNode() {
if (_fullNode == null) {
_fullNode = new ResinNode(Children.LEAF, this);
}
return _fullNode;
}
@Override
public Node getBasicNode() {
if (_basicNode == null) {
_basicNode = new ResinNode(Children.LEAF, this);
}
return _basicNode;
}
@Override
public JComponent getCustomizer() {
JPanel commonCustomizer = new ResinInstanceCustomizer(this);
//JPanel vmCustomizer = new VmCustomizer();
Collection<JPanel> pages = new LinkedList<JPanel>();
//Collection<? extends CustomizerCookie> lookupAll = lookup.lookupAll(CustomizerCookie.class);
//for (CustomizerCookie cookie : lookupAll) {
//pages.addAll(cookie.getCustomizerPages());
//}
//pages.add(vmCustomizer);
JTabbedPane tabbedPane = null;
for (JPanel page : pages) {
if (tabbedPane == null) {
tabbedPane = new JTabbedPane();
tabbedPane.add(commonCustomizer);
}
tabbedPane.add(page);
}
return tabbedPane != null ? tabbedPane : commonCustomizer;
}
@Override
public void remove() {
ResinInstanceProvider.getInstance().remove(this);
}
@Override
public boolean isRemovable() {
return true;
}
public String createUrl(String home, String root, String host, String address, int port, String displayName) {
StringBuilder url = new StringBuilder();
url.append("resin:home:").append('"').append(home).append("\":").
append("root:").append('"').append(root).append("\":").
append("host:").append('"').append(host).append("\":").
append("address:").append('"').append(address).append(':').append(port).
append("display-name:").append('"').append(displayName).append('"');
return url.toString();
}
public static String makeConfName(String resinName) {
StringBuilder builder = new StringBuilder("netbeans-");
for (char c : resinName.toCharArray()) {
if (c == ' ') {
builder.append('_');
} else if (c == ':') {
builder.append('_');
} else if (c == '/' || c == '\\') {
builder.append('_');
} else {
builder.append(c);
}
}
builder.append(".xml");
return builder.toString();
}
public static boolean isResinHome(String value) {
if (value == null || value.isEmpty()) {
return false;
}
File home = new File(value);
if (!home.exists() || !home.isDirectory()) {
return false;
}
if (!new File(home, "conf/resin.xml").exists()) {
return false;
}
if (!new File(home, "lib/resin.jar").exists()) {
return false;
}
return true;
}
}