blob: 9289f861c3e3d2b02c80e967476449cf1f45dd5b [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.apache.geode.internal.cache.xmlcache;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.apache.geode.annotations.Immutable;
/**
* {@link Enum} for Cache XML versions. Resolves issues with old String based comparisons. Under the
* old String comparison version "8.1" was older than "8_0" and "10.0" was older than "9.0".
* <p>
* TODO future - replace constants in CacheXml with this Enum completely
*
* @since GemFire 8.1
*/
public enum CacheXmlVersion {
GEMFIRE_3_0(CacheXml.VERSION_3_0, CacheXml.PUBLIC_ID_3_0, CacheXml.SYSTEM_ID_3_0, null, null),
GEMFIRE_4_0(CacheXml.VERSION_4_0, CacheXml.PUBLIC_ID_4_0, CacheXml.SYSTEM_ID_4_0, null, null),
GEMFIRE_4_1(CacheXml.VERSION_4_1, CacheXml.PUBLIC_ID_4_1, CacheXml.SYSTEM_ID_4_1, null, null),
GEMFIRE_5_0(CacheXml.VERSION_5_0, CacheXml.PUBLIC_ID_5_0, CacheXml.SYSTEM_ID_5_0, null, null),
GEMFIRE_5_1(CacheXml.VERSION_5_1, CacheXml.PUBLIC_ID_5_1, CacheXml.SYSTEM_ID_5_1, null, null),
GEMFIRE_5_5(CacheXml.VERSION_5_5, CacheXml.PUBLIC_ID_5_5, CacheXml.SYSTEM_ID_5_5, null, null),
GEMFIRE_5_7(CacheXml.VERSION_5_7, CacheXml.PUBLIC_ID_5_7, CacheXml.SYSTEM_ID_5_7, null, null),
GEMFIRE_5_8(CacheXml.VERSION_5_8, CacheXml.PUBLIC_ID_5_8, CacheXml.SYSTEM_ID_5_8, null, null),
GEMFIRE_6_0(CacheXml.VERSION_6_0, CacheXml.PUBLIC_ID_6_0, CacheXml.SYSTEM_ID_6_0, null, null),
GEMFIRE_6_1(CacheXml.VERSION_6_1, CacheXml.PUBLIC_ID_6_1, CacheXml.SYSTEM_ID_6_1, null, null),
GEMFIRE_6_5(CacheXml.VERSION_6_5, CacheXml.PUBLIC_ID_6_5, CacheXml.SYSTEM_ID_6_5, null, null),
GEMFIRE_6_6(CacheXml.VERSION_6_6, CacheXml.PUBLIC_ID_6_6, CacheXml.SYSTEM_ID_6_6, null, null),
GEMFIRE_7_0(CacheXml.VERSION_7_0, CacheXml.PUBLIC_ID_7_0, CacheXml.SYSTEM_ID_7_0, null, null),
GEMFIRE_8_0(CacheXml.VERSION_8_0, CacheXml.PUBLIC_ID_8_0, CacheXml.SYSTEM_ID_8_0, null, null),
GEMFIRE_8_1(CacheXml.VERSION_8_1, null, null, CacheXml.SCHEMA_8_1_LOCATION,
CacheXml.GEMFIRE_NAMESPACE),
// Ordinality matters here, so keep the 1.0 version after the 8.x versions
// Version 1.0 is the start of Geode versions. In terms of releases, Geode 1.0 > GemFire 8.x.
GEODE_1_0(CacheXml.VERSION_1_0, null, null, CacheXml.SCHEMA_1_0_LOCATION,
CacheXml.GEODE_NAMESPACE);
@Immutable
private static final Map<String, CacheXmlVersion> valuesForVersion;
static {
HashMap<String, CacheXmlVersion> valuesForVersionMap = new HashMap<>();
for (final CacheXmlVersion cacheXmlVersion : values()) {
valuesForVersionMap.put(cacheXmlVersion.getVersion(), cacheXmlVersion);
}
valuesForVersion = Collections.unmodifiableMap(valuesForVersionMap);
}
private final String version;
private final String schemaLocation;
private final String namespace;
private final String publicId;
private final String systemId;
private CacheXmlVersion(String version, String publicId, String systemId, String schemaLocation,
String namespace) {
this.version = version;
this.publicId = publicId;
this.systemId = systemId;
this.schemaLocation = schemaLocation;
this.namespace = namespace;
}
/**
* The version of the DTD or Schema. Prior to 8.1 this value was of the format "8_0". With 8.1 and
* later the value is of the format "8.1". Values should match constants in {@link CacheXml} like
* {@link CacheXml#VERSION_8_1}.
*
* @return the version
*
* @since GemFire 8.1
*/
public String getVersion() {
return version;
}
/**
* The schema file location.
*
* @return the schemaLocation if schema exists, otherwise null.
*
* @since GemFire 8.1
*/
public String getSchemaLocation() {
return schemaLocation;
}
/**
* The namespace.
*
* @return the namespace if schema exists, otherwise null.
*/
public String getNamespace() {
return namespace;
}
/**
* The DTD public id.
*
* @return the publicId if DTD exists, otherwise null.
* @since GemFire 8.1
*/
public String getPublicId() {
return publicId;
}
/**
* The DTD system id.
*
* @return the systemId if DTD exists, otherwise null.
* @since GemFire 8.1
*/
public String getSystemId() {
return systemId;
}
/**
* Get {@link CacheXmlVersion} for given <code>version</code> string. Use constants from
* {@link CacheXml} for example:
* <code>CacheXmlVersion.valueForVersion(CacheXml.GEMFIRE_8_1);</code>
*
* @param version string to lookup.
* @return {@link CacheXmlVersion} if exists.
* @throws IllegalArgumentException if version does not exist.
* @since GemFire 8.1
*/
public static CacheXmlVersion valueForVersion(final String version) {
final CacheXmlVersion cacheXmlVersion = valuesForVersion.get(version);
if (null == cacheXmlVersion) {
throw new IllegalArgumentException("No enum constant "
+ CacheXmlVersion.class.getCanonicalName() + " for version " + version + ".");
}
return cacheXmlVersion;
}
}