summaryrefslogtreecommitdiff
path: root/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal
diff options
context:
space:
mode:
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal')
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java38
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java26
4 files changed, 58 insertions, 11 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
index e18bd633..b0e17e6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* implementations.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses ELKIServiceLoader
*/
@@ -243,6 +244,7 @@ public class CheckELKIServices {
if(parts.length > 1) {
StringBuilder buf = new StringBuilder();
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" has the following extraneous aliases:");
for(int i = 1; i < parts.length; i++) {
buf.append(' ').append(parts[i]);
@@ -261,6 +263,7 @@ public class CheckELKIServices {
if(buf == null) {
buf = new StringBuilder();
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" is missing the following aliases:");
}
buf.append(' ').append(a);
@@ -274,6 +277,7 @@ public class CheckELKIServices {
buf.append('\n');
}
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" has the following extraneous aliases:");
for(String a : aliases) {
buf.append(' ').append(a);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
index a278f287..4c106f83 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* interface.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
* @apiviz.uses AbstractParameterizer
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
index eea3dad6..8325872b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.application.AbstractApplication;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.Logging.Level;
import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
+import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.ELKIServiceRegistry;
import de.lmu.ifi.dbs.elki.utilities.ELKIServiceScanner;
@@ -70,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.UnParameter
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassListParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
@@ -78,6 +80,7 @@ import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
* {@link Parameter}s. Used in documentation generation only.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Parameter
*/
@@ -182,7 +185,7 @@ public class DocumentParameters {
throw new RuntimeException(e);
}
try {
- PrintStream byclassstream = new PrintStream(new BufferedOutputStream(byclassfo));
+ PrintStream byclassstream = new PrintStream(new BufferedOutputStream(byclassfo), false, "UTF-8");
makeByClassOverviewWiki(byclass, new WikiStream(byclassstream));
byclassstream.flush();
byclassstream.close();
@@ -245,7 +248,9 @@ public class DocumentParameters {
private static void buildParameterIndex(Map<Class<?>, List<Parameter<?>>> byclass, Map<OptionID, List<Pair<Parameter<?>, Class<?>>>> byopt) {
final ArrayList<TrackedParameter> options = new ArrayList<>();
ExecutorService es = Executors.newSingleThreadExecutor();
- for(final Class<?> cls : ELKIServiceRegistry.findAllImplementations(Object.class, false, true)) {
+ List<Class<?>> objs = ELKIServiceRegistry.findAllImplementations(Object.class, false, true);
+ Collections.sort(objs, new ELKIServiceScanner.ClassSorter());
+ for(final Class<?> cls : objs) {
// Doesn't have a proper name?
if(cls.getCanonicalName() == null) {
continue;
@@ -720,9 +725,18 @@ public class DocumentParameters {
Element maindl = htmldoc.createElement(HTMLUtil.HTML_DL_TAG);
body.appendChild(maindl);
- List<OptionID> opts = new ArrayList<>(byopt.keySet());
- Collections.sort(opts, new SortByOption());
+ final Comparator<OptionID> osort = new SortByOption();
+ final Comparator<Class<?>> csort = new ELKIServiceScanner.ClassSorter();
+ Comparator<Pair<Parameter<?>, Class<?>>> psort = new Comparator<Pair<Parameter<?>, Class<?>>>() {
+ @Override
+ public int compare(Pair<Parameter<?>, Class<?>> o1, Pair<Parameter<?>, Class<?>> o2) {
+ int c = osort.compare(o1.first.getOptionID(), o2.first.getOptionID());
+ return (c != 0) ? c : csort.compare(o1.second, o2.second);
+ }
+ };
+ List<OptionID> opts = new ArrayList<>(byopt.keySet());
+ Collections.sort(opts, osort);
for(OptionID oid : opts) {
final Parameter<?> firstopt = byopt.get(oid).get(0).getFirst();
// DT = definition term
@@ -787,7 +801,9 @@ public class DocumentParameters {
optdd.appendChild(p);
}
optdd.appendChild(classesul);
- for(Pair<Parameter<?>, Class<?>> clinst : byopt.get(oid)) {
+ List<Pair<Parameter<?>, Class<?>>> plist = byopt.get(oid);
+ Collections.sort(plist, psort);
+ for(Pair<Parameter<?>, Class<?>> clinst : plist) {
// DT definition term: option name, in TT for typewriter optics
Element classli = htmldoc.createElement(HTMLUtil.HTML_LI_TAG);
@@ -1020,9 +1036,11 @@ public class DocumentParameters {
if(par instanceof ClassParameter<?>) {
appendDefaultClassLink(htmldoc, par, p);
}
+ else if(par instanceof RandomParameter && par.getDefaultValue() == RandomFactory.DEFAULT) {
+ p.appendChild(htmldoc.createTextNode("use global random seed"));
+ }
else {
- Object def = par.getDefaultValue();
- p.appendChild(htmldoc.createTextNode(def.toString()));
+ p.appendChild(htmldoc.createTextNode(par.getDefaultValueAsString()));
}
optdd.appendChild(p);
}
@@ -1047,9 +1065,11 @@ public class DocumentParameters {
final Class<?> name = ((ClassParameter<?>) par).getDefaultValue();
out.javadocLink(name, null);
}
+ else if(par instanceof RandomParameter && par.getDefaultValue() == RandomFactory.DEFAULT) {
+ out.print("use global random seed");
+ }
else {
- Object def = par.getDefaultValue();
- out.print(def.toString());
+ out.print(par.getDefaultValueAsString());
}
out.println();
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
index 7d448fca..66f2bda8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
* Build a reference documentation for all available parameters.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses Reference
*/
@@ -105,7 +106,7 @@ public class DocumentReferences {
try {
File refwiki = new File(args[1]);
FileOutputStream reffow = new FileOutputStream(refwiki);
- PrintStream refstreamW = new PrintStream(reffow);
+ PrintStream refstreamW = new PrintStream(reffow, false, "UTF-8");
documentReferencesWiki(refs, refstreamW);
refstreamW.flush();
refstreamW.close();
@@ -330,7 +331,28 @@ public class DocumentReferences {
@Override
public int compare(Pair<Reference, TreeSet<Object>> p1, Pair<Reference, TreeSet<Object>> p2) {
final Object o1 = p1.second.first(), o2 = p2.second.first();
- return COMPARATOR.compare(o1, o2);
+ int c = COMPARATOR.compare(o1, o2);
+ if(c == 0) {
+ Reference r1 = p1.first, r2 = p2.first;
+ c = compareNull(r1.title(), r2.title());
+ c = (c != 0) ? c : compareNull(r1.authors(), r2.authors());
+ c = (c != 0) ? c : compareNull(r1.booktitle(), r2.booktitle());
+ }
+ return c;
+ }
+
+ /**
+ * Null-tolerant String comparison.
+ *
+ * @param s1 First string
+ * @param s2 Second string
+ * @return Order
+ */
+ private int compareNull(String s1, String s2) {
+ return (s1 == s2) ? 0 //
+ : (s1 == null) ? -1 //
+ : (s2 == null) ? +1 //
+ : s1.compareTo(s2);
}
});
return refs;