Skip to content

Commit

Permalink
util: add generics to ObjectFactory
Browse files Browse the repository at this point in the history
ObjectFactory is naturally parameterised by the type of the objects
it is creating.
  • Loading branch information
mbtaylor authored and mmpcn committed Nov 27, 2014
1 parent f6db67d commit 034f16c
Show file tree
Hide file tree
Showing 15 changed files with 71 additions and 81 deletions.
9 changes: 5 additions & 4 deletions task/src/main/uk/ac/starlink/task/MultiTaskInvoker.java
Expand Up @@ -18,16 +18,17 @@
public class MultiTaskInvoker {

private final String toolName_;
private final ObjectFactory taskFactory_;
private final ObjectFactory<Task> taskFactory_;
private String versionMessage_;

/**
* Constructor.
*
* @param toolName user-known name for the tool
* @param taskFactory factory which produces {@link Task} objects
* @param taskFactory lists available tasks
*/
public MultiTaskInvoker( String toolName, ObjectFactory taskFactory ) {
public MultiTaskInvoker( String toolName,
ObjectFactory<Task> taskFactory ) {
toolName_ = toolName;
taskFactory_ = taskFactory;
}
Expand Down Expand Up @@ -95,7 +96,7 @@ else if ( arg.charAt( 0 ) == '-' ) {
String taskName = (String) argList.remove( 0 );
Task task;
try {
task = (Task) taskFactory_.createObject( taskName );
task = taskFactory_.createObject( taskName );
}
catch ( LoadException e ) {
System.err.println( "No such task " + taskName );
Expand Down
19 changes: 9 additions & 10 deletions ttools/src/main/uk/ac/starlink/ttools/Stilts.java
Expand Up @@ -20,8 +20,8 @@
*/
public class Stilts {

private static ObjectFactory taskFactory_;
private static ObjectFactory modeFactory_;
private static ObjectFactory<Task> taskFactory_;
private static ObjectFactory<ProcessingMode> modeFactory_;
static { init(); }

public static final String VERSION_RESOURCE = "stilts.version";
Expand All @@ -48,20 +48,18 @@ public static void main( String[] args ) {
/**
* Returns the factory which can create any of the known output modes.
*
* @return factory which creates
* {@link uk.ac.starlink.ttools.mode.ProcessingMode} objects.
* @return factory which creates processing modes
*/
public static ObjectFactory getModeFactory() {
public static ObjectFactory<ProcessingMode> getModeFactory() {
return modeFactory_;
}

/**
* Returns the factory which can create any of the known tasks.
*
* @return factory which creates
* {@link uk.ac.starlink.task.Task} objects.
* @return factory which creates tasks
*/
public static ObjectFactory getTaskFactory() {
public static ObjectFactory<Task> getTaskFactory() {
return taskFactory_;
}

Expand All @@ -87,7 +85,7 @@ public static String getStarjavaRevision() {
* Initialises factories.
*/
private static void init() {
taskFactory_ = new ObjectFactory( Task.class );
taskFactory_ = new ObjectFactory<Task>( Task.class );
String taskPkg = "uk.ac.starlink.ttools.task.";
taskFactory_.register( "calc", taskPkg + "Calc" );
taskFactory_.register( "cdsskymatch", taskPkg + "CdsUploadSkyMatch" );
Expand Down Expand Up @@ -122,7 +120,8 @@ private static void init() {
taskFactory_.register( "votcopy", taskPkg + "VotCopy" );
taskFactory_.register( "votlint", taskPkg + "VotLint" );

modeFactory_ = new ObjectFactory( ProcessingMode.class );
modeFactory_ =
new ObjectFactory<ProcessingMode>( ProcessingMode.class );
String modePkg = "uk.ac.starlink.ttools.mode.";
modeFactory_.register( "out", modePkg + "CopyMode" );
modeFactory_.register( "meta", modePkg + "MetadataMode" );
Expand Down
6 changes: 3 additions & 3 deletions ttools/src/main/uk/ac/starlink/ttools/build/FilterDoc.java
Expand Up @@ -24,13 +24,13 @@ private FilterDoc( PrintStream out ) {
}

private void write() throws LoadException {
ObjectFactory stepFact = StepFactory.getInstance().getFilterFactory();
ObjectFactory<ProcessingFilter> stepFact =
StepFactory.getInstance().getFilterFactory();
String[] fnames = stepFact.getNickNames();
Arrays.sort( fnames );
for ( int i = 0; i < fnames.length; i++ ) {
String name = fnames[ i ];
ProcessingFilter filter = (ProcessingFilter)
stepFact.createObject( name );
ProcessingFilter filter = stepFact.createObject( name );
out_.println( "<subsubsect id=\"" + name + "\">" );
out_.println( "<subhead><title><code>" + name
+ "</code></title></subhead>" );
Expand Down
21 changes: 9 additions & 12 deletions ttools/src/main/uk/ac/starlink/ttools/build/JyStilts.java
Expand Up @@ -628,7 +628,7 @@ private String[] defTableClass( String cname )
lineList.addAll( Arrays.asList( prefixLines( " ", writeLines ) ) );

/* Add filters as methods. */
ObjectFactory filterFactory =
ObjectFactory<ProcessingFilter> filterFactory =
StepFactory.getInstance().getFilterFactory();
String[] filterNames = filterFactory.getNickNames();
for ( int i = 0; i < filterNames.length; i++ ) {
Expand All @@ -639,7 +639,7 @@ private String[] defTableClass( String cname )
}

/* Add modes as methods. */
ObjectFactory modeFactory = stilts_.getModeFactory();
ObjectFactory<ProcessingMode> modeFactory = stilts_.getModeFactory();
String[] modeNames = modeFactory.getNickNames();
for ( int i = 0; i < modeNames.length; i++ ) {
String name = modeNames[ i ];
Expand Down Expand Up @@ -873,9 +873,8 @@ private String[] defCmd( String fname, String filterNickName,
boolean isBound )
throws LoadException, SAXException {
ProcessingFilter filter =
(ProcessingFilter) StepFactory.getInstance()
.getFilterFactory()
.createObject( filterNickName );
StepFactory.getInstance().getFilterFactory()
.createObject( filterNickName );
String usage = filter.getUsage();
boolean hasUsage = usage != null && usage.trim().length() > 0;
String tArgName = isBound ? "self" : "table";
Expand Down Expand Up @@ -930,8 +929,7 @@ private String[] defMode( String fname, String modeNickName,
boolean isBound )
throws LoadException, SAXException {
ProcessingMode mode =
(ProcessingMode) stilts_.getModeFactory()
.createObject( modeNickName );
stilts_.getModeFactory().createObject( modeNickName );

/* Assemble mandatory and optional parameters. */
Parameter[] params = mode.getAssociatedParameters();
Expand Down Expand Up @@ -1010,8 +1008,7 @@ private String[] defMode( String fname, String modeNickName,
*/
private String[] defTask( String fname, String taskNickName )
throws LoadException, SAXException {
Task task =
(Task) stilts_.getTaskFactory().createObject( taskNickName );
Task task = stilts_.getTaskFactory().createObject( taskNickName );

/* Identify tasks whose primary output is the table presented to
* the processing mode. */
Expand Down Expand Up @@ -1326,7 +1323,7 @@ public void writeModule( Writer writer )
writeLines( defFilter( "tfilter" ), writer );

/* Write task wrappers. */
ObjectFactory taskFactory = stilts_.getTaskFactory();
ObjectFactory<Task> taskFactory = stilts_.getTaskFactory();
String[] taskNames = taskFactory.getNickNames();
for ( int i = 0; i < taskNames.length; i++ ) {
String name = taskNames[ i ];
Expand All @@ -1335,7 +1332,7 @@ public void writeModule( Writer writer )
}

/* Write filter wrappers. */
ObjectFactory filterFactory =
ObjectFactory<ProcessingFilter> filterFactory =
StepFactory.getInstance().getFilterFactory();
String[] filterNames = filterFactory.getNickNames();
for ( int i = 0; i < filterNames.length; i++ ) {
Expand All @@ -1345,7 +1342,7 @@ public void writeModule( Writer writer )
}

/* Write mode wrappers. */
ObjectFactory modeFactory = stilts_.getModeFactory();
ObjectFactory<ProcessingMode> modeFactory = stilts_.getModeFactory();
String[] modeNames = modeFactory.getNickNames();
for ( int i = 0; i < modeNames.length; i++ ) {
String name = modeNames[ i ];
Expand Down
5 changes: 2 additions & 3 deletions ttools/src/main/uk/ac/starlink/ttools/build/ModeDoc.java
Expand Up @@ -26,14 +26,13 @@ private ModeDoc( PrintStream out ) {
}

private void write() throws LoadException {
ObjectFactory modeFact = Stilts.getModeFactory();
ObjectFactory<ProcessingMode> modeFact = Stilts.getModeFactory();
String[] mnames = modeFact.getNickNames();
Arrays.sort( mnames );
OutputModeParameter omodeParam = new OutputModeParameter( "omode" );
for ( int i = 0; i < mnames.length; i++ ) {
String name = mnames[ i ];
ProcessingMode mode = (ProcessingMode)
modeFact.createObject( name );
ProcessingMode mode = modeFact.createObject( name );
out_.println( "<subsubsect id=\"mode-" + name + "\">" );
out_.println( "<subhead><title><code>" + name
+ "</code></title></subhead>" );
Expand Down
Expand Up @@ -13,11 +13,11 @@
*/
public class PurposeWriter {
public static void main( String[] args ) throws LoadException {
ObjectFactory taskFactory = Stilts.getTaskFactory();
ObjectFactory<Task> taskFactory = Stilts.getTaskFactory();
String[] taskNames = taskFactory.getNickNames();
for ( int i = 0; i < taskNames.length; i++ ) {
String name = taskNames[ i ];
Task task = (Task) taskFactory.createObject( name );
Task task = taskFactory.createObject( name );
String purpose = task.getPurpose();
String entDef = new StringBuffer()
.append( "<!ENTITY " )
Expand Down
8 changes: 4 additions & 4 deletions ttools/src/main/uk/ac/starlink/ttools/cea/CeaWriter.java
Expand Up @@ -362,12 +362,12 @@ static CeaTask[] createTaskList() throws LoadException {

/* Get a map containing each of the known STILTS tasks keyed by
* name. */
ObjectFactory taskFactory = Stilts.getTaskFactory();
ObjectFactory<Task> taskFactory = Stilts.getTaskFactory();
String[] taskNames = taskFactory.getNickNames();
Map appMap = new HashMap();
for ( int i = 0; i < taskNames.length; i++ ) {
String name = taskNames[ i ];
Task task = (Task) taskFactory.createObject( name );
Task task = taskFactory.createObject( name );

/* MapperTasks with VariableTablesInput won't work because
* they construct their argument lists on the fly from other
Expand Down Expand Up @@ -560,8 +560,8 @@ else if ( arg.equals( "-task" ) && it.hasNext() ) {
System.err.println( usage );
return 1;
}
task1 = new CeaTask( (Task) Stilts.getTaskFactory()
.createObject( taskName ),
task1 = new CeaTask( Stilts.getTaskFactory()
.createObject( taskName ),
taskName );
}
else if ( arg.equals( "-redirects" ) ) {
Expand Down
21 changes: 9 additions & 12 deletions ttools/src/main/uk/ac/starlink/ttools/filter/StepFactory.java
Expand Up @@ -21,7 +21,7 @@
*/
public class StepFactory {

private final ObjectFactory filterFactory_;
private final ObjectFactory<ProcessingFilter> filterFactory_;
private static StepFactory instance_;

/**
Expand Down Expand Up @@ -68,12 +68,11 @@ private StepFactory() {
}

/**
* Returns the object factory which can create {@link ProcessingFilter}
* instances from their nicknames.
* Returns the factory which can create filters from their nicknames.
*
* @return ProcessingFilter factory
*/
public ObjectFactory getFilterFactory() {
public ObjectFactory<ProcessingFilter> getFilterFactory() {
return filterFactory_;
}

Expand All @@ -87,14 +86,14 @@ public ObjectFactory getFilterFactory() {
*/
public ProcessingStep[] createSteps( String text ) throws TaskException {
String[] lines = Tokenizer.tokenizeLines( text );
List stepList = new ArrayList();
List<ProcessingStep> stepList = new ArrayList<ProcessingStep>();
for ( int i = 0; i < lines.length; i++ ) {
ProcessingStep step = createStep( lines[ i ] );
if ( step != null ) {
stepList.add( step );
}
}
return (ProcessingStep[]) stepList.toArray( new ProcessingStep[ 0 ] );
return stepList.toArray( new ProcessingStep[ 0 ] );
}

/**
Expand All @@ -118,14 +117,14 @@ public ProcessingStep createStep( String line ) throws TaskException {

/* Get the name of the command and the other arguments. */
String cmd = tokens[ 0 ];
List argList = new ArrayList( Arrays.asList( tokens ) );
List<String> argList = new ArrayList<String>( Arrays.asList( tokens ) );
argList.remove( 0 );

/* Try to make and return a filter command from the tokens. */
if ( filterFactory_.isRegistered( cmd ) ) {
ProcessingFilter filter;
try {
filter = (ProcessingFilter) filterFactory_.createObject( cmd );
filter = filterFactory_.createObject( cmd );
}
catch ( LoadException e ) {
throw new TaskException( "Trouble loading command " + cmd, e );
Expand All @@ -138,8 +137,7 @@ public ProcessingStep createStep( String line ) throws TaskException {
else {
boolean containSpace = false;
StringBuffer msg = new StringBuffer( "Unused arguments:" );
for ( Iterator it = argList.iterator(); it.hasNext(); ) {
String arg = (String) it.next();
for ( String arg : argList ) {
containSpace = containSpace || arg.indexOf( ' ' ) >= 0;
msg.append( " '" )
.append( arg )
Expand Down Expand Up @@ -196,8 +194,7 @@ private String getFilterUsages() {
for ( int i = 0; i < fnames.length; i++ ) {
try {
String fname = fnames[ i ];
ProcessingFilter filter = (ProcessingFilter)
filterFactory_.createObject( fname );
ProcessingFilter filter = filterFactory_.createObject( fname );
String fintro = " " + fname;
sbuf.append( fintro );
String fusage = filter.getUsage();
Expand Down
4 changes: 2 additions & 2 deletions ttools/src/main/uk/ac/starlink/ttools/server/FormServlet.java
Expand Up @@ -33,7 +33,7 @@
*/
public class FormServlet extends HttpServlet {

private ObjectFactory taskFactory_;
private ObjectFactory<Task> taskFactory_;
private StarTableFactory tableFactory_;
private String taskBase_;
private Map formWriterMap_;
Expand Down Expand Up @@ -225,7 +225,7 @@ private abstract class FormWriter {
*/
public FormWriter( String taskName ) throws LoadException {
taskName_ = taskName;
task_ = (Task) taskFactory_.createObject( taskName );
task_ = taskFactory_.createObject( taskName );
paramMap_ = new HashMap();
Parameter[] params = task_.getParameters();
for ( int ip = 0; ip < params.length; ip++ ) {
Expand Down
6 changes: 3 additions & 3 deletions ttools/src/main/uk/ac/starlink/ttools/server/TaskServlet.java
Expand Up @@ -40,7 +40,7 @@
*/
public class TaskServlet extends HttpServlet {

private ObjectFactory taskFactory_;
private ObjectFactory<Task> taskFactory_;
private StarTableFactory tableFactory_;
private StarTableOutput tableOutput_;
private JDBCAuthenticator jdbcAuth_;
Expand Down Expand Up @@ -117,7 +117,7 @@ protected void process( HttpServletRequest request,
assert taskFactory_.isRegistered( taskName );
Task task;
try {
task = (Task) taskFactory_.createObject( taskName );
task = taskFactory_.createObject( taskName );
}
catch ( LoadException e ) {
replyError( response, 500, e );
Expand Down Expand Up @@ -332,7 +332,7 @@ public int compare( Object o1, Object o2 ) {
* @throws IllegalArgumentException if any unknown task name
* is included in <code>taskList</code>
*/
public static String[] getTaskNames( ObjectFactory taskFactory,
public static String[] getTaskNames( ObjectFactory<Task> taskFactory,
String taskList ) {
Collection knownTasks =
new HashSet( Arrays.asList( taskFactory.getNickNames() ) );
Expand Down
Expand Up @@ -89,14 +89,13 @@ public String getExtraUsage( TableEnvironment env ) {
public static String getFiltersUsage( TableEnvironment env ) {
StringBuffer sbuf = new StringBuffer()
.append( " Known filter commands:\n" );
ObjectFactory filterFactory = StepFactory.getInstance()
.getFilterFactory();
ObjectFactory<ProcessingFilter> filterFactory =
StepFactory.getInstance().getFilterFactory();
String[] fnames = filterFactory.getNickNames();
for ( int i = 0; i < fnames.length; i++ ) {
String fname = fnames[ i ];
try {
ProcessingFilter filter = (ProcessingFilter)
filterFactory.createObject( fname );
ProcessingFilter filter = filterFactory.createObject( fname );
String fusage = filter.getUsage();
sbuf.append( " " )
.append( fname );
Expand Down

0 comments on commit 034f16c

Please sign in to comment.