/** * */ package ecologylab.serialization.library.jnlp.application; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import ecologylab.appframework.types.prefs.PrefSet; import ecologylab.serialization.ElementState; import ecologylab.serialization.SIMPLTranslationException; import ecologylab.serialization.SimplTypesScope; import ecologylab.serialization.TranslationContext; import ecologylab.serialization.annotations.simpl_collection; import ecologylab.serialization.annotations.simpl_nowrap; import ecologylab.serialization.annotations.simpl_scalar; import ecologylab.serialization.annotations.simpl_tag; import ecologylab.serialization.formatenums.StringFormat; /** * @author Zachary O. Toups (zach@ecologylab.net) * */ public class ApplicationDesc extends ElementState { @simpl_scalar @simpl_tag("main-class") String mainClass; @simpl_nowrap @simpl_collection("argument") ArrayList<String> arguments = new ArrayList<String>(); /** * The PrefSet that is to be passed as an argument through the JNLP file. This object is * serialized separately and added to the list of arguments at serialization time. After the JNLP * file has been serialized, it is removed from the arguments. It may be safely modified between * serializations to provide different sets of prefs. */ private PrefSet prefSet; private int prefSetArgumentIndex = -1; /** * */ public ApplicationDesc() { super(); } /** * Add the argument to the JNLP application description. * * @param argument */ public void add(String argument) { this.arguments.add(argument); } public ArrayList<String> getArguments() { return arguments; } /** * @return the prefSet */ public PrefSet getPrefSet() { return prefSet; } /** * @param prefSet * the prefSet to set */ public void setPrefSet(PrefSet prefSet) { this.prefSet = prefSet; } /** * @see ecologylab.serialization.ElementState#serializationPreHook() */ @Override public void serializationPreHook(TranslationContext translationContext) { if (prefSet != null) { try { this.add(URLEncoder.encode(SimplTypesScope.serialize(prefSet, StringFormat.XML).toString(), "UTF-8")); this.prefSetArgumentIndex = this.arguments.size() - 1; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (SIMPLTranslationException e) { e.printStackTrace(); } } super.serializationPreHook(translationContext); } /** * @see ecologylab.serialization.ElementState#serializationPostHook() */ @Override public void serializationPostHook(TranslationContext translationContext) { if (this.prefSetArgumentIndex > -1) { // we need to remove it from the arguments list this.arguments.remove(this.prefSetArgumentIndex); this.prefSetArgumentIndex = -1; } super.serializationPostHook(translationContext); } }