From: <fu...@us...> - 2010-01-04 17:45:43
|
Revision: 1005 http://cishell.svn.sourceforge.net/cishell/?rev=1005&view=rev Author: fugu13 Date: 2010-01-04 17:45:34 +0000 (Mon, 04 Jan 2010) Log Message: ----------- This should have been in the repository a good while back. Added Paths: ----------- trunk/templates/org.cishell.templates.tasks/src/org/cishell/templates/staticexecutable/nwb/ trunk/templates/org.cishell.templates.tasks/src/org/cishell/templates/staticexecutable/nwb/IntegrationTask.java Added: trunk/templates/org.cishell.templates.tasks/src/org/cishell/templates/staticexecutable/nwb/IntegrationTask.java =================================================================== --- trunk/templates/org.cishell.templates.tasks/src/org/cishell/templates/staticexecutable/nwb/IntegrationTask.java (rev 0) +++ trunk/templates/org.cishell.templates.tasks/src/org/cishell/templates/staticexecutable/nwb/IntegrationTask.java 2010-01-04 17:45:34 UTC (rev 1005) @@ -0,0 +1,171 @@ +/* **************************************************************************** + * CIShell: Cyberinfrastructure Shell, An Algorithm Integration Framework. + * + * All rights reserved. This program and the accompanying materials are made + * available under the terms of the Apache License v2.0 which accompanies + * this distribution, and is available at: + * http://www.apache.org/licenses/LICENSE-2.0.html + * + * Created on Aug 2, 2006 at Indiana University. + * + * Contributors: + * Indiana University - + * ***************************************************************************/ +package org.cishell.templates.staticexecutable.nwb; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Properties; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Replace; +import org.apache.tools.ant.util.FileUtils; + + +public class IntegrationTask extends Task { + private PrintWriter mf; + private String componentAttr; + private File baseDir; + private File baseProperties; + private FileUtils util; + private File template; + private String symbolicName; + + public IntegrationTask() { + componentAttr = new String(); + util = FileUtils.getFileUtils(); + symbolicName = "unknown"; + } + + public void setTemplate(File file) { + template = file; + } + + public void setBasedir(File file) { + baseDir = file; + } + + public void setBaseproperties(File file) { + this.baseProperties = file; + } + + public void execute() throws BuildException { + if (baseDir != null && baseDir.exists() && baseDir.isDirectory() && + baseProperties != null && baseProperties.exists() && + template != null && template.exists()) { + try { + setupManifest(); + + File[] files = baseDir.listFiles(); + for (int i=0; i < files.length; i++) { + if (files[i].isDirectory() && + !files[i].getName().equalsIgnoreCase("default")) { + addAlgorithm(files[i]); + } + } + + writeManifest(); + } catch (Throwable e) { + e.printStackTrace(); + throw new BuildException(e); + } + } else { + throw new BuildException("Invalid or missing argument(s)."); + } + } + + protected void addAlgorithm(File dir) throws IOException { + File serviceFile = null; + File configFile = null; + List osDirs = new ArrayList(); + + File[] files = dir.listFiles(); + for (int i=0; i < files.length; i++) { + String name = files[i].getName(); + if (name.equalsIgnoreCase("config.properties")) { + configFile = files[i]; + } else if (name.equalsIgnoreCase("service.properties")) { + serviceFile = files[i]; + } else if (files[i].isDirectory() && + !name.equalsIgnoreCase("default")) { + osDirs.add(files[i]); + } + } + + if (serviceFile != null && configFile != null) { + File componentFile = new File(serviceFile.getParentFile().getPath()+ + File.separator+"component.xml"); + util.copyFile(template, componentFile); + + String algName = serviceFile.getParentFile().getName(); + replace(componentFile,"${service.properties}",algName+"/"+serviceFile.getName()); + replace(componentFile,"${component.id}",symbolicName+"." + algName + ".component"); + replace(componentFile,"${alg.dir}",algName); + + if (componentAttr.length() != 0) { + componentAttr += ", "; + } + componentAttr += algName+"/component.xml"; + } + } + + protected void replace(File file, String token, String value) { + Replace replace = new Replace(); + replace.setProject(getProject()); + replace.setFile(file); + replace.setToken(token); + + replace.setValue(value); + replace.execute(); + } + + protected void writeManifest() { + mf.println("Service-Component: " + componentAttr); + mf.close(); + } + + protected void setupManifest() throws IOException { + File mfDir = new File(baseDir.getPath()+File.separator+"META-INF"); + File mfFile = new File(mfDir+File.separator+"MANIFEST.MF"); + mfDir.mkdirs(); + + mf = new PrintWriter(new FileOutputStream(mfFile)); + + mf.println("Manifest-Version: 1.0"); + mf.println("Bundle-ManifestVersion: 2"); + + Properties properties = new Properties(); + properties.load(new FileInputStream(baseProperties)); + + for (Enumeration i=properties.keys(); i.hasMoreElements(); ) { + String key = (String)i.nextElement(); + String value = properties.getProperty(key); + + if ("Bundle-SymbolicName".equals(key)) { + symbolicName = value; + } + + mf.println(key+": "+value); + } + + mf.println("Bundle-Localization: plugin"); + mf.println("X-AutoStart: true"); + mf.println("Import-Package: org.cishell.framework.algorithm, " + + "org.cishell.framework.data, " + + "org.osgi.framework;version=\"1.3.0\", " + + "org.cishell.templates.staticexecutable, " + + "org.osgi.service.component;version=\"1.0.0\", " + + "org.osgi.service.metatype;version=\"1.1.0\", " + + "org.osgi.service.log," + + "edu.iu.nwb.templates.staticexecutable.nwb," + + "edu.iu.nwb.util.nwbfile," + + "org.cishell.reference.service.metatype"); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |