001 /* This file is part of the project "Hilbert II" - http://www.qedeq.org
002 *
003 * Copyright 2000-2013, Michael Meyling <mime@qedeq.org>.
004 *
005 * "Hilbert II" is free software; you can redistribute
006 * it and/or modify it under the terms of the GNU General Public
007 * License as published by the Free Software Foundation; either
008 * version 2 of the License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU General Public License for more details.
014 */
015
016 package org.qedeq.kernel.bo.common;
017
018 import java.net.URLConnection;
019
020 import org.qedeq.base.utility.YodaUtility;
021
022
023 /**
024 * This class provides basic informations about the kernel.
025 *
026 * @author Michael Meyling
027 */
028 public final class BasicKernel implements KernelProperties {
029
030
031 /** Version of this kernel. */
032 private static final String KERNEL_VERSION = "0.04.05";
033
034 /** Version dependent directory of this kernel. */
035 private static final String KERNEL_VERSION_DIRECTORY = KERNEL_VERSION.replace('.', '_');
036
037 /** Version code . */
038 private static final String KERNEL_CODE_NAME = "gaffsie";
039
040 /** Kernel version dedication. */
041 private static final String KERNEL_DEDICATED
042 = "dedicated to the the blade runner Rick Deckard and the glittering c-beams in the dark "
043 + "near the Tannh\u00e4user Gate";
044
045 /** Descriptive version information of this kernel. */
046 private static final String DESCRIPTIVE_KERNEL_VERSION
047 = "Hilbert II - Version " + KERNEL_VERSION + " (" + KERNEL_CODE_NAME + ") ["
048 + getBuildIdFromManifest() + "] " + KERNEL_DEDICATED;
049
050 /** Maximal supported rule version of this kernel. */
051 private static final String MAXIMAL_RULE_VERSION = "1.01.00";
052
053 /**
054 * Constructor.
055 */
056 public BasicKernel() {
057 }
058
059 /**
060 * Get build information from JAR manifest file. Is also non empty string if no manifest
061 * information is available.
062 *
063 * @return Implementation-version.
064 */
065 private static String getBuildIdFromManifest() {
066 String build = BasicKernel.class.getPackage().getImplementationVersion();
067 if (build == null) {
068 build = "no regular build";
069 }
070 return build;
071 }
072
073 public String getBuildId() {
074 return getBuildIdFromManifest();
075 }
076
077 public final String getKernelVersion() {
078 return KERNEL_VERSION;
079 }
080
081 public final String getKernelCodeName() {
082 return KERNEL_CODE_NAME;
083 }
084
085 public final String getKernelVersionDirectory() {
086 return KERNEL_VERSION_DIRECTORY;
087 }
088
089 public final String getDescriptiveKernelVersion() {
090 return DESCRIPTIVE_KERNEL_VERSION;
091 }
092
093 public final String getDedication() {
094 return KERNEL_DEDICATED;
095 }
096
097 public final String getMaximalRuleVersion() {
098 return MAXIMAL_RULE_VERSION;
099 }
100
101 public final boolean isRuleVersionSupported(final String ruleVersion) {
102 // FIXME 20130113 m31: this must change if we really want to use it
103 return MAXIMAL_RULE_VERSION.equals(ruleVersion);
104 }
105
106 /**
107 * This class ist just for solving the lazy loading problem thread save.
108 * see <a href="http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom">
109 * Initialization_on_demand_holder_idiom</a>.
110 */
111 private static final class LazyHolderTimeoutMethods {
112
113 /** Lazy initialized constant that knows about the existence of the method
114 * <code>URLConnection.setConnectTimeout</code>. This depends on the currently running
115 * JVM. */
116 private static final boolean IS_SET_CONNECTION_TIMEOUT_SUPPORTED = YodaUtility.existsMethod(
117 URLConnection.class, "setConnectTimeout",
118 new Class[] {Integer.TYPE});
119
120 /** Lazy initialized constant that knows about the existence of the method
121 * <code>URLConnection.setReadTimeout</code>. This depends on the currently running
122 * JVM. */
123 private static final boolean IS_SET_READ_TIMEOUT_SUSPPORTED = YodaUtility.existsMethod(
124 URLConnection.class, "setReadTimeout",
125 new Class[] {Integer.TYPE});
126
127 /**
128 * Hidden constructor.
129 */
130 private LazyHolderTimeoutMethods() {
131 // nothing to do
132 }
133
134 }
135
136 public boolean isSetConnectionTimeOutSupported() {
137 return LazyHolderTimeoutMethods.IS_SET_CONNECTION_TIMEOUT_SUPPORTED;
138 }
139
140 public boolean isSetReadTimeoutSupported() {
141 return LazyHolderTimeoutMethods.IS_SET_READ_TIMEOUT_SUSPPORTED;
142 }
143
144 }
|