You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 12:29:08 UTC

[04/50] [abbrv] incubator-taverna-server git commit: Use Java 7 idioms.

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/main/java/org/taverna/server/master/worker/SecurityContextDelegate.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/main/java/org/taverna/server/master/worker/SecurityContextDelegate.java b/server-webapp/src/main/java/org/taverna/server/master/worker/SecurityContextDelegate.java
index 65fe25f..a868dee 100644
--- a/server-webapp/src/main/java/org/taverna/server/master/worker/SecurityContextDelegate.java
+++ b/server-webapp/src/main/java/org/taverna/server/master/worker/SecurityContextDelegate.java
@@ -23,6 +23,8 @@ import java.security.GeneralSecurityException;
 import java.security.Key;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
@@ -30,6 +32,7 @@ import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.security.auth.x500.X500Principal;
@@ -62,14 +65,14 @@ import edu.umd.cs.findbugs.annotations.Nullable;
 public abstract class SecurityContextDelegate implements TavernaSecurityContext {
 	Log log = LogFactory.getLog("Taverna.Server.Worker");
 	private final UsernamePrincipal owner;
-	private final List<Credential> credentials = new ArrayList<Credential>();
-	private final List<Trust> trusted = new ArrayList<Trust>();
+	private final List<Credential> credentials = new ArrayList<>();
+	private final List<Trust> trusted = new ArrayList<>();
 	private final RemoteRunDelegate run;
 	private final Object lock = new Object();
 	final SecurityContextFactory factory;
 
 	private transient Keystore keystore;
-	private transient HashMap<URI, String> uriToAliasMap;
+	private transient Map<URI, String> uriToAliasMap;
 
 	/**
 	 * Initialise the context delegate.
@@ -195,7 +198,7 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		try {
 			t.loadedCertificates = CertificateFactory.getInstance(t.fileType)
 					.generateCertificates(contentsAsStream);
-			t.serverName = new ArrayList<String>(t.loadedCertificates.size());
+			t.serverName = new ArrayList<>(t.loadedCertificates.size());
 			for (Certificate c : t.loadedCertificates)
 				t.serverName.add(getPrincipalName(((X509Certificate) c)
 						.getSubjectX500Principal()));
@@ -278,10 +281,9 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 			IOException, ImplementationException {
 		RemoteSecurityContext rc = run.run.getSecurityContext();
 
-		List<Trust> trusted = new ArrayList<Trust>(this.trusted);
+		List<Trust> trusted = new ArrayList<>(this.trusted);
 		this.trusted.clear();
-		List<Credential> credentials = new ArrayList<Credential>(
-				this.credentials);
+		List<Credential> credentials = new ArrayList<>(this.credentials);
 		this.credentials.clear();
 
 		try {
@@ -298,7 +300,7 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 			log.info("constructing merged keystore");
 			Truststore truststore = new Truststore(password);
 			Keystore keystore = new Keystore(password);
-			HashMap<URI, String> uriToAliasMap = new HashMap<URI, String>();
+			Map<URI, String> uriToAliasMap = new HashMap<>();
 			int trustedCount = 0, keyCount = 0;
 
 			synchronized (lock) {
@@ -430,9 +432,7 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 				throw new InvalidCredentialException(CREDENTIAL_FILE_SIZE_LIMIT
 						+ "kB limit hit");
 			return new ByteArrayInputStream(f.getContents(0, (int) size));
-		} catch (NoDirectoryEntryException e) {
-			throw new InvalidCredentialException(e);
-		} catch (FilesystemAccessException e) {
+		} catch (NoDirectoryEntryException | FilesystemAccessException e) {
 			throw new InvalidCredentialException(e);
 		} catch (ClassCastException e) {
 			throw new InvalidCredentialException("not a file", e);
@@ -502,17 +502,11 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		}
 	}
 
-	/**
-	 * A trust store that can only be added to or serialized. Only trusted
-	 * certificates can be placed in it.
-	 * 
-	 * @author Donal Fellows
-	 */
-	class Truststore {
+	static class SecurityStore {
 		private KeyStore ks;
 		private char[] password;
 
-		Truststore(char[] password) throws GeneralSecurityException {
+		SecurityStore(char[] password) throws GeneralSecurityException {
 			this.password = password.clone();
 			ks = KeyStore.getInstance("UBER", "BC");
 			try {
@@ -523,6 +517,59 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 			}
 		}
 
+		final synchronized void setCertificate(String alias, Certificate c)
+				throws KeyStoreException {
+			if (ks == null)
+				throw new IllegalStateException("store already written");
+			ks.setCertificateEntry(alias, c);
+		}
+
+		final synchronized void setKey(String alias, Key key, Certificate[] trustChain)
+				throws KeyStoreException {
+			if (ks == null)
+				throw new IllegalStateException("store already written");
+			ks.setKeyEntry(alias, key, password, trustChain);
+		}
+
+		final synchronized byte[] serialize(boolean logIt)
+				throws GeneralSecurityException {
+			if (ks == null)
+				throw new IllegalStateException("store already written");
+			try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+				ks.store(stream, password);
+				if (logIt)
+					LogFactory.getLog("Taverna.Server.Worker").debug(
+							"serialized UBER/BC truststore (size: " + ks.size()
+									+ ") with password \""
+									+ new String(password) + "\"");
+				return stream.toByteArray();
+			} catch (IOException e) {
+				throw new GeneralSecurityException(
+						"problem serializing keystore", e);
+			} finally {
+				ks = null;
+				fill(password, ' ');
+			}
+		}
+
+		@Override
+		protected final void finalize() {
+			fill(password, ' ');
+			ks = null;
+		}
+	}
+
+	/**
+	 * A trust store that can only be added to or serialized. Only trusted
+	 * certificates can be placed in it.
+	 * 
+	 * @author Donal Fellows
+	 */
+	class Truststore extends SecurityStore {
+		Truststore(char[] password) throws GeneralSecurityException {
+			super(password);
+		}
+
 		/**
 		 * Add a trusted certificate to the truststore. No certificates can be
 		 * added after the truststore is serialized.
@@ -533,14 +580,12 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		 *             If anything goes wrong.
 		 */
 		public void addCertificate(Certificate cert) throws KeyStoreException {
-			if (ks == null)
-				throw new IllegalStateException("truststore already written");
 			X509Certificate c = (X509Certificate) cert;
 			String alias = format("trustedcert#%s#%s#%s",
 					getPrincipalName(c.getSubjectX500Principal()),
 					getPrincipalName(c.getIssuerX500Principal()),
 					factory.x500Utils.getSerial(c));
-			ks.setCertificateEntry(alias, c);
+			setCertificate(alias, c);
 			if (log.isDebugEnabled() && factory.logSecurityDetails)
 				log.debug("added cert with alias \"" + alias + "\" of type "
 						+ c.getClass().getCanonicalName());
@@ -554,30 +599,8 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		 * @throws GeneralSecurityException
 		 *             If anything goes wrong.
 		 */
-		public byte[] serialize() throws GeneralSecurityException, IOException {
-			if (ks == null)
-				throw new IllegalStateException("truststore already written");
-			ByteArrayOutputStream stream = new ByteArrayOutputStream();
-			try {
-				ks.store(stream, password);
-				stream.close();
-				if (log.isDebugEnabled() && factory.logSecurityDetails)
-					log.debug("serialized UBER/BC truststore (size: "
-							+ ks.size() + ") with password \""
-							+ new String(password) + "\"");
-			} catch (IOException e) {
-				throw new GeneralSecurityException(
-						"problem serializing truststore", e);
-			}
-			fill(password, ' ');
-			ks = null;
-			return stream.toByteArray();
-		}
-
-		@Override
-		protected void finalize() {
-			fill(password, ' ');
-			ks = null;
+		public byte[] serialize() throws GeneralSecurityException {
+			return serialize(log.isDebugEnabled() && factory.logSecurityDetails);
 		}
 	}
 
@@ -587,20 +610,9 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 	 * 
 	 * @author Donal Fellows
 	 */
-	class Keystore {
-		private KeyStore ks;
-		private char[] password;
-
+	class Keystore extends SecurityStore {
 		Keystore(char[] password) throws GeneralSecurityException {
-			this.password = password.clone();
-
-			ks = KeyStore.getInstance("UBER", "BC");
-			try {
-				ks.load(null, password);
-			} catch (IOException e) {
-				throw new GeneralSecurityException(
-						"problem initializing blank keystore", e);
-			}
+			super(password);
 		}
 
 		/**
@@ -619,9 +631,7 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		 */
 		public void addKey(String alias, Key key, Certificate[] trustChain)
 				throws KeyStoreException {
-			if (ks == null)
-				throw new IllegalStateException("keystore already written");
-			ks.setKeyEntry(alias, key, password, trustChain);
+			setKey(alias, key, trustChain);
 			if (log.isDebugEnabled() && factory.logSecurityDetails)
 				log.debug("added key with alias \"" + alias + "\" of type "
 						+ key.getClass().getCanonicalName());
@@ -636,29 +646,7 @@ public abstract class SecurityContextDelegate implements TavernaSecurityContext
 		 *             If anything goes wrong.
 		 */
 		public byte[] serialize() throws GeneralSecurityException {
-			if (ks == null)
-				throw new IllegalStateException("keystore already written");
-			ByteArrayOutputStream stream = new ByteArrayOutputStream();
-			try {
-				ks.store(stream, password);
-				stream.close();
-				if (log.isDebugEnabled() && factory.logSecurityDetails)
-					log.debug("serialized UBER/BC keystore (size: " + ks.size()
-							+ ") with password \"" + new String(password)
-							+ "\"");
-			} catch (IOException e) {
-				throw new GeneralSecurityException(
-						"problem serializing keystore", e);
-			}
-			fill(password, ' ');
-			ks = null;
-			return stream.toByteArray();
-		}
-
-		@Override
-		protected void finalize() {
-			fill(password, ' ');
-			ks = null;
+			return serialize(log.isDebugEnabled() && factory.logSecurityDetails);
 		}
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/test/java/org/taverna/server/master/WorkflowSerializationTest.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/test/java/org/taverna/server/master/WorkflowSerializationTest.java b/server-webapp/src/test/java/org/taverna/server/master/WorkflowSerializationTest.java
index 6caafe8..4d49d17 100644
--- a/server-webapp/src/test/java/org/taverna/server/master/WorkflowSerializationTest.java
+++ b/server-webapp/src/test/java/org/taverna/server/master/WorkflowSerializationTest.java
@@ -32,14 +32,15 @@ public class WorkflowSerializationTest {
 		w.content[0].setAttribute("xyz", "abc");
 
 		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		ObjectOutputStream oos = new ObjectOutputStream(baos);
-		oos.writeObject(w);
-		oos.close();
+		try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
+			oos.writeObject(w);
+		}
 
-		ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-		ObjectInputStream ois = new ObjectInputStream(bais);
-		Object o = ois.readObject();
-		ois.close();
+		Object o;
+		try (ObjectInputStream ois = new ObjectInputStream(
+				new ByteArrayInputStream(baos.toByteArray()))) {
+			o = ois.readObject();
+		}
 
 		Assert.assertNotNull(o);
 		Assert.assertEquals(w.getClass(), o.getClass());

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/test/java/org/taverna/server/master/mocks/ExampleRun.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/test/java/org/taverna/server/master/mocks/ExampleRun.java b/server-webapp/src/test/java/org/taverna/server/master/mocks/ExampleRun.java
index 2796c7b..e4e674d 100644
--- a/server-webapp/src/test/java/org/taverna/server/master/mocks/ExampleRun.java
+++ b/server-webapp/src/test/java/org/taverna/server/master/mocks/ExampleRun.java
@@ -62,12 +62,12 @@ public class ExampleRun implements TavernaRun, TavernaSecurityContext {
 
 	public ExampleRun(UsernamePrincipal creator, Workflow workflow, Date expiry) {
 		this.id = randomUUID().toString();
-		this.listeners = new ArrayList<Listener>();
+		this.listeners = new ArrayList<>();
 		this.status = Initialized;
 		this.owner = creator;
 		this.workflow = workflow;
 		this.expiry = expiry;
-		this.inputs = new ArrayList<Input>();
+		this.inputs = new ArrayList<>();
 		listeners.add(new DefaultListener());
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/test/java/org/taverna/server/master/mocks/MockPolicy.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/test/java/org/taverna/server/master/mocks/MockPolicy.java b/server-webapp/src/test/java/org/taverna/server/master/mocks/MockPolicy.java
index 23fb1be..6109716 100644
--- a/server-webapp/src/test/java/org/taverna/server/master/mocks/MockPolicy.java
+++ b/server-webapp/src/test/java/org/taverna/server/master/mocks/MockPolicy.java
@@ -21,7 +21,7 @@ public class MockPolicy extends SimpleServerPolicy {
 
 	public int maxruns = 10;
 	Integer usermaxruns;
-	Set<TavernaRun> denyaccess = new HashSet<TavernaRun>();
+	Set<TavernaRun> denyaccess = new HashSet<>();
 	boolean exnOnUpdate, exnOnCreate, exnOnDelete;
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleListenerFactory.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleListenerFactory.java b/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleListenerFactory.java
index 8892032..d864214 100644
--- a/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleListenerFactory.java
+++ b/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleListenerFactory.java
@@ -16,7 +16,7 @@ import org.taverna.server.master.interfaces.TavernaRun;
  * @author Donal Fellows
  */
 public class SimpleListenerFactory implements ListenerFactory {
-	private Map<String, Builder> builders = new HashMap<String, Builder>();
+	private Map<String, Builder> builders = new HashMap<>();
 
 	public void setBuilders(Map<String, Builder> builders) {
 		this.builders = builders;
@@ -24,7 +24,7 @@ public class SimpleListenerFactory implements ListenerFactory {
 
 	@Override
 	public List<String> getSupportedListenerTypes() {
-		return new ArrayList<String>(builders.keySet());
+		return new ArrayList<>(builders.keySet());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleNonpersistentRunStore.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleNonpersistentRunStore.java b/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleNonpersistentRunStore.java
index 49bf59a..a3751e4 100644
--- a/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleNonpersistentRunStore.java
+++ b/server-webapp/src/test/java/org/taverna/server/master/mocks/SimpleNonpersistentRunStore.java
@@ -21,7 +21,7 @@ import org.taverna.server.master.utils.UsernamePrincipal;
  * @author Donal Fellows
  */
 public class SimpleNonpersistentRunStore implements RunStore {
-	private Map<String, TavernaRun> store = new HashMap<String, TavernaRun>();
+	private Map<String, TavernaRun> store = new HashMap<>();
 	private Object lock = new Object();
 
 	Timer timer;
@@ -107,12 +107,11 @@ public class SimpleNonpersistentRunStore implements RunStore {
 
 	@Override
 	public Map<String, TavernaRun> listRuns(UsernamePrincipal user, Policy p) {
-		HashMap<String, TavernaRun> filtered = new HashMap<String, TavernaRun>();
+		Map<String, TavernaRun> filtered = new HashMap<>();
 		synchronized (lock) {
-			for (Map.Entry<String, TavernaRun> entry : store.entrySet()) {
+			for (Map.Entry<String, TavernaRun> entry : store.entrySet())
 				if (p.permitAccess(user, entry.getValue()))
 					filtered.put(entry.getKey(), entry.getValue());
-			}
 		}
 		return filtered;
 	}
@@ -137,7 +136,7 @@ class CleanerTask extends TimerTask {
 	WeakReference<SimpleNonpersistentRunStore> store;
 
 	CleanerTask(SimpleNonpersistentRunStore store, int interval) {
-		this.store = new WeakReference<SimpleNonpersistentRunStore>(store);
+		this.store = new WeakReference<>(store);
 		int tms = interval * 1000;
 		store.timer.scheduleAtFixedRate(this, tms, tms);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/main/java/org/taverna/server/localworker/impl/DirectoryDelegate.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/DirectoryDelegate.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/DirectoryDelegate.java
index 0364994..6d736f0 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/DirectoryDelegate.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/DirectoryDelegate.java
@@ -17,6 +17,7 @@ import java.rmi.server.UnicastRemoteObject;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
+import java.util.List;
 
 import org.apache.commons.collections.MapIterator;
 import org.apache.commons.collections.map.ReferenceMap;
@@ -58,7 +59,7 @@ public class DirectoryDelegate extends UnicastRemoteObject implements
 	@Override
 	public Collection<RemoteDirectoryEntry> getContents()
 			throws RemoteException {
-		ArrayList<RemoteDirectoryEntry> result = new ArrayList<RemoteDirectoryEntry>();
+		List<RemoteDirectoryEntry> result = new ArrayList<>();
 		for (String s : dir.list()) {
 			if (s.equals(".") || s.equals(".."))
 				continue;
@@ -115,7 +116,7 @@ public class DirectoryDelegate extends UnicastRemoteObject implements
 			throw new IOException("tried to destroy main job working directory");
 		Collection<RemoteDirectoryEntry> values;
 		synchronized (localCache) {
-			values = new ArrayList<RemoteDirectoryEntry>(localCache.values());
+			values = new ArrayList<>(localCache.values());
 		}
 		for (RemoteDirectoryEntry obj : values) {
 			if (obj == null)

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/main/java/org/taverna/server/localworker/impl/FileDelegate.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/FileDelegate.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/FileDelegate.java
index a679e70..616a3d8 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/FileDelegate.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/FileDelegate.java
@@ -58,17 +58,11 @@ public class FileDelegate extends UnicastRemoteObject implements RemoteFile {
 		if (length < 0 || length > 1024 * 64)
 			length = 1024 * 64;
 		byte[] buffer = new byte[length];
-		FileInputStream fis = null;
 		int read;
-		try {
-			fis = new FileInputStream(file);
-			if (offset > 0)
-				if (fis.skip(offset) != offset)
-					throw new IOException("did not move to correct offset in file");
+		try (FileInputStream fis = new FileInputStream(file)) {
+			if (offset > 0 && fis.skip(offset) != offset)
+				throw new IOException("did not move to correct offset in file");
 			read = fis.read(buffer);
-		} finally {
-			if (fis != null)
-				fis.close();
 		}
 		if (read <= 0)
 			return new byte[0];
@@ -87,25 +81,15 @@ public class FileDelegate extends UnicastRemoteObject implements RemoteFile {
 
 	@Override
 	public void setContents(byte[] data) throws IOException {
-		FileOutputStream fos = null;
-		try {
-			fos = new FileOutputStream(file);
+		try (FileOutputStream fos = new FileOutputStream(file)) {
 			fos.write(data);
-		} finally {
-			if (fos != null)
-				fos.close();
 		}
 	}
 
 	@Override
 	public void appendContents(byte[] data) throws IOException {
-		FileOutputStream fos = null;
-		try {
-			fos = new FileOutputStream(file, true);
+		try (FileOutputStream fos = new FileOutputStream(file, true)) {
 			fos.write(data);
-		} finally {
-			if (fos != null)
-				fos.close();
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
index 5484ba9..bcac762 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
@@ -164,9 +164,9 @@ public class LocalWorker extends UnicastRemoteObject implements RemoteSingleRun
 	 */
 	char[] keystorePassword = KEYSTORE_PASSWORD;
 	/** Additional server-specified environment settings. */
-	Map<String, String> environment = new HashMap<String, String>();
+	Map<String, String> environment = new HashMap<>();
 	/** Additional server-specified java runtime settings. */
-	List<String> runtimeSettings = new ArrayList<String>();
+	List<String> runtimeSettings = new ArrayList<>();
 	URL interactionFeedURL;
 	URL webdavURL;
 	private boolean doProvenance = true;
@@ -332,7 +332,7 @@ public class LocalWorker extends UnicastRemoteObject implements RemoteSingleRun
 
 	@Override
 	public List<RemoteInput> getInputs() throws RemoteException {
-		ArrayList<RemoteInput> result = new ArrayList<RemoteInput>();
+		ArrayList<RemoteInput> result = new ArrayList<>();
 		for (String name : inputFiles.keySet())
 			result.add(new InputDelegate(name));
 		return result;
@@ -473,13 +473,13 @@ public class LocalWorker extends UnicastRemoteObject implements RemoteSingleRun
 		}
 
 		@Override
-		public void setUriToAliasMap(HashMap<URI, String> uriToAliasMap)
+		public void setUriToAliasMap(Map<URI, String> uriToAliasMap)
 				throws RemoteException {
 			if (status != Initialized)
 				throw new RemoteException("not initializing");
 			if (uriToAliasMap == null)
 				return;
-			ArrayList<String> lines = new ArrayList<String>();
+			ArrayList<String> lines = new ArrayList<>();
 			for (Entry<URI, String> site : uriToAliasMap.entrySet())
 				lines.add(site.getKey().toASCIIString() + " " + site.getValue());
 			// write(URI_ALIAS_MAP, lines);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/main/java/org/taverna/server/localworker/impl/TavernaRunManager.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/TavernaRunManager.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/TavernaRunManager.java
index 43c31fd..ffcdab5 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/TavernaRunManager.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/TavernaRunManager.java
@@ -71,8 +71,8 @@ public class TavernaRunManager extends UnicastRemoteObject implements
 	public static String interactionPort;
 	public static String interactionWebdavPath;
 	public static String interactionFeedPath;
-	Map<String, String> seedEnvironment = new HashMap<String, String>();
-	List<String> javaInitParams = new ArrayList<String>();
+	Map<String, String> seedEnvironment = new HashMap<>();
+	List<String> javaInitParams = new ArrayList<>();
 	private int activeRuns = 0;
 
 	/**
@@ -147,7 +147,7 @@ public class TavernaRunManager extends UnicastRemoteObject implements
 		if (creator == null)
 			throw new RemoteException("no creator");
 		try {
-			Holder<String> wfid = new Holder<String>("???");
+			Holder<String> wfid = new Holder<>("???");
 			workflow = unwrapWorkflow(workflow, wfid);
 			out.println("Creating run from workflow <" + wfid.value + "> for <"
 					+ creator + ">");

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
index 09cb85b..8be92fe 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
@@ -95,7 +95,7 @@ import edu.umd.cs.findbugs.annotations.SuppressWarnings;
 public class WorkerCore extends UnicastRemoteObject implements Worker,
 		RemoteListener {
 	@NonNull
-	static final Map<String, Property> pmap = new HashMap<String, Property>();
+	static final Map<String, Property> pmap = new HashMap<>();
 	/**
 	 * Regular expression to extract the detailed timing information from the
 	 * output of /usr/bin/time
@@ -157,7 +157,7 @@ public class WorkerCore extends UnicastRemoteObject implements Worker,
 		super();
 		stdout = new StringWriter();
 		stderr = new StringWriter();
-		pid = new Holder<Integer>();
+		pid = new Holder<>();
 		this.accounting = accounting;
 	}
 
@@ -479,7 +479,7 @@ public class WorkerCore extends UnicastRemoteObject implements Worker,
 	@Override
 	public void killWorker() {
 		if (!finished && subprocess != null) {
-			final Holder<Integer> code = new Holder<Integer>();
+			final Holder<Integer> code = new Holder<>();
 			for (TimingOutTask tot : new TimingOutTask[] { new TimingOutTask() {
 				/** Check if the workflow terminated of its own accord */
 				@Override
@@ -583,8 +583,6 @@ public class WorkerCore extends UnicastRemoteObject implements Worker,
 			ur.addDisk(sizeOfDirectory(wd)).setStorageUnit("B");
 			if (urreceiver != null)
 				urreceiver.acceptUsageRecord(ur.marshal());
-		} catch (RuntimeException e) {
-			e.printStackTrace();
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -854,9 +852,8 @@ class PasswordWriterThread extends Thread {
 
 	@Override
 	public void run() {
-		PrintWriter pw = null;
-		try {
-			pw = new PrintWriter(new OutputStreamWriter(to, SYSTEM_ENCODING));
+		try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(to,
+				SYSTEM_ENCODING))) {
 			pw.println(chars);
 		} catch (UnsupportedEncodingException e) {
 			// Not much we can do here
@@ -868,8 +865,6 @@ class PasswordWriterThread extends Thread {
 			 */
 			if (chars != KEYSTORE_PASSWORD)
 				Arrays.fill(chars, '\00');
-			if (pw != null)
-				pw.close();
 		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/867242f6/server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
----------------------------------------------------------------------
diff --git a/server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java b/server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
index b0d7f63..5e8f7ae 100644
--- a/server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
+++ b/server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
@@ -106,13 +106,12 @@ public class LocalWorkerTest {
 			events.add(Integer.toString(dirLen));
 			events.add(inputBaclava == null ? "<null>" : inputBaclava
 					.toString().substring(dirLen));
-			Map<String, String> in = new TreeMap<String, String>();
-			for (Entry<String, File> name : inputFiles.entrySet()) {
+			Map<String, String> in = new TreeMap<>();
+			for (Entry<String, File> name : inputFiles.entrySet())
 				in.put(name.getKey(), name.getValue() == null ? "<null>" : name
 						.getValue().getName());
-			}
 			events.add(in.toString());
-			events.add(new TreeMap<String, String>(inputValues).toString());
+			events.add(new TreeMap<>(inputValues).toString());
 			events.add(outputBaclava == null ? "<null>" : outputBaclava
 					.getName());
 			// TODO: check cmdir and cmpass
@@ -160,7 +159,7 @@ public class LocalWorkerTest {
 	public void setUp() throws Exception {
 		lw = new LocalWorker("XWC", "WF", null, randomUUID(),
 				new HashMap<String, String>(), new ArrayList<String>(), factory);
-		events = new ArrayList<String>();
+		events = new ArrayList<>();
 		returnThisStatus = RemoteStatus.Operating;
 	}