Skip to content

Commit 8e55d98

Browse files
gselzerctrueden
authored andcommitted
WIP: help Ops
1 parent e8d2880 commit 8e55d98

2 files changed

Lines changed: 142 additions & 0 deletions

File tree

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.help;
31+
32+
import java.util.ArrayList;
33+
import java.util.Iterator;
34+
import java.util.List;
35+
36+
import org.scijava.ops.OpUtils;
37+
import org.scijava.ops.matcher.OpCandidate;
38+
import org.scijava.ops.matcher.OpInfo;
39+
40+
/**
41+
* Base class for help operations.
42+
*
43+
* @author Curtis Rueden
44+
*/
45+
public abstract class AbstractHelp {
46+
47+
protected String help;
48+
49+
protected void help(final List<OpCandidate> candidates) {
50+
final ArrayList<OpInfo> infos = new ArrayList<>();
51+
for (final OpCandidate candidate : candidates) {
52+
infos.add(candidate.opInfo());
53+
}
54+
help(infos);
55+
}
56+
57+
protected void help(final Iterable<? extends OpInfo> infos) {
58+
Iterator<? extends OpInfo> itr = infos.iterator();
59+
if (!itr.hasNext()){
60+
help = "No such operation.";
61+
return;
62+
}
63+
64+
final StringBuilder sb = new StringBuilder("Available operations:");
65+
for (final OpInfo info : infos) {
66+
sb.append("\n\t" + OpUtils.opString(info));
67+
}
68+
69+
// TODO: ops cannot (yet) have descriptions.
70+
// if (infos.size() == 1) {
71+
// final OpInfo info = infos.iterator().next();
72+
// final String description = info.cInfo().getDescription();
73+
// if (description != null && !description.isEmpty()) {
74+
// sb.append("\n\n" + description);
75+
// }
76+
// }
77+
78+
help = sb.toString();
79+
}
80+
81+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
* #%L
3+
* ImageJ software for multidimensional image processing and analysis.
4+
* %%
5+
* Copyright (C) 2014 - 2018 ImageJ developers.
6+
* %%
7+
* Redistribution and use in source and binary forms, with or without
8+
* modification, are permitted provided that the following conditions are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright notice,
11+
* this list of conditions and the following disclaimer.
12+
* 2. Redistributions in binary form must reproduce the above copyright notice,
13+
* this list of conditions and the following disclaimer in the documentation
14+
* and/or other materials provided with the distribution.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20+
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
* POSSIBILITY OF SUCH DAMAGE.
27+
* #L%
28+
*/
29+
30+
package net.imagej.ops.help;
31+
32+
import java.util.function.BiFunction;
33+
34+
import org.scijava.Priority;
35+
import org.scijava.ops.OpService;
36+
import org.scijava.ops.core.Op;
37+
import org.scijava.ops.matcher.OpInfo;
38+
import org.scijava.param.Parameter;
39+
import org.scijava.plugin.Plugin;
40+
import org.scijava.struct.ItemIO;
41+
42+
/**
43+
* Gets documentation for the given name.
44+
*
45+
* @author Mark Hiner
46+
*/
47+
@Plugin(type = Op.class, name = "help", priority = Priority.HIGH,
48+
description = "Gets documentation for all Ops with the given name")
49+
@Parameter(key = "name")
50+
@Parameter(key = "opService")
51+
@Parameter(key = "opInfo", type = ItemIO.OUTPUT)
52+
public class HelpForName extends AbstractHelp implements BiFunction<String, OpService, String> {
53+
54+
@Override
55+
public String apply(String name, OpService ops) {
56+
final Iterable<OpInfo> allOps = ops.infos(name);
57+
help(allOps);
58+
return help;
59+
}
60+
61+
}

0 commit comments

Comments
 (0)