blob: 8fc509d200bca77ff4cea3651edd72dcc0d57769 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.yoko.rmi.impl;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class StubBuilder {
public StubBuilder() {
}
/**
* Generate stubs for the list of Classes (java.lang.Class objects)
* specified in INTERFACES; into the directory specified by DIR. The
* resulting set of generated classes may well include more classes than
* specified in INTERFACES.
*
* @return list of File objects for generated files.
*/
static public Collection generateStubs(File dir, Collection interfaces)
throws IOException {
Set pending = new HashSet();
ArrayList result = new ArrayList();
TypeRepository rep = TypeRepository.get();
Iterator it = interfaces.iterator();
while (it.hasNext()) {
Class cl = (Class) it.next();
RemoteDescriptor desc = (RemoteDescriptor) rep.getDescriptor(cl);
desc.addDependencies(pending);
}
Class[] classes = new Class[pending.size()];
pending.toArray(classes);
for (int i = 0; i < classes.length; i++) {
if (!java.rmi.Remote.class.isAssignableFrom(classes[i])) {
continue;
}
RemoteDescriptor desc = (RemoteDescriptor) rep
.getDescriptor(classes[i]);
String name = desc.getStubClassName();
String file = name.replace('.', File.separatorChar) + ".java";
File stubfile = new File(dir, file);
File gendir = stubfile.getParentFile();
gendir.mkdirs();
PrintWriter pw = new PrintWriter(new FileWriter(stubfile));
desc.writeStubClass(pw);
pw.close();
result.add(file);
}
return result;
}
public static void main(String[] args) throws Exception {
ArrayList al = new ArrayList();
for (int i = 0; i < args.length; i++) {
al.add(Class.forName(args[i]));
}
StubBuilder.generateStubs(new File("."), al);
}
}