Javaプロジェクトのためのクラスパスをロード
Studioはhbmプロファイルを利用してSQLファイルを生成する場合、STプロジェクトで生成したPOJOクラスにアクセスする必要があるので、コードジェネレータ(org.studio.generator.Sql Generator)をSTプロジェクトにロードする方法は以下の通りです。プロジェクトにロードと実行するクラス(org.studio.generator.Sql Generator)のclassファイルを一つのstudio.jarファイルに包装します。ここでorg.studio.generator.Sql Generatorは、public static void main(String[]args)を含むJavaアプリとして動作するクラスです。 は、あるトリガポイントを介してSTプロジェクトにstudio.jarファイルをロードまたは削除する。Studioではorg.eclipspe.wstore.com.com.project.facets拡張点を通してSTプロジェクトにfacetを追加する際にorg.studio.project.stnature、org.sprigframe.ide.eclipse.com.sprignatureを追加します。
public class SqlGenerator {
/**
* @param args 3 :
* <li> : hbm , “#”
* <li> :
* <li> :
*
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
if (args == null || args.length != 3)
return;
Configuration cfg = new Configuration();
cfg.getProperties().put("hibernate.dialect",
"org.hibernate.dialect.Oracle9Dialect");
String hbmPaths = args[0];
StringTokenizer st = new StringTokenizer(hbmPaths, "#");
while (st.hasMoreElements()) {
String path = st.nextElement().toString();
File file = new File(path);
if(file.exists()){
cfg.addFile(file);
}
}
SchemaExport se = new SchemaExport(cfg);
File dir = new File(args[1]);
//
File temp = dir;
while(!temp.getParentFile().getName().equals("") ){//
temp = temp.getParentFile();
if(!temp.exists()){
temp.mkdir();
}
}
if(!dir.exists() ){
dir.mkdir();
}
if( dir.exists() && dir.isDirectory()){
File file = new File(args[2]);
se.setOutputFile(args[2]);
}
se.execute(true, false, false, false);
}
}
/**
* classpath studio.jar
* @param javaProject
*/
private void addExtenalJar(IJavaProject javaProject) {
try {
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
IClasspathEntry entry = JavaCore.newLibraryEntry(
new Path(getJarPath()), null, null);
IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1];
System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length);
newEntries[oldEntries.length]=entry;
javaProject.setRawClasspath(newEntries, null);
} catch (JavaModelException e) {
e.printStackTrace();
}
}
/**
* @return studio.jar
*/
private String getJarPath() {
URL url = Platform.getBundle(SpringUIPlugin.PLUGIN_ID).getEntry(STUDIO_ JAR);
try {
return FileLocator.toFileURL(url).getFile();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* classpath studio.jar
* @param javaProject
*/
private void removeExtenalJar(IJavaProject javaProject){
try {
IClasspathEntry[] oldEntries = javaProject.getRawClasspath();
List<IClasspathEntry> list=new ArrayList<IClasspathEntry>();
for(IClasspathEntry entry:oldEntries){
if(!(entry.getEntryKind()==IClasspathEntry.CPE_LIBRARY && STUDIO_JAR.equals(entry.getPath().toFile().getName())) ){
list.add(entry);
}
}
IClasspathEntry[] newEntries =(IClasspathEntry[])list.toArray(new IClasspathEntry[]{});
javaProject.setRawClasspath(newEntries, null);
} catch (JavaModelException e) {
e.printStackTrace();
}
}