summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
diff options
context:
space:
mode:
authorErich Schubert <erich@debian.org>2011-09-24 12:24:37 +0200
committerAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:30 +0000
commit3a6ca942c89382b33bbc95ad772e4def12109da1 (patch)
tree8055db779223e3cd7f4738d9ae8e1b92c04935a8 /src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
parent31b594b746419717396c9daa8bf1863890739d82 (diff)
parent21d13de881e43d4ab86369af4c5fc744b342b3f9 (diff)
Import Debian changes 0.4.0-1
elki (0.4.0-1) unstable; urgency=low * New upstream release. (0.4.0 final) * Try to make lintian happier with the DEP-5 copyright format * Fixes a bug where various methods would require a classlabel that previously would fall-back to any kind of label available.
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java93
1 files changed, 50 insertions, 43 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java b/src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
index b5bb516e..05af4b4d 100644
--- a/src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
+++ b/src/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
@@ -196,39 +196,40 @@ public class DocumentParameters {
public void run() {
// Try a V3 style parameterizer first.
Parameterizer par = ClassGenericsUtil.getParameterizer(cls);
- if (par != null) {
+ if(par != null) {
par.configure(track);
- return;
}
- try {
- Object instance = ClassGenericsUtil.tryInstantiate(Object.class, cls, track);
- for(Pair<Object, Parameter<?, ?>> pair : track.getAllParameters()) {
- if(pair.first == null) {
- pair.first = instance;
+ else {
+ try {
+ ClassGenericsUtil.tryInstantiate(Object.class, cls, track);
+ }
+ catch(java.lang.NoSuchMethodException e) {
+ logger.warning("Could not instantiate class " + cls.getName() + " - no appropriate constructor or parameterizer found.");
+ }
+ catch(java.lang.reflect.InvocationTargetException e) {
+ if(e.getCause() instanceof RuntimeException) {
+ throw (RuntimeException) e.getCause();
+ }
+ if(e.getCause() instanceof Error) {
+ throw (Error) e.getCause();
}
- options.add(pair);
+ throw new RuntimeException(e.getCause());
}
- }
- catch(java.lang.NoSuchMethodException e) {
- logger.warning("Could not instantiate class "+cls.getName()+" - no appropriate constructor or parameterizer found.");
- }
- catch(java.lang.reflect.InvocationTargetException e) {
- if(e.getCause() instanceof RuntimeException) {
- throw (RuntimeException) e.getCause();
+ catch(RuntimeException e) {
+ throw e;
}
- if(e.getCause() instanceof Error) {
- throw (Error) e.getCause();
+ catch(Exception e) {
+ throw new RuntimeException(e);
+ }
+ catch(java.lang.Error e) {
+ throw new RuntimeException(e);
}
- throw new RuntimeException(e.getCause());
- }
- catch(RuntimeException e) {
- throw e;
- }
- catch(Exception e) {
- throw new RuntimeException(e);
}
- catch(java.lang.Error e) {
- throw new RuntimeException(e);
+ for(Pair<Object, Parameter<?, ?>> pair : track.getAllParameters()) {
+ if(pair.first == null) {
+ pair.first = cls;
+ }
+ options.add(pair);
}
}
}, null);
@@ -296,7 +297,7 @@ public class DocumentParameters {
boolean inlist = false;
if(byo != null) {
for(Pair<Parameter<?, ?>, Class<?>> pair : byo) {
- if(pair.second == c) {
+ if(pair.second.equals(c)) {
inlist = true;
break;
}
@@ -306,9 +307,6 @@ public class DocumentParameters {
byopt.add(o.getOptionID(), new Pair<Parameter<?, ?>, Class<?>>(o, c));
}
}
- if(!byopt.contains(o.getOptionID(), new Pair<Parameter<?, ?>, Class<?>>(o, c))) {
- byopt.add(o.getOptionID(), new Pair<Parameter<?, ?>, Class<?>>(o, c));
- }
}
es.shutdownNow();
logger.debug("byClass: " + byclass.size() + " byOpt: " + byopt.size());
@@ -435,7 +433,7 @@ public class DocumentParameters {
elemdd.appendChild(elemp);
// class restriction?
if(opt instanceof ClassParameter<?>) {
- appendClassRestriction(htmldoc, (ClassParameter<?>) opt, elemdd);
+ appendClassRestriction(htmldoc, ((ClassParameter<?>) opt).getRestrictionClass(), elemdd);
}
// default value? completions?
appendDefaultValueIfSet(htmldoc, opt, elemdd);
@@ -509,7 +507,7 @@ public class DocumentParameters {
Collections.sort(opts, new SortByOption());
for(OptionID oid : opts) {
- Parameter<?, ?> firstopt = byopt.get(oid).get(0).getFirst();
+ final Parameter<?, ?> firstopt = byopt.get(oid).get(0).getFirst();
// DT = definition term
Element optdt = htmldoc.createElement(HTMLUtil.HTML_DT_TAG);
// Anchor for references
@@ -533,8 +531,17 @@ public class DocumentParameters {
optdd.appendChild(elemp);
}
// class restriction?
+ Class<?> superclass = null;
if(firstopt instanceof ClassParameter<?>) {
- appendClassRestriction(htmldoc, (ClassParameter<?>) firstopt, optdd);
+ // Find superclass heuristically
+ superclass = ((ClassParameter<?>) firstopt).getRestrictionClass();
+ for (Pair<Parameter<?, ?>, Class<?>> clinst : byopt.get(oid)) {
+ ClassParameter<?> cls = (ClassParameter<?>) clinst.getFirst();
+ if (!cls.getRestrictionClass().equals(superclass) && cls.getRestrictionClass().isAssignableFrom(superclass)) {
+ superclass = cls.getRestrictionClass();
+ }
+ }
+ appendClassRestriction(htmldoc, superclass, optdd);
}
// default value?
appendDefaultValueIfSet(htmldoc, firstopt, optdd);
@@ -566,8 +573,8 @@ public class DocumentParameters {
ClassParameter<?> cls = (ClassParameter<?>) clinst.getFirst();
if(cls.getRestrictionClass() != null) {
// TODO: if it is null, it could still be different!
- if(!cls.getRestrictionClass().equals(((ClassParameter<?>) firstopt).getRestrictionClass())) {
- appendClassRestriction(htmldoc, cls, classli);
+ if(!cls.getRestrictionClass().equals(superclass)) {
+ appendClassRestriction(htmldoc, cls.getRestrictionClass(), classli);
}
}
else {
@@ -599,22 +606,22 @@ public class DocumentParameters {
p.appendChild(defa);
}
- private static void appendClassRestriction(Document htmldoc, ClassParameter<?> opt, Element elemdd) {
- if(opt.getRestrictionClass() == null) {
- logger.warning("No restriction class for Parameter " + opt.getName());
+ private static void appendClassRestriction(Document htmldoc, Class<?> restriction, Element elemdd) {
+ if(restriction == null) {
+ logger.warning("No restriction class!");
return;
}
Element p = htmldoc.createElement(HTMLUtil.HTML_P_TAG);
p.appendChild(htmldoc.createTextNode(HEADER_CLASS_RESTRICTION));
- if(opt.getRestrictionClass().isInterface()) {
+ if(restriction.isInterface()) {
p.appendChild(htmldoc.createTextNode(HEADER_CLASS_RESTRICTION_IMPLEMENTING));
}
else {
p.appendChild(htmldoc.createTextNode(HEADER_CLASS_RESTRICTION_EXTENDING));
}
Element defa = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
- defa.setAttribute(HTMLUtil.HTML_HREF_ATTRIBUTE, linkForClassName(opt.getRestrictionClass().getName()));
- defa.setTextContent(opt.getRestrictionClass().getName());
+ defa.setAttribute(HTMLUtil.HTML_HREF_ATTRIBUTE, linkForClassName(restriction.getName()));
+ defa.setTextContent(restriction.getName());
p.appendChild(defa);
elemdd.appendChild(p);
}
@@ -645,8 +652,8 @@ public class DocumentParameters {
elemdd.appendChild(ul);
}
// Report when not in properties file.
- if (Properties.ELKI_PROPERTIES.getProperty(opt.getRestrictionClass().getName()).length == 0) {
- logger.warning(opt.getRestrictionClass().getName()+" not in properties. No autocompletion available in release GUI.");
+ if(Properties.ELKI_PROPERTIES.getProperty(opt.getRestrictionClass().getName()).length == 0) {
+ logger.warning(opt.getRestrictionClass().getName() + " not in properties. No autocompletion available in release GUI.");
}
}
}