/*
* Capsule
* Copyright (c) 2014, Parallel Universe Software Co. All rights reserved.
*
* This program and the accompanying materials are licensed under the terms
* of the Eclipse Public License v1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
import java.io.IOException;
import java.lang.instrument.Instrumentation;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
/**
* A custom capsule example
*/
public class MyCapsule extends TestCapsule {
public static final String WRAPPER_AGENT_OK_FNAME = "startJMXServer-specialized.empty";
public MyCapsule(Path jarFile) {
super(jarFile);
}
public MyCapsule(Capsule pred) {
super(pred);
}
@Override
protected <T> T attribute(Map.Entry<String, T> attr) {
if (attr == ATTR_SYSTEM_PROPERTIES) {
final Map<String, String> props = super.attribute(ATTR_SYSTEM_PROPERTIES);
props.put("foo", "z");
props.put("baz", "44");
return (T) props;
}
if (attr == ATTR_JVM_ARGS) {
final List<String> args = super.attribute(ATTR_JVM_ARGS);
for (ListIterator<String> it = args.listIterator(); it.hasNext();) {
String arg = it.next();
if (arg.startsWith("-Xmx"))
it.set("-Xmx3000");
else if (arg.startsWith("-Xms"))
it.set("-Xms3");
}
return (T) args;
}
if (attr == ATTR_APP_CLASS_PATH) {
final List<Object> args = new ArrayList<>(super.attribute(ATTR_APP_CLASS_PATH));
args.add(lookup("/foo/bar"));
return (T) args;
}
return super.attribute(attr); //To change body of generated methods, choose Tools | Templates.
}
@Override
protected void agent(Instrumentation inst) {
try {
Files.createFile(getWritableAppCache().resolve(WRAPPER_AGENT_OK_FNAME));
} catch (final IOException e) {
throw new RuntimeException(e);
}
super.agent(inst);
}
@Override
protected List<String> buildArgs(List<String> args) {
return super.buildArgs(args);
}
}