Revision: 4110
http://vexi.svn.sourceforge.net/vexi/?rev=4110&view=rev
Author: mkpg2
Date: 2011-04-15 00:55:53 +0000 (Fri, 15 Apr 2011)
Log Message:
-----------
Improve. Support multiple 'vexis' inputs to allow multiple applications to be
contained in a single deployment directory.
Modified Paths:
--------------
trunk/org.vexi-build.deployment/src/main/java/org/vexi/build/deployment/VexiDeploymentAssembler.java
Modified:
trunk/org.vexi-build.deployment/src/main/java/org/vexi/build/deployment/VexiDeploymentAssembler.java
===================================================================
---
trunk/org.vexi-build.deployment/src/main/java/org/vexi/build/deployment/VexiDeploymentAssembler.java
2011-04-14 12:50:22 UTC (rev 4109)
+++
trunk/org.vexi-build.deployment/src/main/java/org/vexi/build/deployment/VexiDeploymentAssembler.java
2011-04-15 00:55:53 UTC (rev 4110)
@@ -1,113 +1,169 @@
package org.vexi.build.deployment;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.*;
+import java.util.*;
import org.vexi.util.IOUtil;
-import ebuild.api.IAssemblerArgument;
-import ebuild.api.IEBuild;
-import ebuild.api.IInput;
-import ebuild.api.IInputMap;
+import ebuild.api.*;
import ebuild.api.log.ILogger;
-import ebuild.api.plugin.AbstractAssembler;
-import ebuild.api.plugin.BuildPluginException;
-import ebuild.api.plugin.IPropertyMap;
-import ebuild.util.CollectionUtil;
-import ebuild.util.FileUtil;
-import ebuild.util.JSONUtil;
+import ebuild.api.plugin.*;
+import ebuild.util.*;
public class VexiDeploymentAssembler extends AbstractAssembler{
+ private Collection<String> asNameList(Collection<File> files){
+ List<String> r = new ArrayList(files.size());
+ for(File f: files){
+ r.add(f.getName());
+ }
+ return r;
+ }
+
public Collection<File> assemble(IAssemblerArgument arg) throws
BuildPluginException {
- ILogger logger = arg.getLogger();
- IEBuild ebuild = arg.getEBuild();
- IPropertyMap props = arg.getPropertyMap();
- IInputMap inputs = arg.getInputMap();
-
+ final ILogger logger = arg.getLogger();
+ final IEBuild ebuild = arg.getEBuild();
+ final IPropertyMap props = arg.getPropertyMap();
+ final IInputMap inputs = arg.getInputMap();
+ final File output = arg.getOutputDirectory();
+ final String templateName = props.getString("launcher-page",
"index.html");
+ final File launcher =
inputs.expectInput("launcher").expectLoneArtifact();
+ final File core = inputs.expectInput("core").expectLoneArtifact();
try {
- File output = arg.getOutputDirectory();
- File launcher =
inputs.expectInput("launcher").expectLoneArtifact();
- File core = inputs.expectInput("core").expectLoneArtifact();
- Collection<File> vexiFiles =
inputs.expectInput("vexis").getArtifacts();
-
- output.mkdirs();
-
- logger.log("launcher:" );
- logger.log(" "+ebuild.formatAsDisplayPath(launcher));
-
- List<String> vexis = new ArrayList(vexiFiles.size());
- FileUtil.copyToDir(launcher, output);
- FileUtil.copyToDir(core, output);
- FileUtil.copyToDir(launcher, output);
- for(File f: vexiFiles){
- FileUtil.copyToDir(f, output);
- vexis.add(f.getName());
- }
-
-
- IInput launcherPageInput = inputs.getInput("launcher-page");
- if(launcherPageInput!=null){
- for(File f: launcherPageInput.getArtifacts()){
- FileUtil.mergeCopy(f, output);
+ new Callable<Object, Exception>() {
+ private String template;
+
+ private void copyToDir(String name, File f) throws
IOException{
+ logger.log(name+":" );
+ logger.log(" "+ebuild.formatAsDisplayPath(f));
+ FileUtil.copyToDir(f, output);
}
- File file = new File(output, props.getString("launcher-page",
"index.html"));
- if(!file.isFile()) throw new BuildPluginException("Expected
launcher-page template file: "+ebuild.formatAsDisplayPath(file));
- IOUtil.stringToFile(generateLaunchHtml(file, props, core,
launcher, vexis), file);
- }
-
- String launcherJson = props.getString("launcher-json");
- if(launcherJson!=null){
- File file = new File(output, launcherJson);
- Map m = generateLaunchJson(props, core, launcher, vexis);
- JSONUtil.writeObject(file, m);
- }
- return CollectionUtil.singletonList(output);
+
+ private void copyToDir(String name, Collection<File>
fs) throws IOException{
+ logger.log(name+":" );
+ for(File f: fs){
+ logger.log("
"+ebuild.formatAsDisplayPath(f));
+ FileUtil.copyToDir(f, output);
+ }
+ }
+ private Map<String,IInput> justVexis(){
+ Map<String,IInput> r = new
HashMap(inputs.inputKeys().size());
+ for(String k: inputs.inputKeys()){
+ if(k.startsWith("vexis")){
+ String name =
k.substring("vexis".length());
+ r.put(name,inputs.getInput(k));
+ }
+ }
+ return r;
+ }
+ private String insertBeforeSuffix(String
filename_suffix, String insert){
+ String suffix =
FileUtil.fileSuffix(filename_suffix);
+ String filename =
FileUtil.removeSuffix(filename_suffix);
+ String r = filename+insert;
+ if(suffix!=null){
+ r+=suffix;
+ }
+ return r;
+ }
+
+ private String generateParams(Collection<String> vexis)
throws Exception{
+ String ROOT = props.expectString("root");
+ StringBuilder sb = new StringBuilder();
+ sb.append(
+ " <param name='core'
value='"+ROOT+"/"+core.getName()+"'/>\n"+
+ " <param name='option0' value='-t'/>\n"+
+ " <param name='option1'
value='"+props.getString("main-template","main")+"'/>\n");
+ int i=0;
+ for(String v: vexis){
+ sb.append(
+ " <param name='vexi"+(i++)+"'
value='"+ROOT+"/"+v+"'/>\n");
+ }
+ return sb.toString();
+ }
+
+ public String generateLaunchHtml(Collection<String> vexis)
throws Exception{
+ String ROOT = props.expectString("root");
+
+ Map<String,String> model = new HashMap();
+ model.put("applet-params", generateParams(vexis));
+ model.put("applet-jar", ROOT+"/"+launcher.getName());
+
model.put("applet-class",props.expectString("applet-class"));
+
+ String error = BasicTemplate.checkVars(template,
model.keySet());
+ if(error!=null) throw new BuildPluginException("Problem
with launch template '"+templateName+"': " +error);
+ return BasicTemplate.apply(template, model);
+ }
+
+ private void generateLauncherPage(String _name,
Collection<String> vexis) throws Exception{
+ String filename = insertBeforeSuffix(templateName, _name);
+ // HACK file copied out, but o
+ File outputfile = new File(output, filename);
+ IOUtil.stringToFile(generateLaunchHtml(vexis), outputfile);
+ }
+
+ public Object run() throws Exception {
+ output.mkdirs();
+
+ copyToDir("launcher", launcher);
+ copyToDir("core", core);
+
+
//////////////////////////////////////////////////////////
+ // PROCESS launcher page input
(template and static files)
+ final IInput launcherPageInput =
inputs.getInput("launcher-page");
+ if(launcherPageInput!=null){
+ for(File f:
launcherPageInput.getArtifacts()){
+ if(f.getName().equals(templateName)){
+ this.template =
IOUtil.fileToString(f);
+ }else{
+ FileUtil.mergeCopy(f, output);
+ }
+ }
+ if(this.template==null){
+ throw new BuildPluginException("Input
'launcher-page', but no template file: "+templateName);
+ }
+ }
+
+
+
//////////////////////////////////////////////////////////
+ // PROCESS vexi inputs
+ // two modes
+ // - a single list of vexis
+ // - multiple named applications
+ Map<String,IInput> vexisInput =
justVexis();
+ if(vexisInput.size()==0) throw new
BuildPluginException("No 'vexis*' inputs provided");
+
+ Set<File> vexiFilesAll = new HashSet();
+ Map<String,Collection<String>> vexisMap = new
HashMap();
+ for(String _name: vexisInput.keySet()){
+ IInput input =
vexisInput.get(_name);
+ Collection<File> vexiFiles =
input.getArtifacts();
+ Collection<String> vexis =
asNameList(vexiFiles);
+ if(template!=null)
generateLauncherPage(_name, vexis);
+ vexisMap.put("vexis"+_name,
vexis);
+ vexiFilesAll.addAll(vexiFiles);
+ }
+
+ copyToDir("vexis", vexiFilesAll);
+
+ //////////////////////
+ // GENERATE json
+ String launcherJson =
props.getString("launcher-json");
+ if(launcherJson!=null){
+ Map m = new LinkedHashMap();
+ m.put("applet-jar",launcher.getName());
+
m.put("applet-class",props.expectString("applet-class"));
+ m.put("core-signed",core.getName());
+ m.putAll(vexisMap);
+
+ File file = new File(output, launcherJson);
+ JSONUtil.writeObject(file, m);
+ }
+ return null;
+ }
+ }.run();
+
} catch (Exception e) {
throw BuildPluginException.wrap(e);
}
-
+ return CollectionUtil.singletonList(output);
}
-
- public String generateLaunchHtml(File templateFile, IPropertyMap props,
File core, File launcher, Collection<String> vexis) throws Exception{
- String template = IOUtil.fileToString(templateFile);
- String ROOT = props.expectString("root");
-
- Map<String,String> model = new HashMap();
- model.put("applet-params", generateParams(props, core, vexis));
- model.put("applet-jar", ROOT+"/"+launcher.getName());
- model.put("applet-class",props.expectString("applet-class"));
-
- String error = BasicTemplate.checkVars(template, model.keySet());
- if(error!=null) throw new BuildPluginException("Problem with launch
template '"+templateFile.getName()+"': " +error);
- return BasicTemplate.apply(template, model);
- }
-
- private String generateParams(IPropertyMap props, File core,
Collection<String> vexis) throws Exception{
- String ROOT = props.expectString("root");
- StringBuilder sb = new StringBuilder();
- sb.append(
- " <param name='core' value='"+ROOT+"/"+core.getName()+"'/>\n"+
- " <param name='option0' value='-t'/>\n"+
- " <param name='option1'
value='"+props.getString("main-template","main")+"'/>\n");
- int i=0;
- for(String v: vexis){
- sb.append(
- " <param name='vexi"+(i++)+"' value='"+ROOT+"/"+v+"'/>\n");
- }
- return sb.toString();
- }
-
- public Map generateLaunchJson(IPropertyMap props, File core, File
launcher, Collection<String> vexis) throws Exception{
- Map m = new LinkedHashMap();
- m.put("applet-jar",launcher.getName());
- m.put("applet-class",props.expectString("applet-class"));
- m.put("core-signed",core.getName());
- m.put("vexis", vexis);
- return m;
- }
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve
application availability and disaster protection. Learn more about boosting
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn