blob: 57066d9a34d9be7567f5281f6adadc442240e993 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.payara.common;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.netbeans.modules.payara.common.parser.TreeParser;
import org.netbeans.modules.payara.common.wizards.ServerWizardIterator;
import org.netbeans.modules.payara.tooling.data.PayaraVersion;
import org.netbeans.modules.payara.tooling.utils.ServerUtils;
import org.openide.WizardDescriptor;
import org.openide.util.NbBundle;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
*
* @author vkraemer
* @author Gaurav Gupta
*/
public enum ServerDetails {
//add new version
/**
* details for an instance of Payara Server 4.1.144
*/
PAYARA_SERVER_4_1_144(
PayaraVersion.PF_4_1_144,
"deployer:pfv4ee7", // NOI18N
41144,
false
),
/**
* details for an instance of Payara Server 4.1.151
*/
PAYARA_SERVER_4_1_151(
PayaraVersion.PF_4_1_151,
"deployer:pfv4ee7", // NOI18N
41151,
false
),
/**
* details for an instance of Payara Server 4.1.152
*/
PAYARA_SERVER_4_1_152(
PayaraVersion.PF_4_1_152,
"deployer:pfv4ee7", // NOI18N
41152,
false
),
/**
* details for an instance of Payara Server 4.1.153
*/
PAYARA_SERVER_4_1_153(
PayaraVersion.PF_4_1_153,
"deployer:pfv4ee7", // NOI18N
41153,
false
),
/**
* details for an instance of Payara Server 4.1.1.154
*/
PAYARA_SERVER_4_1_1_154(
PayaraVersion.PF_4_1_1_154,
"deployer:pfv4ee7", // NOI18N
411154,
false
),
/**
* details for an instance of Payara Server 4.1.1.161
*/
PAYARA_SERVER_4_1_1_161(
PayaraVersion.PF_4_1_1_161,
"deployer:pfv4ee7", // NOI18N
411161
),
/**
* details for an instance of Payara Server 4.1.1.162
*/
PAYARA_SERVER_4_1_1_162(
PayaraVersion.PF_4_1_1_162,
"deployer:pfv4ee7", // NOI18N
411162
),
/**
* details for an instance of Payara Server 4.1.1.163
*/
PAYARA_SERVER_4_1_1_163(
PayaraVersion.PF_4_1_1_163,
"deployer:pfv4ee7", // NOI18N
411163
),
/**
* details for an instance of Payara Server 4.1.1.164
*/
PAYARA_SERVER_4_1_1_164(
PayaraVersion.PF_4_1_1_164,
"deployer:pfv4ee7", // NOI18N
411164
),
/**
* details for an instance of Payara Server 4.1.1.171
*/
PAYARA_SERVER_4_1_1_171(
PayaraVersion.PF_4_1_1_171,
"deployer:pfv4ee7", // NOI18N
411171
),
/**
* details for an instance of Payara Server 4.1.2.172
*/
PAYARA_SERVER_4_1_2_172(
PayaraVersion.PF_4_1_2_172,
"deployer:pfv4ee7", // NOI18N
412172
),
/**
* details for an instance of Payara Server 4.1.2.173
*/
PAYARA_SERVER_4_1_2_173(
PayaraVersion.PF_4_1_2_173,
"deployer:pfv4ee7", // NOI18N
412173
),
/**
* details for an instance of Payara Server 4.1.2.174
*/
PAYARA_SERVER_4_1_2_174(
PayaraVersion.PF_4_1_2_174,
"deployer:pfv4ee7", // NOI18N
412174
),
/**
* details for an instance of Payara Server 4.1.2.181
*/
PAYARA_SERVER_4_1_2_181(
PayaraVersion.PF_4_1_2_181,
"deployer:pfv4ee7", // NOI18N
412181
),
/**
* details for an instance of Payara Server 5.181
*/
PAYARA_SERVER_5_181(
PayaraVersion.PF_5_181,
"deployer:pfv5ee8", // NOI18N
5181
),
/**
* details for an instance of Payara Server 5.182
*/
PAYARA_SERVER_5_182(
PayaraVersion.PF_5_182,
"deployer:pfv5ee8", // NOI18N
5182
),
/**
* details for an instance of Payara Server 5.183
*/
PAYARA_SERVER_5_183(
PayaraVersion.PF_5_183,
"deployer:pfv5ee8", // NOI18N
5183
),
/**
* details for an instance of Payara Server 5.184
*/
PAYARA_SERVER_5_184(
PayaraVersion.PF_5_184,
"deployer:pfv5ee8", // NOI18N
5184
),
/**
* details for an instance of Payara Server 5.191
*/
PAYARA_SERVER_5_191(
PayaraVersion.PF_5_191,
"deployer:pfv5ee8", // NOI18N
5191
),
/**
* details for an instance of Payara Server 5.192
*/
PAYARA_SERVER_5_192(
PayaraVersion.PF_5_192,
"deployer:pfv5ee8", // NOI18N
5192
),
/**
* details for an instance of Payara Server 5.193
*/
PAYARA_SERVER_5_193(
PayaraVersion.PF_5_193,
"deployer:pfv5ee8", // NOI18N
5193
),
/**
* details for an instance of Payara Server 5.194
*/
PAYARA_SERVER_5_194(
PayaraVersion.PF_5_194,
"deployer:pfv5ee8", // NOI18N
5194
),
/**
* details for an instance of Payara Server 5.201
*/
PAYARA_SERVER_5_201(
PayaraVersion.PF_5_201,
"deployer:pfv5ee8", // NOI18N
5201
),
/**
* details for an instance of Payara Server 5.202
*/
PAYARA_SERVER_5_202(
PayaraVersion.PF_5_202,
"deployer:pfv5ee8", // NOI18N
5202,
false
);
/**
* Creates an iterator for a wizard to instantiate server objects.
* <p/>
* @return Server wizard iterator initialized with supported Payara
* server versions.
*/
public static WizardDescriptor.InstantiatingIterator
getInstantiatingIterator() {
return new ServerWizardIterator(
ServerDetails.values()
);
}
/**
* Determine the version of the Payara Server installed in a directory
* @param payaraDir the directory that holds a Payara installation
* @return -1 if the directory is not a Payara server install
*/
public static int getVersionFromInstallDirectory(File payaraDir) {
if (payaraDir == null) {
return -1;
}
PayaraVersion version
= ServerUtils.getServerVersion(payaraDir.getAbsolutePath());
Optional<ServerDetails> serverDetails = Optional.empty();
if (version != null) {
serverDetails = Arrays
.stream(ServerDetails.values())
.filter(value -> value.getVersion() == version)
.findAny();
}
return serverDetails.map(ServerDetails::getVersionInt).orElse(-1);
}
/**
* Determine the version of the Payara Server that wrote the domain.xml file
*
* @param domainXml the file to analyze
* @return -1 if domainXml is null, unreadable or not a directory
* @throws IllegalStateException if domainXml cannot be parsed
*/
@Deprecated
public static int getVersionFromDomainXml(File domainXml) throws IllegalStateException {
if (null == domainXml || !domainXml.isFile() || !domainXml.canRead()) {
return -1;
}
return hasDefaultConfig(domainXml) ? PAYARA_SERVER_5_194.getVersionInt() : PAYARA_SERVER_5_181.getVersionInt();
}
private static boolean hasDefaultConfig(File domainXml) throws IllegalStateException {
DomainParser dp = new DomainParser();
List<TreeParser.Path> paths = new ArrayList<>();
paths.add(new TreeParser.Path("/domain/configs/config",dp)); // NOI18N
TreeParser.readXml(domainXml, paths);
return dp.hasDefaultConfig();
}
private final PayaraVersion version;
private final String displayName;
private final String uriFragment;
private final String indirectUrl;
private final String directUrl;
private final String licenseUrl;
private final int versionInt;
private final boolean downloadable;
private static final String DOWNLOAD_URL = "https://oss.sonatype.org/service/local/repositories/releases/content/fish/payara/distributions/payara/%s/payara-%s.zip"; // NOI18N
private static final String CDDL_LICENSE = "https://raw.githubusercontent.com/payara/Payara/master/LICENSE.txt"; // NOI18N
ServerDetails(PayaraVersion version, String uriFragment, int versionInt) {
this(version, uriFragment, versionInt, true);
}
ServerDetails(PayaraVersion version, String uriFragment, int versionInt, boolean downloadable) {
this.version = version;
this.displayName = NbBundle.getMessage(ServerDetails.class, "STR_SERVER_NAME", new Object[]{version.toString()});
this.uriFragment = uriFragment;
this.versionInt = versionInt;
this.indirectUrl = null;
this.directUrl = String.format(DOWNLOAD_URL, version.toString(), version.toString());
this.licenseUrl = CDDL_LICENSE;
this.downloadable = downloadable;
}
@Override
public String toString() {
return displayName;
}
public String getUriFragment() {
return uriFragment;
}
public int getVersionInt() {
return versionInt;
}
public PayaraVersion getVersion() {
return version;
}
public boolean isDownloadable() {
return downloadable;
}
/**
* Determine if the glassfishDir holds a valid install of this release of
* Payara Server.
* @param payaraDir
* @return true if the glassfishDir holds this particular server version.
*/
public boolean isInstalledInDirectory(File payaraDir) {
return getVersionFromInstallDirectory(payaraDir) == this.getVersionInt();
}
static class DomainParser extends TreeParser.NodeReader {
private boolean hasDefaultConfig = false;
private boolean hasDefaultConfig() {
return hasDefaultConfig;
}
@Override
public void readAttributes(String qname, Attributes attributes) throws SAXException {
String name = attributes.getValue("name"); // NOI18N
if ("default-config".equals(name)) { // NOI18N
hasDefaultConfig = true;
}
}
}
public String getDirectUrl() {
return directUrl;
}
public String getIndirectUrl() {
return indirectUrl;
}
public String getLicenseUrl() {
return licenseUrl;
}
}