Source code: com/arranger/jarl/agent/JarlAgent.java
1 package com.arranger.jarl.agent;
2
3 import com.arranger.agent.IWorkUnit;
4 import com.arranger.agent.IAgent;
5 import com.arranger.agent.impl.Agent;
6 import com.arranger.jarl.Jarl;
7 import com.arranger.jarl.util.IOUtil;
8
9 import java.awt.*;
10 import java.io.File;
11 import java.io.Serializable;
12 import java.io.ByteArrayOutputStream;
13 import java.io.ByteArrayInputStream;
14 import java.rmi.RemoteException;
15 import java.util.Map;
16 import java.util.HashMap;
17
18 /**
19 * JarlAgent created on Mar 6, 2003
20 */
21 public class JarlAgent extends Agent implements IAgent {
22
23 protected Map m_jarlMap = new HashMap();
24
25 public JarlAgent(String serverHost, String registryName, int port, int listenPort) throws RemoteException {
26 super(serverHost, registryName, port, listenPort);
27 }
28
29 public Serializable execute(IWorkUnit workUnit) throws RemoteException {
30 try {
31 System.out.println("Executing workunit: " + workUnit.getID().toString());
32 int frameID = Integer.parseInt((String)workUnit.getID());
33 byte [] configTextBytes = (byte [])workUnit.getPayload();
34 ByteArrayOutputStream baos = new ByteArrayOutputStream();
35 IOUtil.decompress(new ByteArrayInputStream(configTextBytes), baos);
36 String configText = new String(baos.toByteArray());
37
38 String id = String.valueOf(configText.hashCode());
39 Jarl jarl = (Jarl)m_jarlMap.get(id);
40 if (jarl == null) {
41 jarl = new Jarl();
42 jarl.initRemote(configText);
43 m_jarlMap.put(id, jarl);
44 }
45
46 Image image = jarl.getRenderManager().renderOneFrame(jarl.getContext(), frameID);
47 File file = File.createTempFile("image" + (String)workUnit.getID(), ".bmp");
48 IOUtil.save(image, file);
49
50 byte [] bytes = IOUtil.toCompressedByteArray(file.getAbsolutePath());
51 file.delete();
52 return bytes;
53
54 } catch (Exception e) {
55 e.printStackTrace();
56 throw new RemoteException(e.getMessage(), e);
57 }
58 }
59 }